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
Download

testescxp3-EFSM