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
 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 - Resultados esperados inválidos
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

Teste Unitário
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.
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.

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.

NUnit.

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 mutantes clássico.
 Programa não faz verificação sintática.
 Um grupo de mutação por 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 mutantes.

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
Download

ANÁLISE DE MUTANTES