Validação, Verificação e Testes
Testes de Mutação com o plug-in MuClipse
De que se trata o artigo:
Apresentação dos principais conceitos sobre testes de mutação e demonstração do funcionamento da técnica utilizando um plug-in para Eclipse chamado MuClipse.
Para que serve:
Além de testar o software, também pode ser considerada uma técnica para auxiliar no processo de melhoria dos casos de testes para torná-los mais eficientes.
Em que situação o tema é útil:
Testes de mutação podem ser utilizados como técnica para melhorar ou afirmar a qualidade dos casos de testes.
Testes de Mutação com o Plug-in MuClipse – Resumo DevMan:
A técnica de teste de mutação é divida em quatro etapas. Primeiro, operadores de mutação são utilizados sobre o programa original realizando pequenas alterações sobre esse programa e gerando variações, ou seja, mutantes. Depois disto, o programa original é testado e deve ser aprovado pelos casos de testes. Após a execução do programa original, os mutantes são executados com o caso de teste e, se forem reprovados pelo caso de teste são considerados mortos. Caso algum mutante não seja reprovado, esse mutante é considerado vivo e precisa ser analisado. Para os mutantes vivos pode-se considerar que este mutante é equivalente ao programa original ou que os casos de testes não são bons o suficiente para testar o programa. Neste último caso, os casos de testes devem ser alterados e, com isso, se tornam cada vez mais eficientes.
Introdução
O desenvolvimento de sistemas não é uma tarefa simples e, por este motivo, precisa que artifícios sejam utilizados para diminuir os defeitos que podem ser introduzidos nesse processo.
Teste de software contribui para a produção de um produto final de maior qualidade e é um processo bastante aceito e difundido atualmente. Porém, uma das questões mais complexas que norteia os testes de software é como garantir que os casos de testes gerados são eficientes, ou seja, garantir que os casos de testes encontrem a maior quantidade de defeitos possíveis.
Dentre outras técnicas que podem ser utilizadas para se testar o software, ou melhorar os casos de testes, pode-se destacar o Teste de Mutação.
Este artigo tem como finalidade principal demonstrar a utilização de um plug-in desenvolvido para se aplicar testes de mutação chamado MuClipse, além de explicar os principais conceitos relacionados a este tipo de teste.
Testes de Mutação
Por mais simples que um software possa ser, os caminhos de execução possíveis na sua utilização podem ser muito grandes, com isto é praticamente impossível testar um sistema por completo e afirmar que o sistema não contém defeitos.
Por outro lado, os tipos de problemas que podem ser encontrados em um software podem ser finitos. É nesta premissa que os testes de mutação se embasam.
Basicamente, testes de mutação propõem a criação de variações de um programa anteriormente desenvolvido, ou seja, mutantes, posteriormente à construção de casos de testes com a finalidade de provar que as variações do programa original não estão corretas. Assim, por eliminação, pode-se constatar que o programa original está correto.
O primeiro passo para a execução dos testes de mutação é a criação dos mutantes que são criados executando uma série de operadores chamados operadores de mutação. Esses operadores alteram partes do programa original, como, por exemplo, trocar um sinal de “>” por “<”, e assim formar os mutantes.
O segundo passo que deve ser feito é a execução dos casos de testes sobre o programa original. Os casos de testes devem aprovar o programa original concluindo-se assim que ele está correto com base nos casos de testes executados.
No próximo passo, os mutantes gerados devem ser executados com os mesmos casos de testes que o programa original foi executado. Caso algum caso de teste falhe significa que são abrangentes o suficiente para demonstrarem a diferença entre o mutante e o programa original. Neste caso, o mutante que fez com que o caso de teste falhasse está morto e, por conseqüência, é descartado.
Pode acontecer de algum mutante sobreviver aos testes. Neste caso, podem ser consideradas duas situações: 1) Caso de testes não é bom o suficiente, pois não identificou a modificação no mutante; 2) Equivalência entre o programa original e o mutante.
O último passo da técnica é a análise dos mutantes que sobreviveram. Esse passo exige uma maior intervenção humana para decidir se o mutante sobreviveu porque os casos de testes não são abrangentes o suficiente e assim criar mais casos de testes, ou modificar os existentes. Ou ainda se o mutante é equivalente ao programa original e com isto descartar o mutante. Mutantes ainda são descartados quando gerarem situações impossíveis de serem executadas, como uma condição que nunca se torna verdadeira ou um laço infinito.
Neste último passo, é possível perceber claramente como os testes de mutação ajudam a melhorar os casos de testes caso algum mutante não seja morto.
Alguns passos como, por exemplo, a geração dos mutantes e execução dos mutantes com os casos de testes, são tarefas repetitivas e praticamente inviáveis sem apoio de uma ferramenta para automatizar essas tarefas. Neste artigo será exposto um exemplo prático da utilização de testes de mutação utilizando o plug-in MuClipse versão 1.2 instalado no Eclipse juntamente com o framework de testes JUnit 4.0.
Estudo de Caso
O MuClipse é um plug-in para o IDE (Ambiente de Desenvolvimento Integrado) Eclipse que tem por finalidade auxiliar no processo de execução de testes de mutação em programas desenvolvidos
Será criado um projeto chamado Aprovacao que conterá uma classe Aluno com os atributos nota1, nota2, notaFinal, frequencia, os métodos gets e sets desses atributos e um método chamado calcularAprovacao. Também será criado um caso de teste chamado TestarAprovacao que tem por finalidade executar o método calcularAprovacao da classe Aluno.
A instalação do MuClipse é bastante simples, basta abrir o Eclipse e acessar o menu Help / Software Updates..., clicar sobre a aba Available Software e depois sobre o botão Add Site. Neste momento uma janela é exibida onde deve ser digitado http://muclipse.sourceforge.net/ no campo Location e clicar sobre o botão Ok. Depois disto, deve-se marcar o endereço adicionado anteriormente, como pode ser visto na Figura 1, e clicar sobre o botão Install.
Figura 1 ...