Unit test & TDD
Ricardo Moura - Test Analyst
Ricardo Moura
Há 7 anos, inimigo número 1 dos desenvolvedores
Aspirante a desenvolvedor
Desde 2014 na equipe de QA da Tecban.
Certificado pelo BSTQB nos níveis Foundation e Agile Tester
Amante dos carros velhos e rápidos
“Aquele cara chato”
“Por que comprar se eu posso fazer gastando o dobro?”
LinkedIN
www.linkedin.com/in/ricardoamr
Modelo V e
Pirâmide de
teste
Testes
Unitários
Cobertura TDD
Teoria
Prática Dev a Java
application
Testes
Unitários
Cobertura TDD
Teoria
Modelo V
X
Pirâmide de teste
Modelo V
Functional
Requirement
High Level
Design
Detailed
Design
Coding
System
Testing
Integration
Testing
Unit
Testing
User
Requirement
Acceptance
Testing
V&V
Pirâmide de Teste
¿Testes unitários?
Unidade: “Menor parte testável
de um programa de
computador”
“Soma(a,b)”
Teste
Unitário:
“Aplicação de teste
que consiste em
validar as entradas e
saídas de uma
unidade de código”
UnidadeEntrada Saída
Interruptor pra cima
Interruptor pra baixo
Porque?
“Em um processo de desenvolvimento/construção, cada
colaborador deve prezar e garantir a qualidade da sua entrega”
TEMPO
CUSTO
“Quanto mais cedo
defeitos forem
encontrados, mais
barato e rápido será
para corrigi-los”
• Forma de Diminuir a Alta Taxa de Defeitos
• Essencial no desenvolvimento de software e entrega de código legível, que se mantém
com facilidade por qualquer membro da equipe.
• Auxilia o desenvolvedor a escrever um código para que outras pessoas da equipe entenda.
• O Aumento das Validações de todas as funções do sistema.
• Diminui a probabilidade de erros futuros.
• Permitem a simplificação dos códigos, fazendo com que elementos desnecessários fiquem
de fora e não resultem no mau funcionamento do sistema
Motivações
Como?
public double soma(double valorA, double valorB) {
double resultado = valorA + valorB;
return resultado;
}
Entradas: valorA, valorB
Saída: resultado
@Test
public void testeSoma() throws Exception{
double valorA = 3;
double valorB = 2;
double resultado = soma(valorA,valorB);
assertEquals(5,resultado,0,001);
}
Correto?
NÃO
• Escreva o teste primeiro(TDD)
• Nunca inicie com um teste que será bem sucedido
• Comece com valores nulos, ou algo que não funcione
• Não fique com medo de fazer algo trivial para fazer o teste funcionar
• Desacoplamento e testabilidade andam de mãos dadas
• Faça apenas 1 ação e 1 verificação por teste
• Divida o seu teste em 3 partes, Preparação, Ação e Verificação (em inglês:
Arrange, Act and Assert)
Best Practices
@Test
public void testeSoma() throws Exception{
double valorA = 3;
double valorB = 0;
Calculadora calculadora = new Calculadora();
double resultado = soma(valorA,valorB);
assertEquals(5,resultado,0,001);
}
irá falhar
Preparação
Ação
Comparação
Frameworks
PyUnit
NOSE
https://goo.gl/AANM8s
Frameworks
Cobertura
“Objetivo de uma avaliação de cobertura de código é
informar lacunas em sua estratégia de testes unitários”
Facilita o encontro de módulos, classes e funções
que são testados de modo insuficiente como por
exemplo IF e catch parcialmente cobertos.
A maioria das IDEs lhe dão uma indicação visual:
Verde: Linhas que são cobertas pelos testes.
Vermelho: Linhas que não são cobertas pelos testes.
Amarelo: Branchs que não foram cobertos completamente
https://goo.gl/mio9QX
Frameworks
TDD
Test Driven Development
TDD
“É uma técnica que consiste em escrever os testes
unitários antes das classes e métodos de uma aplicação”
Porque?
Feedback imediato e constante
100% de cobertura de teste unitário
Somente o necessário é desenvolvido
Aplicação mais legível e simples
Documentação viva
Controle do progresso do desenvolvimento
Desenvolvimento fragmentado.
Como?
Escreva um
teste que
FALHE
Escreva código
para PASSAR
o teste
REFATORE
o código
TDD Cycle
*Técnica chamada Fake-it
Prática
Dev a Java
application
Testes
Unitários
Cobertura
http://update.eclemma.org
Instalação Eclemma/jacoco
Execução Eclemma/jacoco
TDD

Unit test & TDD