Desenvolvimento orientado a testes
-
Upload
carlos-santana -
Category
Technology
-
view
94 -
download
0
Transcript of Desenvolvimento orientado a testes
Qualidade de software
Olá!Sou Carlos Alberto
Atuo como arquiteto de software na CAPES
Como me encontrar:@[email protected]
1.Testes, Sério?Nós como desenvolvedores realmente levamos testes a sério?
“Frases comuns:
“Em minha máquina funciona.”“Isso é problema de ambiente.”
“Não estava previsto na especificação.”
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.
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...
Use TDD
TDD é uma metodologia de
desenvolvimento em que o teste é feito antes
do desenvolvimento.
Teste Antes do código? Como assim?
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.
TDD
Red
Refactor
Green
◎ 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
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.
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.
Diferentes tipos de teste
Aceitação◎ Tem a finalidade de simular o comportamento final do sistema,
demonstrando o seu uso.
◎ Automatizados e repetíveis◎ Podem ser implementados facilmente◎ Fácil execução◎ Rapidez na execução
Testes unitários
O que testar?
O grande dilema do desenvolvedor então é o que testar?
◎ Testes devem garantir o comportamento○ O DAO foi invocado? ○ Está tratando exceptions?
◎ Teste do método salvar:◉ deveriaSalvarUsuario◉ deveriaValidarUsuarioAntesDeSalvar
O que testar?
◎ jUnit - framework base para testes◎ Hamcrest - asserções mais flexíveis◎ Mockito - objetos dublê
Ferramentas testes
◎ 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
Exemplo de um stub
Teste usando o stub
Repare que o teste está acessando o stub e validando se o email foi enviado
◎ 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
Conceitos importantes para testes - MOCK, Exemplo:
Mockito Guia Básico
◎ 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
Hamcrest
Hamcrest
Hamcrest
Hamcrest
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.◎
Por onde começar?
Por onde começar?
TOPDOWN
◎ Qual é a responsabilidade?◎ O que devo garantir nessa camada?◎ Que caminhos alternativos existem?
O que pensar quando for construir o teste
Vamos Ver um exemplo?
Cobertura de Código - Objetivo
◎ Dedo duro, apontar o que não foi testado.◎ Verifica todos desvios condicionais possíveis.
Ferramentas para teste de cobertura do código
◎ E-Cobertura - http://ecobertura.johoop.de/◎ Eclemma - http://www.eclemma.org/
Ferramentas para teste de cobertura do código
◎ E-Cobertura - http://ecobertura.johoop.de/◎ Eclemma - http://www.eclemma.org/
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.
Thanks!Perguntas?
Como me encontrar:@[email protected]