Information Processing Letters
Identifying the semantic and textual differences between two versions of a program
PLDI '90 Proceedings of the ACM SIGPLAN 1990 conference on Programming language design and implementation
PLDI '90 Proceedings of the ACM SIGPLAN 1990 conference on Programming language design and implementation
A safe, efficient regression test selection technique
ACM Transactions on Software Engineering and Methodology (TOSEM)
TestTube: a system for selective regression testing
ICSE '94 Proceedings of the 16th international conference on Software engineering
Yesterday, my program worked. Today, it does not. Why?
ESEC/FSE-7 Proceedings of the 7th European software engineering conference held jointly with the 7th ACM SIGSOFT international symposium on Foundations of software engineering
Prioritizing test cases for regression testing
Proceedings of the 2000 ACM SIGSOFT international symposium on Software testing and analysis
Simplifying and Isolating Failure-Inducing Input
IEEE Transactions on Software Engineering
Effectively prioritizing tests in development environment
ISSTA '02 Proceedings of the 2002 ACM SIGSOFT international symposium on Software testing and analysis
Isolating cause-effect chains from computer programs
Proceedings of the 10th ACM SIGSOFT symposium on Foundations of software engineering
Modernizing Legacy Systems: Software Technologies, Engineering Process and Business Practices
Modernizing Legacy Systems: Software Technologies, Engineering Process and Business Practices
From symptom to cause: localizing errors in counterexample traces
POPL '03 Proceedings of the 30th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Semantic Diff: A Tool for Summarizing the Effects of Modifications
ICSM '94 Proceedings of the International Conference on Software Maintenance
Using Compressed Bytecode Traces for Slicing Java Programs
Proceedings of the 26th International Conference on Software Engineering
A Differencing Algorithm for Object-Oriented Programs
Proceedings of the 19th IEEE international conference on Automated software engineering
OOPSLA '04 Companion to the 19th annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
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
Scalable statistical bug isolation
Proceedings of the 2005 ACM SIGPLAN conference on Programming language design and implementation
DART: directed automated random testing
Proceedings of the 2005 ACM SIGPLAN conference on Programming language design and implementation
CUTE: a concolic unit testing engine for C
Proceedings of the 10th European software engineering conference held jointly with 13th ACM SIGSOFT international symposium on Foundations of software engineering
Cooperative bug isolation
Pruning dynamic slices with confidence
Proceedings of the 2006 ACM SIGPLAN conference on Programming language design and implementation
DSD-Crasher: a hybrid analysis tool for bug finding
Proceedings of the 2006 international symposium on Software testing and analysis
Questions programmers ask during software evolution tasks
Proceedings of the 14th ACM SIGSOFT international symposium on Foundations of software engineering
Detecting increases in feature coupling using regression tests
Proceedings of the 14th ACM SIGSOFT international symposium on Foundations of software engineering
Proceedings of the 2007 ACM SIGPLAN conference on Programming language design and implementation
Towards locating execution omission errors
Proceedings of the 2007 ACM SIGPLAN conference on Programming language design and implementation
SS'07 Proceedings of 16th USENIX Security Symposium on USENIX Security Symposium
CAV '08 Proceedings of the 20th international conference on Computer Aided Verification
Differential symbolic execution
Proceedings of the 16th ACM SIGSOFT International Symposium on Foundations of software engineering
BitBlaze: A New Approach to Computer Security via Binary Analysis
ICISS '08 Proceedings of the 4th International Conference on Information Systems Security
Boolector: An Efficient SMT Solver for Bit-Vectors and Arrays
TACAS '09 Proceedings of the 15th International Conference on Tools and Algorithms for the Construction and Analysis of Systems: Held as Part of the Joint European Conferences on Theory and Practice of Software, ETAPS 2009,
Darwin: an approach for debugging evolving programs
Proceedings of the the 7th joint meeting of the European software engineering conference and the ACM SIGSOFT symposium on The foundations of software engineering
Test-Suite Augmentation for Evolving Software
ASE '08 Proceedings of the 2008 23rd IEEE/ACM International Conference on Automated Software Engineering
CAV'07 Proceedings of the 19th international conference on Computer aided verification
A decision procedure for bit-vectors and arrays
CAV'07 Proceedings of the 19th international conference on Computer aided verification
TACAS'08/ETAPS'08 Proceedings of the Theory and practice of software, 14th international conference on Tools and algorithms for the construction and analysis of systems
Accurately choosing execution runs for software fault localization
CC'06 Proceedings of the 15th international conference on Compiler Construction
Improving failure-inducing changes identification using coverage analysis
Proceedings of the 34th International Conference on Software Engineering
Practical isolation of failure-inducing changes for debugging regression faults
Proceedings of the 27th IEEE/ACM International Conference on Automated Software Engineering
RADAR: a tool for debugging regression problems in C/C++ software
Proceedings of the 2013 International Conference on Software Engineering
Hi-index | 0.00 |
Bugs in programs are often introduced when programs evolve from a stable version to a new version. In this article, we propose a new approach called DARWIN for automatically finding potential root causes of such bugs. Given two programs—a reference program and a modified program—and an input that fails on the modified program, our approach uses symbolic execution to automatically synthesize a new input that (a) is very similar to the failing input and (b) does not fail. We find the potential cause(s) of failure by comparing control-flow behavior of the passing and failing inputs and identifying code fragments where the control flows diverge. A notable feature of our approach is that it handles hard-to-explain bugs, like code missing errors, by pointing to code in the reference program. We have implemented this approach and conducted experiments using several real-world applications, such as the Apache Web server, libPNG (a library for manipulating PNG images), and TCPflow (a program for displaying data sent through TCP connections). In each of these applications, DARWIN was able to localize bugs with high accuracy. Even though these applications contain several thousands of lines of code, DARWIN could usually narrow down the potential root cause(s) to less than ten lines. In addition, we find that the inputs synthesized by DARWIN provide additional value by revealing other undiscovered errors.