31 |
Investigating topic modeling techniques for historical feature location.Schulte, Lukas January 2021 (has links)
Software maintenance and the understanding of where in the source code features are implemented are two strongly coupled tasks that make up a large portion of the effort spent on developing applications. The concept of feature location investigated in this thesis can serve as a supporting factor in those tasks as it facilitates the automation of otherwise manual searches for source code artifacts. Challenges in this subject area include the aggregation and composition of a training corpus from historical codebase data for models as well as the integration and optimization of qualified topic modeling techniques. Building up on previous research, this thesis provides a comparison of two different techniques and introduces a toolkit that can be used to reproduce and extend on the results discussed. Specifically, in this thesis a changeset-based approach to feature location is pursued and applied to a large open-source Java project. The project is used to optimize and evaluate the performance of Latent Dirichlet Allocation models and Pachinko Allocation models, as well as to compare the accuracy of the two models with each other. As discussed at the end of the thesis, the results do not indicate a clear favorite between the models. Instead, the outcome of the comparison depends on the metric and viewpoint from which it is assessed.
|
32 |
Variabilitätsextraktion aus makrobasierten Software-GeneratorenBaum, David 07 January 2014 (has links)
Die vorliegende Arbeit beschäftigt sich mit der Frage, wie Variabilitätsinformationen aus den Quelltext von Generatoren extrahiert werden können. Zu diesem Zweck wurde eine Klassifizierung von Variablen entwickelt, die im Vergleich zu bestehenden Ansätzen eine genauere Identifikation von Merkmalen ermöglicht. Zudem bildet die Unterteilung die Basis der Erkennung von Merkmalinteraktionen und Cross-tree-Constraints. Weiterhin wird gezeigt, wie die gewonnenen Informationen durch Merkmalmodelle dargestellt werden können. Da diese auf dem Generator-Quelltext basieren, liefern sie Erkenntnisse über den Lösungsraum der Domäne. Es wird sichtbar, aus welchen Implementierungskomponenten ein Merkmal besteht und welche Beziehungen es zwischen Merkmalen gibt. Allerdings liefert ein automatisch generiertes Merkmalmodell nur wenig Erkenntnisse über den Lösungsraum. Außerdem wurde ein Prototyp entwickelt, der eine Automatisierung des beschriebenen Extraktionsprozesses ermöglicht.
|
33 |
Discovering Neglected Conditions in Software by Mining Program Dependence GraphsCHANG, RAY-YAUNG January 2009 (has links)
No description available.
|
34 |
Mining Software Repositories to Support Software EvolutionKagdi, Huzefa H. 15 July 2008 (has links)
No description available.
|
35 |
Avalia??o da contribui??o de desenvolvedores para projetos de software usando minera??o de reposit?rios de software e minera??o de processosCosta, Daniel Alencar da 01 February 2013 (has links)
Made available in DSpace on 2014-12-17T15:48:07Z (GMT). No. of bitstreams: 1
DanielAC_DISSERT.pdf: 1379221 bytes, checksum: 4e8ab78d03e452eecd9c3eaa6906e4ee (MD5)
Previous issue date: 2013-02-01 / Coordena??o de Aperfei?oamento de Pessoal de N?vel Superior / Software Repository Mining (MSR) is a research area that analyses software repositories in
order to derive relevant information for the research and practice of software engineering. The
main goal of repository mining is to extract static information from repositories (e.g. code
repository or change requisition system) into valuable information providing a way to support
the decision making of software projects. On the other hand, another research area called
Process Mining (PM) aims to find the characteristics of the underlying process of business
organizations, supporting the process improvement and documentation. Recent works have
been doing several analyses through MSR and PM techniques: (i) to investigate the evolution
of software projects; (ii) to understand the real underlying process of a project; and (iii) create
defect prediction models. However, few research works have been focusing on analyzing the
contributions of software developers by means of MSR and PM techniques. In this context,
this dissertation proposes the development of two empirical studies of assessment of the
contribution of software developers to an open-source and a commercial project using those
techniques. The contributions of developers are assessed through three different perspectives:
(i) buggy commits; (ii) the size of commits; and (iii) the most important bugs. For the opensource
project 12.827 commits and 8.410 bugs have been analyzed while 4.663 commits and
1.898 bugs have been analyzed for the commercial project. Our results indicate that, for the
open source project, the developers classified as core developers have contributed with more
buggy commits (although they have contributed with the majority of commits), more code to
the project (commit size) and more important bugs solved while the results could not indicate
differences with statistical significance between developer groups for the commercial project / Minera??o de Reposit?rios de Software (MSR) ? uma ?rea que procura analisar
reposit?rios de software em busca de informa??es relevantes para a pesquisa e para a pr?tica
na engenharia de software. As minera??es buscam transformar informa??es est?ticas de
reposit?rios de software (sistemas de ger?ncia de configura??o e mudan?as) em informa??es
relevantes que auxiliam a tomada de decis?o dentro do contexto de projetos de software. Por
outro lado, a ?rea de Minera??o de Processos (MP) busca descobrir caracter?sticas dos
processos que s?o utilizados em organiza??es para auxiliar na melhoria e documenta??o
destes processos. Trabalhos recentes t?m buscado utilizar as t?cnicas de MSR e de MP para
realizar diversas an?lises na ?rea de Engenharia de Software, tais como: (i) estudar a evolu??o
dos projetos de software (ii) entender o processo de software real utilizado em um
determinado projeto; e (iii) criar modelos de predi??es de defeitos. Contudo, poucos destes
trabalhos buscam utilizar as t?cnicas de MP e MSR com o objetivo de analisar a contribui??o
de desenvolvedores na implementa??o de sistemas de software. Esta disserta??o de mestrado
prop?e a condu??o de estudos experimentais que buscam avaliar a contribui??o de
desenvolvedores de software para projetos, atrav?s da utiliza??o das t?cnicas de MSR e MP.
A contribui??o dos desenvolvedores ? avaliada sob tr?s diferentes perspectivas: (i) commits
defeituosos; (ii) tamanho dos commits; e (iii) resolu??o de bugs priorit?rios. Dois projetos de
software (um open-source e outro privado) foram analisados sob estas tr?s perspectivas. Para
o projeto open-souce, 12.827 commits e 8.410 bugs foram avaliados, enquanto que para o
projeto privado, 4.663 commits e 1.898 bugs foram avaliados. Os resultados obtidos indicam
que para o projeto open-source os desenvolvedores classificados como desenvolvedores core,
s?o os que mais produzem commits defeituosos (embora tamb?m sejam os que mais produzem
commits), s?o os que contribuem com commits de maior tamanho de c?digo e tamb?m
contribuem com mais bugs priorit?rios solucionados. J? para o projeto privado, os resultados
n?o indicaram uma diferen?a estatisticamente significativa entre os grupos de
desenvolvedores
|
36 |
[en] ON THE RELATION BETWEEN REFACTORING AND CRITICAL INTERNAL ATTRIBUTES WHEN EVOLVING SOFTWARE FEATURES / [pt] SOBRE A RELAÇÃO ENTRE REFATORAÇÃO E ATRIBUTOS INTERNOS CRÍTICOS AO EVOLUIR FUNCIONALIDADES DE SOFTWAREEDUARDO MOREIRA FERNANDES 07 June 2021 (has links)
[pt] Contexto: Várias mudanças de código aplicadas ao evoluir funcionalidades visam melhorar atributos internos de qualidade como coesão. Tais mudanças são as refatorações. Refatorações não dirigidas podem piorar, e não melhorar, atributos internos. Porém, o saber atual é insuficiente para gerir atributos internos durante a evolução do sistema. Objetivo: Nosso primeiro objetivo é entender como refatorações afetam atributos internos ao evoluir sistemas, mitigando limitações de escopo de estudos anteriores. Nosso segundo objetivo é atender uma carência por evidência quantitativa sobre como gerir atributos internos críticos via refatorações ao evoluir sistemas. Um atributo interno é crítico se sua medição assume valores anômalos. Baixa coesão é um exemplo de atributo crítico. Método: O primeiro estudo
estende uma avaliação quantitativa da relação entre refatorações e cinco atributos internos: acoplamento, coesão, complexidade, herança e tamanho. Incluímos novas análises e resolvemos ameaças à validade da literatura. O segundo estudo contém estudos de caso qualitativos baseados em grupo focal.
Em dois casos industriais, promovemos discussões sobre o quanto (e por que) atributos críticos são relevante ao evoluir funcionalidades. Por fim, cruzamos os achados dos dois estudos para discutir como gerir atributos críticos via refatoração ao evoluir funcionalidades. Resultados: Aproximadamente
64 por cento das refatorações melhoram ou não afetam os atributos internos. Desenvolvedores parecem refatorar até melhorar os atributos mais relevantes, ignorando outros atributos internos possivelmente críticos. Baixa coesão e alta complexidade são percebidos como relevantes e tornam mais difícil evoluir
funcionalidades. Alto acoplamento, herança larga e tamanho largo são percebidos como irrelevantes ao implementar funcionalidades especialmente complexas, por exemplo. Ao cruzar dados entre estudos, discutimos como refatorações podem melhorar atributos internos, inclusive atributos críticos. Conclusões: Os achados dos nossos estudos podem apoiar a gestão de atributos críticos relevantes aos desenvolvedores, mas também preservar outros atributos que podem se tornar críticos. / [en] Context: Several software changes applied while evolving software features aim at improving internal quality attributes, e.g. cohesion. These changes are the refactorings. Non-assisted refactorings might worsen, rather than improve, internal attributes. However, current knowledge is insufficient for managing internal attributes during software evolution. Objective: Our first objective is assessing how refactorings affect internal attributes during software evolution by filling gaps of past work on study scope.
Our second objective is filling gaps of qualitative evidence on how to manage critical internal attributes via refactorings while evolving features. An internal attribute is critical when its measurement has anomalous
values. Low cohesion is an example of critical attribute. Method: Our first study extends a large quantitative assessment of the relationship between refactorings and five internal attributes: cohesion, complexity, coupling, inheritance, and size. We include a more detailed statistical analysis and address major threats to validity of past work. Our second study is a qualitative case study based on focus group. We selected two industry cases to promote discussions on how much (and why) critical attributes are relevant while evolving features. Finally, we crossed the findings from both conducted studies aimed at discussing how critical attributes can be addressed via refactoring when evolving features. Results: About 64 per cent of refactorings either improve or keep the internal attributes unaffected. Developers seem to perform refactorings until the most relevant internal attributes are improved, thereby neglecting other internal attributes that may be critical. Low cohesion and high complexity are perceived as relevant because they often make evolving features harder than usual. High coupling, large inheritance, and large size are perceived as irrelevant when developers implement especially complex features. By crossing the
findings from both studies, we discuss how refactorings can improve internal attributes, especially the critical ones. Conclusions: The findings of our studies can support managing critical attributes that developers typically find relevant, while preserving other attributes that may become critical.
|
37 |
Investigating the Impact of Personal, Temporal and Participation Factors on Code Review QualityCao, Yaxin 07 1900 (has links)
La révision du code est un procédé essentiel quelque soit la maturité d'un projet; elle cherche à évaluer la contribution apportée par le code soumis par les développeurs. En principe, la révision du code améliore la qualité des changements de code (patches) avant qu'ils ne soient validés dans le repertoire maître du projet. En pratique, l'exécution de ce procédé n'exclu pas la possibilité que certains bugs passent inaperçus. Dans ce document, nous présentons une étude empirique enquétant la révision du code d'un grand projet open source. Nous investissons les relations entre les inspections des reviewers et les facteurs, sur les plans personnel et temporel, qui pourraient affecter la qualité de telles inspections.Premiérement, nous relatons une étude quantitative dans laquelle nous utilisons l'algorithme SSZ pour détecter les modifications et les changements de code favorisant la création de bogues (bug-inducing changes) que nous avons lié avec l'information contenue dans les révisions de code (code review information) extraites du systéme de traçage des erreurs (issue tracking system). Nous avons découvert que les raisons pour lesquelles les réviseurs manquent certains bogues était corrélées autant à leurs caractéristiques personnelles qu'aux propriétés techniques des corrections en cours de revue. Ensuite, nous relatons une étude qualitative invitant les développeurs de chez Mozilla à nous donner leur opinion concernant les attributs favorables à la bonne formulation d'une révision de code. Les résultats de notre sondage suggèrent que les développeurs considèrent les aspects techniques (taille de la correction, nombre de chunks et de modules) autant que les caractéristiques personnelles (l'expérience et review queue) comme des facteurs influant fortement la qualité des revues de code. / Code review is an essential element of any mature software development project; it aims at evaluating code contributions submitted by developers. In principle, code review should improve the quality of code changes (patches) before they are committed to the project's master repository. In practice, the execution of this process can allow bugs to get in unnoticed. In this thesis, we present an empirical study investigating code review of a large open source project. We explore the relationship between reviewers'code inspections and personal, temporal and participation factors that might affect the quality of such inspections. We first report a quantitative study in which we applied the SZZ algorithm to detect bug-inducing changes that were then linked to the code review information extracted from the issue tracking system. We found that the reasons why reviewers miss bugs are related to both their personal characteristics, as well as the technical properties of the patches under review. We then report a qualitative study that aims at soliciting opinions from Mozilla developers on their perception of the attributes associated with a well-done code review. The results of our survey suggest that developers find both technical (patch size, number of chunks, and module) and personal factors (reviewer's experience and review queue) to be strong contributors to the review quality.
|
38 |
Predição de mudanças conjuntas de artefatos de software com base em informações contextuais / Predicting co-changes of software artifacts based on contextual informationWiese, Igor Scaliante 18 March 2016 (has links)
O uso de abordagens de predição de mudanças conjuntas auxilia os desenvolvedores a encontrar artefatos que mudam conjuntamente em uma tarefa. No passado, pesquisadores utilizaram análise estrutural para construir modelos de predição. Mais recentemente, têm sido propostas abordagens que utilizam informações históricas e análise textual do código fonte. Apesar dos avanços obtidos, os desenvolvedores de software ainda não usam essas abordagens amplamente, presumidamente por conta do número de falsos positivos. A hipótese desta tese é que informações contextuais obtidas das tarefas, da comunicação dos desenvolvedores e das mudanças dos artefatos descrevem as circunstâncias e condições em que as mudanças conjuntas ocorrem e podem ser utilizadas para realizar a predição de mudanças conjuntas. O objetivo desta tese consiste em avaliar se o uso de informações contextuais melhora a predição de mudanças conjuntas entre dois arquivos em relação às regras de associação, que é uma estratégia frequentemente usada na literatura. Foram construídos modelos de predição específicos para cada par de arquivos, utilizando as informações contextuais em conjunto com o algoritmo de aprendizagem de máquina random forest. Os modelos de predição foram avaliados em 129 versões de 10 projetos de código aberto da Apache Software Foundation. Os resultados obtidos foram comparados com um modelo baseado em regras de associação. Além de avaliar o desempenho dos modelos de predição também foram investigadas a influência do modo de agrupamento dos dados para construção dos conjuntos de treinamento e teste e a relevância das informações contextuais. Os resultados indicam que os modelos baseados em informações contextuais predizem 88% das mudanças corretamente, contra 19% do modelo de regras de associação, indicando uma precisão 3 vezes maior. Os modelos criados com informações contextuais coletadas em cada versão do software apresentaram maior precisão que modelos construídos a partir de um conjunto arbitrário de tarefas. As informações contextuais mais relevantes foram: o número de linhas adicionadas ou modificadas, número de linhas removidas, code churn, que representa a soma das linhas adicionadas, modificadas e removidas durante um commit, número de palavras na descrição da tarefa, número de comentários e papel dos desenvolvedores na discussão, medido pelo valor do índice de intermediação (betweenness) da rede social de comunicação. Os desenvolvedores dos projetos foram consultados para avaliar a importância dos modelos de predição baseados em informações contextuais. Segundo esses desenvolvedores, os resultados obtidos ajudam desenvolvedores novatos no projeto, pois não têm conhecimento da arquitetura e normalmente não estão familiarizados com as mudanças dos artefatos durante a evolução do projeto. Modelos de predição baseados em informações contextuais a partir de mudanças de software são relativamente precisos e, consequentemente, podem ser usados para apoiar os desenvolvedores durante a realização de atividades de manutenção e evolução de software / Co-change prediction aims to make developers aware of which artifacts may change together with the artifact they are working on. In the past, researchers relied on structural analysis to build prediction models. More recently, hybrid approaches relying on historical information and textual analysis have been proposed. Despite the advances in the area, software developers still do not use these approaches widely, presumably because of the number of false recommendations. The hypothesis of this thesis is that contextual information of software changes collected from issues, developers\' communication, and commit metadata describe the circumstances and conditions under which a co-change occurs and this is useful to predict co-changes. The aim of this thesis is to use contextual information to build co-change prediction models improving the overall accuracy, especially decreasing the amount of false recommendations. We built predictive models specific for each pair of files using contextual information and the Random Forest machine learning algorithm. The approach was evaluated in 129 versions of 10 open source projects from the Apache Software Foundation. We compared our approach to a baseline model based on association rules, which is often used in the literature. We evaluated the performance of the prediction models, investigating the influence of data aggregation to build training and test sets, as well as the identification of the most relevant contextual information. The results indicate that models based on contextual information can correctly predict 88% of co-change instances, against 19% achieved by the association rules model. This indicates that models based on contextual information can be 3 times more accurate. Models created with contextual information collected in each software version were more accurate than models built from an arbitrary amount of contextual information collected from more than one version. The most important pieces of contextual information to build the prediction models were: number of lines of code added or modified, number of lines of code removed, code churn, number of words in the discussion and description of a task, number of comments, and role of developers in the discussion (measured by the closeness value obtained from the communication social network). We asked project developers about the relevance of the results obtained by the prediction models based on contextual information. According to them, the results can help new developers to the project, since these developers have no knowledge about the architecture and are usually not familiar with the artifacts history. Thus, our results indicate that prediction models based on the contextual information are useful to support developers during the maintenance and evolution activities
|
39 |
Identificação e visualização de dependências em sistemas de software orientados a objetos / Identification and Visualization of Dependencies in Object-Oriented Software SystemsOliva, Gustavo Ansaldi 22 September 2011 (has links)
Degradação do design é um problema central investigado na área de evolução de software. A densa rede de interdependências que emerge entre classes e módulos ao longo do tempo resulta em código difícil de mudar, não reutilizável e que não comunica por si só sua intenção. Dentre outros motivos, designs degradam porque requisitos mudam de maneiras não antecipadas pelo design inicial, ou seja, as modificações no código introduzem dependências novas e não planejadas entre classes e módulos do sistema. A gerência de dependências visa reduzir a degradação do design por meio de uma série de mecanismos que auxiliam na administração da complexidade estrutural inerente de sistemas orientados a objetos. Neste trabalho, investigamos as técnicas de identificação de dependências estruturais e lógicas. Em particular, por meio de um estudo de larga escala, comparamos os conjuntos desses dois tipos de dependências. Em seguida, conduzimos um estudo de caso a fim de identificar as origens de dependências lógicas. Por fim, fazemos um levantamento das técnicas de visualização de dependências e mostramos a ferramenta XFlow. / Design degradation is a central problem investigated in the area of software evolution. The dense web of interdependencies that emerges among classes and modules over time results in code that is hard to change, not reusable and that does not communicate its intention. Among other reasons, designs degrade because requirements changes in ways that were not anticipated by the initial design, i.e. the changes in code introduce new and unplanned dependencies among classes and modules of the system. Dependency management aims to reduce design degradation by means of a series of mechanisms that helps in the management of the inherent structural complexity of object oriented systems. In this work, we investigate structural and logical dependencies identification techniques. In particular, by means of a large scale study, we compare the sets of these two kinds of dependencies. Afterwards, we conduct a case study in order to uncover the origins of logical dependencies. Finally, we survey dependency visualization techniques and present the XFlow tool.
|
40 |
Identificação e análise de clones de códigos heterogêneos em um ambiente corporativo de desenvolvimento de softwareTorres, José Jorge Barreto 31 August 2016 (has links)
The demand for speeding up software development inside
corporations triggers a series of issues related to coding organization.
Software development teams have to achieve business deadlines, so
they adopt the bad practice to copy-and-paste code. In this way, clones
populate software repositories and hinder the improvement or
maintenance of systems. Programming languages with object-oriented
paradigm characteristics tend to make easy coding abstraction and
reuse processes. However, a question arises: the same team working
with several kinds of programming languages are influenced by their
paradigms regarding the decrease of cloning incidence? This work
proposed an approach to identify, analyze and compare clones inside
heterogeneous software repositories without consider the development
team profile. The experimental evaluation of the approach was possible
thru two controlled experiments which aimed to detect and evaluate
clones, using and adapting tools available on market. This evaluation
was executed inside an organizational environment, which owned
several applications with closed-source code but available to analysis.
The final results showed no relationship to the amount of application
code lines. Procedural language systems had a lower clone incidence
and, when conflicting open and closed source systems, both had similar
results regarding to the manifestation of source-code clones. / A exigência por acelerar o desenvolvimento de software nas
empresas desencadeia uma série de problemas relacionados à
organização do código. As equipes de desenvolvimento, pressionadas a
cumprir prazos ditados pela área de negócio, adotam a prática ruim de
copiar e colar código. Assim, os clones são criados e povoam os
repositórios de software dessas companhias, tornando o aprimoramento
e manutenção dos sistemas cada vez mais dificultado. Linguagens de
programação que possuem características do paradigma de orientação a
objetos tendem a facilitar ainda mais o processo de abstração de código
e de reaproveitamento. No entanto, uma questão pode ser feita: uma
mesma equipe, trabalhando com diversos tipos de linguagens, sofre
influência destes tipos, no que diz respeito à diminuição da incidência
de clones? Este trabalho propôs uma abordagem para identificar,
analisar e comparar clones em repositórios heterogêneos de software,
com uma análise tênue do perfil da equipe envolvida. A avaliação
experimental da abordagem foi realizada por meio de dois
experimentos controlados, os quais visaram a detecção e a avaliação de
clones, utilizando e adaptando o ferramental disponível no mercado.
Esta avaliação foi executada in-vivo, em um ambiente organizacional
real, o qual possuía uma grande quantidade de aplicações e linhas de
código fechado disponíveis para análise. Os resultados finais não
apresentaram relação direta com a quantidade de linhas de código das
aplicações. Sistemas de linguagem procedural apresentaram menor
incidência de clones e, no conflito entre sistemas de código aberto e
fechado, ambos tiveram resultados similares no que diz respeito à
manifestação de clones de código-fonte.
|
Page generated in 0.1192 seconds