Antipattern-Based Detection of Deficiencies in Java Multithreaded Software
QSIC '04 Proceedings of the Quality Software, Fourth International Conference
Check 'n' crash: combining static checking and testing
Proceedings of the 27th international conference on Software engineering
A similarity-aware approach to testing based fault localization
Proceedings of the 20th IEEE/ACM international Conference on Automated software engineering
DSD-Crasher: a hybrid analysis tool for bug finding
Proceedings of the 2006 international symposium on Software testing and analysis
Model-Based Debugging -- State of the Art And Future Challenges
Electronic Notes in Theoretical Computer Science (ENTCS)
DSD-Crasher: A hybrid analysis tool for bug finding
ACM Transactions on Software Engineering and Methodology (TOSEM)
On similarity-awareness in testing-based fault localization
Automated Software Engineering
Application of redundant computation in program debugging
Journal of Systems and Software
Test input reduction for result inspection to facilitate fault localization
Automated Software Engineering
Expect the unexpected: error code mismatches between documentation and the real world
Proceedings of the 9th ACM SIGPLAN-SIGSOFT workshop on Program analysis for software tools and engineering
AI for the win: improving spectrum-based fault localization
ACM SIGSOFT Software Engineering Notes
Hi-index | 0.01 |
Programmers generally attempt to perform useful work. If they performed an action, it was because they believed it served some purpose. Redundant operations violate this belief. However, in the past, redundant operations have been typically regarded as minor cosmetic problems rather than serious errors. This paper demonstrates that, in fact, many redundancies are as serious as traditional hard errors (such as race conditions or null pointer dereferences). We experimentally test this idea by writing and applying five redundancy checkers to a number of large open source projects, finding many errors. We then show that, even when redundancies are harmless, they strongly correlate with the presence of traditional hard errors. Finally, we show how flagging redundant operations gives a way to detect mistakes and omissions in specifications. For example, a locking specification that binds shared variables to their protecting locks can use redundancies to detect missing bindings by flagging critical sections that include no shared state.