desenvolvimento orientado a testes
TRANSCRIPT
![Page 1: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/1.jpg)
Qualidade de software
![Page 2: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/2.jpg)
Olá!Sou Carlos Alberto
Atuo como arquiteto de software na CAPES
Como me encontrar:@[email protected]
![Page 3: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/3.jpg)
1.Testes, Sério?Nós como desenvolvedores realmente levamos testes a sério?
![Page 4: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/4.jpg)
“Frases comuns:
“Em minha máquina funciona.”“Isso é problema de ambiente.”
“Não estava previsto na especificação.”
![Page 5: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/5.jpg)
O que leva as equipes a não adotar testes?
◎ Falta de planejamento◎ Tempo escasso◎ Equipes reduzidas e sobrecarregadas
Resultado: retrabalho, aumento dos custos do projeto, regressão.
![Page 6: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/6.jpg)
Quais as dificuldades do desenvolvedor?
◎ Falta de hábito◎ Confiança excessiva dos profissionais◎ Não saber testar
Resultado: baixa qualidade nos códigos desenvolvidos, difícil depuração, horas extras...
![Page 7: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/7.jpg)
Use TDD
TDD é uma metodologia de
desenvolvimento em que o teste é feito antes
do desenvolvimento.
![Page 8: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/8.jpg)
Teste Antes do código? Como assim?
![Page 9: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/9.jpg)
Como Fazer?
◎ Passo 1: Escreva um teste para o comportamento esperado que falha.
◎ Passo 2: Faça o teste passar, implemente o comportamento esperado.
◎ Passo 3: Retorne ao passo 1.
![Page 10: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/10.jpg)
TDD
Red
Refactor
Green
![Page 11: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/11.jpg)
◎ Garantir o correto funcionamento da aplicação
◎ Detectar falhas e defeitos antes da produção◎ Facilitar o debug da aplicação
Objetivos do teste em um software
![Page 12: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/12.jpg)
Diferentes tipos de teste
Unidade◎ Verificação das menores unidades de código.
◎ Determina o correto funcionamento de uma unidade pequena do código.
◎ Valida se o comportamento está conforme esperado.
![Page 13: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/13.jpg)
Diferentes tipos de teste
Integração◎ Analisa o funcionamento do sistema em conjunto com as
demais partes do sistema.
◎ Valida o comportamento entre as camadas dos softwares.
![Page 14: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/14.jpg)
Diferentes tipos de teste
Aceitação◎ Tem a finalidade de simular o comportamento final do sistema,
demonstrando o seu uso.
![Page 15: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/15.jpg)
◎ Automatizados e repetíveis◎ Podem ser implementados facilmente◎ Fácil execução◎ Rapidez na execução
Testes unitários
![Page 16: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/16.jpg)
O que testar?
O grande dilema do desenvolvedor então é o que testar?
![Page 17: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/17.jpg)
◎ Testes devem garantir o comportamento○ O DAO foi invocado? ○ Está tratando exceptions?
◎ Teste do método salvar:◉ deveriaSalvarUsuario◉ deveriaValidarUsuarioAntesDeSalvar
O que testar?
![Page 18: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/18.jpg)
◎ jUnit - framework base para testes◎ Hamcrest - asserções mais flexíveis◎ Mockito - objetos dublê
Ferramentas testes
![Page 19: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/19.jpg)
◎ Mock - Objetos pré programados com informações sobre o comportamento.
◎ Stubs - Objeto que implementa uma interface simulando um comportamento, extendendo uma classe ou implementando uma interface.
◎ Dummy - Objeto usado apenas para preencher uma lacuna como uma lista de parametros por exemplo.
Conceitos importantes para testes
![Page 20: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/20.jpg)
Exemplo de um stub
![Page 21: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/21.jpg)
Teste usando o stub
Repare que o teste está acessando o stub e validando se o email foi enviado
![Page 22: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/22.jpg)
◎ Mock permite configurar o comportamento de um objeto.
◎ Utilizado para simular o comportamento das dependências.
◎ Ideal para isolar e testar o comportamento esperado.
Conceitos importantes para testes - MOCK
![Page 23: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/23.jpg)
Conceitos importantes para testes - MOCK, Exemplo:
![Page 24: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/24.jpg)
Mockito Guia Básico
![Page 25: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/25.jpg)
◎ Biblioteca para escrita fluente de asserções.◎ Permite uma melhor tratativa dos testes do
que asserções jUnit.◎ Não substitui asserções jUnit, mas
complementa.
Hamcrest
![Page 26: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/26.jpg)
Hamcrest
![Page 27: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/27.jpg)
Hamcrest
![Page 28: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/28.jpg)
Hamcrest
![Page 29: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/29.jpg)
Hamcrest
![Page 30: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/30.jpg)
Dicas para a escrita de bons testes
◎ Teste TUDO.◎ Use o teste correto (unidade, integração …) ◎ Testes podem ser apagados nas refatorações.◎ Use Baby Steps quando não souber nada sobre a
funcionalidade a ser desenvolvida.◎
![Page 31: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/31.jpg)
Por onde começar?
![Page 32: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/32.jpg)
Por onde começar?
TOPDOWN
![Page 33: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/33.jpg)
◎ Qual é a responsabilidade?◎ O que devo garantir nessa camada?◎ Que caminhos alternativos existem?
O que pensar quando for construir o teste
![Page 34: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/34.jpg)
Vamos Ver um exemplo?
![Page 35: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/35.jpg)
Cobertura de Código - Objetivo
◎ Dedo duro, apontar o que não foi testado.◎ Verifica todos desvios condicionais possíveis.
![Page 36: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/36.jpg)
Ferramentas para teste de cobertura do código
◎ E-Cobertura - http://ecobertura.johoop.de/◎ Eclemma - http://www.eclemma.org/
![Page 37: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/37.jpg)
Ferramentas para teste de cobertura do código
◎ E-Cobertura - http://ecobertura.johoop.de/◎ Eclemma - http://www.eclemma.org/
![Page 38: Desenvolvimento orientado a testes](https://reader031.vdocuments.net/reader031/viewer/2022022413/58efb6171a28aba64c8b4703/html5/thumbnails/38.jpg)
Aceitação ou InterfaceRelativamente fácil de ser escrito, entretanto quebra com facilidade.
Complicado de isolar, demora muito mais.
Geralmente envolve executar o servidor de aplicações todo.
Testes é mais complexo que isso...
IntegraçãoComplicado de isolar, testes maiores, demoram mais.
Pode executar o servidor inteiro ou apenas uma parte.
Complexo de ser escrito.