Teste de máquinas de estado



Quando em um software a inserção das mesmas entradas em distintos momentos não produz saídas idênticas, diz-se que o software tem um comportamento baseado em estados. A notação de máquina de estados para se definir o comportamento possui dois elementos: estado e transição. Os dois modelos mais conhecidos de máquina de estados são Mealy e Moore. Na máquina de Mealy a transição de estados está associada a eventos e produzem uma ação. Na máquina de Moore a transição também é dada por um evento, mas as ações estão associadas aos estados. Cada modelo pode ser mais adequado em determinados tipos de funcionamento do software.

As máquinas de estado podem ser utilizadas como requisitos, na forma de diagrama ou na forma tabular, listando os estados nas colunas, os eventos nas linhas e as ações e próximos estados nos cruzamentos de linha e coluna. Ainda é possível que elas sejam descritas em forma de descrição textual, o que torna mais indireta a visualização do comportamento da máquina de estados, tratando-se apenas de uma forma diferente de representá-la.

Em todos os casos, existe a necessidade de se estabelecer um critério de teste para este tipo tão comum de comportamento. Os testes se baseiam na própria representação da máquina de estado como requisito e visam encontrar defeitos na sua implementação. Para tanto é necessário que os casos de teste cubram toda a máquina, exercitando todos os estados e todas as transições e observando a resposta esperada em cada transição ou estado (dependendo se o modelo pe Mealy ou Moore).

As transições são desencadeadas por eventos, que podem ser lógicas combinadas de condições, onde se aplicam os conceitos de cobertura estrutural já explicados.

O que diferenciam os diversos métodos de teste de máquina de estado existentes é a maneira como que os estados e transições serão percorridos, ou seja, a sequência de transições. Existem métodos que visam a melhor eficiência para cobrir todo o comportamento com o menor número de transições.

Durante os testes, é possível encontrar defeitos como estados inalcançáveis e transições erradas. Estes problemas podem indicar problema, seja na especificação seja na implementação, e devem ser corrigidos.

Comentários