Qualidade de
software
Olá!
Sou Carlos Alberto
Atuo como arquiteto de
software na CAPES
Como me encontrar:
@euprogramador
euprogramador@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
Interface
Relativamente 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ção
Complicado de isolar, testes
maiores, demoram mais.
Pode executar o servidor
inteiro ou apenas uma parte.
Complexo de ser escrito.
Thanks!
Perguntas?
Como me encontrar:
@euprogramador
euprogramador@gmail.com

Desenvolvimento orientado a testes

  • 1.
  • 2.
    Olá! Sou Carlos Alberto Atuocomo arquiteto de software na CAPES Como me encontrar: @euprogramador euprogramador@gmail.com
  • 3.
    1. Testes, Sério? Nós comodesenvolvedores realmente levamos testes a sério?
  • 4.
    “ Frases comuns: “Em minhamáquina funciona.” “Isso é problema de ambiente.” “Não estava previsto na especificação.”
  • 5.
    O que levaas equipes a não adotar testes? ◎ Falta de planejamento ◎ Tempo escasso ◎ Equipes reduzidas e sobrecarregadas Resultado: retrabalho, aumento dos custos do projeto, regressão.
  • 6.
    Quais as dificuldadesdo 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...
  • 7.
    Use TDD TDD é uma metodologiade desenvolvimento em que o teste é feito antes do desenvolvimento.
  • 8.
    Teste Antes docódigo? Como assim?
  • 9.
    Como Fazer? ◎ Passo1: 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.
  • 10.
  • 11.
    ◎ Garantir ocorreto funcionamento da aplicação ◎ Detectar falhas e defeitos antes da produção ◎ Facilitar o debug da aplicação Objetivos do teste em um software
  • 12.
    Diferentes tipos deteste 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.
  • 13.
    Diferentes tipos deteste Integração ◎ Analisa o funcionamento do sistema em conjunto com as demais partes do sistema. ◎ Valida o comportamento entre as camadas dos softwares.
  • 14.
    Diferentes tipos deteste Aceitação ◎ Tem a finalidade de simular o comportamento final do sistema, demonstrando o seu uso.
  • 15.
    ◎ Automatizados erepetíveis ◎ Podem ser implementados facilmente ◎ Fácil execução ◎ Rapidez na execução Testes unitários
  • 16.
    O que testar? Ogrande dilema do desenvolvedor então é o que testar?
  • 17.
    ◎ Testes devemgarantir o comportamento ○ O DAO foi invocado? ○ Está tratando exceptions? ◎ Teste do método salvar: ◉ deveriaSalvarUsuario ◉ deveriaValidarUsuarioAntesDeSalvar O que testar?
  • 18.
    ◎ jUnit -framework base para testes ◎ Hamcrest - asserções mais flexíveis ◎ Mockito - objetos dublê Ferramentas testes
  • 19.
    ◎ 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
  • 20.
  • 21.
    Teste usando ostub Repare que o teste está acessando o stub e validando se o email foi enviado
  • 22.
    ◎ Mock permiteconfigurar 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
  • 23.
    Conceitos importantes paratestes - MOCK, Exemplo:
  • 24.
  • 25.
    ◎ Biblioteca paraescrita fluente de asserções. ◎ Permite uma melhor tratativa dos testes do que asserções jUnit. ◎ Não substitui asserções jUnit, mas complementa. Hamcrest
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
    Dicas para aescrita 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. ◎
  • 31.
  • 32.
  • 33.
    ◎ Qual éa responsabilidade? ◎ O que devo garantir nessa camada? ◎ Que caminhos alternativos existem? O que pensar quando for construir o teste
  • 34.
  • 35.
    Cobertura de Código- Objetivo ◎ Dedo duro, apontar o que não foi testado. ◎ Verifica todos desvios condicionais possíveis.
  • 36.
    Ferramentas para testede cobertura do código ◎ E-Cobertura - http://ecobertura.johoop.de/ ◎ Eclemma - http://www.eclemma.org/
  • 37.
    Ferramentas para testede cobertura do código ◎ E-Cobertura - http://ecobertura.johoop.de/ ◎ Eclemma - http://www.eclemma.org/
  • 38.
    Aceitação ou Interface Relativamente fácilde 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ção Complicado de isolar, testes maiores, demoram mais. Pode executar o servidor inteiro ou apenas uma parte. Complexo de ser escrito.
  • 39.