desenvolvimento orientado a testes

39
Qualidade de software

Upload: carlos-santana

Post on 14-Apr-2017

91 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Desenvolvimento orientado a testes

Qualidade de software

Page 2: Desenvolvimento orientado a testes

Olá!Sou Carlos Alberto

Atuo como arquiteto de software na CAPES

Como me encontrar:@[email protected]

Page 3: Desenvolvimento orientado a testes

1.Testes, Sério?Nós como desenvolvedores realmente levamos testes a sério?

Page 4: Desenvolvimento orientado a testes

“Frases comuns:

“Em minha máquina funciona.”“Isso é problema de ambiente.”

“Não estava previsto na especificação.”

Page 5: Desenvolvimento orientado a testes

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

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

Use TDD

TDD é uma metodologia de

desenvolvimento em que o teste é feito antes

do desenvolvimento.

Page 8: Desenvolvimento orientado a testes

Teste Antes do código? Como assim?

Page 9: Desenvolvimento orientado a testes

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

TDD

Red

Refactor

Green

Page 11: Desenvolvimento orientado a testes

◎ 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

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

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

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

◎ 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

O que testar?

O grande dilema do desenvolvedor então é o que testar?

Page 17: Desenvolvimento orientado a testes

◎ 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

◎ jUnit - framework base para testes◎ Hamcrest - asserções mais flexíveis◎ Mockito - objetos dublê

Ferramentas testes

Page 19: Desenvolvimento orientado a 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

Page 20: Desenvolvimento orientado a testes

Exemplo de um stub

Page 21: Desenvolvimento orientado a testes

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

◎ 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

Conceitos importantes para testes - MOCK, Exemplo:

Page 24: Desenvolvimento orientado a testes

Mockito Guia Básico

Page 25: Desenvolvimento orientado a testes

◎ 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

Hamcrest

Page 27: Desenvolvimento orientado a testes

Hamcrest

Page 28: Desenvolvimento orientado a testes

Hamcrest

Page 29: Desenvolvimento orientado a testes

Hamcrest

Page 30: Desenvolvimento orientado a testes

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

Por onde começar?

Page 32: Desenvolvimento orientado a testes

Por onde começar?

TOPDOWN

Page 33: Desenvolvimento orientado a testes

◎ 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

Vamos Ver um exemplo?

Page 35: Desenvolvimento orientado a testes

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

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

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

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.

Page 39: Desenvolvimento orientado a testes

Thanks!Perguntas?

Como me encontrar:@[email protected]