Desenvolvimento orientado a testes

Post on 14-Apr-2017

93 views 0 download

Transcript of Desenvolvimento orientado a testes

Qualidade de software

Olá!Sou Carlos Alberto

Atuo como arquiteto de software na CAPES

Como me encontrar:@euprogramadoreuprogramador@gmail.com

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:@euprogramadoreuprogramador@gmail.com