Sie sind auf Seite 1von 63

TEST-DRIVEN DEVELOPMENT

Desenvolvimento Dirigido por Testes


INTRODUO

Como saber que um programa funciona?


E se voc fosse testar o Microsoft Word?
Uma metodologia faz-se necessrio para:
o Obter resultados;
o Definir se est de acordo com o esperado.
TESTE DE SOFTWARE

Funo que soma


5
dois nmeros

3
TESTE DE SOFTWARE

Funo que soma


5
dois nmeros

Entrada
TESTE DE SOFTWARE

Funo que soma


5
dois nmeros

O que ser testado


TESTE DE SOFTWARE

Funo que soma


5
dois nmeros

Sada
TESTE DE SOFTWARE

Funo que soma


5
dois nmeros

Coloca-se valores aleatrios


na entrada e verifica a sada

Entrada Sada
COMO TESTAR TODAS AS FUNES
DO SISTEMA?
TESTES

Manuais

Automticos
TESTES AUTOMTICOS
Manifesto gil diz que passamos a valorizar
responder a mudanas mais que seguir um plano;
Para isso preciso mecanismos que traga segurana
ao fazer alteraes na aplicao;
Testes realizados por humanos so falhos e
demorados;
Neste contexto surge os Testes Automticos (ou
automatizados);
Ferramentas: JUnit, DBUnit etc;
EXEMPLO USANDO JUNIT
public class Calculadora{

public double soma(double a, double b){


return a+b;
}

}
EXEMPLO USANDO JUNIT
public class Calculadora{

public double soma(double a, double b){


return a+b;
}

Classe que ser testada


}

public class CalculadoraTest{

@Test
public double deveriaSomarDoisValores(){

}
} Classe Testadora
EXEMPLO USANDO JUNIT
public class Calculadora{

public double soma(double a, double b){


return a+b;
}

public class CalculadoraTest{

@Test Annotation do JUnit.


public double deveriaSomarDoisValores(){

}
}
EXEMPLO USANDO JUNIT
public class Calculadora{

public double soma(double a, double b){


return a+b;
}

public class CalculadoraTest{

@Test Annotation do JUnit.


public double deveriaSomarDoisValores(){

}
Ateno! Somente mtodos com @Test sero executados
}
EXEMPLO USANDO JUNIT
public class Calculadora{

public double soma(double a, double b){


return a+b;
}

public class CalculadoraTest{

@Test
public double deveriaSomarDoisValores(){
Teste
}
}
EXEMPLO USANDO JUNIT
public class CalculadoraTest{

@Test
public void deveriaSomarDoisValores(){
Calculadora calc = new Calculadora();
double valorA = 2.0;
double valorB = 3.0;
double valorEsperado = 5.0;
double valorRetornado = calc.soma(valorA, valorB);

assertEquals(valorEsperado, valorRetornado, 0);


}
}
EXEMPLO USANDO JUNIT
public class CalculadoraTest{

@Test
O que deveria
public void deveriaSomarDoisValores(){
acontecer
Calculadora calc = new Calculadora();
double valorA = 2.0;
double valorB = 3.0;
double valorEsperado = 5.0;
double valorRetornado = calc.soma(valorA, valorB);

assertEquals(valorEsperado, valorRetornado, 0);


}
}
EXEMPLO USANDO JUNIT
public class CalculadoraTest{

@Test
public void deveriaSomarDoisValores(){
Calculadora calc = new Calculadora(); Instancia para
double valorA = 2.0; utilizar o mtodo
double valorB = 3.0;
double valorEsperado = 5.0;
double valorRetornado = calc.soma(valorA, valorB);

assertEquals(valorEsperado, valorRetornado, 0);


}
}
EXEMPLO USANDO JUNIT
public class CalculadoraTest{

@Test
public void deveriaSomarDoisValores(){
Calculadora calc = new Calculadora();
double valorA = 2.0;
double valorB = 3.0;
double valorEsperado = 5.0;
Executa o
double valorRetornado = calc.soma(valorA, valorB);
mtodo testado
assertEquals(valorEsperado, valorRetornado, 0);
}
}
EXEMPLO USANDO JUNIT
public class CalculadoraTest{

@Test
public void deveriaSomarDoisValores(){
Calculadora calc = new Calculadora();
double valorA = 2.0;
double valorB = 3.0;
double valorEsperado = 5.0;
double valorRetornado = calc.soma(valorA, valorB);

assertEquals(valorEsperado, valorRetornado, 0);


}
}

Compara se o valor retorado igual


ao valor esperado
EXEMPLO USANDO JUNIT

Usando JUnit no seu projeto:


o Adicione o JUnit4 a classpath da sua aplicao.
o Sugesto: clique na annotation @Test e depois em
Add JUnit 4 librar to the build path
EXEMPLO USANDO JUNIT

Executando o Test:
o Selecione a classe
que contm o teste e
clique em Run As
e depois em JUnit
Test
EXEMPLO USANDO JUNIT

Verificando o resultado do teste:


o O teste passou (verde), ou seja, o resultado
esperado foi igual ao valor retornado
EXEMPLO USANDO JUNIT
Resultados do JUnit

Verde: O teste passou

Vermelho: O teste no
passou
EXEMPLO USANDO JUNIT

Mtodos de Comparao
o assertArrayEquals()
Verifica se dois vetores so iguais
o assertEquals()
Verifica se dois objetos so iguais
o assertTrue()
Verifica se a varivel verdadeira
o ou assertFalse()
Verifica se a varivel falsa
EXEMPLO USANDO JUNIT

Mtodos de Comparao
o assertNull()
Verifica se a varivel nula
o assertNotNull()
Verifica se a varivel no nula
o assertSame()
Verifica se dois objetos possuem a mesma referncia

o assertNotSame()
Verifica se dois objetos no possuem a mesma referncia
DIFERENA ENTRE OS DESENVOLVEDORES

Sem Testes Com Testes


Medo Segurana
Insegurana Feedback
Evoluo Lenta Produtividade
Cliente Frustado Cliente Satisfeito
Sem Credibilidade Credibilidade
EXERCCIO 01

1. Adicione um mtodo na Classe Calculadora que


multiplique dois nmeros.
2. Escreva um teste para verificar o mtodo na classe
CalculadoraTest.
EXERCCIO 02

1. Crie uma classe Produto:


o Cdigo e Nome.
2. Crie uma classe GerenciadorProduto:
o Lista de Produtos;
o Mtodos: adicionar, remover, buscar pelo cdigo, remover
um produto.
3. Crie testes para verificar os mtodos da classe
GerenciadorProduto.
NVEIS DE TESTES

Teste de Unidade

Teste de Integrao

Teste de Aceitao
TESTE DE UNIDADE

Testa a menor unidade de cdigo executvel;


Na POO a menor unidade o Mtodo;
Tambm conhecido como Teste Unitrio;
Caractersticas:
o Mais fceis de Escrever;
o Muito rpidos para rodar;
o Mais fceis para rastrear os erros.
Centenas ou milhares de testes em segundos.
TESTE DE INTEGRAO

Testa um agrupamento de mdulos, ou seja,


integrado ao banco de dados, rede, disco, etc;
Executa a validao dos componentes do software
funcionando juntos;
Caractersticas:
o Fceis de Escrever;
o Rpidos para rodar;
o Fceis para rastrear os erros.
TESTE DE ACEITAO

Testa o que o usurio espera receber;


Tambm conhecido como End-to-end;
Valida o sistema na perspectiva do usurio;
Caractersticas:
o Trabalhosos para escrever;
o Lentos para rodar;
o Difceis para rastrear erros.
RESUMO

Navegador

Aplicao

Banco de Dados
RESUMO

Navegador

Aplicao

Teste de Unidade

Banco de Dados
RESUMO
Teste de Integrao

Navegador

Aplicao

Banco de Dados
RESUMO
Teste de Aceitao

Navegador

Aplicao

Banco de Dados
RESUMO Teste de Aceitao

Teste de Integrao

Navegador

Aplicao

Teste de Unidade

Banco de Dados
QUAL DOS NVEIS DE TESTE
O MELHOR?
QUAL DOS NVEIS DE TESTE
O MELHOR?
Depende da necessidade
TEST AUTOMATION PYRAMID

10%
Aceitao

Integrao 40%

50%
Unidade

Fonte: http://martinfowler.com/bliki/TestPyramid.html
Primeiro escreve o cdigo de produo, depois
escreve o teste
Modelo de desenvolvimento tradicional
Primeiro escreve o cdigo de produo, depois
escreve o teste
Modelo de desenvolvimento tradicional

E se fosse possvel escrever o teste


antes da implementao?
TEST-DRIVEN DEVELOPMENT
Tcnica de desenvolvimento de software baseada em
ciclos curtos de repeties;

Desenvolvedor faz o teste, desenvolve o cdigo e por


fim refatora;

Vantagens:
o Melhor entendimento do negcio do sistema
o Criao de testes ricos
o Maior confiana no cdigo
o Maior valor agregado ao produto
TEST-DRIVEN DEVELOPMENT
TEST-DRIVEN DEVELOPMENT

Adiciona
o teste

[Falha] Executa
Altera
o teste
[Passou]

[Passou]
Desenvolvimento
Continua
Refatora

Desenvolvimento
terminou
EXEMPLO DE TDD

Criar uma classe que calcula a distncia euclidiana


entre dois pontos;

Distncia Euclidiana dada por:


EXEMPLO DE TDD

Cria o teste
EXEMPLO DE TDD

Cria o teste

Teste Falha. No existe nada implementado


EXEMPLO DE TDD

Adiciona o teste

Adiciona o teste
EXEMPLO DE TDD

Adiciona o teste

Teste Falha. No existe a classe


DistanciaEuclidiana
EXEMPLO DE TDD

Cria a classe e adiciona o mtodo:

Cria a classe e
adiciona o mtodo
EXEMPLO DE TDD

Todos os erros foram removidos

Todos os erros foram


removidos
EXEMPLO DE TDD

Todos os erros foram removidos

Teste Falha. O resultado retornado no o


mesmo do resultado esperado
EXEMPLO DE TDD

Todos os erros foram removidos

Implementa o mtodo
EXEMPLO DE TDD

Todos os erros foram removidos

Teste Passa. O resultado retornado o


mesmo do resultado esperado
EXEMPLO DE TDD

Todos os erros foram removidos

Refatora o mtodo
EXEMPLO DE TDD

Todos os erros foram removidos

Teste continua passando. O resultado


retornado o mesmo do resultado esperado
TDD um cdigo limpo que funciona
Ron Jeffries
CONCLUSO

Nome dos testes definem o comportamento esperado;

Fatorados (sem duplicao);

Alta cobertura;

Evita cdigo intil;

Alta qualidade do cdigo;

o Refatoraes so seguras com testes automatizados.


EXERCCIO

Crie uma classe que ordena uma lista de inteiros;

Tente desenvolver a classe pensando inicialmente nos


testes e depois na implementao.
LIVROS

Kent Beck, Test-Driven Development: By Example,


Addison-Wesley Professional, 2002;
David Astels, Test Driven Development: A Practical
Guide, Prentice Hall PTR, 2003;
Martin Fowler et al, Refactoring: Improving the
Design of Existing Code, Addison-Wesley
Professional, 1999;
Joshua Kerievsky, Refactoring to Patterns,
AddisonWesley, 2004.
LINKS

Test-Driven Development http://tdd.caelum.com.br/


Test Driven Development: TDD simples e prtico
http://www.devmedia.com.br/test-driven-development-tdd-
simples-e-pratico/18533
Testes Automatizados http://www.caelum.com.br/apostila-
java-testes-xml-design-patterns/testes-automatizados/
A importncia dos testes automatizados no dia a dia
http://www.slideshare.net/rponte/importncia-dos-testes-
automatizados-no-dia-a-dia?related=1

Das könnte Ihnen auch gefallen