Utilize este identificador para referenciar este registo: http://hdl.handle.net/10451/9674
Título: Mutation-driven test generation for conflict detection in software integration
Autor: Wilhelm, Ricardo Daniel Sequeira
Orientador: Martins, Francisco Cipriano da Cunha, 1972-
Lopes, Maria Antónia Bacelar da Costa, 1968-
Palavras-chave: Testes
Mutação
Fusão
Conflito orientado a objetos
Integração contínua
Teses de mestrado - 2013
Data de Defesa: 2013
Resumo: Em projetos de desenvolvimento de software, os programadores colaboram muitas vezes em equipa com o intuito de aumentar a sua produtividade. Os sistemas de controlo de versões (VCS) permitem facilitar esta colaboração, tendo a tarefa de fundir as alterações feitas por cada membro da equipa, possibilitando modificações de um ou mais ficheiros concorrentemente por vários programadores e aumentando assim a produtividade da equipa. No entanto, vários conflitos podem emergir neste processo de fusão. Os sistemas de controlo de versões mais simples têm a capacidade de fundir linhas de texto; outros mais complexos recorrem às características sintáticas e semânticas de cada linguagem. Em resultado destas fusões podem aparecer diferentes tipos de conflitos, a maior parte detetada pelos compiladores, manifestando-se através de erros de compilação. Entre os conflitos mais importantes estão os conflitos semânticos, i.e., situações em que é possível fazer a fusão ao nível textual, mas o comportamento do programa passa a não ser correto. Estes conflitos são, por certos autores, classificados em duas categorias: conflitos estáticos e comportamentais. Os conflitos estáticos podem ser detetados a partir da análise do código fonte do programa, por exemplo durante a análise semântica do compilador. Os conflitos comportamentais afetam o comportamento dos programas, que após a fusão pode já não corresponder ao que cada membro esperava do código que produziu. No contexto de linguagens orientadas a objetos (OO) como o Java, este tipo de conflitos surge normalmente devido ao uso de primitivas específicas do OO como a herança, a redefinição e a sobrecarga de métodos. Este documento descreve uma técnica desenvolvida para detetar conflitos comportamentais em projetos Java, assim como um protótipo de uma ferramenta que concretiza parcialmente esta técnica. O objetivo da ferramenta, denominada MC-MODS (Merging Conflict and Mutation Operation Detection System), é diagnosticar classes importantes de conflitos em Java. A convicção é que ao reportar os conflitos detetados no contexto de VCSs irá ajudar a forma como os programadores trabalham cooperativamente. A técnica desenvolvida explora a semelhança que existe entre mudanças que ocorrem em resultado de um processo de fusão e as mutações efetuadas no contexto do teste de mutação, uma técnica que consiste em introduzir alterações em programas (chamadas mutações) para desenhar novos testes ou avaliar a qualidade dos testes existentes. As alterações efetuadas por cada membro da equipa podem ser vistas como mutações—mudanças ao código do membro sempre que chama o processo de atualização. O MCMODS, uma vez integrado com um sistema de controlo de versões, permitirá analisar as mutações produzidas por diferentes membros da equipa, procurando métodos que possam ter sido afetados por estas, ou seja, cuja semântica, ou comportamento, possa ter mudado. No que se segue, estes são chamados métodos alvo. A ferramenta MC-MODS foi implementada sob a forma de um plug-in para o IDE Eclipse, pois esta é uma das plataformas de desenvolvimento Java mais usadas e suporta um grande número de sistemas de controlo de versões. A técnica de deteção de conflitos desenvolvida assenta ainda na definição de um catálogo com várias classes de mutações típicas que provocam alterações ao comportamento de programas em Java, causadas pelos processos de fusão de alterações dos sistemas de controlo de versões. As operações de mutação presentes no catálogo cobrem diferentes primitivas OO, nomeadamente herança e sobrecarga de métodos, ocultação de atributos e mudança de acesso (i.e., mudança de uma classe de pacote ou mudança do modificador de acesso de alguma classe ou membro). Cada operação no catálogo contém um ou dois destes referidos aspetos. A ferramenta é também capaz de detetar mudanças do tipo de retorno ou do corpo de métodos, bem como classes ou membros adicionados ou removidos. Para cada operação de mutação foi criado um caso de teste que instancia a operação, composto por três versões do código fonte, necessárias para detetar o conflito presente na versão final. Estas três versões são constituídas por: (a) uma versão base, i.e., uma versão não alterada antes do processo de atualização, só depois do qual um programador deve fazer alterações; (b) uma versão denominada original, i.e., uma versão que contém as alterações do utilizador da ferramenta e do VCS e (c) uma versão merged (fundida) que representa o programa depois do processo de fusão que contém as alterações do utilizador e dos restantes membros da equipa. Estas alterações são obtidas a partir do repositório remoto que o VCS usa. Resumidamente, o funcionamento do MC-MODS é o seguinte: as três versões referidas acima são comparadas entre si com o objetivo de detetar os métodos alvo. Os métodos alvo são calculados através da análise da árvore de sintaxe abstrata de cada classe e pela procura dos métodos e atribuitos que possam ter tido a sua semântica alterada, determinando se os métodos alvo chamam (no caso de serem métodos/construtores) ou usam (no caso de serem atributos) de facto algum desses membros relacionados. São então gerados automaticamente testes JUnit para averiguar se a semântica dos métodos alvo calculados terá sido afetada. Estes testes envolvem 1) a criação de duas instâncias da classe a que o método pertence, cada uma na sua versão (original e merged), 2) a invocação do método alvo sobre ambos os objetos criados e 3) a comparação do estado desses objetos no final da invocação e dos seus resultados (se aplicável). As duas instâncias são criadas com classloaders especializados, sendo a ponte entre estes estabelecida através da ferramenta Transloader (esta ferramenta permite usar um objeto construído num classloader diferente do classloader corrente). Espera-se que as operações de mutação do catálogo definido no contexto deste trabalho cubram grande parte das características orientadas a objetos em programas Java que mais frequentemente causam conflitos comportamentais e que a técnica desenvolvida ajude efetivamente a diagnosticar, tão cedo quanto possível, conflitos que ocorrem em resultado do trabalho cooperativo neste contexto. Uma das caraterísticas importantes da solução apresentada é não serem reportados falsos positivos. Já a existência de falsos negativos está intimamente relacionada com a cobertura dos testes que são gerados. Apesar de no MC-MODS se ter optado por uma versão minimalista no que diz respeito à geração de testes, outras hipóteses são possíveis, sendo que será sempre preciso estabelecer compromissos relativamente ao custo acrescido que uma maior cobertura necessariamente exige. Este trabalho foi realizado no contexto da disciplina de Projeto de Engenharia Informática do Mestrado em Engenharia Informática da Faculdade de Ciências da Universidade de Lisboa.
Programmers often collaborate together in order to increase their productivity in software development. Version control systems intend to facilitate this collaboration, by automatically integrating the changes of each member, so they can easily work on a single software artifact at the same time. When such a system integrates these changes, by merging them, sometimes it causes conflicts—unexpected errors caused by the merge process—simply because before the merge each member expected his code to have a certain behavior, but after the merge this no longer happens. They may be syntactic errors—like a keyword in the wrong place—or semantic errors—like a wrong value returned by a method. This document describes a technique for detecting important classes of conflicts in Java and a prototype of a tool that partially implements this technique. The tool was implemented in the form of a plug-in for the Eclipse IDE, i.e., as an add-on for a widely used platform for developing software that is known for its extensibility, multi-language capability and support of several version control systems. The plug-in, called MC-MODS (Merging Conflict and Mutation Operation Detection System), aims to detect behavioral merge conflicts for Java projects. This is a type of semantic conflicts that is not detected by static analysis techniques, which arises when programs show an unexpected behavior after the merge process. MC-MODS automatically generates tests designed to detect these conflicts with a high probability that are inspired by a technique known as mutation testing. The proposed technique is based on a catalog of mutation operators capturing the main source for semantic conflicts in the context of Java projects, involving objectoriented features like overriding and overloading. Once integrated with a version control system, MC-MODS will support the early detection of many important semantic conflicts in Java and hence can improve the way Java developers work collaboratively. This work was done in the context of the course Projecto de Engenharia Informática belonging to the Master Course in Computer Science of the Faculty of Science of the University of Lisbon.
Descrição: Tese de mestrado em Engenharia Informática, apresentada à Universidade de Lisboa, através da Faculdade de Ciências, 2013
URI: http://hdl.handle.net/10451/9674
Aparece nas colecções:FC - Dissertações de Mestrado

Ficheiros deste registo:
Ficheiro Descrição TamanhoFormato 
ulfc104984_tm_Ricardo_Wilhelm.pdf1,13 MBAdobe PDFVer/Abrir


FacebookTwitterDeliciousLinkedInDiggGoogle BookmarksMySpace
Formato BibTex MendeleyEndnote Degois 

Todos os registos no repositório estão protegidos por leis de copyright, com todos os direitos reservados.