Atividades de Teste e Cobertura de Código em Java

81
Atividades de Teste e Cobertura de Código Código Erik Aceiro Antonio

Transcript of Atividades de Teste e Cobertura de Código em Java

Page 1: Atividades de Teste e Cobertura de Código em Java

Atividades de Teste e Cobertura de

CódigoCódigo

Erik Aceiro Antonio

Page 2: Atividades de Teste e Cobertura de Código em Java

• Bacharelado em Ciência da Computação – Universidade Mackenzie

• Mestrado em Engenharia Elétrica– Sistemas de Comunicações Ópticas – Automação e WebLab

• Doutorando em Ciência da Computação– Engenharia de Software – Universidade Federal de São Carlos (UFSCar)– Teste de Software para Sistemas Embarcados Críticos

• Certificado OCA/OCP/SCJP/LPI• Trabalhei no UOL/Mackenzie como Analista Programador• Professor Universitário • Experiência no ensino de 10 anos• Consultor de TI

Page 3: Atividades de Teste e Cobertura de Código em Java

[email protected]

[email protected]

http://erikblogger.blogspot.com

facebook.com/erik.aceiro

@eaceiro

Page 4: Atividades de Teste e Cobertura de Código em Java

Apresentar princípios

e a motivação para

o uso de atividades de

teste

Erik | [email protected]

Page 5: Atividades de Teste e Cobertura de Código em Java

O que é

atividade de

TesteTeste

?

Page 6: Atividades de Teste e Cobertura de Código em Java

“Testing is the process of executing a

program with the program with the intent of finding

errors”Myers

Page 7: Atividades de Teste e Cobertura de Código em Java

As Atividades de Teste promovem…

- Auxilia na compreensão do SUT (App)

- Os testes devem reduzir “riscos”- Os testes devem reduzir “riscos”

- Reduzir correçoes manuais e “debug”

- Em uma palavra …

Page 8: Atividades de Teste e Cobertura de Código em Java

QualidadeQualidade

Page 9: Atividades de Teste e Cobertura de Código em Java

O queé

Qualidade??

Page 10: Atividades de Teste e Cobertura de Código em Java

A buscapela

qualidadeexigeum

trade-offtrade-off

RiscoX

Oportunidade

Page 11: Atividades de Teste e Cobertura de Código em Java
Page 12: Atividades de Teste e Cobertura de Código em Java
Page 13: Atividades de Teste e Cobertura de Código em Java

O queé

Qualidade??

Page 14: Atividades de Teste e Cobertura de Código em Java

“Qualidade” …

Estamos construindo certo o produto ?

Estamos construindo o produto certo ?

Page 15: Atividades de Teste e Cobertura de Código em Java

“Verificação” assegura que

- Estamos construindo certo o produto ?

- Assegurar que o software está de acordo com a especificação pré-estabelecidaestabelecida

- Verificar problemas e defeitos emcomponentes

- Exige a execução de artefatos

Page 16: Atividades de Teste e Cobertura de Código em Java

“Validação” assegura que

- Estamos construindo o produto certo ?

- Assegurar que o software está de acordo com os requisitos do cliente

- Validar se a construção dos componentes segue a especificação

- Não exige a execução de artefatos

Page 17: Atividades de Teste e Cobertura de Código em Java

Conceitos preliminares

Page 18: Atividades de Teste e Cobertura de Código em Java

Top-Down/Inside-out

Page 19: Atividades de Teste e Cobertura de Código em Java

Bottom-up/Outside-in

Uso de Mock, Stubs, Drivers (Controllers), Dummy Objects , Fakes Objects

Page 20: Atividades de Teste e Cobertura de Código em Java

Taxonomia

Um Defeito é uma Erro,

se ele é for encontrado se ele é for encontrado

Durante a execução do

software.

Page 21: Atividades de Teste e Cobertura de Código em Java

Ciclo de Vida de Defeitos (IEEE 1044-2009)

Page 22: Atividades de Teste e Cobertura de Código em Java

Atividades de Verifivação & Validação (V&V)

São divididas em dois grupos básicos

(1) Atividades Estáticas- Não envolve a execução do SUT

- Inspeção- Inspeção- Inspeção de Código/Modelos- Revisão- Walkthrough (Passo a Passo) - Checklist- Programação em Pares (XP)

Page 23: Atividades de Teste e Cobertura de Código em Java
Page 24: Atividades de Teste e Cobertura de Código em Java

Atividades de Verifivação & Validação (V&V)

(2) Atividades Dinâmicas

- Atividades de Teste

- Envolve a execução do artefato- Envolve a execução do artefato

- Exercita caminhos (paths)

Page 25: Atividades de Teste e Cobertura de Código em Java

“O mais importantena atividade de

teste é o projeto e criação efetivo do criação efetivo do

caso de teste”

Myers

Page 26: Atividades de Teste e Cobertura de Código em Java

O melhor teste é aquele que

descobre maisdescobre maisproblemas

Page 27: Atividades de Teste e Cobertura de Código em Java

Esf

orço

A Economia de uma Atividade de Teste

Número de Casos de Teste

Esf

orço

Page 28: Atividades de Teste e Cobertura de Código em Java

“it is impractical, often impossible, to

find all the errors in a the errors in a

program”

Myers

Page 29: Atividades de Teste e Cobertura de Código em Java
Page 30: Atividades de Teste e Cobertura de Código em Java

100 trilhões de instruções instruções

Page 31: Atividades de Teste e Cobertura de Código em Java

3,2 milhões de anos anos

Page 32: Atividades de Teste e Cobertura de Código em Java
Page 33: Atividades de Teste e Cobertura de Código em Java

Principle 9: The probability of the existence of more errors in a section of a program is proportional to the number of errors alr eady found in that section.

Page 34: Atividades de Teste e Cobertura de Código em Java

Principais Atividades de Teste

Caixa Preta (Teste Funcional)- Critérios

- Particionamento de Equivalencia- Análise do Valor Limite- Grafo de Causa-Efeito- Erro de Advinhação

Caixa Branca (Teste Estrutural)- Critérios

- Statement Coverage (SC)- Decision Coverage (DC)- Condition Coverage (CC)- Decision-Condition coverage (DCC)- Multiple-Condition coverage (MC)- MC/DC

Page 35: Atividades de Teste e Cobertura de Código em Java

Teste Caixa Branca – White Box Testing

Page 36: Atividades de Teste e Cobertura de Código em Java

QUIZ

Podemos executar todas as instruções de um programa com loops ?programa com loops ?

Page 37: Atividades de Teste e Cobertura de Código em Java

Teste Caixa Branca – White Box Testing

caso de teste

(Entrada; Saída Esperada)

Page 38: Atividades de Teste e Cobertura de Código em Java

Teste Caixa Branca – White Box Testing

caso de teste

(A=2,B=0,X=3; 2.5)

Page 39: Atividades de Teste e Cobertura de Código em Java

Teste Caixa Branca – Cobertura de Instrução

caso de teste

(A=2,B=0,X=3; 2.5)

Page 40: Atividades de Teste e Cobertura de Código em Java

Teste Caixa Branca – Cobertura de Instrução

caso de teste

(A=2,B=0,X=3; 2.5)

Page 41: Atividades de Teste e Cobertura de Código em Java

Teste Caixa Branca – Cobertura de Instrução

caso de teste

(A=2,B=0,X=3; 2.5)

Page 42: Atividades de Teste e Cobertura de Código em Java

Teste Caixa Branca – Cobertura de Instrução

caso de teste

(A=2,B=0,X=3; 2.5)

Page 43: Atividades de Teste e Cobertura de Código em Java

QUIZ

O critério de cobertura de instrução pode ser considerado um critério forte ?

Page 44: Atividades de Teste e Cobertura de Código em Java

Teste Caixa Branca – Cobertura de Instrução

||

Defeito

caso de teste

(A=2,B=0,X=3; 2.5)

Page 45: Atividades de Teste e Cobertura de Código em Java

||

Teste Caixa Branca – Cobertura de Instrução

caso de teste

(A=2,B=0,X=3; 2.5)

Page 46: Atividades de Teste e Cobertura de Código em Java

||

Teste Caixa Branca – Cobertura de Instrução

caso de teste

(A=2,B=0,X=3; 2.5)

Page 47: Atividades de Teste e Cobertura de Código em Java

||

Teste Caixa Branca – Cobertura de Instrução

caso de teste

(A=2,B=0,X=3; 2.5)

Page 48: Atividades de Teste e Cobertura de Código em Java

||

Teste Caixa Branca – Cobertura de Instrução

caso de teste

(A=2,B=0,X=3; 2.5)

Defeito NUNCA detectado !!!Critério Fraco

Page 49: Atividades de Teste e Cobertura de Código em Java

Particionamento de Equivalência

Page 50: Atividades de Teste e Cobertura de Código em Java

DIMENSION ad[,ad]...

n(d[ ,d]...)n(d[ ,d]...)

Page 51: Atividades de Teste e Cobertura de Código em Java
Page 52: Atividades de Teste e Cobertura de Código em Java

Análise do Valor Limite

Explora valores no limite de do domínio

Page 53: Atividades de Teste e Cobertura de Código em Java

1. Arquivo vazio

2. Título Faltando

3. 1 caracter para o título3. 1 caracter para o título

4. 80 caracters para o título

5. 1 questão de exemplo

6. 50 questões de exemplo

7. 51 questões de exemplo

8. 999 questões de exemplo

9. Uma questão vazia

Page 54: Atividades de Teste e Cobertura de Código em Java

Error Guessing (Erro de Adivinhação)

Explora erros típicos em um projeto.

Page 55: Atividades de Teste e Cobertura de Código em Java

Error Guessing (Erro de Adivinhação)

1. A lista de entrada é vazia

2. O nome das variáveis foram definidas com clareza

3. Todas as entradas foram salvas3. Todas as entradas foram salvas

Page 56: Atividades de Teste e Cobertura de Código em Java

Processo de Teste Tradicional e Ágil

Page 57: Atividades de Teste e Cobertura de Código em Java

jUnit (Zoo de Patterns)

Page 58: Atividades de Teste e Cobertura de Código em Java

xUnit

Page 59: Atividades de Teste e Cobertura de Código em Java
Page 60: Atividades de Teste e Cobertura de Código em Java

Terminologia básica

Page 61: Atividades de Teste e Cobertura de Código em Java

Pattern - Setup/Exercise/Verify/Teardown

Page 62: Atividades de Teste e Cobertura de Código em Java

Pattern – Arrange/Act/Assert (3A’s)

Como organizar os casos de teste ?

Arrange – Inicialização de todas as pré-condiçõesAct – Um objeto ou método sob testeAssert – Resultados esperados

Vantagens

� Auxilia na compreensão� Melhora a manutenção� Auxilia na detecção de Smells

Page 63: Atividades de Teste e Cobertura de Código em Java

Pattern – Arrange/Act/Assert (3A’s)

Como organizar os casos de teste ?

Arrange – Inicialização de todas as pré-condiçõesAct – Um objeto ou método sob testeAssert – Resultados esperados

Vantagens� Auxilia na compreensão� Melhora a manutenção� Auxilia na detecção de Smells

Variações de nomenclaturaBuild/Operate/Check/Cleat (BOCC Pattern)

Page 64: Atividades de Teste e Cobertura de Código em Java

import static junit.org.Assert .*;

public class MySingleTest {

@Test public void test() {

String input = " abc "; String input = " abc "; String result = Util.reverse(input); assertEquals("cba", result );

}}

...

Page 65: Atividades de Teste e Cobertura de Código em Java

ExemplosExemplos

Page 66: Atividades de Teste e Cobertura de Código em Java

Usage: java br.com.varitus.nfe.app.RobotMainApp

[(-m|--process-email) <process-email>] [(-e|--recov er-error) <recover-error>] [(-o|--recover-other) <recover-other>] (-p| --path) <path> [-f|--process-full-mode] [-r|--recover-full-mode] [-v|--v ersion] [-h|--help]

[(-m|--process-email) <process-email>]

E-mail da conta do cliente na base de dados da VARIT US que será

processado

[(-e|--recover-error) <recover-error>]

E-mail da conta do cliente na base de dados da VARIT US. As mensagens

dessa conta serão movidas da pasta NFE_ERRO para a caixa de entrada

[(-o|--recover-other) <recover-other>]

E-mail da conta do cliente na base de dados da VARIT US. As mensagens

dessa conta serão movidas da pasta NFE_OUTRO para a caixa de entrada

(-p|--path) <path>

O path clientes da NF-e, esse caminho é o valor da tag configurada no

path_cliente.properties em ~/nfe/

Page 67: Atividades de Teste e Cobertura de Código em Java
Page 68: Atividades de Teste e Cobertura de Código em Java
Page 69: Atividades de Teste e Cobertura de Código em Java

class FuncionarioDAOTest {

private FuncionarioDAO dao;

@Mock

private Transacao transacao;

@Before

public void init(){

MockitoAnnotations .initMocks(this);

dao = new FuncionarioDAO (transacao);

}

@Test

public void testQueChecaUsuario (){public void testQueChecaUsuario (){

when(transacao.executar("1234"))

.thenReturn("Eva 1234 1111");

Funcionario umFuncionario = dao.buscarFuncionario("1234");

assertEquals ("Eva" , umFuncionario.getNome() );

assertEquals (1234 , umFuncionario.getSetor());

assertEquals ("1111", umFuncionario.getDepto());

verify (transacao, atMostOnce()).executar("1234");

}

}

Page 70: Atividades de Teste e Cobertura de Código em Java
Page 71: Atividades de Teste e Cobertura de Código em Java
Page 72: Atividades de Teste e Cobertura de Código em Java
Page 73: Atividades de Teste e Cobertura de Código em Java
Page 74: Atividades de Teste e Cobertura de Código em Java
Page 75: Atividades de Teste e Cobertura de Código em Java
Page 76: Atividades de Teste e Cobertura de Código em Java

OO

OA

Page 77: Atividades de Teste e Cobertura de Código em Java
Page 78: Atividades de Teste e Cobertura de Código em Java

PráticaPrática

Page 79: Atividades de Teste e Cobertura de Código em Java

Teste Caixa Branca – White Box Testing

� Criar a classe Java� Criar o Teste de Unidade� Criar Casos de Testes com critério

� Statement Coverage� Decision/Branch Coverage� Condition Coverage

Page 80: Atividades de Teste e Cobertura de Código em Java

Teste Caixa Preta– Black Box Testing

� Criar casos de teste com classes de equivalência

� Criar casos de teste com análise do valor limite

� Criar casos de teste com Erros de Advinhação típicos

Page 81: Atividades de Teste e Cobertura de Código em Java

[email protected]

[email protected]

http://erikblogger.blogspot.com

facebook.com/erik.aceiro

@eaceiro