PLDI '90 Proceedings of the ACM SIGPLAN 1990 conference on Programming language design and implementation
Experimental results from dynamic slicing of C programs
ACM Transactions on Programming Languages and Systems (TOPLAS)
POPL '98 Proceedings of the 25th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A linear space algorithm for computing maximal common subsequences
Communications of the ACM
Dynamically Discovering Likely Program Invariants to Support Program Evolution
IEEE Transactions on Software Engineering - Special issue on 1999 international conference on software engineering
Featherweight Java: a minimal core calculus for Java and GJ
ACM Transactions on Programming Languages and Systems (TOPLAS)
Simplifying and Isolating Failure-Inducing Input
IEEE Transactions on Software Engineering
Isolating cause-effect chains from computer programs
Proceedings of the 10th ACM SIGSOFT symposium on Foundations of software engineering
Bug isolation via remote program sampling
PLDI '03 Proceedings of the ACM SIGPLAN 2003 conference on Programming language design and implementation
A Survey of Longest Common Subsequence Algorithms
SPIRE '00 Proceedings of the Seventh International Symposium on String Processing Information Retrieval (SPIRE'00)
Cost effective dynamic program slicing
Proceedings of the ACM SIGPLAN 2004 conference on Programming language design and implementation
Chianti: a tool for change impact analysis of java programs
OOPSLA '04 Proceedings of the 19th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Matching execution histories of program versions
Proceedings of the 10th European software engineering conference held jointly with 13th ACM SIGSOFT international symposium on Foundations of software engineering
DSD-Crasher: a hybrid analysis tool for bug finding
Proceedings of the 2006 international symposium on Software testing and analysis
Have things changed now?: an empirical study of bug characteristics in modern open source software
Proceedings of the 1st workshop on Architectural and system support for improving software dependability
Finding failure-inducing changes in java programs using change classification
Proceedings of the 14th ACM SIGSOFT international symposium on Foundations of software engineering
JDiff: A differencing technique and tool for object-oriented programs
Automated Software Engineering
Proceedings of the 22nd annual ACM SIGPLAN conference on Object-oriented programming systems and applications
Extraction of bug localization benchmarks from history
Proceedings of the twenty-second IEEE/ACM international conference on Automated software engineering
Efficient program execution indexing
Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation
Accurately choosing execution runs for software fault localization
CC'06 Proceedings of the 15th international conference on Compiler Construction
Automatically documenting program changes
Proceedings of the IEEE/ACM international conference on Automated software engineering
An approach for modeling dynamic analysis using ontologies
Proceedings of the Eighth International Workshop on Dynamic Analysis
Memory indexing: canonicalizing addresses across executions
Proceedings of the eighteenth ACM SIGSOFT international symposium on Foundations of software engineering
Differential static analysis: opportunities, applications, and challenges
Proceedings of the FSE/SDP workshop on Future of software engineering research
Selecting peers for execution comparison
Proceedings of the 2011 International Symposium on Software Testing and Analysis
An integrated bug processing framework
Proceedings of the 34th International Conference on Software Engineering
Improving failure-inducing changes identification using coverage analysis
Proceedings of the 34th International Conference on Software Engineering
Execution trace exploration and analysis using ontologies
RV'11 Proceedings of the Second international conference on Runtime verification
Practical isolation of failure-inducing changes for debugging regression faults
Proceedings of the 27th IEEE/ACM International Conference on Automated Software Engineering
Reusing debugging knowledge via trace-based bug search
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Detecting inconsistencies in wrappers: a case study
Proceedings of the 2013 International Conference on Software Engineering
Efficiently rewriting large multimedia application execution traces with few event sequences
Proceedings of the 19th ACM SIGKDD international conference on Knowledge discovery and data mining
Hi-index | 0.00 |
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.