Testes de Mutação

Prof. Dr. Márcio Ribeiro

Resumo:

Teste de Mutação baseia-se na ideia de teste baseado em falhas. Usando defeitos artificiais, inseridos propositalmente (e automaticamente), podemos avaliar a suíte de testes do nosso sistema e guiar o processo de geração dos testes. Em resumo, um mutante é criado copiando o programa original e inserindo uma pequena variação no código (possível falha). Por exemplo, trocar o "<=" por ">" em um comando if. Após a transformação, executamos a suíte de teste sobre este mutante e verificamos se pelo menos um teste falha, o que significa que nosso teste está prevenido contra esse possível erro. Caso nenhum teste falhe, então o desenvolvedor deve criar um novo teste que previna o erro inserido. Todo este processo é feito automaticamente, tendo o desenvolvedor apenas que selecionar o arquivo que será mutado e quais operadores de mutação ele deseja aplicar. Teste de Mutação é uma poderosa técnica de teste. Contudo, sua efetividade plena, principalmente em sistemas grandes e complexos, é conhecidamente restritiva. Os dois principais motivos para isso são: o grande número de mutantes gerados e a presença dos mutantes "inúteis" (duplicados ou equivalentes). Um mutante é equivalente quando ele possui o mesmo comportamento do programa original. Assim sendo, sua criação é inútil, pois a suíte de testes se comportará da mesma maneira em relação ao programa original. Quando um mutante tem o mesmo comportamento de outro mutante, diz-se que eles são duplicados e um deles é inútil. Este projeto tem por objetivo criar técnicas e ferramentas para detectar e evitar a geração de mutantes inúteis (duplicados ou equivalentes). Pretende-se estender ferramentas como o MuJava, de forma que esta gere menos mutantes inúteis. Para trazer evidências dos ganhos deste projeto, estudos empíricos (utilizando técnicas de engenharia de software empírica) são esperados.