Desenvolvimento Guiado por Testes

elliando dias
elliando diassoftware developer en -
Desenvolvimento
Guiado por Testes
Test-Driven Development (TDD)

       Guilherme Chapiewski
          http://gc.blog.br
        gc@mandic.com.br
O que é TDD?
Regras fundamentais do TDD:
   Escreva o teste da implementação ANTES de
    escrevê-la

    Escreva somente código suficiente para o teste
    passar e nada além disso

    Escreva testes pequenos: teste a menor
    quantidade possível de código de cada vez

    Escreva testes muito rápidos: não devem
    demorar mais do que alguns segundos para
    serem executados
Etapas da programação com TDD:
1. Criar um teste
2. Executar todos os testes da aplicação para ver
   o novo teste falhar
3. Escrever a implementação testada
4. Executar os testes para ver se todos passarão
5. Refactoring
6. Executar os testes novamente para garantir
   que eles continuam passando
Conceitos
Tipos de testes:
• Testes Unitários
• Testes de Integração
• Testes de Aceitação
1. Testes Unitários:
   Testam apenas um componente do sistema

    Todos os outros componentes são simulados
    (mock objects)

    Ex. ferramentas: JUnit, JMock

    Fundamental para a prática do TDD!
2. Testes de Integração:
   Testam a integração entre componentes

    Envolvem dois ou mais componentes
    (classes+SGBD, classes+SGBD+webservices,
    vários layers da aplicação, etc.)

    Ex. ferramentas: JUnit, DBUnit, HSQLDB

    Normalmente não utilizado em TDD
3. Testes de Aceitação:
   Testam uma história, funcionalidade ou caso de
    uso

    Envolvem vários componentes do sistema

    Ex. ferramentas: JUnit, Selenium, Fit/FitNesse

    Utilizado em TDD
Demonstração
1. Definção da interface:
2. Criação do teste:
3. Execução do teste:
(deve falhar pois sequer há implementação)
4. Criação da classe de implementação:
(somente o esqueleto da classe retornando sempre o mesmo resultado)
5. Execução do teste:
(falhou porque a implementação desenvolvida sempre retorna FALSE)
6. Programação do método:
7. Execução do teste:
(teste passou: 100% de certeza que o código funciona!!!)
8. Refactoring:
9. Execução do teste:
(teste falhou por distração do programador: não verificou se cep é nulo!!!)
10. Corrigindo o refactor:
11. Execução do teste:
(teste passou: temos 100% de certeza que o código CONTINUA funcionando e que
    nenhum componente que depende deste código quebrou após o refactor)
Exemplos reais
Exemplo 1:
Exemplo 2:
Exemplo 3:
Consequências
Consequências:
   Suite de regressão
          Testes completos podem ser executados no build:
           aplicação não sobe para produção se não passar no teste
           de regressão
   Testes também pode ser feitos na IDE
        Não há necessidade de deploy da aplicação para
         execução dos testes
        Bugs são encontrados com maior facilidade e corrigidos

         com maior velocidade
   Bugs comprovados por testes unitários
Consequências:
   Código mais testável
       
           Estimula um design melhor
          Força que os designs antigos que são pouco testáveis
           sejam refatorados
   Facilita o refactoring

    Evita “overdesign”
          Só se escreve código suficiente para o teste passar
       
           Evita que o desenvolvedor tente adivinhar o futuro
   Colabora com a documentação
Consequências:
   Integração contínua
Consequências:
   Integração contínua
Conclusões
Conclusões:
   Colabora para o aumento da qualidade dos
    sistemas

    Desenvolvedores ficam mais corajosos e
    confiantes ao programar!

    Software cresce de forma ordenada e com
    qualidade de design

    Software se adapta com mais facilidade a
    mudanças
Conclusões:
   Demora mais?
Conclusões:
   Demora mais?
         
             No início é necessário escrever muitos testes
            Depois da inércia a suite de regressão está pronta e
             escrevem-se menos testes
         
             Certeza de que a implementação está funcionando
            Maioria dos bugs encontrados em tempo de
             desenvolvimento
         
             Bugs de produção são encontrados e corrigidos com
             muito mais velocidade
       Então no fim das contas demora-se muito menos
        tempo e com muito mais qualidade!
Perguntas?
Leitura complementar:
   Introduction to TDD: http://www.agiledata.org/essays/tdd.html

    Desenvolvimento Orientado a Testes:
    http://www.improveit.com.br/xp/praticas/tdd

    Screencast TDD em ação:
    http://dojofloripa.wordpress.com/2007/05/21/screencast-tdd-em-
    acao/

    Improve your unit tests by replacing your collaborators with mock
    objects: http://www.opensourcetutorials.com/tutorials/Server-Side-
    Coding/Java/java-unit-testing-with-mock-objects

    Behaviour-Driven Development: http://behaviour-driven.org/
Obrigado!
1 de 37

Recomendados

Desenvolvimento Guiado Por Testes por
Desenvolvimento Guiado Por TestesDesenvolvimento Guiado Por Testes
Desenvolvimento Guiado Por TestesGuilherme Chapiewski
2.6K vistas34 diapositivas
TDD por
TDDTDD
TDDIgo Coelho
567 vistas32 diapositivas
RealDay: Introduction to TDD por
RealDay: Introduction to TDDRealDay: Introduction to TDD
RealDay: Introduction to TDDMiguel Schmitz Grazziotin
539 vistas15 diapositivas
Como aumentar a produtividade da sua equipe por
Como aumentar a produtividade da sua equipeComo aumentar a produtividade da sua equipe
Como aumentar a produtividade da sua equipeWende Mendes
637 vistas40 diapositivas
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D... por
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...minastestingconference
302 vistas105 diapositivas
Desenvolvimento em .Net - Testes Unitários por
Desenvolvimento em .Net - Testes UnitáriosDesenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosVitor Silva
1.4K vistas29 diapositivas

Más contenido relacionado

La actualidad más candente

Facilitando o desenvolvimento orientado a testes em aplicações PHP por
Facilitando o desenvolvimento orientado a testes em aplicações PHPFacilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHPPedro Chaves
591 vistas14 diapositivas
DevOps Summit Brasil - O que não te contaram sobre Agile Testing por
DevOps Summit Brasil - O que não te contaram sobre Agile TestingDevOps Summit Brasil - O que não te contaram sobre Agile Testing
DevOps Summit Brasil - O que não te contaram sobre Agile TestingSamanta Cicilia
673 vistas32 diapositivas
DevQA - Da zona de conforto ao comprometimento com a Qualidade por
DevQA - Da zona de conforto ao comprometimento com a QualidadeDevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a QualidadeKamilla Queiroz Xavier
335 vistas35 diapositivas
[DevOps Carioca] Testes Automatizados por
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes AutomatizadosSamanta Cicilia
1.1K vistas107 diapositivas
Testes com TestLink e Selenium por
Testes com TestLink e SeleniumTestes com TestLink e Selenium
Testes com TestLink e SeleniumAndré Thiago
6.4K vistas86 diapositivas
Importância de Testes Automatizados para Continuous Delivery & DevOps por
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsSamanta Cicilia
1.3K vistas109 diapositivas

La actualidad más candente(20)

Facilitando o desenvolvimento orientado a testes em aplicações PHP por Pedro Chaves
Facilitando o desenvolvimento orientado a testes em aplicações PHPFacilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHP
Pedro Chaves591 vistas
DevOps Summit Brasil - O que não te contaram sobre Agile Testing por Samanta Cicilia
DevOps Summit Brasil - O que não te contaram sobre Agile TestingDevOps Summit Brasil - O que não te contaram sobre Agile Testing
DevOps Summit Brasil - O que não te contaram sobre Agile Testing
Samanta Cicilia673 vistas
DevQA - Da zona de conforto ao comprometimento com a Qualidade por Kamilla Queiroz Xavier
DevQA - Da zona de conforto ao comprometimento com a QualidadeDevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a Qualidade
[DevOps Carioca] Testes Automatizados por Samanta Cicilia
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados
Samanta Cicilia1.1K vistas
Testes com TestLink e Selenium por André Thiago
Testes com TestLink e SeleniumTestes com TestLink e Selenium
Testes com TestLink e Selenium
André Thiago6.4K vistas
Importância de Testes Automatizados para Continuous Delivery & DevOps por Samanta Cicilia
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOps
Samanta Cicilia1.3K vistas
TDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOps por tdc-globalcode
TDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOpsTDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOps
TDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOps
tdc-globalcode439 vistas
Tester, pegue suas coisas, você está demitido por Leonardo Galani
Tester, pegue suas coisas, você está demitidoTester, pegue suas coisas, você está demitido
Tester, pegue suas coisas, você está demitido
Leonardo Galani221 vistas
Automação de Testes de Aceitação em Sistemas Web por Rodrigo Veiga
Automação de Testes de Aceitação em Sistemas WebAutomação de Testes de Aceitação em Sistemas Web
Automação de Testes de Aceitação em Sistemas Web
Rodrigo Veiga1.6K vistas
Minas Testing Conference 2015 - Visual Regression Testing em ambientes na nuvem por Stefan Teixeira
Minas Testing Conference 2015 - Visual Regression Testing em ambientes na nuvemMinas Testing Conference 2015 - Visual Regression Testing em ambientes na nuvem
Minas Testing Conference 2015 - Visual Regression Testing em ambientes na nuvem
Stefan Teixeira931 vistas
Meetup SP - O QA & a Especificação Por Exemplo por Samanta Cicilia
Meetup SP - O QA & a Especificação Por ExemploMeetup SP - O QA & a Especificação Por Exemplo
Meetup SP - O QA & a Especificação Por Exemplo
Samanta Cicilia953 vistas
Palestra TDD - TDC - 2016 por Bruno Maomeh
Palestra TDD - TDC - 2016Palestra TDD - TDC - 2016
Palestra TDD - TDC - 2016
Bruno Maomeh217 vistas
Janaína Horácio - Terceirização - O desafio de garantir a Qualidade por minastestingconference
Janaína Horácio - Terceirização - O desafio de garantir a QualidadeJanaína Horácio - Terceirização - O desafio de garantir a Qualidade
Janaína Horácio - Terceirização - O desafio de garantir a Qualidade
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód... por minastestingconference
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
Minas Testing Conference - Entrega Contínua por Samanta Cicilia
Minas Testing Conference - Entrega ContínuaMinas Testing Conference - Entrega Contínua
Minas Testing Conference - Entrega Contínua
Samanta Cicilia717 vistas

Similar a Desenvolvimento Guiado por Testes

Qualidade no desenvolvimento de Software com TDD e PHPUnit por
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitDomingos Teruel
2.1K vistas63 diapositivas
Treinamento Testes Unitários - parte 1 por
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Diego Pacheco
1.8K vistas32 diapositivas
Desenvolvimento Dirigido por Testes por
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesCamilo Ribeiro
1.7K vistas30 diapositivas
TDD - Test Driven Development por
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentEngenharia de Software Ágil
553 vistas46 diapositivas
1 2 3 - Testando - Automatizando os testes de software por
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
909 vistas87 diapositivas
Os Benefícios dos testes no desenvolvimento de software por
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
428 vistas27 diapositivas

Similar a Desenvolvimento Guiado por Testes(20)

Qualidade no desenvolvimento de Software com TDD e PHPUnit por Domingos Teruel
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Domingos Teruel2.1K vistas
Treinamento Testes Unitários - parte 1 por Diego Pacheco
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
Diego Pacheco1.8K vistas
Desenvolvimento Dirigido por Testes por Camilo Ribeiro
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
Camilo Ribeiro1.7K vistas
1 2 3 - Testando - Automatizando os testes de software por Heider Lopes
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
Heider Lopes909 vistas
Qualidade de software com Visual Studio ALM por Adriano Bertucci
Qualidade de software com Visual Studio ALMQualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALM
Adriano Bertucci1.4K vistas
TDD (Test-Driven Development) por Renato Groff
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)
Renato Groff3.8K vistas
Testes de Unidade com Junit por cejug
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junit
cejug2.8K vistas
Gerenciamento da Qualidade de Software 4.pptx por Roberto Nunes
Gerenciamento da Qualidade de Software 4.pptxGerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptx
Roberto Nunes53 vistas
Sobre TDD - Tech Friday da Everis Uberlândia por Rogerio Fontes
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis Uberlândia
Rogerio Fontes66 vistas
TDD em 220V por xanwerneck
TDD em 220VTDD em 220V
TDD em 220V
xanwerneck314 vistas

Más de elliando dias

Clojurescript slides por
Clojurescript slidesClojurescript slides
Clojurescript slideselliando dias
4.4K vistas38 diapositivas
Why you should be excited about ClojureScript por
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScriptelliando dias
3.1K vistas16 diapositivas
Functional Programming with Immutable Data Structures por
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structureselliando dias
4.8K vistas291 diapositivas
Nomenclatura e peças de container por
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de containerelliando dias
32.2K vistas80 diapositivas
Geometria Projetiva por
Geometria ProjetivaGeometria Projetiva
Geometria Projetivaelliando dias
5.9K vistas30 diapositivas
Polyglot and Poly-paradigm Programming for Better Agility por
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agilityelliando dias
2.2K vistas90 diapositivas

Más de elliando dias(20)

Clojurescript slides por elliando dias
Clojurescript slidesClojurescript slides
Clojurescript slides
elliando dias4.4K vistas
Why you should be excited about ClojureScript por elliando dias
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScript
elliando dias3.1K vistas
Functional Programming with Immutable Data Structures por elliando dias
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structures
elliando dias4.8K vistas
Nomenclatura e peças de container por elliando dias
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de container
elliando dias32.2K vistas
Polyglot and Poly-paradigm Programming for Better Agility por elliando dias
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agility
elliando dias2.2K vistas
Javascript Libraries por elliando dias
Javascript LibrariesJavascript Libraries
Javascript Libraries
elliando dias1.8K vistas
How to Make an Eight Bit Computer and Save the World! por elliando dias
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!
elliando dias1.7K vistas
A Practical Guide to Connecting Hardware to the Web por elliando dias
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Web
elliando dias1.6K vistas
Introdução ao Arduino por elliando dias
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
elliando dias3.7K vistas
Incanter Data Sorcery por elliando dias
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorcery
elliando dias2.2K vistas
Fab.in.a.box - Fab Academy: Machine Design por elliando dias
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Design
elliando dias1.9K vistas
The Digital Revolution: Machines that makes por elliando dias
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makes
elliando dias907 vistas
Hadoop - Simple. Scalable. por elliando dias
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.
elliando dias1K vistas
Hadoop and Hive Development at Facebook por elliando dias
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebook
elliando dias1.6K vistas
Multi-core Parallelization in Clojure - a Case Study por elliando dias
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Study
elliando dias2.6K vistas

Último

DevFest2023-Pragmatismo da Internet das Coisas por
DevFest2023-Pragmatismo da Internet das CoisasDevFest2023-Pragmatismo da Internet das Coisas
DevFest2023-Pragmatismo da Internet das CoisasWalter Coan
35 vistas40 diapositivas
Shift left DevOps Experience por
Shift left DevOps ExperienceShift left DevOps Experience
Shift left DevOps ExperienceWalter Coan
5 vistas19 diapositivas
certificado excel.pdf por
certificado excel.pdfcertificado excel.pdf
certificado excel.pdfjuniorcarvalho136
5 vistas1 diapositiva
Conheça agora o UiPath Autopilot™ para o Studio.pdf por
Conheça agora o UiPath Autopilot™ para o Studio.pdfConheça agora o UiPath Autopilot™ para o Studio.pdf
Conheça agora o UiPath Autopilot™ para o Studio.pdfBrunaCavalcanti29
14 vistas8 diapositivas
VIRTUS 1.6 MSI.pdf por
VIRTUS 1.6 MSI.pdfVIRTUS 1.6 MSI.pdf
VIRTUS 1.6 MSI.pdfFbioVieira85
5 vistas13 diapositivas
MAPA - SAÚDE - FUNDAMENTOS DE FARMACOLOGIA - 54/2023 por
MAPA - SAÚDE - FUNDAMENTOS DE FARMACOLOGIA - 54/2023MAPA - SAÚDE - FUNDAMENTOS DE FARMACOLOGIA - 54/2023
MAPA - SAÚDE - FUNDAMENTOS DE FARMACOLOGIA - 54/2023AcademicaDlaUnicesum
6 vistas3 diapositivas

Último(8)

DevFest2023-Pragmatismo da Internet das Coisas por Walter Coan
DevFest2023-Pragmatismo da Internet das CoisasDevFest2023-Pragmatismo da Internet das Coisas
DevFest2023-Pragmatismo da Internet das Coisas
Walter Coan35 vistas
Shift left DevOps Experience por Walter Coan
Shift left DevOps ExperienceShift left DevOps Experience
Shift left DevOps Experience
Walter Coan5 vistas
Conheça agora o UiPath Autopilot™ para o Studio.pdf por BrunaCavalcanti29
Conheça agora o UiPath Autopilot™ para o Studio.pdfConheça agora o UiPath Autopilot™ para o Studio.pdf
Conheça agora o UiPath Autopilot™ para o Studio.pdf
BrunaCavalcanti2914 vistas
TechConnection 2023 Floripa Azure Container Apps por Walter Coan
TechConnection 2023 Floripa Azure Container AppsTechConnection 2023 Floripa Azure Container Apps
TechConnection 2023 Floripa Azure Container Apps
Walter Coan6 vistas

Desenvolvimento Guiado por Testes

  • 1. Desenvolvimento Guiado por Testes Test-Driven Development (TDD) Guilherme Chapiewski http://gc.blog.br gc@mandic.com.br
  • 2. O que é TDD?
  • 3. Regras fundamentais do TDD:  Escreva o teste da implementação ANTES de escrevê-la  Escreva somente código suficiente para o teste passar e nada além disso  Escreva testes pequenos: teste a menor quantidade possível de código de cada vez  Escreva testes muito rápidos: não devem demorar mais do que alguns segundos para serem executados
  • 4. Etapas da programação com TDD: 1. Criar um teste 2. Executar todos os testes da aplicação para ver o novo teste falhar 3. Escrever a implementação testada 4. Executar os testes para ver se todos passarão 5. Refactoring 6. Executar os testes novamente para garantir que eles continuam passando
  • 6. Tipos de testes: • Testes Unitários • Testes de Integração • Testes de Aceitação
  • 7. 1. Testes Unitários:  Testam apenas um componente do sistema  Todos os outros componentes são simulados (mock objects)  Ex. ferramentas: JUnit, JMock  Fundamental para a prática do TDD!
  • 8. 2. Testes de Integração:  Testam a integração entre componentes  Envolvem dois ou mais componentes (classes+SGBD, classes+SGBD+webservices, vários layers da aplicação, etc.)  Ex. ferramentas: JUnit, DBUnit, HSQLDB  Normalmente não utilizado em TDD
  • 9. 3. Testes de Aceitação:  Testam uma história, funcionalidade ou caso de uso  Envolvem vários componentes do sistema  Ex. ferramentas: JUnit, Selenium, Fit/FitNesse  Utilizado em TDD
  • 11. 1. Definção da interface:
  • 12. 2. Criação do teste:
  • 13. 3. Execução do teste: (deve falhar pois sequer há implementação)
  • 14. 4. Criação da classe de implementação: (somente o esqueleto da classe retornando sempre o mesmo resultado)
  • 15. 5. Execução do teste: (falhou porque a implementação desenvolvida sempre retorna FALSE)
  • 17. 7. Execução do teste: (teste passou: 100% de certeza que o código funciona!!!)
  • 19. 9. Execução do teste: (teste falhou por distração do programador: não verificou se cep é nulo!!!)
  • 20. 10. Corrigindo o refactor:
  • 21. 11. Execução do teste: (teste passou: temos 100% de certeza que o código CONTINUA funcionando e que nenhum componente que depende deste código quebrou após o refactor)
  • 27. Consequências:  Suite de regressão  Testes completos podem ser executados no build: aplicação não sobe para produção se não passar no teste de regressão  Testes também pode ser feitos na IDE  Não há necessidade de deploy da aplicação para execução dos testes  Bugs são encontrados com maior facilidade e corrigidos com maior velocidade  Bugs comprovados por testes unitários
  • 28. Consequências:  Código mais testável  Estimula um design melhor  Força que os designs antigos que são pouco testáveis sejam refatorados  Facilita o refactoring  Evita “overdesign”  Só se escreve código suficiente para o teste passar  Evita que o desenvolvedor tente adivinhar o futuro  Colabora com a documentação
  • 29. Consequências:  Integração contínua
  • 30. Consequências:  Integração contínua
  • 32. Conclusões:  Colabora para o aumento da qualidade dos sistemas  Desenvolvedores ficam mais corajosos e confiantes ao programar!  Software cresce de forma ordenada e com qualidade de design  Software se adapta com mais facilidade a mudanças
  • 33. Conclusões:  Demora mais?
  • 34. Conclusões:  Demora mais?  No início é necessário escrever muitos testes  Depois da inércia a suite de regressão está pronta e escrevem-se menos testes  Certeza de que a implementação está funcionando  Maioria dos bugs encontrados em tempo de desenvolvimento  Bugs de produção são encontrados e corrigidos com muito mais velocidade  Então no fim das contas demora-se muito menos tempo e com muito mais qualidade!
  • 36. Leitura complementar:  Introduction to TDD: http://www.agiledata.org/essays/tdd.html  Desenvolvimento Orientado a Testes: http://www.improveit.com.br/xp/praticas/tdd  Screencast TDD em ação: http://dojofloripa.wordpress.com/2007/05/21/screencast-tdd-em- acao/  Improve your unit tests by replacing your collaborators with mock objects: http://www.opensourcetutorials.com/tutorials/Server-Side- Coding/Java/java-unit-testing-with-mock-objects  Behaviour-Driven Development: http://behaviour-driven.org/