IC-UNICAMP Eliane Martins Testes baseados na especificação - modelos de estado- Criado: abril 2001 Últ. atualiz.: out / 2011 Testes baseados em modelos de estado IC-UNICAMP Eliane Martins Referências R.Binder. Testing OO Systems, 2000. A.P.Mathur. Foundations of Software Testing. Pearson Education Editora, 2008, cap. 3. H.Robinson. “Graph Theory in Model-based Testing”. Obtido em set/20010 em http://www.harryrobinson.net/ http://www.geocities.com/harry_robinson_testing/graph_theory.htm M. Utting, B. Legeard. Practical Model-Based Testing.Morgan Kaufmann Publishers, 2007. C.Nagle. “Test Automation Frameworks”, 2000. Obtido em set/2009 em: http://testpro.com.au/whitepapers/Test-Automation-Frameworks-byCarl-Nagle.pdf Testes baseados em modelos de estado 2 IC-UNICAMP Eliane Martins Tópicos • Motivação • Máquina estendida • Estratégia N+ Testes baseados em modelos de estado 3 IC-UNICAMP Eliane Martins Testes caixa preta Especificação: Requisitos Projeto Independente de notação Partição de equivalência Valores Limite Grafo causa-efeito Tabela de decisão Dependente de notação Baseada em modelo Baseada em linguagem de especificação Testes baseados em modelos de estado 4 IC-UNICAMP Eliane Martins Testes caixa preta Especificação: Requisitos Projeto Independente de notação Partição de equivalência Valores Limite Grafo causa-efeito Tabela de decisão Dependente de notação Baseada em modelo Baseada em linguagem de especificação Testes baseados em modelos de estado 5 IC-UNICAMP Eliane Martins Testes de Transições de Estados - Variações • Nem todo sistema pode ser representado por modelos de estado do tipo clássico: – eventos de entrada têm parâmetros – existem guardas associadas às transições modelo estendido como gerar testes para esse tipo de modelo? Testes baseados em modelos de estado 6 IC-UNICAMP Eliane Martins Exemplo: classe conta Conta -nro_conta -saldo #data_ult_movto +abre() +fecha() +credita() +debita() +consulta() • O usuário pode ficar com saldo negativo: – Suas transações ficam limitadas a consulta e crédito • Conta não movimentada por mais de 5 anos é considerada inativa – Só consultas podem ser realizadas Testes baseados em modelos de estado 7 IC-UNICAMP Eliane Martins Diagrama de estados da classe Conta evento com parâmetro debita(quantia) : [ quantia <= saldo ] consulta( ) credita(quantia) abre( ) Aberta credita(quantia) Ativa com saldo positivo fecha( ) guarda [ data_ult_movto >= 5 ] fecha( ) debita(quantia) : [ quantia > saldo ] credita(quantia) : [ saldo>0 ] fecha( ) Inativa consulta( ) consulta( ) Ativa com saldo negativo [ data_ult_movto >= 5 ] fecha( ) credito(quantia) : [ saldo < 0 ] Testes baseados em modelos de estado 8 IC-UNICAMP Eliane Martins Tabela de transição de estados Eventos e guardas Abre S1 Fecha Credita data_ul saldo< t_mov 0 to >5 Aber ta Ativa (S1) com saldo posit. (S2) Ativa com saldo negat. (S3) Inativa (S4) quantia >saldo X X X S2 F F X F V F S3 F V VTestes baseados em modelos de estado S2 S2 9 IC-UNICAMP Eliane Martins Eventos e guardas Aber ta Ativa (S1) com saldo posit. (S2) Ativa com saldo negat. (S3) data_ul saldo< t_movt 0 o >5 quantia >saldo F F F S2 F F V S3 F V V S3 F V F S2 Consul F ta F X F V X V X X Debita Inativa (S4) S2 Testes baseados em modelos de estado S3 S4 10 IC-UNICAMP Eliane Martins Geração de testes • Existem diversas abordagens: – – – – – – Uso de técnicas para a parte de controle somente Descompactar: MFEE MFE Testes baseados em fluxo de dados Testes aleatórios Testes baseados em execução simbólica ... Testes baseados em modelos de estado IC-UNICAMP Eliane Martins Geração de testes • Existem diversas abordagens: – – – – – – Uso de técnicas para a parte de controle somente Descompactar: MFEE MFE Gera caminhos usando técnicas para Testes •baseados em fluxo de dados MFE Testes aleatórios • Gera dados que satisfaçam às condições Testes baseados em execução simbólica de guarda no caminho ... Criação de caminhos infactíveis Testes baseados em modelos de estado IC-UNICAMP Eliane Martins Exemplo de caminho infactível extent add IntSet conjunto vazio ~ IntSet add is_empty extent is_member is_empty clear conjunto não vazio [size = = 1] remove [1< size < M] remove Testes baseados em modelos de estado IC-UNICAMP Eliane Martins Geração de testes • Existem diversas abordagens: – – – – – – Uso de técnicas para a parte de controle somente Descompactar: MFEE MFE Testes baseados em fluxo de dados • se cada variável tem um número finito de valores Testes aleatórios possíveis (ex.: variáveis do tipo boolean) nº Testes baseados em execução combinações: variávelsimbólica X estado é finito MFEE é uma representação compacta de uma ... MFE • técnicas para MFE são aplicáveis explosão de estados Testes baseados em modelos de estado IC-UNICAMP Eliane Martins Exemplo extent add IntSet conjunto vazio ~ IntSet add is_empty extent is_member is_empty clear conjunto não vazio [size = = 1] remove Supor que M=2 [1< size < M] remove Testes baseados em modelos de estado IC-UNICAMP Eliane Martins Exemplo extent IntSet ~ IntSet Se M >> 2, quantos estados? Nem todos os predicados podem ser tratados dessa forma add conjunto vazio: size=0 is_empty add remove clear conjunto vazio: size=1 remove clear Testes baseados em modelos de estado add is_empty extent is_member conjunto nãovazio: size=2 IC-UNICAMP Eliane Martins Uma outra técnica de geração dos testes • Pode-se usar o método T ou uma variante: cobertura de circuitos (round-trip path): – caminho simples: seqüência de transições t1-t2-t3 ... contendo somente uma repetição de cada ciclo (loop) – circuito: caminho começando e terminando no mesmo estado – critério: cobertura de circuitos começando no estado inicial e de caminhos simples começando no estado inicial e terminando em um estado final • Usa árvore de alcançabilidade (ou de transições) para facilitar a identificação dos casos de teste Testes baseados em modelos de estado 17 IC-UNICAMP Eliane Martins Árvore de Alcançabilidade • A árvore de alcançabilidade é construída a partir do diagrama de estados: O estado inicial é a raiz da árvore. Examine cada estado não-terminal e cada transição que sai desse estado. No mínimo uma nova aresta é criada para cada transição. Essa aresta liga o estado atual ao próximo estado: • se a transição não tem guarda, crie uma nova aresta; • se a transição tem guarda composta de um único predicado ou de expressão lógica contendo unicamente operadores E, crie uma nova aresta; – Ex.: [x==0] só cria 1 aresta – [a<b] && [c<d] [Binder00, 7.4] Testes baseados em modelos de estado 18 IC-UNICAMP Eliane Martins Árvore de alcançabilidade Examine cada estado não-terminal e cada transição que sai desse estado. ..: • se a transição tem guarda composta de expressão lógica com operadores OU, crie uma nova aresta para cada combinação de valores para os quais a guarda é verdadeira. x!=1 e a b – Ex.: [x !=1} || [a>b] 2 arestas V: x=1 e a>b • Se a guarda especifica um laço, marque a transição com um *. Para cada nova aresta e cada novo nó adicionado no passo 2: • anote o evento, bem como a condição de guarda na nova aresta • se o novo nó corresponde a um estado já representado por um outro nó da árvore ou a um estado final, marque esse nó como terminal (nenhuma aresta será criada a partir desse nó) Repita os passos e até que todos os nós tenham sido marcados como terminais. [Binder00, 7.4] Testes baseados em modelos de estado 19 IC-UNICAMP Eliane Martins Árvore de alcançabilidade da classe Conta 1- abre() 9- credita() [saldo>0] 2- credita() 10-credita()[saldo<0] 3- fecha() 11- consulta() 4- debita() [quantia<=saldo] 12- [data_ult_movto>=5] 5- consulta() 13- fecha() 6- credita() 14- consulta() 7- debita()[quantia>saldo] 15- fecha() S2 2 S2 3 S2 5 6 S2 *10 9 1 S1 8- [data_ult_movto>=5] *4 11 S3 S3 S2 S3 9 8 7 12 S4 S4 14 13 Testes baseados em modelos de estado S4 15 20 IC-UNICAMP Eliane Martins Derivando cenários de teste • A partir da árvore: – Caminho começando na raiz e chegando em nó terminal (folha) • Testes sempre começam com nova instância do objeto • Após aplicar a seqüência de eventos correspondente ao caminho na árvore: – Verificar a saída esperada – Determinar se o estado atingido é o esperado Testes baseados em modelos de estado 21 IC-UNICAMP Eliane Martins Exemplo de um caminho de teste Cenário para o caminho de teste gerado: 1.Abre( ) 2. Credita(quantia) 3.Consulta() 4. Verifica se saldo mostrado = quantia 5. Verifica se está no estado 2. 6. termina 1 S 1 2 3 S 2 *4 caminho de teste S 2 5 6 S 2 *10 9 S 2 S 3 S 3 S 2 12 11 S 3 S 4 14 13 S 4 9 8 7 Testes baseados em modelos de estado S 4 15 22 IC-UNICAMP Eliane Martins Derivando casos de teste • A partir de um caminho de teste: – Determinar valores de entrada para os eventos vários casos de teste para um mesmo cenário – Se há condições de guarda gerar dados que satisfaçam às condições existentes no caminho – Existem dados que satisfaçam ao caminho? Testes baseados em modelos de estado 23 IC-UNICAMP Eliane Martins Geração de dados • Se um caminho de teste exercita transições com guardas encontrar dados que satisfaçam às guardas – O que fazer quando a saída de uma transição é usada na guarda de uma outra transição ? – O que fazer quando a guarda depende de variáveis de contexto ? Testes baseados em modelos de estado 24 IC-UNICAMP Eliane Martins Y P(nro); nro = nro + 1; X(nb) nro = 0; a W [nro == nb] b W [nro < nb] Q; c R(nb); Qual o valor de nb que satisfaz a condição de caminho? Y X(nb) nro = 0; a b W [nro < nb] P(nro); nro = nro + 1; W [nro == nb] R(nb); Testes baseados em modelos de estado Q; c IC-UNICAMP Eliane Martins Qual o valor de nb que satisfaz às condições dos caminhos abaixo? Y X(nb) nro = 0; a b W [nro < nb] W [nro == nb] Q; c R(nb); Y X(nb) nro = 0; a b W [nro < nb] P(nro); nro = nro + 1; P(nro); nro = nro + 1; W [nro == nb] R(nb); Testes baseados em modelos de estado Q; c IC-UNICAMP Eliane Martins Ativação de caminhos • Processo de determinar valores de parâmetros que façam com que um caminho seja executado pela implementação Problema indecidível: não existe algoritmo que implemente uma solução para todos os casos ! uso de heurísticas para resolver o problema Testes baseados em modelos de estado 27 IC-UNICAMP Eliane Martins Diretrizes para ativação de caminhos Selecionar valores usando uma das técnicas independentes de modelo (classes de equivalência, valores-limites, grafo causa-efeito) Verificar se todos os caminhos requeridos foram cobertos. Se falta algum caminho, tente encontrar um caso de teste que cubra parte desse caminho. Identifique as transições críticas, i.e, transições para as quais o caminho pode divergir do caminho de teste escolhido Ajuste os parâmetros de forma a passar por essa transição. Prossiga até chegar ao final do caminho. [Binder00, 10.2.3] Testes baseados em modelos de estado 28 IC-UNICAMP Eliane Martins Exemplo de transição crítica Y X(nb) nro = 0; a b W [nro < nb] P(nro); nro = nro + 1; W [nro == nb] Q; c R(nb); Caminho de teste transição crítica Testes baseados em modelos de estado IC-UNICAMP Eliane Martins Derivando casos de teste a partir do cenário Cenário : 1.Abre( ) 2. Credita(quantia) 3.Debita(quantia) [quantia > saldo] 4.Fecha( ) 1+ casos de teste Entradas ID Evento Saídas Esperadas Condição CT1 Abre Credita (100) Debita (150) quantia>saldo Ação Estado xxxx S1 Xxxx S2 Xxx S3 Fecha … Testes baseados em modelos de estado 30 IC-UNICAMP Eliane Martins Diretrizes para ativação de caminhos Se nenhum caso de teste serviu, liste os predicados do caminho que falta. Comece pela última transição com guardas no caminho. Tente achar valores que satisfaçam essas guardas. Repita essa análise, ajustando os valores de entrada para atender às guardas das demais transições até atingir a primeira transição do caminho. (pode-se também começar pela primeira transição) No processo pode-se descobrir caminhos não-executáveis ! falha no modelo (será?) [Binder00, 10.2.3] Testes baseados em modelos de estado 31 IC-UNICAMP Eliane Martins Comportamento implícito • Os métodos anteriores só testam a conformidade com relação ao comportamento explícito descrito pelo modelo de estados • Se o modelo não é completo – as transições ausentes podem não ser tratadas corretamente pela implementação • caminhos furtivos • alçapões • ... Testes baseados em modelos de estado 32 IC-UNICAMP Eliane Martins Testes de caminhos furtivos (sneak path) • Para cada estado: – aplicar um evento ilegal (não especificado para o estado) • Se esse evento puder ser produzido pelo ambiente em que reside a implementação (uso de stubs?) – determinar se a resposta obtida está de acordo com o esperado – determinar se o estado final é válido: • consta na especificação • não consta na especificação mas é aceitável [Binder00, 7] Testes baseados em modelos de estado 33 IC-UNICAMP Eliane Martins Exemplo – testes para IntSet extent • Cobertura de estados – CT1: IntSet • add • clear • ~IntSet • Cobertura de transições – CT1: IntSet • add • clear • ~IntSet – CT2: IntSet • extent • is_empty • add • add • remove • clear • ~IntSet – ... add IntSet ~ IntSet conjunto vazio add is_empty extent is_member is_empty clear [size = = 1] remove Testes baseados em modelos de estado conjunto não vazio [size > 1] remove 34 IC-UNICAMP Eliane Martins Estratégia de teste N+ • Estratégia proposta por R.Binder. Contém os seguintes passos: 1. 2. 3. 4. Desenvolver o modelo de estados e a matriz de transições. Construir árvore de alcançabilidade Criar casos de testes: caminhos da raiz até uma folha Criar testes que cubram caminhos furtivos – 5. Para modelos incompletos: testes que exercitem eventos inoportunos Determinar condições para ativação das transições do caminho (condições de teste) – Identificar as condições para satisfazer às guardas das transições dos caminhos percorridos Testes baseados em modelos de estado 35 Estado destino / Resposta Conj Vazio Conj não Vazio extent Conj Vazio Conj não Vazio is empty Conj Vazio Conj não Vazio add Conj não Vazio Conj não Vazio IC-UNICAMP Evento Guarda IntSet Eliane Martins Conj Vazio clear Conj Vazio is member Conj não Vazio remove size > 1 NI V F ~IntSet Conj não Vazio Conj Vazio Conj Vazio Testes baseados em modelos de estado 36 eventos inoportunos? IC-UNICAMP Eliane Martins Respostas para eventos inoportunos • Existem várias possibilidades para completar a tabela. R.Binder propõe o uso dos seguintes códigos de respostas possíveis: – evento impossível – 1 evento inoportuno é colocado em fila para avaliação ulterior e ignorado – 2 nenhuma ação ou mudança de estado; simplesmente ignore – 3 retorne um código de erro diferente de zero – 4 lançar exceção: IllegalEventException – 5 desabilita a fonte que criou o evento e ignore – 6 término anormal dos serviços; aborta o processo Testes baseados em modelos de estado 37 Estado destino / Resposta Conj Vazio Conj não Vazio Conj Vazio 6 6 Extent Conj Vazio Conj não Vazio is empty Conj Vazio Conj não Vazio add Conj não Vazio Conj não Vazio clear 4 Conj Vazio IC-UNICAMP Evento Guarda IntSet is member remove Eliane Martins Conj não Vazio size > 1 NI V F ~IntSet Conj não Vazio Conj Vazio Conj Vazio Testes baseados em modelos de estado 38 completar ... IC-UNICAMP Eliane Martins Verificação do estado destino • Testes de comportamento explícito ou implícito exigem que estado destino seja válido. Como determinar isso? – Implementar método que reporte o estado – Repetir os testes e comparar se as saídas produzidas são as mesmas. Se não forem, pode ser devido a existência de estado inválido – Obter seqüências de assinatura de estados: • esforço extra para determinar tais seqüências • aumento dos casos de teste • não garante que todos os estados inválidos serão detectados Testes baseados em modelos de estado 39 IC-UNICAMP Eliane Martins Outros modelos • • • • • Máquinas indeterministas Máquinas comunicantes Máquinas para tempo real Statecharts … Testes baseados em modelos de estado 40 IC-UNICAMP Eliane Martins Sumário • Testes caixa preta são baseados na especificação do sistema, ignorando seu código fonte • Partições de equivalência são úteis para testar entradas isoladamente • Análise de valores-limite testa entradas isoladamente, nos limites, sendo portanto indispensáveis • Grafo causa-efeito/tabela de decisões são úteis para testar combinações de entradas • Máquinas de estado são úteis para testar seqüências válidas de entradas. Devem ser verificadas. • Abordagem recomendada: combinar técnicas. Testes baseados em modelos de estado 41 IC-UNICAMP Eliane Martins Exercícios • Gere casos de testes para os problemas a seguir, considerando os critérios: – Cobertura de estados – Cobertura de transições Testes baseados em modelos de estado IC-UNICAMP Eliane Martins Exercício 1 Especifique o comando “login” usando modelo de estados. Os requisitos funcionais para esse comando são dados a seguir: – o sistema solicita o nome do usuário (user name) – se o nome não é reconhecido pelo sistema, este solicita ao usuário que o forneça novamente, até que um nome válido seja fornecido – o sistema solicita a senha – se a senha é incorreta, o usuário tem uma chance a mais para fornece-la. Se ambas as tentativas falharem, o usuário deve recomeçar todo o processo – se a senha é válida, o sistema solicita o nível de segurança da sessão a ser iniciada – se o nível de segurança fornecido for maior que o nível de segurança permitido para o usuário, o sistema emite um aviso e termina a sessão. Senão, a sessão é iniciada. [Alagar e Periyasamy 98] Testes baseados em modelos de estado 43 IC-UNICAMP Eliane Martins Exemplo extent add IntSet conjunto vazio ~ IntSet add is_empty extent is_member is_empty clear conjunto não vazio [size = = 1] remove Supor que M=2 [1< size < M] remove Testes baseados em modelos de estado