SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim [email protected] Fundamentos do Teste de...

72
SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim [email protected] Fundamentos do Teste de Software

Transcript of SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim [email protected] Fundamentos do Teste de...

Page 1: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

SBMF 2008, Salvador-BA, BrasilMarcelo d'Amorim

[email protected]

Fundamentos do Teste de Software

Page 2: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Motivação econômicaTeste e depuração é responsável por + de

50% do custo total de desenvolvimento [Myers-1979, NIST-report-2002]

Defeitos escapados podem ter consequências desastrosasExemplo: Mars Orbiter (1999), Ariane 5 (2001)

Page 3: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Verificação e Validação (V&V)Theorem provingStatic analysisTestingInspectionWalkthroughs

Page 4: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Verificação e Validação (V&V)Theorem provingStatic analysisTestingInspectionWalkthroughs

Page 5: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Definição: Testes (processo)Atividade(s) de encontrar erros no software

Page 6: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

LimitaçõesNão prova corretude como theorem provingNão é automático como análise estáticaPorém...

É técnica de V&V dominante na indústriaDocumenta intenções e designsPode ser combinada com técnicas formais para

encontrar erros de forma mais sistemática. Por exemplo,Kernel do Linux [Cadar et al., 2006], Protocolos de

rede [d´Amorim et al., 2005], Escalonador de tempo real [Penix et al., 2000], etc.

Page 7: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Definição: Teste (artefato)“A set of test inputs, execution conditions,

and expected results developed for a particular objective, such as to exercise a particular program path or to verify compliance with a specific requirement” [IEEE, do178b]

Page 8: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Definição: Teste (artefato)“A set of test inputs, execution conditions,

and expected results developed for a particular objective, such as to exercise a particular program path or to verify compliance with a specific requirement” [IEEE, do178b]

Page 9: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Exemplopublic class Customer { String getName() {…} }public class Bank{ static Bank createBank() {…} Customer createCustomer(String name) {…} }

Page 10: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Exemplopublic class Customer { String getName() {…} }public class Bank{ static Bank createBank() {…} Customer createCustomer(String name) {…} }

Bank bank = Bank.createBank();String name = “customer1“;Customer cust = bank.createCustomer(name);Assert.assertEquals(name, cust.getName());

Page 11: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Exemplopublic class Customer { String getName() {…} }public class Bank{ static Bank createBank() {…} Customer createCustomer(String name) {…} }

Bank bank = Bank.createBank();String name = “customer1“;Customer cust = bank.createCustomer(name);Assert.assertEquals(name, cust.getName());

Entrada e resultado esperado:

Page 12: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Exemplopublic class Customer { String getName() {…} }public class Bank{ static Bank createBank() {…} Customer createCustomer(String name) {…} Customer search(String name) {…}}

Bank bank = Bank.createBank();String name = “customer1“;Customer cust = bank.search(name);if (cust == null) { Customer cust = bank.createCustomer(name); Assert.assertEquals(name, cust.getName());}

Condições de execução:

Page 13: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Terminologia: Falta e FalhaIEEE STD. 982.2-1988 (

http://standards.ieee.org/)Fault (falta, bug ou defeito): problemaFailure (falha, ou erro): manifestação do

problemaMais detalhes…

Software Metrics and Reliability [Rosenberg et al., ISSRE’98]

Page 14: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Quiz: Localize falta e falha no pgm. abaixo

// pre condicao: v != nullpublic static void sort(int[] v) { for (int i = 0; i <= v.length; i++) { …v[i] … }}

Page 15: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Quiz: Localize falta e falha no pgm. abaixo

// pre condicao: v != nullpublic static void sort(int[] v) { for (int i = 0; i <= v.length; i++) { …v[i] … }}

CAUSA

EFEITO

Page 16: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Teste e DepuraçãoTeste é atividade de localizar falhas!Depuração é atividade de localizar faltas!

Page 17: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Teste e DepuraçãoTeste é atividade de localizar falhas!Depuração é atividade de localizar faltas!No exemplo anterior

Atividade de teste revela um erro no uso de v[i]. E.g., com sort(new int[]{});

Depuração localiza o defeito na condição de parada do loop: i <= v.length

Page 18: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Terminologia: suíte e regressãoSuíte de testes é o mesmo que conjunto de

testesRegressão é o evento de uma falha em um

teste que já passou

Suíte de regressão serve para capturar falhas com origem na modificação contínua do programa

Page 19: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Enquete: Voce já usou?JUnit3JUnit4NUnitAnt Make

Page 20: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Agenda do cursoDemo Junit (framework de testes)Testes no desenvolvimentoQualidade de suíte de testes

Demo EclEmma (cálculo de cobertura)Demo MuClipse (cálculo de score de

mutação)Automação da geração de testes

Demo TARGET (geração baseada em modelos)

Demo Randoop (geração aleatória)

Page 21: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Demo JUnit

Page 22: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Testes no desenvolvimento

Page 23: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Testes no desenvolvimentoGerência de bugs (E.g., bugzilla)Teste contínuo

Page 24: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

programador testador

gerente cliente

alguns papéis

Page 25: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

programador testador

gerente

requisitos

atribuiçãoatribuição

cliente

Page 26: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

programador testador

gerente

Bug tracker

Page 27: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Sistema de bug trackingObjetivo: gerenciar ciclo de vida de bugsProgramadores e testadores modificam status

de reportGerentes tem acesso a informação valiosa

Exemplo: frequência de erro por móduloExemplo:

Bugzilla (open-source). http://www.bugzilla.org/

Page 28: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Máquina de estados de um bug no Bugzilla

Page 29: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Teste contínuoExecução ininterrupta de testesAlternativas

Unidade (localmente)ver http://groups.csail.mit.edu/pag/continuoustesting/

Sistema (no servidor)ver http://www.javaworld.com/javaworld/jw-11-2006/jw-

1101-ci.htmlProblemas (mais críticos quando usado

localmente)Pode impactar performancePode reportar falso alarmes (devido a modificações

incompletas)

Page 30: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

ResumoFerramenta de gerência de erros

E.g., bugzilla, clearquest, etc.Ferramenta de integração contínua

E.g., cruisecontrol, continuum, etc.Controle de versão

E.g., cvs, svn, etc.Ferramenta de build

E.g., ant, make, maven, etc.

Page 31: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Qualidade de suíte de testes

Page 32: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

ProblemaUsuário não sabe quão adequada é uma

suíte de testes para encontrar erro. Em resumo, como medir qualidade?

Duas soluçõesCoberturaScore de Mutação

Page 33: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Definição: coberturaValor que indica quanto uma suíte de

testes cobre um programa de acordo com um critério particular

ExemploCobertura de métodos indica o percentual de

métodos de uma aplicação que um conjunto de testes exercita

PrincípioMaior cobertura aumenta chances de

encontrar o erro

Page 34: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Simplificação didáticaTestar a estrutura de um programa equivale a

testar um grafo

Page 35: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Control-Flow Graph (CFG)

stmt0;while (condA){ if (condB){ stmt1; stmt2; } stmt3;}stmt4

Page 36: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Control-Flow Graph (CFG)

stmt0;while (condA){ if (condB){ stmt1; stmt2; } stmt3;}stmt4

stmt0

condA

stmt1;

stmt2;

stmt3

condB

stmt4

Page 37: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Control-Flow Graph (CFG)stmt0

condA

stmt1;

stmt2;

stmt3

condB

stmt4

b

c

a

f

d

e

t0

t1 t6

t2

t3

t4

t5

Page 38: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

QuizO que é uma sequência de teste para um

grafo?

Page 39: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

QuizO que é uma sequência de teste para um

grafo?Sequência de transições a partir do nó inicial que

termina em uma folha

Page 40: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Cobertura de GrafosExemplo de sequência

de testet0; t6

b

c

a

f

d

e

t0

t1 t6

t2

t3

t4

t5

Page 41: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Critérios de adequação de grafoNóTransiçãoCaminho

Page 42: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Critérios de adequação de grafoNó

Teste suíte TS é adequado a nó (i.e., cobre todos os nós) se para cada nó n em G existe t em TS que cobre n (i.e., origem ou destino de t é n)

Transição…

Caminho…

Page 43: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Critérios de adequação de grafoNó

Teste suíte TS é adequado a nó (i.e., cobre todos os nós) se para cada nó n em G existe t em TS que cobre n (i.e., origem ou destino de t é n)

Transição…

Caminho…

Em geral, número de caminhos de um grafo é infinito

Page 44: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

ExercícioReporte suíte de teste adequada a nóReporte suíte de teste adequada a transiçãoExiste suíte de teste adequada a caminho de até

N transições?

Page 45: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Demo EclEmma

Page 46: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

ProblemaUsuário não sabe quão adequada é uma

suíte de testes para encontrar erroDuas soluções

CoberturaScore de Mutação

Page 47: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Teste de MutaçãoVerifica se uma suíte de teste é capaz de

encontar uma falha no programa modificado com um bug (Fault seeding/injection)

PrincípioUma suíte capaz de encontrar vários erros

artificiais pode encontrar mais erros reais

Page 48: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Teste de Mutação

PT0T1

T2…Tn

Como saber se TS é adequada para encontrar erros?

TS =

Page 49: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Teste de Mutação

P’ é uma versão que contém um erro!O que se pode concluir sobre TS?

PT0T1

T2…Tn

P’T0T1

T2…Tn

TS =

Page 50: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Teste de Mutação

P’ é uma versão que contém um erro!O que se pode concluir sobre TS?

PT0T1

T2…Tn

P’T0T1

T2…Tn

TS =

Inadequado para encontrar erro introduzido em P’

Page 51: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Teste de Mutação

O que o programador deve fazer ao perceber isto?

PT0T1

T2…Tn

P’T0T1

T2…Tn

TS =

Page 52: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Teste de Mutação

O que o programador deve fazer ao perceber isto?

PT0T1

T2…Tn

P’T0T1

T2…Tn

TS =

Adicionar novo teste para capturar erro em P’

Page 53: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Teste de Mutação

Novo teste deve passar em P e falhar em P’Definição: TS distingue programas P e P’

PT0T1

T2…Tn

P’T0T1

T2…Tn

TS =

Tn+1 Tn+1

Page 54: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

TerminologiaMutanteOperador de MutaçãoMutante morto Mutante sobreviventeMutante equivalente

Page 55: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

TerminologiaMutante: Programa original modificadoOperador de Mutação: Definição de uma

transformação (de original para mutante)Mutante morto: Quando a suíte de teste

consegue distinguir mutante do originalMutante sobrevivente: Não morto (acima)Mutante equivalente: Semântica do

mutante é equivalente ao original

Page 56: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Mutantes sobreviventesDuas razões para P’ sobreviver ao teste de

distinção de P em relação a TSSuíte TS não consegue distinguir P e P’P e P’ são equivalentes => problema

indecidível!

Page 57: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Metodologia (Parte 1)

Input: P: Pgm, OPS: set of OpOutput: set of Pgm Pseudo-code: gerarMutantes /******************************************************* * gera vários novos programas derivados de P. * Para cada um, identifica um operador de * mutação em OPS e uma posicão para aplicá-lo * em P. Em geral, cada mutante inclui apenas * uma modificação. *******************************************************/

Page 58: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Metodologia (Parte 2)

Input: P: Pgm, TS: set of Pgm, {P1, P2, …, Pn}: set of PgmOutput: (survivors: set of Pgm, killed: set of Pgm) Pseudo-code: encontreSobreviventesfor each Pm in {P1,P2, …,Pn} do // distinguir mutante if (exists some T in TS s.t. RUN(T,Pm) == FAIL) killed = killed U {Pm} else survivors = survivors U {Pm}donereturn (survivors, killed)

Page 59: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Metodologia (Parte 3)

P

TS

Set of Mutants

OPsgerarMutantes encontreSobreviventes

sobreviventesnovos testes

Page 60: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Score de MutaçãoEstá para o teste de falhas assim como

cobertura está para o teste estruturalScore: #mortos / (#mutantes -

#equivalentes)Ex. 10 mutantes, 5 mortos, 2 equivalentes.

Score = 5/8 = 0.625 (62.5%)

Page 61: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

LimitaçõesNão se sabe se o erro introduzido por um

operador de mutação é relevante para encontrar erros reais

Identificação de mutantes equivalentes é manualConsome tempo do testador e é passível a

erro

Page 62: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Demo MuClipse

Page 63: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Automação da geração de testes

Page 64: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Automação da geração de testesDuas preocupações

Entrada (sequência + dados)Classificador

Várias técnicasModel-Based Testing (e.g., TARGET), Random

Testing (e.g., RANDOOP), Symbolic Testing (e.g., Symstra), Concolic Testing (e.g., DART), etc.

Page 65: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Model-Based Testing (MBT)Modelo orienta o teste de programas

Modelo representa comportamento esperado (spec)

Testes são gerados a partir do modeloViolação indica que o sistema não está em

conformidade com o modeloPrincipais limitações

Incompletude do modeloDificuldade na construção do modelo

Page 66: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

TARGETEntrada são requisitos e parâmetros de

geraçãoDocumentos Word estruturados descrevem os

requisitosCada arquivo descreve uma feature com vários

casos de uso. Um caso de uso possui diversos fluxos (principal, alternativos, e excepcionais).

Saída é uma suíte de testePlanilhas no Excel descrevem os casos de

teste

Page 67: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Demo TARGET

Page 68: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Random TestingGeração de entradas

Seleção de sequência e dados randômica e incremental

Principal limitaçãoDegrada com o aumento no tamanho do

espaço de estados

Page 69: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

RandoopEntrada é um conjunto de classes e

parâmetros de configuraçãoSaída é uma suíte de testesGeração do classificador

Derivado de conjunto de testes [Pacheco & Ernst, 2005]

Específicos da linguagem [Pacheco et al., 2007]

Informados pelo usuário

Page 70: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Feedback-directed random test generation. Carlos Pacheco et al., ICSE 2007

Page 71: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

Demo RANDOOP

Page 72: SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br Fundamentos do Teste de Software.

DesafiosMelhorar automação

Geração de classificadores (oracles)Geração de dadosGeração de sequências

Melhorar escalabilidadeEscalar técnicas além do teste de unidade