A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Uma ferramenta para Geração de Mutantes para linguagem C#.

Apresentações semelhantes


Apresentação em tema: "Uma ferramenta para Geração de Mutantes para linguagem C#."— Transcrição da apresentação:

1 Uma ferramenta para Geração de Mutantes para linguagem C#.

2 APRESENTAÇÃO Autores: Orientador: Alexandre Freitag
Fábio Valter Siscate Orientador: Prof. Dr. Flávio Moreira de Oliveira APRESENTAÇÃO

3 Agenda Motivação Fundamentação Análise de Mutantes Mut# Conclusão
Trabalhos Futuros Referências Bibliográficas

4 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. MOTIVAÇÃO Falar sobre a frase do Myers e fazer comentar sobre a importância da qualidade no software, que é através de um processo de teste. Porém questionar sobre a qualidade do teste, como garantir? Uma técnica é a Análise de Mutantes.

5 FUNDAMENTAÇÃO TEÓRICA
Classificar os desvios: Falha - Inconsistências no código-fonte Erro - Resultados esperados inválidos Defeito - Desvio da especificação quanto a regra de negócio Técnicas: 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 Falha – Erros nos código-fonte como uma digitação errada Erro – Resultados esperados inválido, num retorno de método ou classe Defeito – Desvio da especificação, por exemplo retorno inválido de um banco de dados, era para receber Maria e veio joão, pode ser gerado por Erro. TÉCNICA BLACK-BOX, sem acesso ao código-fonte WHITE-BOX, com acesso ao código-fonte NÍVEIS DE TESTE Unitário – teste em classes, método ou trechos de código (WHITE-BOX) Integração – comunicação entre classes por exemplo (WHITE-BOX) Sistema – funcional, com visão do usuário (BLACK-BOX) Aceitação – executado pelo usuário (BLACK-BOX) Localizar após a explicação onde se encontra a Análise de mutantes: FALHA WHITE-BOX TESTE UNITÁRIO

6 FUNDAMENTAÇÃO TEÓRICA
Teste unitário Arquivos de entrada Verificação do resultado Como garantir a qualidade do Teste Unitário? Teste Unitário Método ou Classe FUNDAMENTAÇÃO TEÓRICA Explica sobre teste unitário, Há arquivos de entrada, por exemplo 3, o teste unitário espera daquela classe ou método um resultado esperado, caso resultado da classe é o aguardado pelo teste unitário então pode-se considerar classe testa. Porém, quem garante que não existe falhas no código que o teste unitário não detectou? Como garantir que o teste unitário é realmente eficaz?

7 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 Pequenas Alterações sintáticas no código-fonte original, não causando erros sintáticos, mas sim alteram a semântica do programa. Conseqüentemente, conduzindo o programa a um comportamento incorreto, ou seja, a um defeito. Hipótese do programador competente apresentada por DeMillo, onde assume-se que um programador experientes escrevem programas corretos ou muito próximos do correto, gerando poucas falhas. Desvendar se o teste unitário consegue identificar os códigos mutantes, ou seja, analisando quantos códigos mutantes o teste unitário consegue desvendar é possível realizar uma análise sobre a qualidade do teste unitário.

8 Análise de Mutantes Execução de diversas instâncias da classe no mesmo teste unitário. Execução do teste unitário nos mutantes. Mutantes mortos. M1 M2 M3 M4 M5 M6 Código Fonte Original Gerador de Mutantes Havendo a constatação da diferença de comportamento entre o programa e o mutante, temos que este é reconhecido e se diz que ele é neutralizado, morto. Se no final da execução dos testes ainda existirem mutantes, os testes não foram capazes de distinguir e os mesmos são considerados vivos, fazendo com que se melhorem os testes a serem aplicados.

9 TÉCNICAS DE MUTAÇÃO Mutação Clássica Mutação Orientada a Objetos.
if ( a < b ) a++; else b++; if ( a > b ) As primeiras técnicas de mutação foram as mutações clássicas, que eram implementadas para linguagens estruturas: C, Fotran. Na mutação clássica: o objetivo principal é a substituição de operadores aritméticos, operadores lógicos, substituição de variáveis, de constantes e também substituições de palavras-chaves. Na mutação O.O: os primeiros estudos foram na linguagem Java e C++, posteriormente com C#. Aonde o foco é na orientação a objetos, Herança, Polimorfismo. Sobrecarga. Características Específica de C#. Erros Comuns de Programação. class pai { int x; } class filho extends filho //int x;

10 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 OPERADORES DE MUTAÇÃO CLASSICOS: AOR - Substitui operadores aritméticos (/*-+) ROR - Substitui operadores relacionais ( <> = != ORIENTADO A OBJETOS: IHD – “Deleta” declarações de variáveis, esconde-as comentando OAO – Muda a ordem de argumentos

11 Ferramenta para Geração de
Mut# Ferramenta para Geração de Mutação Clássica para linguagem C#. Vamos falar sobre o nosso trabalho de conclusão propriamente dito.

12 Mut# Mutação Clássica. Desenvolvida no Visual Studio 2005. NUnit.
Mutação Seletiva. MUT# Mutação Clássica – Apesar de ser desenvolvido em C# foi feito somente alterações de mutação clássica. Desenvolvido no Visual Studio – NUnit – para obter os resultados da análise de mutantes Mutação Selevita – Um dos nossos diferenciais sobre mutação em C#

13 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# Operadores de mutação utilizados no nosso programa. Assignment Operator Replacement - É substituído operador de atribuição.

14 Mut# Arquivos de Entrada Escolha do método: Código Original C#.
Arquivo XML. Escolha do método: Análise Sintática (Gerador de Parser). Estrutura de Dados (“Algoritmo Analisador”). MUT# Arquivos de entrada - Arquivo cs original, que é o código-fonte que sofrerá alterações - Arquivo XML que contém a “biblioteca” de operadores de mutação Escolha do método: A análise sintática iria nos auxiliar na leitura do código fonte a na criação da estrutura em que ele seria organizado, pois seria possível salvar o código fonte em objetos “classe”, “métodos”, “variáveis”, “operadores”. Esse modo iria facilitar na procura de candidatos a serem modificados, pois seria de fácil localização. Estrutura de dados seria um algoritmo criado por nós onde seria carregado o código fonte e salvado numa estrutura idealizada por nós diferente da estrutura que o gerador de parser iria utilizar. Intitulamos como “Algoritmo Analisador” O método escolhido foi o segundo, pois havia a existência da curva de aprendizado sobre 1 dos geradores de parsers encontrados, devido ao tempo limitado para a criação e finalizado do trabalho de conclusão decidimos utilizar o “Algoritmo Analisador” pois o aprendizado utilizado já havia sido aprendido no curso, logo não teria impacto no prazo de finalização do trabalho.

15 Mut# Algoritmo Analisador Criar Projeto Ler Arquivo XML
Ler Código-Fonte .cs MUT# Algoritmo Analisador: Criar o projeto Criar os diretórios Faz uma cópia do original Ler arquivo XML É a biblioteca de operadores de mutação Salva biblioteca num objeto Ler Código Fonte .cs Cria um objeto do código original Parser Carrega o objeto “código original” Carrega objeto com os mutantes Realizar uma análise individual de cada linha, procurando os candidatos a mutação Salvar as linhas onde encontra-se o candidatos e quai o operador de mutação que pode ser utilizado Mutação Seletiva É disponibilizado para o usuário quais Operadores de mutação ele poderá utilizar Quando ele clica em um ele pode escolher qual tipo de mutação deseja Só é disponibilizado os operadores de mutação possíveis de serem aplicados Geração de Mutantes Carregar os arquivos Original Linhas dos candidatos Constrói os diretórios Gera cópia e altera o código Geração de Mutantes Mutação Seletiva Parser Carregar os arquivos Construir diretórios Análise Individual Salva as Linhas

16 Mut# Análise dos Resultados:

17 Mut# Conclusão: Limitações: Objetivo atingido. Característica única.
Somente mutantes clássico. Programa não faz verificação sintática. Um grupo de mutação por linha. MUT# Algoritmo Analisador: Criar o projeto Criar os diretórios Faz uma cópia do original Ler arquivo XML É a biblioteca de operadores de mutação Salva biblioteca num objeto Ler Código Fonte .cs Cria um objeto do código original Parser Carrega o objeto “código original” Carrega objeto com os mutantes Realizar uma análise individual de cada linha, procurando os candidatos a mutação Salvar as linhas onde encontra-se o candidatos e quai o operador de mutação que pode ser utilizado Mutação Seletiva É disponibilizado para o usuário quais Operadores de mutação ele poderá utilizar Quando ele clica em um ele pode escolher qual tipo de mutação deseja Só é disponibilizado os operadores de mutação possíveis de serem aplicados Geração de Mutantes Carregar os arquivos Original Linhas dos candidatos Constrói os diretórios Gera cópia e altera o código

18 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.

19 Mut# Referências Bibliográficas:
A. BARTIÉ. Garantia da Qualidade de Software. Editora Campus,Inc, ISBN 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, ISSN 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, ISBN

20 Apresentação do Sistema
Mut# Apresentação do Sistema


Carregar ppt "Uma ferramenta para Geração de Mutantes para linguagem C#."

Apresentações semelhantes


Anúncios Google