A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Teste de Software 14: Geração de teste baseado em modelos: MBT"— Transcrição da apresentação:

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


Carregar ppt "Teste de Software 14: Geração de teste baseado em modelos: MBT"

Apresentações semelhantes


Anúncios Google