Академический Документы
Профессиональный Документы
Культура Документы
04/05/2012
Tpicos
04/05/2012
Testes de Programas
Qualquer recurso de programa sem um teste automatizado simplesmente no existe. Kent Beck. Extreme Programing Explained. p 56
04/05/2012
Testes de Programas
Defeitos de programa: problemas Custos enormes
Tempo, dinheiro, frustraes...
Como amenizar esses problemas? Criao e execuo de casos de teste (de maneira contnua) para programas
Abordagem prtica e comum para lidar com defeitos de programas Antes que sejam deixados para trs no ambiente de desenvolvimento
04/05/2012
Testes de Programas
Importncia dos testes Um produto de software deve passar por vrias fases de teste:
Teste de unidade, de integrao, de sistema, de aceitao...
04/05/2012
Testes de Programas
Testes devem ser escritos Poucos o fazem... Falta de tempo... Resultado: ciclo vicioso
Menos testes Menos produtividade Menos estabilidade
Mais presso
Quebrando o ciclo:
04/05/2012
Testes de Programas
Testes de Unidade (Unitrio)
Testam as menores unidades de programa desenvolvidas POO: unidade pode ser mtodo/classe/objeto Objetivo Prevenir defeitos Permitir um nvel de qualidade de produto durante o desenvolvimento do software
04/05/2012
Testes de Programas
Testes de Unidade (Unitrio)
Testes
Responsabilidade do prprio desenvolvedor Comumente testam um mtodo individualmente
Comparao de uma sada conhecida aps o processamento da
mesma
No testam todo o programa
04/05/2012
Testes de Programas
Java: Teste pelo mtodo main()
04/05/2012
10
Testes de Programas
Java: Teste pelo mtodo main()
Questes: eficincia como ambiente de teste
No h conceito explcito de teste aprovado ou reprovado
Normalmente, o programa gera mensagens com System.out.println() Desenvolvedor decide se a mensagem est correta ou no
04/05/2012
11
Testes de Programas
Java: Teste pelo mtodo main()
estruturada
No h replicabilidade
Aps cada teste, o desenvolvedor tem que examinar e interpretar os
resultados
04/05/2012
12
Testes de Programas
JUnit
Framework de criao de testes automatizados para
desenvolvimento Java
Possui API que habilita o desenvolvedor a facilmente criar
04/05/2012
13
Tpicos
04/05/2012
14
JUnit
Introduo
isolada
maneira esperada
Exibindo possveis erros ou falhas
04/05/2012
15
JUnit
Vantagens
Permite rpida criao de cdigos de teste
Possibilitando aumento da qualidade do sistema sendo
desenvolvido e testado
comunidade open-source
Uma vez escritos, os testes so executados rapidamente
Sem a interrupo do processo de desenvolvimento
04/05/2012
16
JUnit
Vantagens
Checa os resultados dos testes e fornece uma resposta
imediata
Pode-se criar uma hierarquia de testes que permitir
04/05/2012
17
JUnit
Questes
Casos de teste so definidos em classes separadas
Sem acesso a partes encapsuladas
ao mundo externo
Hbito:
1.Codifique um pouco... 2.Teste um pouco... 3.Codifique um pouco... 4.Teste um pouco... Resumo: Objeto pronto, teste-o
04/05/2012
18
JUnit
Arquitetura
JUnit 3
Test
+runTest()
Classe Test
runTest(): controla execuo de testes particulares
TestCase
+runTest() +setUp() +tearDown()
TestSuite
+runTest()
mtodo
setUp(): chamado antes de cada mtodo de teste* tearDown(): chamado depois de cada mtodo de
teste*
Classe TestSuite: define um conjunto de testes
JUnit 4
import static na API
API do JUnit
04/05/2012
19
JUnit
Consideraes Finais
Testes de unidade: Importantes na construo de mtodos
Permite ao desenvolvedor test-los durante a construo Viabilizando a implementao de mtodos livres de erros
04/05/2012
20
Dvidas?
04/05/2012
21
Tpicos
04/05/2012
22
JUnit no Eclipse
Exemplo 1: Calculadora
04/05/2012
23
JUnit no Eclipse
Criando um Caso de Teste
Boto direito na classe a ser testada (Calculadora) New JUnit Test Case
04/05/2012
24
JUnit no Eclipse
Criando um Caso de Teste
04/05/2012
25
JUnit no Eclipse
Criando um Caso de Teste
Selecionar mtodos a
04/05/2012
26
JUnit no Eclipse
Criando um Caso de Teste
04/05/2012
27
JUnit no Eclipse
Criando um Caso de Teste
04/05/2012
28
Exemplo 1: Calculadora
Implementando o Caso de Teste criado
04/05/2012
29
JUnit no Eclipse
Execuo de um Caso de Teste
Por plugin Interface pronta Recursos:
Visualizao de falhas e erros (excees) Debug Histrico de testes
04/05/2012
30
Exemplo 1: Calculadora
Executando o Caso de Teste - Plugin
04/05/2012
31
Exemplo 1: Calculadora
Resultado dos testes - Plugin
Exemplo de resultado com falhas
Falha: quando uma afirmao (assertion) falha Erro: quando ocorre uma exceo
Ex.: NullPointerException, ArrayIndexOutOfBoundsException ...
04/05/2012
32
Exemplo 1: Calculadora
Executando o Caso de Teste - Cdigo
04/05/2012
33
JUnit
Assertions
Sintaxe do Mtodo assertEquals([String mensErro,] esperado, atual) assertFalse([String mensErro,] boolean condicao) assertTrue([String mensErro,] boolean condicao) assertNotNull([String mensErro,] Object objeto) assertNull([String mensErro,] Object objeto) assertNotSame([String mensErro,] Object esperado, Object atual) assertSame([String mensErro,] Object esperado, Object atual) fail([String mensErro]) Descrio Compara dois valores Avalia uma expresso booleana Teste passa se esperado.equals (teste) condicao == false condicao == true objeto != null Compara um objeto com nulo objeto == null esperado != atual Compara dois objetos esperado == atual
04/05/2012
34
JUnit
Diferena entre verses
At o JUnit 3.x
Classes de teste herdam classe TestCase
Declarao do construtor da classe
04/05/2012
35
JUnit
Diferena entre verses
A partir do JUnit 4
Herana de TestCase substituda por import esttico
import static org.junit.Assert.* No precisa declarar o construtor da classe
Mtodos de teste identificados com a anotao @Test Mtodos setUp() e tearDown() substitudos pelas anotaes
04/05/2012
36
JUnit
Anotaes do JUnit 4
@Test Identifica que o mtodo um mtodo de teste. @Before Executa o mtodo antes de cada teste. Este mtodo pode ser usado para preparar o ambiente de teste (Ex: ler dados do usurio). Substituto do setUp(). @After Executa o mtodo aps cada teste. Substituto do tearDown(). @BeforeClass Executa o mtodo antes do incio de todos os testes
Ex: conectar base de dados
04/05/2012
37
JUnit
Anotaes do JUnit 4
@AfterClass Executa o mtodo aps todos os testes finalizarem (Ex: desconectar base de dados). @Ignore[(Comentrio)] O mtodo ignorado. @Test (expected=IllegalArgumentException.class) Testa se o mtodo levanta a exceo especificada. @Test (timeout=100) Falha se o teste demorar mais que 100 milissegundos
04/05/2012
38
JUnit
Sequncia de Desenvolvimento
@BeforeClass
Antes de todos os testes
Testes consecutivos
@Before
@Test
Teste
@After
@AterClass
04/05/2012
39
Exemplo 2
Sequncia dos mtodos
04/05/2012
40
Exemplo 2
Ignorando um teste
Ignorado
Ignorado
04/05/2012
41
Exemplo 3: Janela
Classe Janela
04/05/2012
42
Exemplo 3: Janela
Caso de Teste: JanelaTest
04/05/2012
43
Exemplo 3: Janela
Caso de Teste: JanelaTest
Mudar posio
04/05/2012
44
04/05/2012
45
divisaoComExcecao(): erro
Exceo ocorrida (diviso por zero)
divisaoEsperandoExcecao1(): passou
Ocorreu exceo esperada
divisaoEsperandoExcecao2(): falhou
No ocorreu exceo esperada
divisaoSemExcecao(): passou
04/05/2012
46
Dicas
Organizao
cdigos fonte
04/05/2012
47
Dicas
Desenvolvimento Dirigido a Testes
Testes devem ser escritos assim que possvel adaptados de acordo com mudanas Testes antigos: Deixar em execuo Surgimento de novas ideias: 1.Criar testes 2.Verificar se funcionam 3.Se necessrio, altere o cdigo do programa
04/05/2012
48
Dicas
Granularidade dos Testes
funcionalidade do sistema
No combine testes no relacionados em um nico
mtodo de teste
04/05/2012
49
Dicas
Quais e quantos testes escrever
Regra principal: Tenha criatividade para imaginar as possibilidades de testes Comece pelo teste mais simples deixe os mais complexos para o final Use apenas dados suficientes Ex.: no teste 10 condies se apenas 3 so suficientes
04/05/2012
50
Dicas
Quais e quantos testes escrever
No teste mtodos triviais gets e sets Mtodos set: Somente crie testes se houver validao de dados Achou um bug? No conserte sem antes escrever um teste que o detecte
Caso contrrio, ele pode voltar
04/05/2012
51
Exerccio
Criatividade na criao de testes
MovimentoFinanceiro -ID: int -TipoES: char -DataEmissao: Date -Cliente: int -DataVencimento: Date -DataPagamento: Date -ValorOriginal: float -ValorJuros: float -ValorPagamento: float
Exerccio
+geraID(valorIncremento: int): int +geraVencimento(dataEmissao: Date): Date +calculaJuros(valorOriginal: float): float +calculaValorPagamento(valorOriginal: float, valorJuros: float): float
04/05/2012
52
Exemplo 5: Memoria
Classe MemoriaS1/3
04/05/2012
53
Exemplo 5: Memoria
Classe MemoriaS2/3
04/05/2012
54
Exemplo 5: Memoria
Classe MemoriaS3/3
04/05/2012
55
Exemplo 5: Memoria
Classe CD
1/2
04/05/2012
56
Exemplo 5: Memoria
Classe CD
2/2
04/05/2012
57
Exemplo 5: Memoria
Classe HD
04/05/2012
58
Exemplo 5: Memoria
Caso de Teste MemoriaTeste
04/05/2012
59
JUnit
Sutes de Testes
04/05/2012
60
Sute de Testes
Exemplo 6: Classe Utils
04/05/2012
61
Sute de Testes
Exemplo 6: Caso de Teste TesteUtils
04/05/2012
62
Sute de Testes
Exemplo 6: Resultados de TesteUtils
04/05/2012
63
Sute de Testes
Exemplo 6: Classe Vetores
04/05/2012
64
Sute de Testes
Exemplo 6: Caso de Teste TesteVetores
04/05/2012
65
Sute de Testes
Exemplo 6: Resultado de TesteVetores
04/05/2012
66
Sute de Testes
Criando a Sute
04/05/2012
67
Sute de Testes
Criando a Sute
04/05/2012
68
Sute de Testes
Criando a Sute
teste Finish
04/05/2012
69
Sute de Testes
Exemplo 6: Criando a Sute
04/05/2012
70
Sute de Testes
Sute em JUnit 4
Sute de Testes modificada para padro JUnit 4 Execute-a como um caso de teste
04/05/2012
71
Sute de Testes
Resultado dos testes da sute
04/05/2012
72
Dvidas?
04/05/2012
73
Exerccios
Treinamento:
Implementar cada exemplo da aula
Criatividade:
Implementar 1 classe e alguns casos de teste para:
Registro de ligaes Fila de impresso Bilheteria de cinema Estacionamento com ticket