Error detection by refactoring reconstruction

In many cases it is not sufficient to perform a refactoring only at one location of a software project. For example, refactorings may have to be performed consistently to several classes in the inheritance hierarchy, e.g. subclasses or implementing classes, to preserve equal behavior.In this paper we show how to detect incomplete refactorings - which can cause long standing bugs because some of them do not cause compiler errors - by analyzing software archives. To this end we reconstruct the class inheritance hierarchies, as well as refactorings on the level of methods. Then, we relate these refactorings to the corresponding hierarchy in order to find missing refactorings and thus, errors and inconsistencies that have been introduced in a software project at some point of the history.Finally. we demonstrate our approach by case studies on two open source projects.

[1]  William A. Florac,et al.  Goal-Driven Software Measurement. A Guidebook. , 1996 .

[2]  Edward L. Jones Grading student programs - a software testing approach , 2001 .

[3]  Adam A. Porter,et al.  Anywhere, Anytime Code Inspections: Using the Web to Remove Inspection Bottlenecks in Large-Scale Software Development , 1997, Proceedings of the (19th) International Conference on Software Engineering.

[4]  Carsten Görg,et al.  Detecting and visualizing refactorings from software archives , 2005, 13th International Workshop on Program Comprehension (IWPC'05).

[5]  Stephen G. Eick,et al.  Visualizing software systems , 1994, Proceedings of 16th International Conference on Software Engineering.

[6]  Dewayne E. Perry,et al.  Towards Understanding the Rhetoric of Small Changes , 2004, MSR.

[7]  Anas N. Al-Rabadi,et al.  A comparison of modified reconstructability analysis and Ashenhurst‐Curtis decomposition of Boolean functions , 2004 .

[8]  Thomas Zimmermann,et al.  Preprocessing CVS Data for Fine-Grained Analysis , 2004, MSR.

[9]  Stephen H. Edwards Rethinking computer science education from a test-first perspective , 2003, OOPSLA '03.

[10]  Mary Poppendieck,et al.  Lean Software Development: An Agile Toolkit , 2003 .

[11]  Harald C. Gall,et al.  Populating a Release History Database from version control and bug tracking systems , 2003, International Conference on Software Maintenance, 2003. ICSM 2003. Proceedings..

[12]  Andreas Zeller,et al.  Yesterday, my program worked. Today, it does not. Why? , 1999, ESEC/FSE-7.

[13]  Audris Mockus,et al.  Identifying reasons for software changes using historic databases , 2000, Proceedings 2000 International Conference on Software Maintenance.

[14]  Oscar Nierstrasz,et al.  Finding refactorings via change metrics , 2000, OOPSLA '00.

[15]  David Notkin,et al.  An empirical study of static call graph extractors , 1996, Proceedings of IEEE 18th International Conference on Software Engineering.

[16]  Harald C. Gall,et al.  Analyzing and relating bug report data for feature tracking , 2003, 10th Working Conference on Reverse Engineering, 2003. WCRE 2003. Proceedings..

[17]  David Jackson,et al.  Grading student programs using ASSYST , 1997, SIGCSE '97.

[18]  Kenneth A. Reek,et al.  A software infrastructure to support introductory computer science courses , 1996, SIGCSE '96.

[19]  Eleni Stroulia,et al.  Using CVS Historical Information to Understand How Students Develop Software , 2004, MSR.

[20]  Martin Fowler,et al.  Refactoring - Improving the Design of Existing Code , 1999, Addison Wesley object technology series.

[21]  Carl Gutwin,et al.  Mining a Software Developer's Local Interaction History , 2004, MSR.

[22]  Gail C. Murphy,et al.  Hipikat: recommending pertinent software development artifacts , 2003, 25th International Conference on Software Engineering, 2003. Proceedings..

[23]  大野 耐一,et al.  Toyota production system : beyond large-scale production , 1988 .

[24]  Elaine J. Weyuker,et al.  A Tool for Mining Defect-Tracking Systems to Predict Fault-Prone Files , 2004, MSR.