ABSTRACT
As computer systems continue to become more powerful and complex, so do programs. High-level abstractions introduced to deal with complexity in large programs, while simplifying human reasoning, can often obfuscate salient program properties gleaned from automated source-level analysis through subtle (often non-local) interactions. Consequently, understanding the effects of program changes and whether these changes violate intended protocols become difficult to infer. Refactorings, and feature additions, modifications, or removals can introduce hard-to-catch bugs that often go undetected until many revisions later.
To address these issues, this paper presents a novel dynamic program analysis that builds a semantic view of program executions. These views reflect program abstractions and aspects; however, views are not simply projections of execution traces, but are linked to each other to capture semantic interactions among abstractions at different levels of granularity in a scalable manner.
We describe our approach in the context of Java and demonstrate its utility to improve regression analysis. We first formalize a subset of Java and a grammar for traces generated at program execution. We then introduce several types of views used to analyze regression bugs along with a novel, scalable technique for semantic differencing of traces from different versions of the same program. Benchmark results on large open-source Java programs demonstrate that semantic-aware trace differencing can identify precise and useful details about the underlying cause for a regression, even in programs that use reflection, multithreading, or dynamic code generation, features that typically confound other analysis techniques.
- H. Agrawal and J.R. Horgan. Dynamic Program Slicing. In PLDI-90, pages 246--256, 1990. Google Scholar
Digital Library
- T. Apiwattanapong, A. Orso, and M.J. Harrold. JDiff: A Differencing Technique and Tool for Object-Oriented Programs. ASE-07, 14(1):3--36, 2007. Google Scholar
Digital Library
- L. Bergroth, H. Hakonen, and T. Raita. A Survey of Longest Common Subsequence Algorithms. In SPIRE-00, page 39, 2000. Google Scholar
Digital Library
- C. Csallner and Y. Smaragdakis. DSD-Crasher: A Hybrid Analysis Tool for Bug Finding. In ISSTA-06, pages 245--254, 2006. Google Scholar
Digital Library
- Valentin Dallmeier and Thomas Zimmermann. Extraction of Bug Localization Benchmarks from History. In ASE, pages 433--436, 2007. Google Scholar
Digital Library
- M. Ernst, J. Cockrell, W. Griswold, and D. Notkin. Dynamically Discovering Likely Program Invariants to Support Program Evolution. TSE, 27(2):1--25, 2001. Google Scholar
Digital Library
- Matthew Flatt, Shriram Krishnamurthi, and Matthias Felleisen. Classes and Mixins. In Proceedings of the 25th ACM SIGPLAN SIGACT symposium on Principles of Programming Languages, pages 171--183. ACM Press, 1998. Google Scholar
Digital Library
- Liang Guo, Abhik Roychoudhury, and Tao Wang. Accurately Choosing Execution Runs for Software Fault Localization. In CC, pages 80--95, 2006. Google Scholar
Digital Library
- D. S. Hirschberg. A Linear Space Algorithm for Computing Maximal Common Subsequences. CACM, 18(6):341--343, 1975. Google Scholar
Digital Library
- Kevin Hoffman, Patrick Eugster, and Suresh Jagannathan. RPrism: Efficient Regression Analysis Using View-Based Trace Differencing. Technical Report dynt-200811-1, Purdue University, 2008.Google Scholar
- Atsushi Igarashi, Benjamin C. Pierce, and Philip Wadler. Featherweight Java: A Minimal Core Calculus for Java and GJ. ACM TOPLAS, 23(3):396--450, May 2001. Google Scholar
Digital Library
- G. Kiczales, J. Lamping, A. Menhdhekar, C. Maeda, C. Lopes, J.-M. Loingtier, and J. Irwin. Aspect-Oriented Programming. In ECOOP-97, pages 220--242, 1997.Google Scholar
Cross Ref
- Zhenmin Li, Lin Tan, Xuanhui Wang, Shan Lu, Yuanyuan Zhou, and Chengxiang Zhai. Have Things Changed Now?: An Empirical Study of Bug Characteristics in Modern Open Source Software. In ASID, pages 25--33, 2006. Google Scholar
Digital Library
- Ben Liblit, Alex Aiken, Alice X. Zheng, and Michael I. Jordan. Bug Isolation via Remote Program Sampling. In PLDI--03, pages 141--154, 2003. Google Scholar
Digital Library
- G. Pothier, E. Tanter, and J. Piquer. Scalable Omniscient Debugging. In OOPSLA-07, pages 535--552, 2007. Google Scholar
Digital Library
- X. Ren, F. Shah, F. Tip, B. Ryder, and O. Chesley. Chianti: A Tool for Change Impact Analysis of Java Programs. In OOPSLA-04, pages 432--448, 2004. Google Scholar
Digital Library
- M. Stoerzer, B. Ryder, X. Ren, and F. Tip. Finding Failure--Inducing Changes in Java Programs Using Change Classification. In ESECFSE--14, pages 57--68, 2006. Google Scholar
Digital Library
- F. Tip. A Survey of Program Slicing Techniques. Journal of programming languages, 3:121--189, 1995.Google Scholar
- G. A. Venkatesh. Experimental results from dynamic slicing of C programs. ACM Transactions on Programming Languages and Systems, 17(2):197--216, 1995. Google Scholar
Digital Library
- Bin Xin, William N. Sumner, and Xiangyu Zhang. Efficient Program Execution Indexing. In PLDI-08, pages 238--248, 2008. Google Scholar
Digital Library
- Andreas Zeller. Isolating Cause-Effect Chains from Computer Programs. In FSE-10, pages 1--10, 2002. Google Scholar
Digital Library
- Andreas Zeller and Ralf Hildebrandt. Simplifying and Isolating Failure-Inducing Input. TSE, 28(2):183--200, 2002. Google Scholar
Digital Library
- X. Zhang and R. Gupta. Cost Effective Dynamic Program Slicing. In PLDI-04, pages 94--106, 2004. Google Scholar
Digital Library
- X. Zhang and R. Gupta. Matching Execution Histories of Program Versions. In ESEC/FSE--13, pages 197--206, 2005. Google Scholar
Digital Library
Index Terms
Semantics-aware trace analysis
Recommendations
Semantics-aware trace analysis
PLDI '09As computer systems continue to become more powerful and complex, so do programs. High-level abstractions introduced to deal with complexity in large programs, while simplifying human reasoning, can often obfuscate salient program properties gleaned ...
A trace simplification technique for effective debugging of concurrent programs
FSE '10: Proceedings of the eighteenth ACM SIGSOFT international symposium on Foundations of software engineeringConcurrent programs are notoriously difficult to debug. We see two main reasons for this: 1) concurrency bugs are often difficult to reproduce, 2) traces of buggy concurrent executions can be complicated by fine-grained thread interleavings. Recently, a ...
Trace-based teaching in early programming courses
SIGCSE '13: Proceeding of the 44th ACM technical symposium on Computer science educationStudents in introductory programming courses struggle with building the mental models that correctly describe concepts such as variables, subroutine calls, and dynamic memory usage. This struggle leads to lowered student learning outcomes and, it has ...







Comments