Melina Mongiovi

dblp:55/10322 · DBLP profile ↗
← Back
13ranked-venue papers
3as first author
2since 2021 · last 2025
—ORCID · conflict

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 11 · 3 first-author · 2 since 2021Human-computer interaction and ubiquitous computing · 2Applied, interdisciplinary, general and emerging computing · 1 · 1 since 2021
YearPublicationVenuePosition
2025 The Hidden Challenges of Merging: A Tool-Based Exploration
abstract
Merging is common in collaborative software development, often leading to conflicts. Code modifications, such as refactorings, may contribute to merge conflicts depending on the approach employed by the merging tools. In this paper, we investigate how code changes over time influence merge conflicts and examine how different merge tools affect their frequency. We analyzed 507,411 merge actions from GitHub Java projects using three distinct merge tools: Git, jFSTMerge, and IntelliMerge. Our findings reveal that nearly 43 percent of Git's conflicting scenarios involved refactorings, and resolving these conflicts required significantly more time. We found that refactorings increase the likelihood of conflicts by roughly 10 times in Git, 12 times in jFSTMerge, and 9 times in IntelliMerge. Additionally, out of 62 refactoring types executed, 33.8 percent were consistently associated with conflicts across all three tools. Regarding the number of developers involved in the history of a conflict, jFSTMerge and IntelliMerge were 28 times and 8 times more likely to result in merge conflicts, respectively. These in-sights may be employed to enhance merging algorithms to better handle these specific types of changes and to guide development teams in mitigating risks by coordinating refactorings, potentially reducing the overall rate of conflicts.
Luciana Q. Leal, Melina Mongiovi, Sabrina Souto, Everton L. G. Alves
SANER2
2023 Assessing and Improving the Quality of Generated Tests in the Context of Maintenance Tasks
abstract
Maintenance tasks often rely on failing test cases, highlighting the importance of well-designed tests for their success. While automatically generated tests can provide higher code coverage and detect faults, it is unclear whether they can be effective in guiding maintenance tasks or if developers fully accept them. In our recent work, we presented the results of a series of empirical studies that evaluated the practical support of generated tests. Our studies with 126 developers showed that automatically generated tests can effectively identify faults during maintenance tasks. Developers were equally effective in creating bug fixes when using manually-written, Evosuite, and Randoop tests. However, developers perceived generated tests as not well-designed and preferred refactored versions of Randoop tests. We plan to enhance Evosuite tests and propose an approach/tool that assesses the quality of generated tests and automatically enhances them. Our research may impact the design and use of generated tests in the context of maintenance tasks.
Wesley B. R. Herculano, Everton L. G. Alves, Melina Mongiovi
COMPSAC3
2019 Evaluating Feedback Tools in Introductory Programming Classes
abstract
This Research Full Paper presents a study on the evaluation of feedback tools in introductory programming classes. Recently, several tools have been proposed in order to provide guidance and help students overcome conceptual difficulties in programming education. Some tools leverage clustering algorithms and program repair techniques to automatically generate personalized hints for students' incorrect programs. In contrast, some teachers choose to present students with program visualization tools to help them understand the dynamic execution of a source code. These tools are used to help students get correct solutions for programming assignments. However, due to limitations in assessments, it is still unclear how effective the feedback provided by these tools is. In this study, we analyzed the effectiveness of a tool for generating personalized hints and a tool for visualizing programs. To do so, we conducted a user study in which students, assisted by these tools, implemented solutions for three programming problems. Our results show that personalized hints can significantly reduce student's effort to get correct solutions. In addition, personalized hints can provide students with an understanding of problem solving similar to when using test cases. However, students who used the program visualization tool got lower post-test performance than using other tools.
Ruan Reis, Gustavo Soares, Melina Mongiovi, Wilkerson de L. Andrade
FIE3
2019 Revisiting the refactoring mechanics
Jonhnanthan Oliveira, Rohit Gheyi, Melina Mongiovi, Gustavo Soares, Márcio Ribeiro 0001, Alessandro F. Garcia 0001
Inf. Softw. Technol.3
2018 A change-aware per-file analysis to compile configurable systems with #ifdefs
Larissa Braz, Rohit Gheyi, Melina Mongiovi, Márcio Ribeiro 0001, Flávio Medeiros, Leopoldo Teixeira, Sabrina Souto
Comput. Lang. Syst. Struct.3
2018 Detecting Overly Strong Preconditions in Refactoring Engines
abstract
Refactoring engines may have overly strong preconditions preventing developers from applying useful transformations. We find that 32 percent of the Eclipse and JRRT test suites are concerned with detecting overly strong preconditions. In general, developers manually write test cases, which is costly and error prone. Our previous technique detects overly strong preconditions using differential testing. However, it needs at least two refactoring engines. In this work, we propose a technique to detect overly strong preconditions in refactoring engines without needing reference implementations. We automatically generate programs and attempt to refactor them. For each rejected transformation, we attempt to apply it again after disabling the preconditions that lead the refactoring engine to reject the transformation. If it applies a behavior preserving transformation, we consider the disabled preconditions overly strong. We evaluate 10 refactorings of Eclipse and JRRT by generating 154,040 programs. We find 15 overly strong preconditions in Eclipse and 15 in JRRT. Our technique detects 11 bugs that our previous technique cannot detect while missing 5 bugs. We evaluate the technique by replacing the programs generated by JDolly with the input programs of Eclipse and JRRT test suites. Our technique detects 14 overly strong preconditions in Eclipse and 4 in JRRT.
Melina Mongiovi, Rohit Gheyi, Gustavo Soares, Márcio Ribeiro 0001, Paulo Borba, Leopoldo Teixeira
IEEE Trans. Software Eng.1
2017 Avoiding useless mutants
abstract
Mutation testing is a program-transformation technique that injects artificial bugs to check whether the existing test suite can detect them. However, the costs of using mutation testing are usually high, hindering its use in industry. Useless mutants (equivalent and duplicated) contribute to increase costs. Previous research has focused mainly on detecting useless mutants only after they are generated and compiled. In this paper, we introduce a strategy to help developers with deriving rules to avoid the generation of useless mutants. To use our strategy, we pass as input a set of programs. For each program, we also need a passing test suite and a set of mutants. As output, our strategy yields a set of useless mutants candidates. After manually confirming that the mutants classified by our strategy as "useless" are indeed useless, we derive rules that can avoid their generation and thus decrease costs. To the best of our knowledge, we introduce 37 new rules that can avoid useless mutants right before their generation. We then implement a subset of these rules in the MUJAVA mutation testing tool. Since our rules have been derived based on artificial and small Java programs, we take our MUJAVA version embedded with our rules and execute it in industrial-scale projects. Our rules reduced the number of mutants by almost 13% on average. Our results are promising because (i) we avoid useless mutants generation; (ii) our strategy can help with identifying more rules in case we set it to use more complex Java programs; and (iii) our MUJAVA version has only a subset of the rules we derived.
Leonardo Fernandes, Márcio Ribeiro 0001, Rohit Gheyi, Melina Mongiovi, André L. M. Santos, Ana Cavalcanti 0001, Fabiano Cutigi Ferrari, José Carlos Maldonado
GPCE5
2017 Understanding the impact of refactoring on smells: a longitudinal study of 23 software projects
abstract
Code smells in a program represent indications of structural quality problems, which can be addressed by software refactoring. However, refactoring intends to achieve different goals in practice, and its application may not reduce smelly structures. Developers may neglect or end up creating new code smells through refactoring. Unfortunately, little has been reported about the beneficial and harmful effects of refactoring on code smells. This paper reports a longitudinal study intended to address this gap. We analyze how often commonly-used refactoring types affect the density of 13 types of code smells along the version histories of 23 projects. Our findings are based on the analysis of 16,566 refactorings distributed in 10 different types. Even though 79.4% of the refactorings touched smelly elements, 57% did not reduce their occurrences. Surprisingly, only 9.7% of refactorings removed smells, while 33.3% induced the introduction of new ones. More than 95% of such refactoring-induced smells were not removed in successive commits, which suggest refactorings tend to more frequently introduce long-living smells instead of eliminating existing ones. We also characterized and quantified typical refactoring-smell patterns, and observed that harmful patterns are frequent, including: (i) approximately 30% of the Move Method and Pull Up Method refactorings induced the emergence of God Class, and (ii) the Extract Superclass refactoring creates the smell Speculative Generality in 68% of the cases.
Diego Cedrim, Alessandro F. Garcia 0001, Melina Mongiovi, Rohit Gheyi, Leonardo da Silva Sousa, Rafael Maiani de Mello, Baldoino Fonseca dos Santos Neto, Márcio Ribeiro 0001, Alexander Chavez
ESEC/SIGSOFT FSE3
2017 TraceDiff: Debugging unexpected code behavior using trace divergences
abstract
Recent advances in program synthesis offer means to automatically debug student submissions and generate personalized feedback in massive programming classrooms. When automatically generating feedback for programming assignments, a key challenge is designing pedagogically useful hints that are as effective as the manual feedback given by teachers. Through an analysis of teachers' hint-giving practices in 132 online Q&A posts, we establish three design guidelines that an effective feedback design should follow. Based on these guidelines, we develop a feedback system that leverages both program synthesis and visualization techniques. Our system compares the dynamic code execution of both incorrect and fixed code and highlights how the error leads to a difference in behavior and where the incorrect code trace diverges from the expected solution. Results from our study suggest that our system enables students to detect and fix bugs that are not caught by students using another existing visual debugging tool.
Ryo Suzuki 0001, Gustavo Soares, Andrew Head, Elena L. Glassman, Ruan Reis, Melina Mongiovi, Loris D'Antoni, Björn Hartmann
VL/HCC6
2016 A change-centric approach to compile configurable systems with #ifdefs
abstract
Configurable systems typically use #ifdefs to denote variability. Generating and compiling all configurations may be time-consuming. An alternative consists of using variability-aware parsers, such as TypeChef. However, they may not scale. In practice, compiling the complete systems may be costly. Therefore, developers can use sampling strategies to compile only a subset of the configurations. We propose a change-centric approach to compile configurable systems with #ifdefs by analyzing only configurations impacted by a code change (transformation). We implement it in a tool called CHECKCONFIGMX, which reports the new compilation errors introduced by the transformation. We perform an empirical study to evaluate 3,913 transformations applied to the 14 largest files of BusyBox, Apache HTTPD, and Expat configurable systems. CHECKCONFIGMX finds 595 compilation errors of 20 types introduced by 41 developers in 214 commits (5.46% of the analyzed transformations). In our study, it reduces by at least 50% (an average of 99%) the effort of evaluating the analyzed transformations by comparing with the exhaustive approach without considering a feature model. CHECKCONFIGMX may help developers to reduce compilation effort to evaluate fine-grained transformations applied to configurable systems with #ifdefs.
Larissa Braz, Rohit Gheyi, Melina Mongiovi, Márcio Ribeiro 0001, Flávio Medeiros, Leopoldo Teixeira
GPCE3
2014 Scaling Testing of Refactoring Engines
abstract
Proving refactoring sound with respect to a formal semantics is considered a challenge. In practice, developers write test cases to check their refactoring implementations. However, it is difficult and time consuming to have a good test suite since it requires complex inputs (programs) and an oracle to check whether it is possible to apply the transformation. If it is possible, the resulting program must preserve the observable behavior. There are some automated techniques for testing refactoring engines. Nevertheless, they may have limitations related to the program generator (exhaustiveness, setup, expressiveness), automation (types of oracles, bug categorization), time consumption or kinds of refactorings that can be tested. In this paper, we extend our previous technique to test refactoring engines. We improve expressiveness of the program generator for testing more kinds of refactorings, such as Extract Function. Moreover, developers just need to specify the input's structure in a declarative language. They may also set the technique to skip some consecutive test inputs to improve performance. We evaluate our technique in 18 refactoring implementations of Java (Eclipse and JRRT) and C (Eclipse). We identify 76 bugs (53 new bugs) related to compilation errors, behavioral changes, and overly strong conditions. We also compare the impact of the skip on the time consumption and bug detection in our technique. By using a skip of 25 in the program generator, it reduces in 96% the time to test the refactoring implementations while missing only 3.9% of the bugs. In a few seconds, it finds the first failure related to compilation error or behavioral change.
Melina Mongiovi, Gustavo Mendes, Rohit Gheyi, Gustavo Soares, Márcio Ribeiro 0001
ICSME1
2014 Making refactoring safer through impact analysis
Melina Mongiovi, Rohit Gheyi, Gustavo Soares, Leopoldo Teixeira, Paulo Borba
Sci. Comput. Program.1
2011 Identifying overly strong conditions in refactoring implementations
abstract
Each refactoring implementation must check a number of conditions to guarantee behavior preservation. However, specifying and checking them are difficult. Sometimes refactoring tool developers may define overly strong conditions that prevent useful behavior-preserving transformations to be performed. We propose an approach for identifying overly strong conditions in refactoring implementations. We automatically generate a number of programs as test inputs for refactoring implementations. Then, we apply the same refactoring to each test input using two different implementations, and compare both results. We use Safe Refactor to evaluate whether a transformation preserves behavior. We evaluated our approach in 10 kinds of refactorings for Java implemented by three tools: Eclipse and Netbeans, and the JastAdd Refactoring Tool (JRRT). In a sample of 42,774 transformations, we identified 17 and 7 kinds of overly strong conditions in Eclipse and JRRT, respectively.
Gustavo Soares, Melina Mongiovi, Rohit Gheyi
ICSM2