ABSTRACT
Software debugging is the process of locating and correcting faulty code. Prior techniques to locate faulty code either use program analysis techniques such as backward dynamic program slicing or exclusively use delta debugging to analyze the state changes during program execution. In this paper, we present a new approach that integrates the potential of delta debugging algorithm with the benefit of forward and backward dynamic program slicing to narrow down the search for faulty code. Our approach is to use delta debugging algorithm to identify a minimal failure-inducing input, use this input to compute a forward dynamic slice and then intersect the statements in this forward dynamic slice with the statements in the backward dynamic slice of the erroneous output to compute a failure-inducing chop. We implemented our technique and conducted experiments with faulty versions of several programs from the Siemens suite to evaluate our technique. Our experiments show that failure-inducing chops can greatly reduce the size of search space compared to the dynamic slices without significantly compromising the capability to locate the faulty code. We also applied our technique to several programs with known memory related bugs such as buffer overflow bugs. The failure-inducing chop in several of these cases contained only 2 to 4 statements which included the code causing memory corruption.
- H. Agrawal and J. Horgan, "Dynamic program slicing," ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI), pages 246--256, 1990. Google ScholarDigital Library
- H. Agrawal, R. DeMillo, and E. Spafford, "Debugging with dynamic slicing and backtracking," Software Practice and Experience (SP&E), Vol. 23, No. 6, pages 589--616, 1993. Google ScholarDigital Library
- H. Agrawal, J.R. Horgan, E.W., and S.A. London, "Incremental regression testing," IEEE Conference on Software Maintenance (ICSM), Montreal, Canada, 1993. Google ScholarDigital Library
- H. Agrawal, J. Horgan, S. London, and W. Wong, "Fault localization using execution slices and dataflow tests," Sixth IEEE International Symposium on Software Reliability Engineering (ISSRE), pages 143--151, 1995.Google Scholar
- AskIgor, Automated Debugging Service. http://www.st.cs.uni-sb.de/askigor/Google Scholar
- A. Beszedes, T. Gergely, Z.M. Szabo, J. Csirik, and T. Gyimothy, "Dynamic slicing method for maintenance of large C programs," 5th European Conference on Software Maintenance and Reengineering (CSMR), pages 105--113, March 2001. Google ScholarDigital Library
- H. Cleve and Andreas Zeller, "Locating causes of program failures," 27th International Conference on Software Engineering (ICSE), pages 342--351, 2005. Google ScholarDigital Library
- Diablo Is A Better Link-time Optimizer. http://www.elis.ugent.be/diablo/Google Scholar
- T. Gyimothy, A. Beszedes, I. Forgacs, "An efficient relevant slicing method for debugging," 7th European Software Engineering Conference/ 7th ACM SIGSOFT International Symposium on Foundations of Software Engineering (ESEC/FSE), Toulouse, France, 1999. Google ScholarDigital Library
- S. Hangal and M.S. Lam, "Tracking down software bugs using automatic anomaly detection," International Conference on Software Engineering (ICSE), 2002. Google ScholarDigital Library
- M. J. Harrold,, G. Rothermel, K. Sayre, R. Wu, and L. Yi, "An empirical investigation of the relationship between spectra differences and regression faults,"Journal of Software Testing Verification and Reliability, 10(3):171--194, 2000.Google ScholarCross Ref
- H. He and N. Gupta, "Automated Debugging using Path-Based Weakest Preconditions," Fundamental Approaches to Software Engineering (FASE), ETAPS Joint Conference, Barcelona, Spain, March 29--31, 2004.Google Scholar
- http://www.cse.unl.edu/~galileo/sirGoogle Scholar
- M. Hutchins, H. Foster, T. Goradia, and T. Ostrand, "Experiments on the effectiveness of dataflow and controlflow based test adequacy criteria," 16th International Conference on Software Engineering (ICSE), pages 191--200, 1994. Google ScholarDigital Library
- Information Week, Issue on Software Quality, Jan 21, 2002.Google Scholar
- J.A. Jones, M.J. Harrold, and J. Stasko, "Visualization of test information to assist fault localization,"International Conf. on Software Engineering (ICSE), page 467--477, 2002. Google ScholarDigital Library
- B. Korel and J. Laski, "Dynamic program slicing,"Information Processing Letters (IPL), Vol. 29, No. 3, pages 155--163, 1988. Google ScholarDigital Library
- B. Korel and J. Rilling, "Application of dynamic slicing in program debugging," 3rd International Workshop on Automatic Debugging (AADEBUG), Linkoping, 1997.Google Scholar
- B. Liblit, A. Aiken, A. X. Zheng, and M. I. Jordan, "Bug isolation via remote program sampling," SIGPLAN Conference on Programming Language Design and Implementation (PLDI), San Diego, California, June 2003. Google ScholarDigital Library
- S. Narayanaswamy, G. Pokam, and B. Calder, "BugNet: continuously recording program execution for deterministic replay debugging," 32nd International Symposium on Computer Architecture (ISCA), pages 284--295, 2005. Google ScholarDigital Library
- M. Renieris and S. Reiss, "Fault localization with nearest neighbor queries,"Automated Software Engineering (ASE), 2003.Google Scholar
- The Unravel Project. http://hissa.nist.gov/unravel/Google Scholar
- Valgrind. http://valgrind.org/Google Scholar
- M. Weiser, "Program slicing," IEEE Transactions on Software Engineering (TSE), Vol. SE-10, No. 4, pages 352--357, 1982.Google ScholarDigital Library
- Y. Xie and D. Engler, "Using Redundancies to Find Errors,"ACM SIFSOFT International Symposium on Foundations of Software Engineering (FSE), pages 51--60, 2002. Google ScholarDigital Library
- A. Zeller, "Isolating cause-effect chains from computer programs,"10th ACM SIGSOFT Symposium on Foundations of Software Engineering (FSE), Charleston, South Carolina, 2002. Google ScholarDigital Library
- A. Zeller, "Yesterday, my program worked. Today, it does not. Why?," Seventh European Software Engineering Conference/ Seventh ACM SIGSOFT Symposium on Foundations of Software Engineering (ESEC/FSE), pages 253--267, Sept. 1999. Google ScholarDigital Library
- A. Zeller and R. Hildebrandt, "Simplifying and isolating failure-inducing input," IEEE Transactions on Software Engineering (TSE), Vol 28, No 2, Feb. 2002. Google ScholarDigital Library
- X. Zhang, R. Gupta, and Y. Zhang "Precise dynamic slicing algorithms," IEEE/ACM International Conference on Software Engineering (ICSE), pages 319-329, Portland, Oregon, May 2003. Google ScholarDigital Library
- X. Zhang, R. Gupta, and Y. Zhang, "Effective forward computation of dynamic slices using reduced ordered binary decision diagrams," IEEE International Conference on Software Engineering (ICSE), pages 502--511, 2004. Google ScholarDigital Library
- X. Zhang, H. He, N. Gupta and R. Gupta, "Experimental evaluation of using dynamic slices for fault location," Sixth International Symposium on Automated and Analysis-Driven Debugging (AADEBUG), Monterey, California, September 2005. Google ScholarDigital Library
- X. Zhang and R. Gupta, "Cost effective dynamic program slicing,"ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI), pages 94-106, Washington D.C., June 2004. Google ScholarDigital Library
- P. Zhou, W. Liu, L. Fei, S. Lu, F. Qin, Y. Zhou, S.P. Midkiff, and J. Torrellas, "AccMon: automatically detecting memory-related bugs via program counter-based invariants,"37th Annual International Symposium on Microarchitecture (MICRO), pages 269--280, 2004. Google ScholarDigital Library
Index Terms
- Locating faulty code using failure-inducing chops
Recommendations
Practical isolation of failure-inducing changes for debugging regression faults
ASE '12: Proceedings of the 27th IEEE/ACM International Conference on Automated Software EngineeringDuring software evolution, new released versions still contain many bugs. One common scenario is that end users encounter regression faults and submit them to bug tracking systems. Different from in-house regression testing, typically only one test ...
Slicing and replaying code change history
ASE '12: Proceedings of the 27th IEEE/ACM International Conference on Automated Software EngineeringChange-aware development environments have recently become feasible and reasonable. These environments can automatically record fine-grained code changes on a program and allow programmers to replay the recorded changes in chronological order. However, ...
Generalized algorithmic debugging and testing
This paper presents a method for semi-automatic bug localization, generalized algorithmic debugging, which has been integrated with the category partition method for functional testing. In this way the efficiency of the algorithmic debugging method for ...
Comments