Program restructuring as an aid to software maintenance
Program restructuring as an aid to software maintenance
Refactoring: improving the design of existing code
Refactoring: improving the design of existing code
Java Quality Assurance by Detecting Code Smells
WCRE '02 Proceedings of the Ninth Working Conference on Reverse Engineering (WCRE'02)
Detection Strategies: Metrics-Based Rules for Detecting Design Flaws
ICSM '04 Proceedings of the 20th IEEE International Conference on Software Maintenance
Product Metrics for Automatic Identification of "Bad Smell" Design Problems in Java Source-Code
METRICS '05 Proceedings of the 11th IEEE International Software Metrics Symposium
UMLDiff: an algorithm for object-oriented design differencing
Proceedings of the 20th IEEE/ACM international Conference on Automated software engineering
Improving usability of refactoring tools
Companion to the 21st ACM SIGPLAN symposium on Object-oriented programming systems, languages, and applications
API-Evolution Support with Diff-CatchUp
IEEE Transactions on Software Engineering
Change Distilling: Tree Differencing for Fine-Grained Source Code Change Extraction
IEEE Transactions on Software Engineering
High velocity refactorings in Eclipse
Proceedings of the 2007 OOPSLA workshop on eclipse technology eXchange
Breaking the barriers to successful refactoring: observations and tools for extract method
Proceedings of the 30th international conference on Software engineering
How we refactor, and how we know it
ICSE '09 Proceedings of the 31st International Conference on Software Engineering
Gathering refactoring data: a comparison of four methods
Proceedings of the 2nd Workshop on Refactoring Tools
DECOR: A Method for the Specification and Detection of Code and Design Smells
IEEE Transactions on Software Engineering
AURA: a hybrid approach to identify framework evolution
Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering - Volume 1
Ref-Finder: a refactoring reconstruction tool based on logic query templates
Proceedings of the eighteenth ACM SIGSOFT international symposium on Foundations of software engineering
Template-based reconstruction of complex refactorings
ICSM '10 Proceedings of the 2010 IEEE International Conference on Software Maintenance
Detecting architecturally-relevant code smells in evolving software systems
Proceedings of the 33rd International Conference on Software Engineering
Automated detection of refactorings in evolving components
ECOOP'06 Proceedings of the 20th European conference on Object-Oriented Programming
Reconciling manual and automatic refactoring
Proceedings of the 34th International Conference on Software Engineering
Proceedings of the 2013 ACM SIGPLAN international conference on Object oriented programming systems languages & applications
A compositional paradigm of automating refactorings
ECOOP'13 Proceedings of the 27th European conference on Object-Oriented Programming
A comparative study of manual and automated refactorings
ECOOP'13 Proceedings of the 27th European conference on Object-Oriented Programming
Active support for clone refactoring: a perspective
Proceedings of the 2013 ACM workshop on Workshop on refactoring tools
Hi-index | 0.00 |
Integrated Development Environments (IDEs) have come to perform a wide variety of tasks on behalf of the programmer, refactoring being a classic example. These operations have undeniable benefits, yet their large (and growing) number poses a cognitive scalability problem. Our main contribution is WitchDoctor -- a system that can detect, on the fly, when a programmer is hand-coding a refactoring. The system can then complete the refactoring in the background and propose it to the user long before the user can complete it. This implies a number of technical challenges. The algorithm must be 1) highly efficient, 2) handle unparseable programs, 3) tolerate the variety of ways programmers may perform a given refactoring, 4) use the IDE's proven and familiar refactoring engine to perform the refactoring, even though the the refactoring has already begun, and 5) support the wide range of refactorings present in modern IDEs. Our techniques for overcoming these challenges are the technical contributions of this paper. We evaluate WitchDoctor's design and implementation by simulating over 5,000 refactoring operations across three open-source projects. The simulated user is faster and more efficient than an average human user, yet WitchDoctor can detect more than 90% of refactoring operations as they are being performed -- and can complete over a third of refactorings before the simulated user does. All the while, WitchDoctor remains robust in the face of non-parseable programs and unpredictable refactoring scenarios. We also show that WitchDoctor is efficient enough to perform computation on a keystroke-by-keystroke basis, adding an average overhead of only 15 milliseconds per keystroke.