MUT#
Uma ferramenta para Geração de Mutantes para
linguagem C#.
APRESENTAÇÃO
Autores:
Alexandre Freitag
Fábio Valter Siscate
Orientador:
Prof. Dr. Flávio Moreira de Oliveira
AGENDA
Motivação
Fundamentação Teórica
Análise de Mutantes
Mut#
Conclusão
Trabalhos Futuros
Referências Bibliográficas
MOTIVAÇÃO
"O custo de correção de defeitos tende a aumentar
quanto mais tarde o defeito for encontrado, numa
proporção de 10x."
Glenford Myers em 1979
Qualidade no software é importante.
Processo de teste é importante.
E quem garante a qualidade do teste?
Uma técnica é a Análise de Mutantes.
FUNDAMENTAÇÃO TEÓRICA
Classificar os desvios:
Técnicas:
Falha - Inconsistências no código-fonte
Erro – Estados interno inconsistente
Defeito - Desvio da especificação quanto a regra de negócio
Funcional (Black-box)
Estrutural (White-box)
Níveis de teste:
Teste Unitário: testa a classe, método ou trechos menores
do código
Teste de Integração: testa interface entre as classes
Teste de Sistema: funcional, com visão do usuário
Teste de Aceitação: executado pelo usuário
FUNDAMENTAÇÃO TEÓRICA
Teste unitário
Arquivos de entrada
Verificação do resultado
Classe
Driver
Método ou
Classe
Como garantir a qualidade do Teste Unitário?
ANÁLISE DE MUTANTES
Criada por DeMillo no final da década de 70.
Pequenas alterações sintáticas no código fonte
original.
Objetivo: Desvendar se o teste unitário consegue
identificar os códigos mutantes.
ANÁLISE DE MUTANTES
Execução de diversas instâncias da classe no mesmo
teste unitário.
Código
Fonte
Original
Gerador de
Mutantes
M1
M4
M2
M5
M3
M6
Execução do teste unitário nos mutantes.
Mutantes mortos.
Classe
Driver
TÉCNICAS DE MUTAÇÃO
Mutação Clássica
if ( a < b )
a++;
else
b++;
if ( a > b )
a++;
else
b++;
Mutação Orientada a Objetos.
class pai
{
int x;
}
class filho extends filho
{
int x;
}
class pai
{
int x;
}
class filho extends filho
{
//int x;
}
OPERADORES DE MUTAÇÃO
Regras definidas para alteração do código.
Por exemplo:
OAR: Arithmetic Operator Replacement;
ROR: Relational Operator Replacement;
IHD: Hiding Variable Deletion;
OAO: Argument Order Change
MUT#
Ferramenta para Geração de
Mutação Clássica para
linguagem C#.
MUT#
Mutação Clássica.
Desenvolvida no Visual Studio 2005.
Mutação Seletiva.
MUT#
Operadores de Mutação Utilizados
Arithmetic Operator Replacement
AOR
+ ; ++ ; =+
- ; -- ; =-
Arithmetic Operator Insertion
AOI
-;+
-- ; ++
Arithmetic Operator Deletion
AOD
-- ; ++
-;+
Relational Operator Replacement
ROR
> ; <= ; ==
< ; >= ; !=
Assignment Operator
Replacement
ASR
-= ; +=
+= ; -=
Conditional Operator
Replacement
COR
|| ; &&
&& ; ||
MUT#
Arquivos de Entrada
Código Original C#.
Arquivo XML.
Escolha do método:
Análise Sintática (Gerador de Parser).
Estrutura de Dados (“Algoritmo Analisador”).
MUT#
Algoritmo Analisador
Criar Projeto
Ler Arquivo
XML
Ler CódigoFonte .cs
Geração de
Mutantes
Mutação
Seletiva
Parser
Carregar os arquivos
Construir diretórios
Análise Individual
Salva as Linhas
MUT#
Análise dos Resultados:
MUT#
Conclusão:
Objetivo atingido.
Característica única.
Limitações:
Somente mutação clássica.
Programa não faz verificação sintática.
Mesmo operador de mesmo grupo em uma linha.
MUT#
Trabalhos Futuros:
Integração com NUnit.
Mutação orientada a objeto.
Utilização do gerador de parser.
Expansão da quantidade de operadores de mutação.
MUT#
Referências Bibliográficas:
A. BARTIÉ. Garantia da Qualidade de Software. Editora Campus,Inc, 2002. ISBN
8535211241
R. A. DeMillo, R. J. Lipton, and F. G. Sayward. Hints on test data selection: Help
for the practicing programmer. Computer, 11(4):34–41, 1978. ISSN 0018-9162.
R. A. DeMillo, R. J. Lipton, and F. G. Sayward. Program mutation: A new
approach to program testing. Infotech state of the art report, 2:107–128, 1979.
Glenford J. Myers. Art of Software Testing. John Wiley & Sons, Inc., New York,
NY, USA, 1979. ISBN 0471043281.
MUT#
Apresentação do Sistema