sábado, 31 de agosto de 2013

Notas de Teste de Software - Parte 3 Teste de Mutação

O teste de mutação é uma técnica baseada em defeitos, cuja vantagem diante das técnicas de teste funcional e estrutural é a possibilidade de se estabelecer uma relação direta entre um subdomínio e a possibilidade de se encontrar defeitos. Apesar dessa relação direta, ainda podem existir casos de testes correspondentes que levem ou não o programa a falhar, como consequência, um defeito pode não ser revelado. Com o uso da técnica de teste baseada em defeitos utiliza-se os defeitos típicos do processo de desenvolvimento cometidos por desenvolvedores, onde o objetivo é injetar defeitos e verificar se os casos de teste são capazes de descobrí-los. Uma das abordagens é a aplicação do teste de mutação. 

O teste de mutação requer a criação de diversos programas (mutantes) derivados a partir de um programa original relativamente correto. Segundo Howden, a definição de correção pode ser dada por: "Um programa P é correto em relação a uma função F se P computa F"

Para provar a correção é criado então um conjunto de casos de testes confiável, sendo: "Um conjunto de teste T confiável para um programa P e uma função F, dada a existência coincidente de P e F em T e se P computa F, caso contrário, deve haver um ponto t tal que F(t) seja ≠ P(t)".

Outra definição pragmática é derivar programas alternativos a partir de P formando um conjunto M={M1, M2, M3...Mn} denominados mutantes. Os programas mutantes contém defeitos introduzidos através de pequenas alterações (operadores de mutação) para serem testados. O testador verifica os programas mutantes em relação a execução dos testes, eliminado-os progressivamente ao detectar o comportamento incorreto, o que é o esperado.  

Em geral, os passos para execução podem ser dividos em:
  • Execução de um conjunto de testes T no programa original P, se ocorrer uma falha o teste termina.
  • São gerados os programas mutantes com operadores de mutação a partir de um P correto.
  • Os mutantes são executados com o mesmo conjunto de testes T.
  • Através de uma análise, é possível quantificar os mutantes vivos, mortos, equivalentes e reveladores de defeito.

Os mutantes mortos possuem os resultados dos testes diferentes de P e os vivos devem ser equivalentes a P, se não forem, podem ajudar a expor a fraqueza dos casos de teste. Se para algum caso de teste t tal que P(t) ≠ M(t), pode-se concluir que P(t) não está de acordo com a especificação, neste caso a presença de um defeito pode ter sido revelada. Uma forma de medir a adequação de T em relação ao teste de mutação é o escore de mutação:


DM(P,T) -  Número de mutantes mortos por T; M(P) – Total de mutantes gerados; EM(P) – Número de mutantes equivalentes a P;

Uma desvantagem da análise de mutantes é que são gerados muitos mutantes. Também, estes precisam ser compilados e executados, assim há também a necessidade de se conhecer o código-fonte do programa. Apesar das desvantagens, é um dos critérios mais eficazes para encontrar defeitos.

0 comments:

Postar um comentário

Inscreva-se

Creative Commons 3.0. Tecnologia do Blogger.

Teste a Velocidade da Internet

Siga-me

Curta