Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouKaíque Caetano Alterado mais de 9 anos atrás
1
Teste de Software 14: Geração de teste baseado em modelos: MBT
Marcelo d’Amorim
2
MBT (1) O que é um modelo? O que é MBT?
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
3
MBT (2) Vantagens: Desvantagens:
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
4
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
5
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
6
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 SINCRONIZAR ISTO COM O SLIDE MODELO DE USO E DE SISTEMA Geração do teste faz uso destas alternativas!
7
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
8
Opção 1: Máquina de estados
deposito transferencia num. agencia num. c.c. num. agencia origem num. c.c. origem num. cc valor Deposito: informar numero da agencia e conta, e valor. Transferencia: informar numero da agencia e conta 1, e agencia e conta 2, e valor. Duas fontes de não determinismo: sequência (depósito/transferência) e dados
9
Quiz O que representa cada nó do grafo?
10
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.
11
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
12
Comparação de estado MODELO SISTEMA executa operação compara (α)
13
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
14
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
15
Assuma semântica randômica daqui em diante.
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.
16
Outra versão com mais detalhes
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(); } 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 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); }
17
Quiz 1 Este código precisa necessariamente ser usado em conjunto com o sistema?
18
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
19
Onde está o teste? Valores de entrada e seqüência de chamadas de depósito e transferência (Mais sobre oracle adiante.)
20
Sequência exemplo (N =3)
deposito(777,1023,124.2); deposito(888, 54, 300); transferencia(777,85, 888, 54, 300);
21
Oracles Como saber se o teste passou? As sequências omitem o oracle
22
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)
23
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
24
Pré-condições map = { // 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); }
25
Pré-condições map = { // 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!
26
Pré-condições Modelo é aproximado. Perde comportamentos!
map = { // 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!
27
Aproximações Sobre-aproximações Sub-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
28
Opção 3: Modelos em gramática
Strings de uma linguagem descrita com uma EBNF correspondem a teste
29
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`
30
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)
31
Limitações Gramática é livre de contexto Não define oracles
Dificuldade para associar conta 1 com agencia 1 Não define oracles Mais usada para encontrar crashes
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.