SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Downloaden Sie, um offline zu lesen
Por quê você deveria utilizar o TDD?
Prática com Testes Unitários
(JUnit e Mockito)
O que o TDD não é?
● Teste unitário
● Biblioteca de Testes
● Feitiçaria
Mas afinal, o que é TDD (Test-Driven Development)?
● Técnica de desenvolvimento "descoberta" por Kent Beck em 2003
● Escrita de testes antes do código
● Ciclos curtos e contínuos (Red-Green-Refactor)
Mas afinal, o que é TDD (Test-Driven Development)?
● Aumenta a confiabilidade do código
● Contribui para o aprimoramento do Code Design
● Aumenta a expectativa de vida do programador
Ferramentas utilizadas
● Intellij Idea CE - IDE
● JUnit - Ferramenta para escrita/execução de testes
○ Baseada no xUnit, assim como PHPUnit, xUnit.NET, etc.
● Mockito - Ferramenta para "simular" objetos configuráveis, sem
depender da implementação real. Falaremos disso mais adiante :)
Testar antes + Red - Green - Refactor
1. Escreva um teste que falhe
2. Faça-o rodar com sucesso
3. Refatore-o / Elimine redundâncias
Tem algo errado. E agora?
Triangulação!
● Analogia da triangulação de radares
● Dois ou mais radares apontam para o
mesmo alvo
● As distâncias entre os radares e o alvo
podem resultar na distância real do alvo.
Por quê TDD aumenta a confiabilidade do código?
● Código sem testes = Queijo suíço (+ queijo é - queijo)
● Quanto mais testes válidos*, menos "gaps"
● Menor índice de bugs (e maior TMEF)
● Código ruim de testar é um Code Smell**
* Testes mal escritos e/ou inválidos podem garantir que o bug existe, e permanecerá existindo
** Se o código cheira mal, está estragando/estragado (software rot) - Kent Beck, Martin Fowler, Ward
Cunningham, Robert C. Martin, etc.
● Encontrou um bug? Red-Green-Refactor!
Por quê TDD aumenta a confiabilidade do código?
1. Escreva um teste que falhe (Simulando o bug encontrado)
2. Faça-o passar (Corrigindo o bug - n ciclos)
3. Refatore!
Rode a suíte de testes, se todos os testes passarem então é provável
que você tenha corrigido o bug :)
● Aprimora o Code Design do seu Software. Exemplo? SOLID
Por quê TDD aumenta a confiabilidade do código?
Single Responsibility - A classe ou módulo só pode ter um motivo para
mudar
Exemplo: Uma alteração de
comportamento na classe Engine não
deverá obrigar mudanças nas
classes Order e Car (efeito cascata)
● Aprimora o Code Design do seu Software. Exemplo? SOLID
Por quê TDD aumenta a confiabilidade do código?
Open-Closed - A classe ou módulo deverá ser aberta para extensão, mas
fechada para modificações
Exemplo: Adicionar uma propriedade
(attributo) à class Product não deverá
obrigar mudanças no método
Order.addProduct(Product p)
● Aprimora o Code Design do seu Software. Exemplo? SOLID
Por quê TDD aumenta a confiabilidade do código?
Liskov Substitution - Se uma interface B estende uma interface A, então
uma implementação de B poderá ser representada por A ou B
● Aprimora o Code Design do seu Software. Exemplo? SOLID
Por quê TDD aumenta a confiabilidade do código?
Interface Segregation - Segregar (Dividir, especializar) interfaces
Exemplo: O consumidor de
um módulo não poderá
ser obrigado a depender
de métodos que não
utiliza.
● Aprimora o Code Design do seu Software. Exemplo? SOLID
Por quê TDD aumenta a confiabilidade do código?
Dependency Inversion - Prefira Abstrações (Interfaces) à Concreções
(Classes).
- "Legal esse negócio de TDD que você
comentou. Mas uma função de soma não é
simples demais? E pra fazer algo mais
complexo?"
● Entender o que precisa ser entregue
● Adicionar as primeiras tarefas "que vierem à cabeça"
● Eleger a "próxima" a ser realizada (A que necessitar de menor esforço)
Lista de Tarefas (TODO List)
● Riscar as finalizadas e adicionar as que surgirem
● Acabou o expediente? Vá para casa. Amanhã você pega a lista e
continua.
● Quando as tarefas acabarem, e você não conseguir pensar em mais
nenhuma, será que está pronto*?
Lista de Tarefas (TODO List)
Tá pronto? Opa!
● Testes Unitários deverão ser executados isoladamente
○ A ordem de execução não poderá alterar os resultados
○ Não poderão depender de fatores externos (Implementações
(Concreções), Arquivos, Bancos de Dados, WebServices, etc.)
● Podemos simular interações utilizando Mock, Stub e/ou Fake
Instâncias "Faz-de-conta"
● "Simulação" de instância de objeto
● Um mock pode ser criado a partir de uma interface (Não depende da
implementação)
● É configurado conforme o objetivo do caso de teste
Mock
● "Simulação" de interações controladas a um objeto, e verificação de
interações após a execução.
● Mock = teste de comportamento, e verificação de retornos (asserts)
● Stub = teste de interações, e verificação das mesmas (Quantas
execuções, qual o valor fornecido)
Stub
● Objeto que simula um Data Store (ex: Banco de Dados), utilizando In-
Memory Databases (h2, derby, etc.), ou até mesmo Collections.
○ Testar a lógica sem utilizar as implementações das dependências
○ Implementação leve (lightweight) para execuções de testes mais
rápidas.
Fake
Livros
Livros
Muito obrigado!
linkedin.com/in/wellmoreira
github.com/wellingtonmoreira
well_moreira@icloud.com
https://pt.slideshare.net/well_mo
r
http://blog.sciensa.com/tdd-test-driven-development-guia-rapido/

Weitere ähnliche Inhalte

Was ist angesagt?

Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Luís Cobucci
 
Test-Driven Develpment - TDD
Test-Driven Develpment - TDDTest-Driven Develpment - TDD
Test-Driven Develpment - TDDKleber Bernardo
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do MantraDionatan default
 
TDD - Workshop Pyladies SP
TDD - Workshop Pyladies SPTDD - Workshop Pyladies SP
TDD - Workshop Pyladies SPJessyka Lage
 
Boas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDDBoas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDDJony Ferreira dos Santos
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Luís Cobucci
 
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 culturaLeandro Parazito
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de softwareHeider Lopes
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atechcesarcneto
 
Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Rômulo Augusto Santos
 
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 softwareDextra Sistemas / Etec Itu
 

Was ist angesagt? (19)

Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011
 
Test-Driven Develpment - TDD
Test-Driven Develpment - TDDTest-Driven Develpment - TDD
Test-Driven Develpment - TDD
 
TDD - Test Driven Development com JAVA
TDD - Test Driven Development com JAVATDD - Test Driven Development com JAVA
TDD - Test Driven Development com JAVA
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do Mantra
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
TDD - Workshop Pyladies SP
TDD - Workshop Pyladies SPTDD - Workshop Pyladies SP
TDD - Workshop Pyladies SP
 
Boas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDDBoas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDD
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011
 
JUnit Sample
JUnit SampleJUnit Sample
JUnit Sample
 
RealDay: Introduction to TDD
RealDay: Introduction to TDDRealDay: Introduction to TDD
RealDay: Introduction to TDD
 
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
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software
 
Growing oos guided_by_tests entire
Growing oos guided_by_tests entireGrowing oos guided_by_tests entire
Growing oos guided_by_tests entire
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atech
 
Minicurso de TDD
Minicurso de TDDMinicurso de TDD
Minicurso de TDD
 
Testes Unitários
Testes UnitáriosTestes Unitários
Testes Unitários
 
Behaviour Driven Development
Behaviour Driven DevelopmentBehaviour Driven Development
Behaviour Driven Development
 
Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.
 
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
 

Ähnlich wie Por quê você deve utilizar TDD?

Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesCamilo Ribeiro
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testeselliando dias
 
Desenvolvimento orientado a testes
Desenvolvimento orientado a testesDesenvolvimento orientado a testes
Desenvolvimento orientado a testesCarlos Santana
 
Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?Raphael Paiva
 
Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitAdolfo Neto
 
Cobertura de Código: Testes de Unidade
Cobertura de Código: Testes de UnidadeCobertura de Código: Testes de Unidade
Cobertura de Código: Testes de UnidadeThiago Bertuzzi
 
Desenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por testeDesenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por testeUniversidade Tiradentes
 
Como aumentar a produtividade da sua equipe
Como aumentar a produtividade da sua equipeComo aumentar a produtividade da sua equipe
Como aumentar a produtividade da sua equipeWende Mendes
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade IIIJoão Lourenço
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptxCarlos Gonzaga
 
Tdd not sure if testing or developing
Tdd  not sure if testing or developingTdd  not sure if testing or developing
Tdd not sure if testing or developingRenato Oliveira
 
TDD - A Verdadeira Face do Teste
TDD - A Verdadeira Face do TesteTDD - A Verdadeira Face do Teste
TDD - A Verdadeira Face do TesteAislan Fernandes
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junitcejug
 

Ähnlich wie Por quê você deve utilizar TDD? (20)

Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testes
 
Desenvolvimento orientado a testes
Desenvolvimento orientado a testesDesenvolvimento orientado a testes
Desenvolvimento orientado a testes
 
TDD (Resumo)
TDD (Resumo)TDD (Resumo)
TDD (Resumo)
 
Teste Driven Development
Teste Driven DevelopmentTeste Driven Development
Teste Driven Development
 
Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?
 
Teste automatizados e tdd
Teste automatizados e tddTeste automatizados e tdd
Teste automatizados e tdd
 
Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com Junit
 
TDD na Prática
TDD na PráticaTDD na Prática
TDD na Prática
 
Cobertura de Código: Testes de Unidade
Cobertura de Código: Testes de UnidadeCobertura de Código: Testes de Unidade
Cobertura de Código: Testes de Unidade
 
Desenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por testeDesenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por teste
 
Como aumentar a produtividade da sua equipe
Como aumentar a produtividade da sua equipeComo aumentar a produtividade da sua equipe
Como aumentar a produtividade da sua equipe
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade III
 
Qualidade e Testes de Software
Qualidade e Testes de SoftwareQualidade e Testes de Software
Qualidade e Testes de Software
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptx
 
Tdd not sure if testing or developing
Tdd  not sure if testing or developingTdd  not sure if testing or developing
Tdd not sure if testing or developing
 
TDD - A Verdadeira Face do Teste
TDD - A Verdadeira Face do TesteTDD - A Verdadeira Face do Teste
TDD - A Verdadeira Face do Teste
 
Codigo limpo
Codigo limpoCodigo limpo
Codigo limpo
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junit
 

Por quê você deve utilizar TDD?

  • 1. Por quê você deveria utilizar o TDD? Prática com Testes Unitários (JUnit e Mockito)
  • 2. O que o TDD não é? ● Teste unitário ● Biblioteca de Testes ● Feitiçaria
  • 3. Mas afinal, o que é TDD (Test-Driven Development)? ● Técnica de desenvolvimento "descoberta" por Kent Beck em 2003 ● Escrita de testes antes do código ● Ciclos curtos e contínuos (Red-Green-Refactor)
  • 4. Mas afinal, o que é TDD (Test-Driven Development)? ● Aumenta a confiabilidade do código ● Contribui para o aprimoramento do Code Design ● Aumenta a expectativa de vida do programador
  • 5. Ferramentas utilizadas ● Intellij Idea CE - IDE ● JUnit - Ferramenta para escrita/execução de testes ○ Baseada no xUnit, assim como PHPUnit, xUnit.NET, etc. ● Mockito - Ferramenta para "simular" objetos configuráveis, sem depender da implementação real. Falaremos disso mais adiante :)
  • 6. Testar antes + Red - Green - Refactor 1. Escreva um teste que falhe 2. Faça-o rodar com sucesso 3. Refatore-o / Elimine redundâncias
  • 7. Tem algo errado. E agora?
  • 8. Triangulação! ● Analogia da triangulação de radares ● Dois ou mais radares apontam para o mesmo alvo ● As distâncias entre os radares e o alvo podem resultar na distância real do alvo.
  • 9. Por quê TDD aumenta a confiabilidade do código? ● Código sem testes = Queijo suíço (+ queijo é - queijo) ● Quanto mais testes válidos*, menos "gaps" ● Menor índice de bugs (e maior TMEF) ● Código ruim de testar é um Code Smell** * Testes mal escritos e/ou inválidos podem garantir que o bug existe, e permanecerá existindo ** Se o código cheira mal, está estragando/estragado (software rot) - Kent Beck, Martin Fowler, Ward Cunningham, Robert C. Martin, etc.
  • 10. ● Encontrou um bug? Red-Green-Refactor! Por quê TDD aumenta a confiabilidade do código? 1. Escreva um teste que falhe (Simulando o bug encontrado) 2. Faça-o passar (Corrigindo o bug - n ciclos) 3. Refatore! Rode a suíte de testes, se todos os testes passarem então é provável que você tenha corrigido o bug :)
  • 11. ● Aprimora o Code Design do seu Software. Exemplo? SOLID Por quê TDD aumenta a confiabilidade do código? Single Responsibility - A classe ou módulo só pode ter um motivo para mudar Exemplo: Uma alteração de comportamento na classe Engine não deverá obrigar mudanças nas classes Order e Car (efeito cascata)
  • 12. ● Aprimora o Code Design do seu Software. Exemplo? SOLID Por quê TDD aumenta a confiabilidade do código? Open-Closed - A classe ou módulo deverá ser aberta para extensão, mas fechada para modificações Exemplo: Adicionar uma propriedade (attributo) à class Product não deverá obrigar mudanças no método Order.addProduct(Product p)
  • 13. ● Aprimora o Code Design do seu Software. Exemplo? SOLID Por quê TDD aumenta a confiabilidade do código? Liskov Substitution - Se uma interface B estende uma interface A, então uma implementação de B poderá ser representada por A ou B
  • 14. ● Aprimora o Code Design do seu Software. Exemplo? SOLID Por quê TDD aumenta a confiabilidade do código? Interface Segregation - Segregar (Dividir, especializar) interfaces Exemplo: O consumidor de um módulo não poderá ser obrigado a depender de métodos que não utiliza.
  • 15. ● Aprimora o Code Design do seu Software. Exemplo? SOLID Por quê TDD aumenta a confiabilidade do código? Dependency Inversion - Prefira Abstrações (Interfaces) à Concreções (Classes).
  • 16. - "Legal esse negócio de TDD que você comentou. Mas uma função de soma não é simples demais? E pra fazer algo mais complexo?"
  • 17. ● Entender o que precisa ser entregue ● Adicionar as primeiras tarefas "que vierem à cabeça" ● Eleger a "próxima" a ser realizada (A que necessitar de menor esforço) Lista de Tarefas (TODO List)
  • 18. ● Riscar as finalizadas e adicionar as que surgirem ● Acabou o expediente? Vá para casa. Amanhã você pega a lista e continua. ● Quando as tarefas acabarem, e você não conseguir pensar em mais nenhuma, será que está pronto*? Lista de Tarefas (TODO List)
  • 20. ● Testes Unitários deverão ser executados isoladamente ○ A ordem de execução não poderá alterar os resultados ○ Não poderão depender de fatores externos (Implementações (Concreções), Arquivos, Bancos de Dados, WebServices, etc.) ● Podemos simular interações utilizando Mock, Stub e/ou Fake Instâncias "Faz-de-conta"
  • 21. ● "Simulação" de instância de objeto ● Um mock pode ser criado a partir de uma interface (Não depende da implementação) ● É configurado conforme o objetivo do caso de teste Mock
  • 22. ● "Simulação" de interações controladas a um objeto, e verificação de interações após a execução. ● Mock = teste de comportamento, e verificação de retornos (asserts) ● Stub = teste de interações, e verificação das mesmas (Quantas execuções, qual o valor fornecido) Stub
  • 23. ● Objeto que simula um Data Store (ex: Banco de Dados), utilizando In- Memory Databases (h2, derby, etc.), ou até mesmo Collections. ○ Testar a lógica sem utilizar as implementações das dependências ○ Implementação leve (lightweight) para execuções de testes mais rápidas. Fake