Experimentation in software engineering
IEEE Transactions on Software Engineering
Finding refactorings via change metrics
OOPSLA '00 Proceedings of the 15th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Evolving Object-Oriented Designs with Refactorings
Automated Software Engineering
Automated Software Engineering
Reconstruction of Successful Software Evolution Using Clone Detection
IWPSE '03 Proceedings of the 6th International Workshop on Principles of Software Evolution
Refactoring for generalization using type constraints
OOPSLA '03 Proceedings of the 18th annual ACM SIGPLAN conference on Object-oriented programing, systems, languages, and applications
An Automatic Approach to identify Class Evolution Discontinuities
IWPSE '04 Proceedings of the Principles of Software Evolution, 7th International Workshop
Algebraic reasoning for object-oriented programming
Science of Computer Programming - Special issue on program transformation
Using Origin Analysis to Detect Merging and Splitting of Source Code Entities
IEEE Transactions on Software Engineering
Detecting and Visualizing Refactorings from Software Archives
IWPC '05 Proceedings of the 13th International Workshop on Program Comprehension
CatchUp!: capturing and replaying refactorings to support API evolution
Proceedings of the 27th international conference on Software engineering
The Role of Refactorings in API Evolution
ICSM '05 Proceedings of the 21st IEEE International Conference on Software Maintenance
UMLDiff: an algorithm for object-oriented design differencing
Proceedings of the 20th IEEE/ACM international Conference on Automated software engineering
Are refactorings less error-prone than other changes?
Proceedings of the 2006 international workshop on Mining software repositories
Identifying Refactorings from Source-Code Changes
ASE '06 Proceedings of the 21st IEEE/ACM International Conference on Automated Software Engineering
Refactoring Detection based on UMLDiff Change-Facts Queries
WCRE '06 Proceedings of the 13th Working Conference on Reverse Engineering
Feedback-Directed Random Test Generation
ICSE '07 Proceedings of the 29th international conference on Software Engineering
Automatic Inference of Structural Changes for Matching across Program Versions
ICSE '07 Proceedings of the 29th international conference on Software Engineering
On the relation of refactorings and software defect prediction
Proceedings of the 2008 international working conference on Mining software repositories
Refactoring Tools: Fitness for Purpose
IEEE Software
Sound and extensible renaming for java
Proceedings of the 23rd ACM SIGPLAN conference on Object-oriented programming systems languages and applications
Laws of Object-Orientation with Reference Semantics
SEFM '08 Proceedings of the 2008 Sixth IEEE International Conference on Software Engineering and Formal Methods
Challenge proposal: verification of refactorings
Proceedings of the 3rd workshop on Programming languages meets program verification
How we refactor, and how we know it
ICSE '09 Proceedings of the 31st International Conference on Software Engineering
Stepping Stones over the Refactoring Rubicon
Genoa Proceedings of the 23rd European Conference on ECOOP 2009 --- Object-Oriented Programming
Gathering refactoring data: a comparison of four methods
Proceedings of the 2nd Workshop on Refactoring Tools
Advanced Data Mining Techniques
Advanced Data Mining Techniques
Tool Support for Change-Centric Test Development
IEEE Software
Making Program Refactoring Safer
IEEE Software
Specifying and implementing refactorings
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Template-based reconstruction of complex refactorings
ICSM '10 Proceedings of the 2010 IEEE International Conference on Software Maintenance
An empirical investigation into the role of API-level refactorings during software evolution
Proceedings of the 33rd International Conference on Software Engineering
Analyzing Refactorings on Software Repositories
SBES '11 Proceedings of the 2011 25th Brazilian Symposium on Software Engineering
Identifying overly strong conditions in refactoring implementations
ICSM '11 Proceedings of the 2011 27th IEEE International Conference on Software Maintenance
How We Refactor, and How We Know It
IEEE Transactions on Software Engineering
Automated detection of refactorings in evolving components
ECOOP'06 Proceedings of the 20th European conference on Object-Oriented Programming
ASE '11 Proceedings of the 2011 26th IEEE/ACM International Conference on Automated Software Engineering
Use, disuse, and misuse of automated refactorings
Proceedings of the 34th International Conference on Software Engineering
A field study of refactoring challenges and benefits
Proceedings of the ACM SIGSOFT 20th International Symposium on the Foundations of Software Engineering
An empirical investigation into the impact of refactoring on regression testing
ICSM '12 Proceedings of the 2012 IEEE International Conference on Software Maintenance (ICSM)
Hi-index | 0.00 |
Some approaches have been used to investigate evidence on how developers refactor their code, whether refactorings activities may decrease the number of bugs, or improve developers' productivity. However, there are some contradicting evidence in previous studies. For instance, some investigations found evidence that if the number of refactoring changes increases in the preceding time period the number of defects decreases, different from other studies. They have used different approaches to evaluate refactoring activities. Some of them identify committed behavior-preserving transformations in software repositories by using manual analysis, commit messages, or dynamic analysis. Others focus on identifying which refactorings are applied between two programs by using manual inspection or static analysis. In this work, we compare three different approaches based on manual analysis, commit message (Ratzinger's approach) and dynamic analysis (SafeRefactor's approach) to detect whether a pair of versions determines a refactoring, in terms of behavioral preservation. Additionally, we compare two approaches (manual analysis and Ref-Finder) to identify which refactorings are performed in each pair of versions. We perform both comparisons by evaluating their accuracy, precision, and recall in a randomly selected sample of 40 pairs of versions of JHotDraw, and 20 pairs of versions of Apache Common Collections. While the manual analysis presents the best results in both comparisons, it is not as scalable as the automated approaches. Ratzinger's approach is simple and fast, but presents a low recall; differently, SafeRefactor is able to detect most applied refactorings, although limitations in its test generation backend results for some kinds of subjects in low precision values. Ref-Finder presented a low precision and recall in our evaluation.