Testes automatizados e
TDD
SANKHYA TECH TALK
Você confia no seu código?
Quem sou eu
- Zup, CTBC, Kyros
- 9 anos de desenvolvimento de software
- 5 anos desenvolvendo com testes
automatizados, TDD, métodos ágeis
Definições
- Teste automatizado é um software que
executa seu código e verifica se ele funciona
como esperado
- TDD é uma maneira de se escrever testes
automatizados onde cada teste é escrito
antes de se escrever o código
Historia
- Kent Beck e o XP
- Agile
- Ruby/Rails
Por que testar?
Feedback imediato
- O código que você acabou de escrever
funciona?
- Bugs com vida curta
Evita regressões
- Garante que uma mudança futura não irá
quebrar o código
- Facilita a evolução do sistema
- Confiança
Design
- Os testes "forçam" um bom design
- É muito dificil testar um código ruim
Refactoring
- Melhorar/Limpar o código sem alterar o seu
comportamento
- Sem testes, refactoring é um tiro no escuro
- Sem refatoring seu software apodrece
Documentação
- Documentação executável
- Não fica desatualizada
- Realmente ajuda quem nunca viu o código
Por que TDD?
O Ciclo do TDD
Cadencia
- Por onde começar?
- Terminei, e agora?
- Flow
Design
- TDD é uma prática de design
- Um segundo cliente
- Simplicidade
Disciplina
- Testar depois é perigoso
- Não desistir
- Te ajuda nos momentos de pressão
Tipos de Teste
- Testes Unitarios
- Testes de Integração
- Testes de Aceitação
Como começar
- Problemas de DOJO
- API Rest, Aplicação Web simples
- Novas funcionalidades
- Novo projeto
- Ping pong pair programming
Corrigindo bugs usando
testes
1. Escreva um teste que reproduz o bug
2. Corrija o bug
3. Refatore o código para que outro bugs não
acontecam
4. Nunca mais se preocupe com esse bug
Ferramentas Java
- JUnit
- Mockito
- Cucumber JVM
- Selenium
Próximo Nivel
- O que testar?
- Tirar o máximo dos testes
- Bons testes
Referencias
Screencasts Kent Beck: https://pragprog.com/screencasts/v-kbtdd/test-driven-development
Clean Coders: http://cleancoders.com
TDD e o profissionalismo
- Uncle Bob Martin
- http://blog.8thlight.com/uncle-
bob/2014/05/02/ProfessionalismAndTDD.ht
ml
- Ignaz Semmelweis
Obrigado!
Luiz Signorelli - luiz.sg@gmail.com

Teste automatizados e tdd

Notas do Editor

  • #3 Já teve medo de mexer em um código? Já mexeu em um código e quando foi pra produção descobriu que outra coisa nada a ver com a alteração quebrou? Já viu uma coisa que podia ser melhorada em um código, mas não melhorou pq teve medo de quebrar alguma coisa?
  • #6 Alguns programadores bem antigos dizem que já faziam TDD desde sempre, mas que 'redescobriu' a técnica foi o Kent Beck. Com a pupularização das metodologias ágeis, TDD e testes em geral se tornaram mais conhecidos. Na minha opinião, o Rails ajudou muito nessa popularização, porque desde as primeiras versões teve um suporte de primeira linha para testes.
  • #8 Vc não precisa subir o ambiente completo pra testar o que acabou de codificar Se o seu teste te mostra um bug, é mais facil encontrar e corrigir
  • #10 Para conseguir testar um pedaço do código isoladamente ele obrigatoriamente terá que ser mais coeso e menos acoplado O teste é o primeiro cliente o seu código
  • #11 Você sabe que um software está apodrecendo quando cada nova alteração leva mais tempo para ser feita que a anterior, até chegar ao extremo de impedr qualquer nova funcionalidade
  • #14 Write a test Simplest thing that could possibly work Remove duplication/Refactor Make it work Make it good Make it fast
  • #22 The key is to test the areas that you are most worried about going wrong. That way you get the most benefit for your testing effort. – Martin Fowler, Refactoring
  • #24 Médico Obstetra Hungaro que pregava que a prática de lavar as mãos antes de examinar as pacientes diminiuiria a ocorrencia de Infeção puerperal. Isso pode parecer ridiculo hoje, mas na época não existia estudos que comprovassem a eficacia de lavar as mãos, e a maioria dos médicos discordava e não fazia. Atualmente nem se discute mais isso e lavar as mãos é uma prática comum dos médicos. Ubcle Bob acredita que o mesmo acontecerá em relacão ao TDD e o desenvolvimeto de software.