SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
Test Driven Development
Jony Santos
https://www.linkedin.com/in/jonyfs
Agenda
O que é?
Princípios
Tipos de Testes
Unit Testing
Boas práticas
Ferramentas
“Desculpability”
Case
Conclusões
O que é?
● técnica de desenvolvimento
● ciclo curto de repetições
○ desenvolvedor escreve um caso de teste
automatizado
○ Produz código que possa ser validado
pelo teste
○ Refatoramento de código
Simples assim!
CodificaçãoTeste Refatoramento
Quando surgiu?
● 1999 - Extreme Programming (XP)
○ Valores fundamentais
■ comunicação
■ simplicidade
■ feedback
■ coragem
■ respeito
XP - Principios Básicos
● feedback rápido
● presumir simplicidade
● mudanças incrementais
● abraçar mudanças
● trabalho de qualidade
TDD - Princípios
● TDD está muito relacionado ao design de
software
● Gera confiança
● Possibilita mudanças
● É automático
● Valida o Design do Software
● É uma documentação viva através de
exemplos
● Feedback rapido
● Qualidade na implementação
1
TDD - Princípios
● Qualidade de Design
● Força constante integração da equipe
● Requer mais disciplina
● Força a profissionalização no
desenvolvimento de software
● Não são apenas testes, é a nossa
dependência
● Desenvolvedores escrevem os testes
● Através dos testes se chega ao código
● Pequenas iterações de desenvolvimento
2
TDD - Princípios
● TDD ajuda a:
○ produzir código limpo
○ escrever teste de código
○ escrever o código funcional
○ refatorar código
○ Documentar o código
3
● F (Fast)
● I (Isolated)
● R (Repeateble)
● S (Self-verifying)
● T (Timely)
F.I.R.S.T.
Tipos de Testes
● Unitário - TDD está aqui
● Integração
● Interface
● Regressão(Integração Contínua)
● Sistema
● Performance
● Estresse
● Usabilidade
TDD - Unit Testing
Execute o
teste e
observe
Adcione
um teste
Escreva
o código
Execute
os testes
automati
zados
Refatore
o código
Unit Test
Boas Práticas
Overview
Boas Práticas
● Aclopamento - baixo nivel de acoplamento
● Coesão - poucas responsabilidades
● Injeção de Dependência (DI)
● Inversão de Controle (IOC)
● Responsabilidade Única
● Simplicidade
● Principio Aberto/Fechado(Open-Closed
Principle / OCP)
Boas Práticas
● A lei de Demeter (LoD)
● Modularização
● DDD
● Clean Code
● Duplicação - Evitar!
Arquitetura e Design
Arquitetura e Design
● TDD não substitui arquitetura e design
● TDD irá informar e validar(ou invalidar) as
decisões de design
● TDD praticamente irá descobrir fraquezas e
falhas no design do projeto. Preste atenção
nisso
Ferramentas
Ferramentas
● .NET - NUnit
● Java - JUnit / TesteNG
● PHP - PHPUnit / SimpleTest
● Javascript - Jasmine
● C - CUnit
● Python - PyUnit
● Delphi - DUnit
● JavaFx - JemmyFx
habilidade de
afastar de si a
responsabilidade,
culpando os outros
ou as
circunstâncias por
aquilo que não saiu
como esperava
Desculpability
- Isto funcionava bem até
ontem.
- Isto nunca aconteceu antes.
- Isto nunca vai acontecer.
- Isto não deveria ter
acontecido.
- O que? Como isto é possível?
- Isto deve ser um problema
com o seu hardware.
- Confessa. O que você digitou de
errado para travar?
- Este pode não ser o código que
eu fiz.
- Eu não mexo neste código há
semanas!
- Alguém deve ter alterado meu
código.
- Verdade. Isto é muito
estranho…
- Você deve estar rodando a
versão errada.
- É apenas uma coincidente
falta de sorte.
- Você tem de concordar é
impossível testar todas as
possibilidades.
- Na realidade os dados que
você utilizou estão fora de uso.
- Isto funciona, mas nunca
havia sido pensado.
- Onde você estava quando o
programa estava funcionando?
- Você verificou se não tem um
vírus no seu computador.
- Porque você quer fazer isto
logo desta maneira.
- Tudo bem, mesmo que não
Desculpability
● Eu não tenho tempo para isto!
● Sou pago apenas para desenvolver
software. Não sou pago para
testar.
● Eu dou suporte a uma aplicação
legada
● A Equipe de Testes e o próprio
usuário da aplicação são os
melhores para encontrar bugs
● Eu não sei como criar testes
unitários ou eu não sei como
escrever bons testes.
Case
Documentação de API
através de Testes de Integração
● Credit Card API - https://github.com/jonyfs/credit-card-api
● Spring Boot
● Embedded MongoDB
● HATEOAS
● Spring REST Docs
● AsciiDoctor
● Integração Contínua
● Deploy Contínuo - https://creditcardapi.herokuapp.com/api
Conclusões

Mais conteúdo relacionado

Mais procurados

TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentWaldyr Felix
 
[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...
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...minastestingconference
 
Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Maurício Aniche
 
Como eu aprendi que testar software é importante?
Como eu aprendi que testar software é importante?Como eu aprendi que testar software é importante?
Como eu aprendi que testar software é importante?Maurício Aniche
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do MantraDionatan default
 
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
 
Planejamento de testes em um mundo ágil
Planejamento de testes em um mundo ágilPlanejamento de testes em um mundo ágil
Planejamento de testes em um mundo ágilAriane Izac
 
Tente desenvolver diferente com TDD
Tente desenvolver diferente com TDDTente desenvolver diferente com TDD
Tente desenvolver diferente com TDDWebgoal
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testeselliando dias
 
Porque você precisa de uma estratégia de QA e precisa disso AGORA!
Porque você precisa de uma estratégia de QA e precisa disso AGORA!Porque você precisa de uma estratégia de QA e precisa disso AGORA!
Porque você precisa de uma estratégia de QA e precisa disso AGORA!Daniel Carvalhinho
 
Testes de software
Testes de softwareTestes de software
Testes de softwareVitor Castro
 
Acredite, você pode agilizar feedbacks aplicando Dev Box Testing
Acredite, você pode agilizar feedbacks aplicando Dev Box Testing Acredite, você pode agilizar feedbacks aplicando Dev Box Testing
Acredite, você pode agilizar feedbacks aplicando Dev Box Testing Ariane Izac
 
Testes de software automatizados
Testes de software automatizadosTestes de software automatizados
Testes de software automatizadosMarcelo Andrade
 
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)Igor Abade
 

Mais procurados (20)

TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
[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...
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
 
Tdd na veia
Tdd na veiaTdd na veia
Tdd na veia
 
RealDay: Introduction to TDD
RealDay: Introduction to TDDRealDay: Introduction to TDD
RealDay: Introduction to TDD
 
Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?
 
Como eu aprendi que testar software é importante?
Como eu aprendi que testar software é importante?Como eu aprendi que testar software é importante?
Como eu aprendi que testar software é importante?
 
Teste automatizados e tdd
Teste automatizados e tddTeste automatizados e tdd
Teste automatizados e tdd
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do Mantra
 
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?
 
Planejamento de testes em um mundo ágil
Planejamento de testes em um mundo ágilPlanejamento de testes em um mundo ágil
Planejamento de testes em um mundo ágil
 
Tente desenvolver diferente com TDD
Tente desenvolver diferente com TDDTente desenvolver diferente com TDD
Tente desenvolver diferente com TDD
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testes
 
Porque você precisa de uma estratégia de QA e precisa disso AGORA!
Porque você precisa de uma estratégia de QA e precisa disso AGORA!Porque você precisa de uma estratégia de QA e precisa disso AGORA!
Porque você precisa de uma estratégia de QA e precisa disso AGORA!
 
Testes de software
Testes de softwareTestes de software
Testes de software
 
Acredite, você pode agilizar feedbacks aplicando Dev Box Testing
Acredite, você pode agilizar feedbacks aplicando Dev Box Testing Acredite, você pode agilizar feedbacks aplicando Dev Box Testing
Acredite, você pode agilizar feedbacks aplicando Dev Box Testing
 
Testes de software automatizados
Testes de software automatizadosTestes de software automatizados
Testes de software automatizados
 
BDD em Ação
BDD em AçãoBDD em Ação
BDD em Ação
 
Metodos ageis thinkingdifferent
Metodos ageis thinkingdifferentMetodos ageis thinkingdifferent
Metodos ageis thinkingdifferent
 
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
 
TDD para Java EE
TDD para Java EETDD para Java EE
TDD para Java EE
 

Destaque

Testes unitários de JS com Jasmine e Karma
Testes unitários de JS com Jasmine e KarmaTestes unitários de JS com Jasmine e Karma
Testes unitários de JS com Jasmine e KarmaDouglas Matoso
 
JavaScript Firme: Módulos com RequireJS e BDD com Jasmine
JavaScript Firme: Módulos com RequireJS e BDD com JasmineJavaScript Firme: Módulos com RequireJS e BDD com Jasmine
JavaScript Firme: Módulos com RequireJS e BDD com JasmineAndré Willik Valenti
 
Testes Unitários com JavaScript utilizando Jasmine Framework
Testes Unitários com JavaScript utilizando Jasmine FrameworkTestes Unitários com JavaScript utilizando Jasmine Framework
Testes Unitários com JavaScript utilizando Jasmine FrameworkYuri Adams
 
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Wennder Santos
 
Como trabalhar com angular js
Como trabalhar com angular jsComo trabalhar com angular js
Como trabalhar com angular jsMatheus Lima
 
Test-Driven Development com JavaScript, Jasmine Karma
Test-Driven Development com JavaScript, Jasmine  KarmaTest-Driven Development com JavaScript, Jasmine  Karma
Test-Driven Development com JavaScript, Jasmine KarmaRodrigo Branas
 
JavaScript Test-Driven Development with Jasmine 2.0 and Karma
JavaScript Test-Driven Development with Jasmine 2.0 and Karma JavaScript Test-Driven Development with Jasmine 2.0 and Karma
JavaScript Test-Driven Development with Jasmine 2.0 and Karma Christopher Bartling
 
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...Rodrigo Branas
 
JavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and KarmaJavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and KarmaChristopher Bartling
 

Destaque (10)

Testes unitários de JS com Jasmine e Karma
Testes unitários de JS com Jasmine e KarmaTestes unitários de JS com Jasmine e Karma
Testes unitários de JS com Jasmine e Karma
 
JavaScript Firme: Módulos com RequireJS e BDD com Jasmine
JavaScript Firme: Módulos com RequireJS e BDD com JasmineJavaScript Firme: Módulos com RequireJS e BDD com Jasmine
JavaScript Firme: Módulos com RequireJS e BDD com Jasmine
 
Testes Unitários com JavaScript utilizando Jasmine Framework
Testes Unitários com JavaScript utilizando Jasmine FrameworkTestes Unitários com JavaScript utilizando Jasmine Framework
Testes Unitários com JavaScript utilizando Jasmine Framework
 
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
 
Como trabalhar com angular js
Como trabalhar com angular jsComo trabalhar com angular js
Como trabalhar com angular js
 
Test-Driven Development com JavaScript, Jasmine Karma
Test-Driven Development com JavaScript, Jasmine  KarmaTest-Driven Development com JavaScript, Jasmine  Karma
Test-Driven Development com JavaScript, Jasmine Karma
 
JavaScript Test-Driven Development with Jasmine 2.0 and Karma
JavaScript Test-Driven Development with Jasmine 2.0 and Karma JavaScript Test-Driven Development with Jasmine 2.0 and Karma
JavaScript Test-Driven Development with Jasmine 2.0 and Karma
 
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
 
Jasmine BDD for Javascript
Jasmine BDD for JavascriptJasmine BDD for Javascript
Jasmine BDD for Javascript
 
JavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and KarmaJavaScript TDD with Jasmine and Karma
JavaScript TDD with Jasmine and Karma
 

Semelhante a Boas práticas no desenvolvimento de software através do uso de TDD

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ândiaRogerio Fontes
 
Teste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste vocêTeste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste vocêTiago Link
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHPCezar Souza
 
XP Programming
XP ProgrammingXP Programming
XP ProgrammingCJR, UnB
 
Desenvolvimento Orientado a Testes
Desenvolvimento Orientado a TestesDesenvolvimento Orientado a Testes
Desenvolvimento Orientado a TestesAndre Carlucci
 
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
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atechcesarcneto
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
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
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven DevelopmentOtavio Augusto
 
Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Wellington Moreira
 
Agile Black Ops - Como infiltrar agile em ambiente hostil
Agile Black Ops  - Como infiltrar agile em ambiente hostilAgile Black Ops  - Como infiltrar agile em ambiente hostil
Agile Black Ops - Como infiltrar agile em ambiente hostilVitor Hugo de Queiroz
 
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 realHenrique Schmidt
 
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 realWilly Salazar
 
Qualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMQualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMAdriano Bertucci
 
Jenkins + DCS / Dafiti Conference 2014
Jenkins + DCS / Dafiti Conference 2014Jenkins + DCS / Dafiti Conference 2014
Jenkins + DCS / Dafiti Conference 2014Rodrigo Moyle
 
TDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
TDC Florianópolis 2019. Trilha Java - Arquitetura de TestesTDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
TDC Florianópolis 2019. Trilha Java - Arquitetura de TestesSandro Giacomozzi
 

Semelhante a Boas práticas no desenvolvimento de software através do uso de TDD (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
 
Teste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste vocêTeste sua aplicação antes que ela teste você
Teste sua aplicação antes que ela teste você
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHP
 
XP Programming
XP ProgrammingXP Programming
XP Programming
 
Desenvolvimento Orientado a Testes
Desenvolvimento Orientado a TestesDesenvolvimento Orientado a Testes
Desenvolvimento Orientado a Testes
 
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
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atech
 
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
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
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
 
Introdução ao XP
Introdução ao XPIntrodução ao XP
Introdução ao XP
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?
 
Agile Black Ops - Como infiltrar agile em ambiente hostil
Agile Black Ops  - Como infiltrar agile em ambiente hostilAgile Black Ops  - Como infiltrar agile em ambiente hostil
Agile Black Ops - Como infiltrar agile em ambiente hostil
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Tdd x testes unidades
Tdd x testes unidadesTdd x testes unidades
Tdd x testes unidades
 
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
 
Qualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMQualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALM
 
Jenkins + DCS / Dafiti Conference 2014
Jenkins + DCS / Dafiti Conference 2014Jenkins + DCS / Dafiti Conference 2014
Jenkins + DCS / Dafiti Conference 2014
 
TDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
TDC Florianópolis 2019. Trilha Java - Arquitetura de TestesTDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
TDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
 

Boas práticas no desenvolvimento de software através do uso de TDD

  • 1. Test Driven Development Jony Santos https://www.linkedin.com/in/jonyfs
  • 2. Agenda O que é? Princípios Tipos de Testes Unit Testing Boas práticas Ferramentas “Desculpability” Case Conclusões
  • 3. O que é? ● técnica de desenvolvimento ● ciclo curto de repetições ○ desenvolvedor escreve um caso de teste automatizado ○ Produz código que possa ser validado pelo teste ○ Refatoramento de código
  • 5. Quando surgiu? ● 1999 - Extreme Programming (XP) ○ Valores fundamentais ■ comunicação ■ simplicidade ■ feedback ■ coragem ■ respeito
  • 6. XP - Principios Básicos ● feedback rápido ● presumir simplicidade ● mudanças incrementais ● abraçar mudanças ● trabalho de qualidade
  • 7. TDD - Princípios ● TDD está muito relacionado ao design de software ● Gera confiança ● Possibilita mudanças ● É automático ● Valida o Design do Software ● É uma documentação viva através de exemplos ● Feedback rapido ● Qualidade na implementação 1
  • 8. TDD - Princípios ● Qualidade de Design ● Força constante integração da equipe ● Requer mais disciplina ● Força a profissionalização no desenvolvimento de software ● Não são apenas testes, é a nossa dependência ● Desenvolvedores escrevem os testes ● Através dos testes se chega ao código ● Pequenas iterações de desenvolvimento 2
  • 9. TDD - Princípios ● TDD ajuda a: ○ produzir código limpo ○ escrever teste de código ○ escrever o código funcional ○ refatorar código ○ Documentar o código 3
  • 10. ● F (Fast) ● I (Isolated) ● R (Repeateble) ● S (Self-verifying) ● T (Timely) F.I.R.S.T.
  • 11. Tipos de Testes ● Unitário - TDD está aqui ● Integração ● Interface ● Regressão(Integração Contínua) ● Sistema ● Performance ● Estresse ● Usabilidade
  • 12. TDD - Unit Testing Execute o teste e observe Adcione um teste Escreva o código Execute os testes automati zados Refatore o código Unit Test
  • 14. Boas Práticas ● Aclopamento - baixo nivel de acoplamento ● Coesão - poucas responsabilidades ● Injeção de Dependência (DI) ● Inversão de Controle (IOC) ● Responsabilidade Única ● Simplicidade ● Principio Aberto/Fechado(Open-Closed Principle / OCP)
  • 15. Boas Práticas ● A lei de Demeter (LoD) ● Modularização ● DDD ● Clean Code ● Duplicação - Evitar!
  • 17. Arquitetura e Design ● TDD não substitui arquitetura e design ● TDD irá informar e validar(ou invalidar) as decisões de design ● TDD praticamente irá descobrir fraquezas e falhas no design do projeto. Preste atenção nisso
  • 19. Ferramentas ● .NET - NUnit ● Java - JUnit / TesteNG ● PHP - PHPUnit / SimpleTest ● Javascript - Jasmine ● C - CUnit ● Python - PyUnit ● Delphi - DUnit ● JavaFx - JemmyFx
  • 20. habilidade de afastar de si a responsabilidade, culpando os outros ou as circunstâncias por aquilo que não saiu como esperava Desculpability
  • 21. - Isto funcionava bem até ontem. - Isto nunca aconteceu antes. - Isto nunca vai acontecer. - Isto não deveria ter acontecido. - O que? Como isto é possível? - Isto deve ser um problema com o seu hardware. - Confessa. O que você digitou de errado para travar? - Este pode não ser o código que eu fiz. - Eu não mexo neste código há semanas! - Alguém deve ter alterado meu código. - Verdade. Isto é muito estranho… - Você deve estar rodando a versão errada. - É apenas uma coincidente falta de sorte. - Você tem de concordar é impossível testar todas as possibilidades. - Na realidade os dados que você utilizou estão fora de uso. - Isto funciona, mas nunca havia sido pensado. - Onde você estava quando o programa estava funcionando? - Você verificou se não tem um vírus no seu computador. - Porque você quer fazer isto logo desta maneira. - Tudo bem, mesmo que não Desculpability ● Eu não tenho tempo para isto! ● Sou pago apenas para desenvolver software. Não sou pago para testar. ● Eu dou suporte a uma aplicação legada ● A Equipe de Testes e o próprio usuário da aplicação são os melhores para encontrar bugs ● Eu não sei como criar testes unitários ou eu não sei como escrever bons testes.
  • 22. Case
  • 23. Documentação de API através de Testes de Integração ● Credit Card API - https://github.com/jonyfs/credit-card-api ● Spring Boot ● Embedded MongoDB ● HATEOAS ● Spring REST Docs ● AsciiDoctor ● Integração Contínua ● Deploy Contínuo - https://creditcardapi.herokuapp.com/api