Mutação de Interface Interface Mutation: An Approach for Integration Testing Marcio E. Delamaro José C. Maldonado Aditya P. Mathur.

Slides:



Advertisements
Apresentações semelhantes
Python: Funções Claudio Esperança.
Advertisements

Pseudo-código: sintaxe
gerador de código intermediário
Introdução Gdes. bancos de dados: Concorrência: Transação:
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Universidade Federal de São Carlos Introdução à Linguagem C Comandos.
Algoritmos e Estrutura de Dados I
Conteúdo: - Modularização.
Mutação Orientada a Objeto para Assegurar a Qualidade de Testes Baseado no Artigo: Object-Oriented Mutation to Asses the Quality of Tests Anna Derezinska.
15 Introdução à Manipulação de Planilhas Eletrônicas Planilhas Eletrônicas são tabelas usadas para comunicar informações de forma clara, precisa e sucinta.
Computação Evolutiva: Programação Genética
Porto Alegre, 5 de Outubro de 2009
Reliability verification of Digital Systems Design based on mutation Analysis Samuel S. Marczak.
Estruturas de Controle
Linguagem C Estruturas de Controle de Fluxos
Análise Léxica Supondo o trecho de programa abaixo:
Complexidade de Algoritmos
ESTRUTURA DE COMUNICAÇÃO DE DADOS
Técnicas de Teste de Software
Engenharia de Requisitos Requisito – sistema Caso de uso - usuário
Testes de Mutação baseado no artigo de Mário Correia,
Testes – visão geral Vanilson Burégio.
Revisão da Linguagem C.
Princípios e Conceitos de Software(v2)
Análise Semântica e Representação Intermédia
Aula prática 8 Ponteiros Monitoria de Introdução à Programação
Pesquisa em memória primária: hashing
Gerenciamento de Configuração
LINGUAGENS DE PROGRAMAÇÃO PROF. DANIELA PIRES
PROGRAMAÇÃO ESTRUTURADA (MODULARIZAÇÃO/SUBPROGRAMAÇÃO)
Prof. Ricardo Santos PONTEIROS
Paradigmas de Linguagens de Programação Linguagem Imperativa 2
Expressões e Instrução de Atribuição
Técnicas de Desenvolvimento de Programas
F UNÇÕES : PASSAGEM DE PARÂMETROS Aluno:Kaynã Vasconcelos Santos Matéria: Estrutura de dados e algoritmos I Turma: Professor: Danilo Silva dos Santos.
Análise Léxica.
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Capítulo VIII Ambientes de Execução
Analise Semântica aula-10-analise-semântica.pdf.
Modularização Dividir um problema em subproblemas Módulos menores facilita a depuração Dividir o desenvolvimento entre vários programadores “Reutilização”
Algumas notas sobre a linguagem de programação C
Engenharia de Software
Algoritmos e Estrutura de Dados I Jean Carlo Mendes
Testes de Software AULA 02 Eduardo Silvestri
O que é? É o processo de investigação técnica com intuito de identificar a qualidade, a segurança e a exatidão do software desenvolvido. A validação do.
Back-End Compilação aula-11-back-end.pdf.
Uma Introdução a SVM Support Vector Machines
Introdução aos Computadores e Programação DI-FCT-UNL-2003/2004
Fundamentos de linguagens de programação
CES-10 INTRODUÇÃO À COMPUTAÇÃO
Algoritmos.
Testes de SW Aula 24.
Expansão dos Casos de Uso
Engenharia de Software
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Algoritmos e Programação I
Trechos de código que permitem reutilização de uma mesma tarefa. Qualquer código PHP pode estar contido no interior de uma função. Não se pode definir.
Linguagem de Programação I Parte IV
Shell Script Parte 2.
O Portal do Estudante de Computação
11 Revisão da Linguagem C Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
TÉCNICAS DE ESTIMATIVAS
Programação para Web I AULA 2 BANCO DE DADOS.
NOÇÕES DE TESTE DE HIPÓTESES (I) Teste de hipóteses para a proporção populacional.
Módulo I Capítulo 7: Funções e Procedimentos William Ivanski Curso de Programação C#
COMPILADORES 02 Prof. Marcos. COMPILADORES Do Programa à Execução Computadores das mais variadas arquiteturas têm funcionamento:
18/09/ /12/20082 Testes Baseados Em Modelo Diana Rúbia Paulo César Qualidade, Processos e Gestão de Software Alexandre Vasconcelos {drrr, pco,
Testes de Unidade. 2 Pauta Testes de Unidade; Testes de Unidade; Desenvolvimento orientado a testes; Desenvolvimento orientado a testes; Testes unitários.
Recursividade, Entrada pelo teclado e Funções com retorno Dilvan Moreira.
MUTAÇÃO DE INTERFACE (MI) JACKSON ANTONIO DO PRADO LIMA SILVIA REGINA VERGILIO.
Transcrição da apresentação:

Mutação de Interface Interface Mutation: An Approach for Integration Testing Marcio E. Delamaro José C. Maldonado Aditya P. Mathur

Erros de Integração Ocorrem quando um valor incorreto é passado a uma unidade. Considere um programa P e um caso de teste t. Suponha que em P existem unidades F e G e que F faz chamadas para G. Considere S 1 (G) a n-tupla de valores passados para G e S 0 (G) a n-tupla de valores retornados de G. Quando se executa P com o caso de teste t, um erro de integração é identificado na chamada de F para G quando:

Erros de Integração Tipo 1: entrando em G, S 1 (G) não têm os valores esperados e estes valores causam uma falha antes de retornar de G. Tipo 2: entrando em G, S 1 (G) não têm os valores esperados e estes valores levam a um S 0 (G) incorreto, que por sua vez causa uma falha depois de retornarem de G. Tipo 3: entrando em G, S 1 (G) têm os valores esperados, mas valores incorretos em S 0 (G) são produzidos dentro de G e estes valores incorretos causam uma falha após retornarem de G.

Erros de Integração Por exemplo na linguagem C: S 1 (G): A n-tupla de valores de entrada em uma chamada de função G é determinada por: os valores dos parâmetros de entrada usados na chamada da função as variáveis globais usadas em G S 0 (G): A n-tupla de valores de saída em uma chamada de função G é determinada por: os valores dos parâmetros de saída usados pela função as variáveis globais usadas em G os valores retornados por G

Erros de Integração

Mutação de Interface Para explicar Mutação de Interface foi examinada a natureza dos dados trocados entre as unidades. Em uma chamada de uma unidade F para uma unidade G, foram identificados quatro modos em que dados podem ser trocados entre a unidade que chama e a unidade chamada:

Mutação de Interface Dados podem ser passados para G através de parâmetros de entrada (passagem de parâmetros por valor) Dados podem ser passados para G e/ou retornados para F através de parâmetros de entrada/saída (passagem de parâmetros por referência) Dados podem ser passados para G e/ou retornados para F através de variáveis globais Dados podem ser passados para F através de valores de retorno

Mutação de Interface O primeiro passo é perturbar o sistema fazendo uma mudança sintática simples Este processo de perturbação também conhecido como mutação e o programa perturbado como um mutante Aplicação de Mutação de Interface somente nos pontos de interface (ou conexões) entre as unidades

Mutação de Interface As variáveis ou expressões que influenciam os quatro tipos de troca de dados são os candidatos para possíveis mutações. A transformação é determinada por um operador de Mutação de Interface. Depois dos mutantes gerados, os próximos passos na Mutação de Interface são os mesmos do teste de mutação tradicional: executar os mutantes avaliar conjunto de testes adequado e decidir quais os mutantes equivalentes

Mutação de Interface Exemplo: Considere um operador de Mutação de Interface OP(v) que perturba uma variável v. O testador pode escolher por exemplo a conexão S 1 -S 3 para testar, neste caso OP é aplicado sobre variáveis desta conexão.

Mutação de Interface Introduzindo erros tipo 1 e 2: Para introduzir estes erros, OP pode mudar a entrada da unidade S 3. Esta entrada pode ser usada dentro de S 3 e causar um retorno incorreto para a unidade S 1. OP pode ser aplicado de duas maneiras: primeiro, na passagem de parâmetros por valor, OP pode ser aplicado na chamada da unidade S 3 que ocorre dentro de S 1 ; segundo, na passagem de parâmetros por referência, OP pode ser aplicado nas referências que serão retornadas, dentro de S 3.

Mutação de Interface Se o primeiro caso for usado, OP é aplicado no arg linha 5: máximo 1 mutante. 1 caso de teste é necessário. dois dos três usos do parâmetro x linhas 14,16 e 18 não testados. Se o segundo caso for usado: um mutante para cada uso do parâmetro x um caso de teste é requerido para distinguir cada um dos 3 mutantes. cada referência para x seja testada pelo menos uma vez.

Mutação de Interface Teste de Interface versus Testes de Unidade É importante notar que um operador de Mutação de Interface é focado no teste de interação entre duas unidades e não no teste de uma unidade. Por exemplo: suponha que conexões S 3 –S 4 vão ser testadas e o operador OP produz um mutante dentro da unidade S 4. Estes mutantes podem ser distinguidos por casos de testes que exercitem chamadas para S 4 feitas de dentro de S 2, de forma que a conexão que desejo não seja testada. Este exemplo aponta para uma sutil diferença entre teste de unidade como uma mutação tradicional em relação à Mutação de Interface.

Mutação de Interface Teste de Interface versus Testes de Unidade Quando o operador de Mutação de Interface é aplicado dentro de uma função chamada Precisamos alterar a condição de Alcançabilidade para: Condição de Alcançabilidade para Mutação de Interface: o caso de teste executa um caminho que alcança o ponto onde a mutação foi inserida (em relação à conexão A-B).

Operadores de MI para a Linguagem C Uma unidade em C função que implementa algum serviço através de uma interface Para uma função F, esta interface é definida por parâmetros formais, variáveis globais que ele acessa, e o código que ela implementa. A conexão entre unidades são definidas por chamada de funções. Operadores de Mutação de Interface e operadores de Mutação tradicional A idéia em ambos é produzir sutis diferenças entre o estado do programa original e do mutante.

Operadores de MI para a Linguagem C A função F que possui duas chamadas para a função G:

Operadores de MI para a Linguagem C G é a função criada pela aplicação de um operador de Mutação de Interface dentro da função G. Existem dois mutantes diferentes para considerar quando a conexão F-G for testada. O primeiro é criado trocando a primeira chamada de G por G e o segundo é criado trocando a segunda chamada de G por G Dois grupos de Operadores de MI são definidos considerando a conexão F-G operadores do primeiro grupo são aplicados dentro do corpo da função G Operadores do segundo são aplicados na chamada para G dentro de F

Operadores de MI para a Linguagem C Grupo I – Operadores Aplicados dentro da Função Chamada. Estes operadores causam mudanças nos valores de entrado e/ou saída de funções. Para a aplicação destes operadores é necessário identificar o lugar de onde a função foi chamada. Mecanismo que habilite ou desabilite a mutação dependendo ou não de onde G é chamada de F (PROTEUM/IM) Quando a conexão A-B irá ser testada: P(B): Conjunto que inclui os parâmetros formais de B. G(B): Conj. Variáveis globais acessadas por B. L(B): Conj. Variáveis declaradas em B (locais). E(B):Conj. Variáveis globais não acessadas em B. C(B): Conj. Constantes usadas em B.

Operadores de MI para a Linguagem C Grupo I Operadores de Substituição Direta de Variáveis Operadores de Substituição Indireta Operadores de Variáveis de Incremento e Decre- mento Inserção de Operadores Unários Operadores de Retorno Operadores de Cobertura

Operadores de MI para a Linguagem C Grupo II – Operadores Aplicados dentro da Função que está fazendo a Chamanda. Dado uma conexão A-B são aplicados na instrução onde A chama B e sobre estes argumentos da chamada Quando um argumento é uma expressão são aplicados sobre a expressão inteira não sobre os objetos da expressão como variáveis ou constantes

Operadores de MI para a Linguagem C Grupo I Substituição de Argumentos Troca de Argumentos Eliminação de Argumentos Inserção de Operadores Unários Exclusão de Chamada de Função

Operadores de MI para a Linguagem C Comentários sobre Operadores de MI O mais importante é tornar o uso de teste de mutação possível de se aplicar e eficaz A aplicação de um conjunto inteiro de operadores pode criar um largo número de mutantes resultando em tempo impossível para se executar e avaliár É necessário permitir o testador ajustar o conjunto de operadores para uma aplicação especifica de acordo com os requisitos e custo Uma maneira de customizar a aplicação destes operadores é aplicar restrições de mutação: Aleatoriamente, selecionar uma pequena porcentagem do conjunto de muntantes. Aplicar somente um conjunto restrito de operadores

Operadores de MI para a Linguagem C Comentários sobre Operadores de MI Estas restrições, reduzem significativamente o número de mutantes sem perda na eficácia da detecção de erros. A decisão de gerar um conjunto reduzido de mutantes ou aplicar todos os operadores e gerar todos os mutantes sempre depende dos requisitos de teste e do quão critica é a aplicação Os operadores do Grupo II tendem a gerar menos mutantes que os do Grupo I. Isso porque a complexidade para os operadores do Grupo II é proporcional ao número de parâmetros da unidade chamada. A complexidade para os ops. do Grupo I é proporcional ao nro. de variáveis (locais ou globais) acessadas na unidade chamada vezes o número de acessos para estas variáveis.

Operadores de MI para a Linguagem C Comentários sobre Operadores de MI Provavelmente o problema de equivalência de mutantes é mais fácil sobre os gerados pelos operadores do Grupo II. Assim estes operadores são bons candidatos para gerar um conjunto inicial de mutantes para o inicio da avaliação do conjunto de testes. Apesar disso, operadores do Grupo I tem mais diversas características que operadores do Grupo II permitindo testar as interfaces de maneira mais completa, mas precisando de um maior custo.