Abstract:
RESUMO: Durante as atividades de manutenção de software, especialmente evolutivas, corretivas e perfectivas, gerentes ou líderes de projetos geralmente realizam a distribuição de tarefas com base na relação que cada desenvolvedor possui com o código fonte associado. Ou seja, quanto maior a relação entre um determinado desenvolvedor e o código fonte associado, maior será a probabilidade desse desenvolvedor assumir o desenvolvimento. Contudo, é comum que gerentes de projetos não tenham uma noção real de como está a relação entre desenvolvedores e o código fonte relacionado a cada tarefa a ser desenvolvida. Em um estudo (dissertação de mestrado) anterior, foi proposto um método baseado em Mining Software Repositories (MSR) para obter a familiaridade de código dos desenvolvedores, a partir da mineração de dados de repositórios de software. O cálculo da familiaridade é feito considerando a perspectiva de módulo (pacote) ou arquivo. Neste trabalho, é proposta uma abordagem baseada no método citado anteriormente, para inferência da familiaridade de desenvolvedores, considerando também uma nova perspectiva: funcionalidade de software. Essa perspectiva normalmente é mais apropriada considerando um contexto real de desenvolvimento de software, onde as correções de bugs e melhorias no sistema são realizadas
considerando as funcionalidades do software. Algumas das principais etapas da abordagem proposta visam identificar funcionalidades de software e unidades computacionais (arquivos de código) que compõem cada funcionalidade identificada, com base na utilização de técnicas de Reverse Engineering (RE). Um dos objetivos principais deste trabalho é a realização de uma análise da familiaridade de código considerando as perspectivas de módulo e funcionalidade. Neste estudo foi realizado também, um Mapeamento Sistemático da Literatura (MSL) que apresenta um overview da área de inferência da familiaridade e outros tipos de relação entre desenvolvedor e código fonte por meio de técnicas baseadas em MSR. Por fim, foi realizada neste trabalho, uma avaliação em duas etapas. Na primeira fase a abordagem proposta foi avaliada no processo de identificação de funcionalidades e arquivos relacionados. Por meio da análise de sistemas reais, pôde-se constatar que a abordagem obteve um desempenho satisfatório durante esse processo. Durante a segunda etapa de avaliação da abordagem foi realizada a inferência e análise da familiaridade de código entre desenvolvedores considerando a perspectiva de módulo e funcionalidade. Os resultados mostram que uma visão por funcionalidade fornece informações importantes a respeito da familiaridade de código, e que tende a ser mais apropriada em um contexto real de desenvolvimento de software. ABSTRACT: During software maintenance activities, especially evolutionary, corrective and perfective, managers or project leaders usually perform the task distribution based on the relationship that each developer has with the associated source code. Thereby, how larger the relationship between a particular developer and the source code associated with the task to be performed, will greater the possibility of that developer assuming the responsibility of develop it. However, it is common for project managers do not have an approximate notion of the developer relationship with the source code related with each task to be developed. In a previous study (master’s thesis), a method based on Mining Software Repositories (MSR) was proposed to obtain the code familiarity of the developers from the mining of data of a software repositorie. The calculation of familiarity is done considering the package or file perspective. In this work, it is proposed an approach based on the previously described method, for inference of the developers familiarity considering also a new perspective: software functionality. This perspective is more appropriate considering a real context of software development, where the bug fixes and improvements in the system are realized considering the functionalities of the software. Some of the main steps of the proposed approach are to identify software functionalities and computational units (code files) that integrate each feature identified, based on the use of Reverse Engineering (RE) techniques. One of the main objectives of this work is perform a comparative analysis of the inference of code familiarity considering the package and functionality perspectives. In this study has conducted also a Systematic Literature Mapping (MSL) which presents an overview of the familiarity inference area and other types of relationship between developer and source code through MSR-based techniques. Finally, was permformed an evaluation in two stages. In the first phase the proposed approach was evaluated in the process of identifying functionalities and related files. Through the analysis of real systems, it was possible to verify that the approach obtained a satisfactory performance during this process. During the second stage of evaluation of the approach, was performed the inference and analysis of the code familiarity between developers considering the module and functionality perspective. The results show that a functionality view provides important information about code familiarity, and is more appropriate in a real software development context.