teste de software 14: gera ção de teste baseado em modelos: mbt

31
Teste de Software 14: Geração de teste baseado em modelos: MBT Marcelo d’Amorim [email protected]

Upload: trula

Post on 21-Jan-2016

41 views

Category:

Documents


0 download

DESCRIPTION

Teste de Software 14: Gera ção de teste baseado em modelos: MBT. Marcelo d’Amorim [email protected]. MBT (1). O que é um modelo? descrição (incompleta) de comportamento de um elemento (usuário, software, indústria, etc.) O que é MBT? Geração de casos de teste a partir de modelo. MBT (2). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Teste de Software14: Geração de teste baseado em

modelos: MBTMarcelo d’Amorim

[email protected]

Page 2: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

MBT (1)

• O que é um modelo?– descrição (incompleta) de comportamento de

um elemento (usuário, software, indústria, etc.)

• O que é MBT?– Geração de casos de teste a partir de modelo

Page 3: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

MBT (2)

• Vantagens:– Não precisa acessar o código: caixa-branca– Descreve apenas o que o software precisa

obedecer

• Desvantagens:– Modelo pode ser caro de construir e manter

Page 4: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Um cenário

• Usuário constrói modelo

• Ferramenta gera testes a partir do modelo

• Script executa e classifica testes: sucesso/falha

• Script pode minimizar conjunto de testes reportados (seleção). Por exemplo:– Baseado em cobertura– Baseado em falha

Page 5: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Um cenário

• Usuário constrói modelo

• Ferramenta gera testes a partir do modelo

• Script executa e classifica testes: sucesso/falha

• Script pode minimizar conjunto de testes reportados (seleção). Por exemplo:– Baseado em cobertura– Baseado em falha

Ênfase

Page 6: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Modelo de interação de uso

• Representa possíveis interações do usuário com o sistema– Inclui possíveis dados de entrada – Inclui possíveis sequências

Geração do teste faz uso destas alternativas!

Page 7: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Exercício

• Construa uma máquina de estados para gerar dados e seqüências de operações de depósito e transferência bancária – Ignore oracles

Page 8: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Duas fontes de não determinismo: sequência

(depósito/transferência) e dados

deposito transferencia

num. agencia

num. c.c.

num. agencia origem

num. c.c. origem

num. agencia

num. cc

valor valor

Opção 1: Máquina de estados

Page 9: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Quiz

• O que representa cada nó do grafo?

Page 10: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Quiz

• O que representa cada nó do grafo?– Estado

• mental do usuário de um caixa eletrônico• de um programa gerador de casos de teste

Note que o estado após um depósito é o estado inicial. Portanto, o estado não

corresponde ao estado do sistema.

Page 11: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Modelo de interação

• Pode ser útil para encontrar crashes

• Modelo do sistema define comportamento– Útil para encontrar erros lógicos (conformidade)– Requer função de abstração

Page 12: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Comparação de estado

executa operação

compara (α)

MODELO SISTEMA

Page 13: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Opção 2: Modelo em código

• Construir modelo direto no código– Modelo contém mais detalhes– Pode construir teste simultaneamente a geração

• Reduz necessidade de scripts de execução• Facilita definição de pré e pós-condições

Page 14: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Operador de escolha

• Ch(E1,…,En) é uma expressão da ling.– Semântica randômica

• Retorna valor de Ej para um j sorteado

– Semântica exaustiva• Constrói n execuções. Retorna valor de Ei para

cada 1<i<n

Page 15: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Operador de escolha

• Ch(E1,…,En) é uma expressão da ling.– Semântica randômica

• Retorna valor de Ej para um j sorteado

– Semântica exaustiva• Constrói n execuções. Retorna valor de Ei para

cada 1<i<n

Assuma semântica randômica daqui em diante.

Page 16: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Outra versão com mais detalhes

void genDeposito() { int ag = ch(777,888, 999); int cc = ch(1023, 54, 85); int valor = ch(124.2, 300, 9.99); deposito(ag,cc,valor);}

void genTransferencia() { int ag1 = ch(777,888, 999); int cc1 = ch(1023, 54, 85); int ag2 = ch(777,888, 999); int cc2 = ch(1023, 54, 85); int valor = ch(124.2, 300, 9.99); transferencia(ag1,cc1,ag2,cc2, valor);}

void genOneTest() { /* gerador de casos de teste*/ while(seqLen++ < N) { int op = ch(0,1); switch(op) { 0: genDeposito(); break; 1: genTransferencia(); break; default: throw new RuntimeException(); } }}

Page 17: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Quiz 1

• Este código precisa necessariamente ser usado em conjunto com o sistema?

Page 18: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Quiz 1

• Este código precisa necessariamente ser usado em conjunto com o sistema?– Não. É possível construir testes.

• As linguagens de descrição do modelo e da aplicação não precisam ser a mesma

Page 19: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Onde está o teste?

• Valores de entrada e seqüência de chamadas de depósito e transferência

• (Mais sobre oracle adiante.)

Page 20: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Sequência exemplo (N =3)

deposito(777,1023,124.2);

deposito(888, 54, 300);

transferencia(777,85, 888, 54, 300);

Page 21: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Oracles

• Como saber se o teste passou?– As sequências omitem o oracle

Page 22: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Oracles

void genDeposito() { int ag = ch(777,888, 999); int cc = ch(1023, 54, 85); int valor = ch(124.2, 300, 9.99); int saldo = readSaldo(ag,cc); deposito(ag,cc,valor); Assert.assertEquals(saldo+valor, readSaldo(ag,cc));}

Tipicamente, a construção de oracles é uma atividade manual (parte do modelo)

Page 23: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Pré e Pós condições

• É possível que a intenção seja testar apenas combinações válidas de dados e sequência!

Necessário declarar pré condiçoes para restringir comportamentos do modelo

Page 24: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Pré-condiçõesmap = { // agencia, conta corrente 777 => {1023}, 888 => {54}, 999 => {85}};valores = {124.2, 300, 9.99};void genTransferencia() { int ag1 = ch(777,888, 999); int cc1 = ch(map.get(ag1)); int ag2 = ch(map.keys – {ag1}); int cc2 = ch(map.get(ag2)); int saldo = readSaldo(ag1, cc1); int valor = ch({v < saldo| v \in valores}); transferencia(ag1,cc1,ag2,cc2, valor);}

Page 25: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Pré-condiçõesmap = { // agencia, conta corrente 777 => {1023}, 888 => {54,99}, 999 => {85}};valores = {124.2, 300, 9.99};void genTransferencia() { int ag1 = ch(777,888, 999); int cc1 = ch(map.get(ag1)); int ag2 = ch(map.keys – {ag1}); int cc2 = ch(map.get(ag2)); int saldo = readSaldo(ag1, cc1); int valor = ch({v < saldo| v \in valores}); transferencia(ag1,cc1,ag2,cc2, valor);}

Note que se execução violar uma única pre-condição, o teste é inconclusivo! mesmo se falhar!

Page 26: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Pré-condiçõesmap = { // agencia, conta corrente 777 => {1023}, 888 => {54,99}, 999 => {85}};valores = {124.2, 300, 9.99};void genTransferencia() { int ag1 = ch(777,888, 999); int cc1 = ch(map.get(ag1)); int ag2 = ch(map.keys – {ag1}); int cc2 = ch(map.get(ag2)); int saldo = readSaldo(ag1, cc1); int valor = ch({v < saldo| v \in valores}); transferencia(ag1,cc1,ag2,cc2, valor);}

Modelo é aproximado. Perde comportamentos!

Page 27: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Aproximações

• Sobre-aproximações– Superconjunto dos comp. do sistema real– Podem construir falso-positivos

• viola pre-condições

• Sub-aproximações– Subconjunto dos comp. do sistema real– Podem perder erros do sistema

• Tipicamente, mais eficientes

Page 28: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Opção 3: Modelos em gramática

• Strings de uma linguagem descrita com uma EBNF correspondem a teste

Page 29: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Exemplo

• MODELO := OP+;

• OP := DEP | TRA

• DEP := `deposito(` AG CC VAL `)`

• TRA := `transferencia(` AG CC VAL `)`

• AG := `777` | `888` | `999`

• CC := `1023` | `54` | `85`

• VAL := `124.2` | `300` | `9.99`

Page 30: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Teste baseado em gramática

• Símbolos não terminais podem detalhar geração de dados

• Geno (Lammel e Shulte, 2005) adiciona restrições para restringir o espaço de termos da linguagem (teste)

Page 31: Teste de Software 14: Gera ção de teste baseado em modelos: MBT

Limitações

• Gramática é livre de contexto– Dificuldade para associar conta 1 com

agencia 1

• Não define oracles– Mais usada para encontrar crashes