Effective identification of failure-inducing changes: a hybrid approach

When regression tests fail unexpectedly after a long session of editing, it may be tedious for programmers to find out the failure-inducing changes by manually inspecting all code edits. To eliminate the expensive effort spent on debugging, we present a hybrid approach, which combines both static and dynamic analysis techniques, to automatically identify the faulty changes. Our approach first uses static change impact analysis to isolate a subset of responsible changes for a failed test, then utilizes the dynamic test execution information to rank these changes according to our proposed heuristic (indicating the likelihood that they may have contributed to the failure), and finally employs an improved Three-Phase delta debugging algorithm, working from the coarse method level to the fine statement level, to find a minimal set of faulty statements. We implemented the proposed approach for both Java and AspectJ programs in our AutoFlow prototype. In our evaluation with two third-party applications, we demonstrate that this hybrid approach can be very effective: at least for the subjective programs we investigated, it takes significantly (almost 4X) fewer tests than the original delta debugging algorithm to locate the faulty code.

[1]  Xiangyu Zhang,et al.  Locating faulty code using failure-inducing chops , 2005, ASE.

[2]  Xiangyu Zhang,et al.  Precise dynamic slicing algorithms , 2003, 25th International Conference on Software Engineering, 2003. Proceedings..

[3]  Barbara G. Ryder,et al.  Heuristic ranking of java program edits for fault localization , 2007, ISSTA '07.

[4]  Rajiv Gupta,et al.  Fault localization using value replacement , 2008, ISSTA '08.

[5]  Jianjun Zhao,et al.  Change impact analysis for AspectJ programs , 2008, 2008 IEEE International Conference on Software Maintenance.

[6]  Zhendong Su,et al.  HDD: hierarchical delta debugging , 2006, ICSE.

[7]  John T. Stasko,et al.  Visualization of test information to assist fault localization , 2002, ICSE '02.

[8]  Gregg Rothermel,et al.  Supporting Controlled Experimentation with Testing Techniques: An Infrastructure and its Potential Impact , 2005, Empirical Software Engineering.

[9]  Tao Xie,et al.  A framework and tool supports for generating test inputs of AspectJ programs , 2006, AOSD.

[10]  Frank Tip,et al.  Change impact analysis for object-oriented programs , 2001, PASTE '01.

[11]  Atanas Rountev,et al.  Regression Test Selection for AspectJ Software , 2007, 29th International Conference on Software Engineering (ICSE'07).

[12]  Xiangyu Zhang,et al.  Locating faults through automated predicate switching , 2006, ICSE.

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

[14]  Barbara G. Ryder,et al.  Crisp: a debugging tool for Java programs , 2005, 21st IEEE International Conference on Software Maintenance (ICSM'05).

[15]  Steven P. Reiss,et al.  Fault localization with nearest neighbor queries , 2003, 18th IEEE International Conference on Automated Software Engineering, 2003. Proceedings..

[16]  Gregor Kiczales,et al.  Aspect-oriented programming , 2001, ESEC/FSE-9.

[17]  Frank Tip,et al.  Finding failure-inducing changes in java programs using change classification , 2006, SIGSOFT '06/FSE-14.

[18]  Jianjun Zhao,et al.  Celadon: a change impact analysis tool for aspect-oriented programs , 2008, ICSE Companion '08.

[19]  Michal Young,et al.  Symbiosis of Static Analysis and Program Testing , 2003, FASE.

[20]  Cristina V. Lopes,et al.  Aspect-oriented programming , 1999, ECOOP Workshops.

[21]  Michael I. Jordan,et al.  Bug isolation via remote program sampling , 2003, PLDI.

[22]  Eugene H. Spafford,et al.  Failure and fault analysis for software debugging , 1997, Proceedings Twenty-First Annual International Computer Software and Applications Conference (COMPSAC'97).

[23]  Jong-Deok Choi,et al.  Isolating failure-inducing thread schedules , 2002, ISSTA '02.

[24]  Jianjun Zhao,et al.  AutoFlow: An automatic debugging tool for AspectJ software , 2008, 2008 IEEE International Conference on Software Maintenance.

[25]  Gregg Rothermel,et al.  An empirical comparison of dynamic impact analysis algorithms , 2004, Proceedings. 26th International Conference on Software Engineering.

[26]  Andreas Zeller,et al.  Simplifying and Isolating Failure-Inducing Input , 2002, IEEE Trans. Software Eng..

[27]  Frank Tip,et al.  Chianti: a tool for change impact analysis of java programs , 2004, OOPSLA.

[28]  Michael D. Ernst Static and dynamic analysis: synergy and duality , 2003 .

[29]  Jianjun Zhao,et al.  Change impact analysis for aspect-oriented software evolution , 2002, IWPSE '02.