SlideShare uma empresa Scribd logo
1 de 79
Test-Driven
Development
hlegius
Test-Driven Development
TD.. o quê ?
Era uma vez…
Barbie
Software Engineer
Era uma vez…
Barbie Software Engineer
Era uma vez…
Barbie Software Engineer
executa
Era uma vez…
Barbie Software Engineer
SVN
versiona
Várias Barbie’s Software Engineer
Várias Barbie’s Software Engineer
Modificando a aplicação sem garantias !
Um bug.
Resultados…
… e outro.
Resultados…
… e mais um.
Resultados…
… outro,
outro e tantos outros…
Resultados…
Desenvolvimento orientado à testes
Testa
Publica
Codifica
Forma non-TDD
Desenvolvimento orientado à testes
Desenvolvimento orientado à testes
Testa
Publica
Codifica
Forma non-TDD
Escreve o
teste
Cria a
implementação
Valida a
implementação
Incrementa o
teste
Evolui o design
da
implementação
A maneira focada em testes
Mas afinal, qual o objetivo do TDD ?
Mas afinal, qual o objetivo do TDD ?
Mitigar bugs ?
Mas afinal, qual o objetivo do TDD ?
Mitigar bugs ?
Evitar
re-testes ?
Mas afinal, qual o objetivo do TDD ?
Mitigar bugs ?
Evitar
re-testes ?
Evoluir
o
design ?
Mas afinal, qual o objetivo do TDD ?
Mitigar bugs ?
Evitar
re-testes ?
Evoluir
o
design ?
mimimi
Mas afinal, qual o objetivo do TDD ?
Mitigar bugs ?
Evitar
re-testes ?
Evoluir
o
design ?
mimimi
Validar
o
escopo ?
Mas antes…
… falando sobre agile
O Manifesto Ágil
… falando sobre design
Table Module
… falando sobre design
Table Module
 Fácil para gerar automáticamente;
… falando sobre design
Table Module
 Fácil para gerar automáticamente;
 Fácil para developers com pouca
experiência;
… falando sobre design
Table Module
 Fácil para gerar automáticamente;
 Fácil para developers com pouca
experiência;
 One size fits all;
… falando sobre design
Table Module
 Fácil para gerar automáticamente;
 Fácil para developers com pouca
experiência;
 One size fits all;
 Alto acoplamento; viola o SRP;
… falando sobre design
Table Module
 Fácil para gerar automáticamente;
 Fácil para developers com pouca
experiência;
 One size fits all;
 Alto acoplamento; viola o SRP;
 Pouco flexível, e;
… falando sobre design
Table Module
 Fácil para gerar automáticamente;
 Fácil para developers com pouca
experiência;
 One size fits all;
 Alto acoplamento; viola o SRP;
 Pouco flexível, e;
 Dados e comportamento estão
separados.

… falando sobre design
Table Module
Mais do mesmo: Transaction Script e Service Layer @ PoEAA por Fowler
Domain Model
… falando sobre princípios
S
O
L
I
D
… falando sobre princípios
S
O
L
I
D
ingle Responsibility Principle
… falando sobre princípios
S
O
L
I
D
pen Close Principle
ingle Responsibility Principle
… falando sobre princípios
S
O
L
I
D
pen Close Principle
ingle Responsibility Principle
iskov Substitution Principle
… falando sobre princípios
S
O
L
I
D
pen Close Principle
ingle Responsibility Principle
iskov Substitution Principle
nterface Segregation Principle
… falando sobre princípios
S
O
L
I
D
pen Close Principle
ingle Responsibility Principle
iskov Substitution Principle
nterface Segregation Principle
ependency Inversion Principle
E agora ele, o TDD.
Test-Driven Development
Test-Driven Development
Specification-Driven Design
Soa bem melhor e é menos confuso. 
Test-Driven Development
• Focado na especificação;
• Evolução contínua, e;
• Documentação executável;
• Three-one
Tem como objetivos:
Test-Driven Development
• Focado na especificação;
• Evolução contínua, e;
• Documentação executável;
• Three-one
• OODesign;
• Domain-Driven Design;
• Modelo rico;
• Integração Contínua, e;
• Deploy contínuo.
• Three-one
Tem como objetivos: Premissa para:
Arquitetura dos Testes
Arquitetura dos testes
Escreve o
teste
Cria a
implementação
Valida a
implementação
Incrementa o
teste
Evolui o design
da
implementação
• Escreve-se o teste com o mínimo possível;
• Procure focar-se na especificação;
• Não caia na tentação de codificar
algo antes;
• Verifique se o teste falha
sem a implementação, e;
• Certifique-se de que o teste está validando
o que está no documento de especificação.
Arquitetura dos testes
Escreve o
teste
Cria a
implementação
Valida a
implementação
Incrementa o
teste
Evolui o design
da
implementação
• Implementação coesa, seguindo um
design simplista baseado no SOLID, por exemplo;
• Não rascunhe. Crie o necessário
para aquela implementação, baseado no
que leu até o momento, e;
• Não rode o teste até ter finalizado.
Arquitetura dos testes
Escreve o
teste
Cria a
implementação
Valida a
implementação
Incrementa o
teste
Evolui o design
da
implementação
• Execute o teste. 
Arquitetura dos testes
Escreve o
teste
Cria a
implementação
Valida a
implementação
Incrementa o
teste
Evolui o design
da
implementação
• Melhore o design do teste.
Arquitetura dos testes
Escreve o
teste
Cria a
implementação
Valida a
implementação
Incrementa o
teste
Evolui o design
da
implementação
• Melhore o design da implementação.
Arquitetura dos testes
E o modelo anêmico
Arquitetura dos testes
Arquitetura dos testes
• Alto acoplamento;
• SRP, e;
• Dificulta testes de unidade.
Arquitetura dos testes
Design pattern: Service
• Alto acoplamento;
• SRP, e;
• Dificulta testes de unidade.
Arquitetura dos testes
Arquitetura dos testes
• Alto acoplamento;
• Viola SRP;
• Dificulta testes de unidade;
• Baixa legibilidade, e;
• Orientado à função.
Arquitetura dos testes
• Alto acoplamento;
• Viola SRP;
• Dificulta testes de unidade;
• Baixa legibilidade, e;
• Orientado à função.
Um factory ao init(), melhoraria :)
The root of all evil is
Arquitetura dos testes
Ele, o symfony !
Design pattern arquitetônico: Table Module
Design pattern estrutural: Row Data Gateway
Arquitetura dos testes
• Alto acoplamento;
• SRP;
• Orientado à “tabelas”;
• One size fits all;
• Utiliza-se herença à composição, e;
• Fácil uso.
Soluções ?
• Mudar a arquitetura, ou;
• Redobrar atenção aos princípios SOLID.
Design dos testes
Design dos testes
Single Responsibility Principle;
Design dos testes
Single Responsibility Principle;
Baixo acoplamento
Design dos testes
Single Responsibility Principle;
Baixo acoplamento;
Doc block e annotations na classe
Design dos testes
Single Responsibility Principle;
Baixo acoplamento;
Doc block e annotations na classe;
Keep It Simple, Stupid.
Design dos testes
WTF !?
Design dos testes
Qual o problema aqui ?
Design dos testes
Por fim…
• Entender o que é realmente OO Design;
• Entender o que é realmente OO Design;
• Não esquecer dos princípios S.O.L.I.D;
• Entender o que é realmente OO Design;
• Não esquecer dos princípios S.O.L.I.D;
• #nota TDD é validação de escopo, não
bug finder;
• Entender o que é realmente OO Design;
• Não esquecer dos princípios S.O.L.I.D;
• #nota TDD é validação de escopo, não
bug finder;
• Arquitetura é importante ! ;
• Entender o que é realmente OO Design;
• Não esquecer dos princípios S.O.L.I.D;
• #nota TDD é validação de escopo, não
bug finder;
• Arquitetura é importante ! ;
• Design patterns não são balas-de-prata,
e;
• Entender o que é realmente OO Design;
• Não esquecer dos princípios S.O.L.I.D;
• #nota TDD é validação de escopo, não
bug finder;
• Arquitetura é importante ! ;
• Design patterns não são balas-de-prata,
e;
• Refatore cedo, refatore regularmente *
E para criar testes…
E para criar testes…
http://www.phpunit.de ;)
E isto é apenas o
começo.

Mais conteúdo relacionado

Mais procurados

Introdução a Modelagem
Introdução a ModelagemIntrodução a Modelagem
Introdução a Modelagem
Rodrigo Branas
 

Mais procurados (20)

#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
 
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
 
In tests we trust: começando com TDD, mocks e mais
In tests we trust: começando com TDD, mocks e maisIn tests we trust: começando com TDD, mocks e mais
In tests we trust: começando com TDD, mocks e mais
 
Teste automatizados e tdd
Teste automatizados e tddTeste automatizados e tdd
Teste automatizados e tdd
 
A Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao SêniorA Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao Sênior
 
TDD
TDDTDD
TDD
 
Desenvolvimento de software: Mundo ideal x Mundo real
Desenvolvimento de software: Mundo ideal x Mundo realDesenvolvimento de software: Mundo ideal x Mundo real
Desenvolvimento de software: Mundo ideal x Mundo real
 
Desenvolvimento de software mundo ideal x mundo real
Desenvolvimento de software  mundo ideal x mundo realDesenvolvimento de software  mundo ideal x mundo real
Desenvolvimento de software mundo ideal x mundo real
 
Revisão de Código - Uma prática que depende da cultura
Revisão de Código - Uma prática que depende da culturaRevisão de Código - Uma prática que depende da cultura
Revisão de Código - Uma prática que depende da cultura
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Testes em ambiente agil - TechTalks ADP Labs
Testes em ambiente agil - TechTalks ADP LabsTestes em ambiente agil - TechTalks ADP Labs
Testes em ambiente agil - TechTalks ADP Labs
 
Como se tornar Agile Tester
Como se tornar Agile TesterComo se tornar Agile Tester
Como se tornar Agile Tester
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27
 
Tente desenvolver diferente com TDD
Tente desenvolver diferente com TDDTente desenvolver diferente com TDD
Tente desenvolver diferente com TDD
 
DevOps - Por onde começar
DevOps - Por onde começarDevOps - Por onde começar
DevOps - Por onde começar
 
Introdução ao XP
Introdução ao XPIntrodução ao XP
Introdução ao XP
 
Feature Injection - Descobrindo e entregando valor testável
Feature Injection - Descobrindo e entregando valor testávelFeature Injection - Descobrindo e entregando valor testável
Feature Injection - Descobrindo e entregando valor testável
 
TDD para Java EE
TDD para Java EETDD para Java EE
TDD para Java EE
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
Introdução a Modelagem
Introdução a ModelagemIntrodução a Modelagem
Introdução a Modelagem
 

Destaque (6)

Jquery 1.3
Jquery 1.3Jquery 1.3
Jquery 1.3
 
Test-driven Development - Introdução
Test-driven Development - IntroduçãoTest-driven Development - Introdução
Test-driven Development - Introdução
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
Classroom Management Tips for Kids and Adolescents
Classroom Management Tips for Kids and AdolescentsClassroom Management Tips for Kids and Adolescents
Classroom Management Tips for Kids and Adolescents
 
The Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris LemaThe Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris Lema
 
The Presentation Come-Back Kid
The Presentation Come-Back KidThe Presentation Come-Back Kid
The Presentation Come-Back Kid
 

Semelhante a Test-Driven Development - Introdução

Semelhante a Test-Driven Development - Introdução (20)

Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis Uberlândia
 
Revisitando as Práticas de Engenharia Ágil
Revisitando as Práticas de Engenharia ÁgilRevisitando as Práticas de Engenharia Ágil
Revisitando as Práticas de Engenharia Ágil
 
Testes
TestesTestes
Testes
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de SoftwarePesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
 
Seu codigo fede e voce nem sabia - 2020
Seu codigo fede e voce nem sabia - 2020Seu codigo fede e voce nem sabia - 2020
Seu codigo fede e voce nem sabia - 2020
 
Testando serviços aws localmente com Localstack e JUnit
Testando serviços aws localmente com Localstack e JUnitTestando serviços aws localmente com Localstack e JUnit
Testando serviços aws localmente com Localstack e JUnit
 
TDD
TDDTDD
TDD
 
Criando uma Arquitetura Testável
Criando uma Arquitetura TestávelCriando uma Arquitetura Testável
Criando uma Arquitetura Testável
 
O XP não é contra Design com Paulo Caroli, Café Ágil em Recife
O XP não é contra Design com Paulo Caroli, Café Ágil em RecifeO XP não é contra Design com Paulo Caroli, Café Ágil em Recife
O XP não é contra Design com Paulo Caroli, Café Ágil em Recife
 
Tdd On Rails
Tdd On RailsTdd On Rails
Tdd On Rails
 
Encontro Locaweb
Encontro  LocawebEncontro  Locaweb
Encontro Locaweb
 
Encontro Locaweb Curitiba
Encontro  Locaweb CuritibaEncontro  Locaweb Curitiba
Encontro Locaweb Curitiba
 
[INFNET] Criando layouts em PSD pensando no front-end e back-end
[INFNET] Criando layouts em PSD pensando no front-end e back-end[INFNET] Criando layouts em PSD pensando no front-end e back-end
[INFNET] Criando layouts em PSD pensando no front-end e back-end
 
Metodologias de desenvolvimento - Waterfall vs Agile
Metodologias de desenvolvimento - Waterfall vs AgileMetodologias de desenvolvimento - Waterfall vs Agile
Metodologias de desenvolvimento - Waterfall vs Agile
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atech
 
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidadeTDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de software
 
Test First, TDD e outros Bichos
Test First, TDD e outros BichosTest First, TDD e outros Bichos
Test First, TDD e outros Bichos
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
 

Mais de Hélio Costa e Silva (6)

Annotation Sniffer Hotspots implementation
Annotation Sniffer Hotspots implementationAnnotation Sniffer Hotspots implementation
Annotation Sniffer Hotspots implementation
 
Chain of Responsibility Pattern
Chain of Responsibility PatternChain of Responsibility Pattern
Chain of Responsibility Pattern
 
Lightning talk - Framework Architecture: Hotspots
Lightning talk  -  Framework Architecture: HotspotsLightning talk  -  Framework Architecture: Hotspots
Lightning talk - Framework Architecture: Hotspots
 
Vex 2009-2011
Vex 2009-2011Vex 2009-2011
Vex 2009-2011
 
Definir classe não é programar com orientação a objetos
Definir classe não é programar com orientação a objetosDefinir classe não é programar com orientação a objetos
Definir classe não é programar com orientação a objetos
 
WebVibe Barueri 2011 - "PHP por quê ?"
WebVibe Barueri 2011 - "PHP por quê ?"WebVibe Barueri 2011 - "PHP por quê ?"
WebVibe Barueri 2011 - "PHP por quê ?"
 

Test-Driven Development - Introdução