skip to main content
Skip header Section
Why Programs Fail: A Guide to Systematic DebuggingOctober 2005
Publisher:
  • Morgan Kaufmann Publishers Inc.
  • 340 Pine Street, Sixth Floor
  • San Francisco
  • CA
  • United States
ISBN:978-1-55860-866-5
Published:01 October 2005
Skip Bibliometrics Section
Bibliometrics
Abstract

No abstract available.

Cited By

  1. ACM
    Deliema D, Bye J and Marupudi V (2024). Debugging Pathways: Open-Ended Discrepancy Noticing, Causal Reasoning, and Intervening, ACM Transactions on Computing Education, 24:2, (1-34), Online publication date: 10-May-2024.
  2. ACM
    Agarwal N Finding and Investigating Buggy Codes to Make CS1 Learning Efficient Proceedings of the 17th Innovations in Software Engineering Conference, (1-3)
  3. ACM
    Ding Y, Steenhoek B, Pei K, Kaiser G, Le W and Ray B TRACED: Execution-aware Pre-training for Source Code Proceedings of the 46th IEEE/ACM International Conference on Software Engineering, (1-12)
  4. ACM
    Agarwal N, Kumar V, Raman A and Karkare A A Bug's New Life: Creating Refute Questions from Filtered CS1 Student Code Snapshots Proceedings of the ACM Conference on Global Computing Education Vol 1, (7-14)
  5. ACM
    Jiang P, Sun F and Xia H Log-it: Supporting Programming with Interactive, Contextual, Structured, and Visual Logs Proceedings of the 2023 CHI Conference on Human Factors in Computing Systems, (1-16)
  6. ACM
    Lopes Da Silva D, Lordello Chaim M and Amario De Souza H Data flow Subsumption and its Impact on Spectrum-based Fault Localization Proceedings of the 7th Brazilian Symposium on Systematic and Automated Software Testing, (39-48)
  7. ACM
    Velez M, Jamshidi P, Siegmund N, Apel S and Kästner C On debugging the performance of configurable software systems Proceedings of the 44th International Conference on Software Engineering, (1571-1583)
  8. ACM
    Rein P, Beckmann T, Mattis T and Hirschfeld R Toward Understanding Task Complexity in Maintenance-Based Studies of Programming Tools Companion Proceedings of the 6th International Conference on the Art, Science, and Engineering of Programming, (38-45)
  9. Xu T, Chen L, Pei Y, Zhang T, Pan M and Furia C (2022). Restore: Retrospective Fault Localization Enhancing Automated Program Repair, IEEE Transactions on Software Engineering, 48:1, (309-326), Online publication date: 1-Jan-2022.
  10. ACM
    Wang G, Shen R, Chen J, Xiong Y and Zhang L Probabilistic Delta debugging Proceedings of the 29th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering, (881-892)
  11. ACM
    Whalley J, Settle A and Luxton-Reilly A Novice Reflections on Debugging Proceedings of the 52nd ACM Technical Symposium on Computer Science Education, (73-79)
  12. ACM
    Ohrndorf M, Pietsch C, Kelter U, Grunske L and Kehrer T (2021). History-based Model Repair Recommendations, ACM Transactions on Software Engineering and Methodology, 30:2, (1-46), Online publication date: 1-Mar-2021.
  13. ACM
    Whalley J, Settle A and Luxton-Reilly A Analysis of a Process for Introductory Debugging Proceedings of the 23rd Australasian Computing Education Conference, (11-20)
  14. ACM
    Mansur R, Kazerouni A, Edwards S and Shaffer C Exploring the Bug Investigation Techniques of Intermediate Student Programmers Proceedings of the 20th Koli Calling International Conference on Computing Education Research, (1-10)
  15. Van Tendeloo Y, Van Mierlo S and Vangheluwe H (2019). A Multi-Paradigm Modelling approach to live modelling, Software and Systems Modeling (SoSyM), 18:5, (2821-2842), Online publication date: 1-Oct-2019.
  16. ACM
    Henning J, Stangl D, Niephaus F, Kruck B and Hirschfeld R Hot Code Patching in CPython Proceedings of the 14th Workshop on Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems, (1-7)
  17. Aljedaani W, Nagappan M, Adams B and Godfrey M A comparison of bugs across the iOS and Android platforms of two open source cross platform browser apps Proceedings of the 6th International Conference on Mobile Software Engineering and Systems, (76-86)
  18. ACM
    Kume I, Shibayama E, Nakamura M and Nitta N Cutting Java Expressions into Lines for Detecting their Evaluation at Runtime Proceedings of the 2019 2nd International Conference on Geoinformatics and Data Analysis, (37-46)
  19. ACM
    Kafai Y, DeLiema D, Fields D, Lewandowski G and Lewis C Rethinking Debugging as Productive Failure for CS Education Proceedings of the 50th ACM Technical Symposium on Computer Science Education, (169-170)
  20. ACM
    da Silva F, de Souza H and Chaim M Usability evaluation of software debugging tools Proceedings of the XIV Brazilian Symposium on Information Systems, (1-7)
  21. ACM
    Carter J and Dewan P Contextualizing inferred programming difficulties Proceedings of the 3rd International Workshop on Emotion Awareness in Software Engineering, (32-38)
  22. ACM
    Laghari G and Demeyer S On the use of sequence mining within spectrum based fault localisation Proceedings of the 33rd Annual ACM Symposium on Applied Computing, (1916-1924)
  23. ACM
    McGrath W, Drew D, Warner J, Kazemitabaar M, Karchemsky M, Mellis D and Hartmann B Bifröst Proceedings of the 30th Annual ACM Symposium on User Interface Software and Technology, (299-310)
  24. ACM
    Dupriez T, Polito G and Ducasse S Analysis and exploration for new generation debuggers Proceedings of the 12th edition of the International Workshop on Smalltalk Technologies, (1-6)
  25. ACM
    Böhme M, Soremekun E, Chattopadhyay S, Ugherughe E and Zeller A Where is the bug and how is it fixed? an experiment with practitioners Proceedings of the 2017 11th Joint Meeting on Foundations of Software Engineering, (117-128)
  26. ACM
    Miljanovic M and Bradbury J RoboBUG Proceedings of the 2017 ACM Conference on International Computing Education Research, (93-100)
  27. Van Mierlo S, Gomes C and Vangheluwe H Explicit modelling and synthesis of debuggers for hybrid simulation languages Proceedings of the Symposium on Theory of Modeling & Simulation, (1-12)
  28. Van Tendeloo Y, Van Mierlo S and Vangheluwe H Time- and space-conscious omniscient debugging of parallel DEVS Proceedings of the Symposium on Theory of Modeling & Simulation, (1-12)
  29. ACM
    Roychoudhury A and Chandra S (2016). Formula-based software debugging, Communications of the ACM, 59:7, (68-77), Online publication date: 24-Jun-2016.
  30. Hentschel M, Hähnle R and Bubel R Can Formal Methods Improve the Efficiency of Code Reviews? Proceedings of the 12th International Conference on Integrated Formal Methods - Volume 9681, (3-19)
  31. ACM
    Gómez M, Rouvoy R, Adams B and Seinturier L Reproducing context-sensitive crashes of mobile apps using crowdsourced monitoring Proceedings of the International Conference on Mobile Software Engineering and Systems, (88-99)
  32. ACM
    Pflanzer M, Donaldson A and Lascu A Automatic Test Case Reduction for OpenCL Proceedings of the 4th International Workshop on OpenCL, (1-12)
  33. ACM
    Grieco G, Grinblat G, Uzal L, Rawat S, Feist J and Mounier L Toward Large-Scale Vulnerability Discovery using Machine Learning Proceedings of the Sixth ACM Conference on Data and Application Security and Privacy, (85-96)
  34. Ozcelik B and Yilmaz C (2016). Seer: A Lightweight Online Failure Prediction Approach, IEEE Transactions on Software Engineering, 42:1, (26-46), Online publication date: 1-Jan-2016.
  35. Chiş A, Denker M, Gîrba T and Nierstrasz O (2015). Practical domain-specific debuggers using the Moldable Debugger framework, Computer Languages, Systems and Structures, 44:PA, (89-113), Online publication date: 1-Dec-2015.
  36. ACM
    Guo P Codeopticon Proceedings of the 28th Annual ACM Symposium on User Interface Software & Technology, (599-608)
  37. ACM
    Azadmanesh M and Hauswirth M BLAST Proceedings of the Principles and Practices of Programming on The Java Platform, (152-158)
  38. ACM
    Laghari G, Murgia A and Demeyer S Localising faults in test execution traces Proceedings of the 14th International Workshop on Principles of Software Evolution, (1-8)
  39. ACM
    Molina R and Bergel A Toward a Platform for Visual Debugging Proceedings of the International Workshop on Smalltalk Technologies, (1-3)
  40. White M, Linares-Vásquez M, Johnson P, Bernal-Cárdenas C and Poshyvanyk D Generating reproducible and replayable bug reports from Android application crashes Proceedings of the 2015 IEEE 23rd International Conference on Program Comprehension, (48-59)
  41. Van Mierlo S, Van Tendeloo Y, Barroca B, Mustafiz S and Vangheluwe H Explicit modelling of a parallel DEVS experimentation environment Proceedings of the Symposium on Theory of Modeling & Simulation: DEVS Integrative M&S Symposium, (107-114)
  42. ACM
    Bosu A, Carver J, Hafiz M, Hilley P and Janni D Identifying the characteristics of vulnerable code changes: an empirical study Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering, (257-268)
  43. ACM
    Cao Y, Zhang H and Ding S SymCrash Proceedings of the 29th ACM/IEEE International Conference on Automated Software Engineering, (791-802)
  44. ACM
    Wu R, Zhang H, Cheung S and Kim S CrashLocator: locating crashing faults based on crash stacks Proceedings of the 2014 International Symposium on Software Testing and Analysis, (204-214)
  45. Vangheluwe H, Denil J, Mustafiz S, Riegelhaupt D and Van Mierlo S Explicit modelling of a CBD experimentation environment Proceedings of the Symposium on Theory of Modeling & Simulation - DEVS Integrative, (1-8)
  46. Kim D, Nam J, Song J and Kim S Automatic patch generation learned from human-written patches Proceedings of the 2013 International Conference on Software Engineering, (802-811)
  47. Khoo Y, Foster J and Hicks M Expositor: scriptable time-travel debugging with first-class traces Proceedings of the 2013 International Conference on Software Engineering, (352-361)
  48. Yu K, Lin M, Chen J and Zhang X (2012). Towards automated debugging in software evolution, Journal of Systems and Software, 85:10, (2305-2317), Online publication date: 1-Oct-2012.
  49. Yoo S Evolving human competitive spectra-based fault localisation techniques Proceedings of the 4th international conference on Search Based Software Engineering, (244-258)
  50. ACM
    Mayerhofer T and Langer P Moliz Proceedings of the 2nd International Master Class on Model-Driven Engineering: Modeling Wizards, (1-2)
  51. ACM
    Yu K, Lin M, Chen J and Zhang X Practical isolation of failure-inducing changes for debugging regression faults Proceedings of the 27th IEEE/ACM International Conference on Automated Software Engineering, (20-29)
  52. Yu K Improving failure-inducing changes identification using coverage analysis Proceedings of the 34th International Conference on Software Engineering, (1604-1606)
  53. Mayerhofer T Testing and debugging UML models based on fUML Proceedings of the 34th International Conference on Software Engineering, (1579-1582)
  54. ACM
    Hirschfeld R, Perscheid M and Haupt M (2011). Explicit use-case representation in object-oriented programming languages, ACM SIGPLAN Notices, 47:2, (51-60), Online publication date: 18-Mar-2012.
  55. ACM
    Hirschfeld R, Perscheid M and Haupt M Explicit use-case representation in object-oriented programming languages Proceedings of the 7th symposium on Dynamic languages, (51-60)
  56. Peyvandi-Pour A and Parsa S Effective software fault localization by statistically testing the program behavior model Proceedings of the Second international conference on Information Computing and Applications, (136-144)
  57. Savidis A and Koutsopoulos N Interactive object graphs for debuggers with improved visualization, inspection and configuration features Proceedings of the 7th international conference on Advances in visual computing - Volume Part I, (259-268)
  58. Parsa S, Asadi-Aghbolaghi M and Vahidi-Asl M Statistical debugging using a hierarchical model of correlated predicates Proceedings of the Third international conference on Artificial intelligence and computational intelligence - Volume Part I, (251-256)
  59. Parsa S, PorShokooh H, Teymouri S and Vahidi-Asl M A heuristic test data generation approach for program fault localization Proceedings of the Third international conference on Artificial intelligence and computational intelligence - Volume Part I, (236-243)
  60. ACM
    Naish L, Lee H and Ramamohanarao K (2011). A model for spectra-based software diagnosis, ACM Transactions on Software Engineering and Methodology, 20:3, (1-32), Online publication date: 1-Aug-2011.
  61. Arcuri A (2011). Evolutionary repair of faulty software, Applied Soft Computing, 11:4, (3494-3514), Online publication date: 1-Jun-2011.
  62. ACM
    Mousavian Z, Vahidi-Asl M and Parsa S Scalable graph analyzing approach for software fault-localization Proceedings of the 6th International Workshop on Automation of Software Test, (15-21)
  63. ACM
    Chandra S, Torlak E, Barman S and Bodik R Angelic debugging Proceedings of the 33rd International Conference on Software Engineering, (121-130)
  64. ACM
    Zaman S, Adams B and Hassan A Security versus performance bugs Proceedings of the 8th Working Conference on Mining Software Repositories, (93-102)
  65. Parsa S, Zareie F and Vahidi-Asl M Fuzzy clustering the backward dynamic slices of programs to identify the origins of failure Proceedings of the 10th international conference on Experimental algorithms, (352-363)
  66. Mcconnell R, Mehlhorn K, Näher S and Schweitzer P (2011). Survey, Computer Science Review, 5:2, (119-161), Online publication date: 1-May-2011.
  67. ACM
    Haupt M, Perscheid M and Hirschfeld R Type harvesting Proceedings of the 2011 ACM Symposium on Applied Computing, (1282-1289)
  68. ACM
    Hummer W, Leitner P and Dustdar S A step-by-step debugging technique to facilitate mashup development and maintenance Proceedings of the 3rd and 4th International Workshop on Web APIs and Services Mashups, (1-8)
  69. Parsa S, Peyvandi-Pour A and Vahidi-Asl M Introducing a new predicate network model constructed based on null hypothesis testing for software fault localization Proceedings of the First international conference on Information computing and applications, (197-204)
  70. Parsa S, Peyvandi-Pour A and Vahidi-Asl M Introducing a New Predicate Network Model Constructed Based on Null Hypothesis Testing for Software Fault Localization Proceedings of the First International Conference on Information Computing and Applications - Volume 6377, (197-204)
  71. Brummayer R, Lonsing F and Biere A Automated testing and debugging of SAT and QBF solvers Proceedings of the 13th international conference on Theory and Applications of Satisfiability Testing, (44-57)
  72. ACM
    Paar A Searching and using external types in an extensible software development environment Proceedings of 2010 ICSE Workshop on Search-driven Development: Users, Infrastructure, Tools and Evaluation, (37-40)
  73. ACM
    Hirschfeld R, Perscheid M, Schubert C and Appeltauer M Dynamic contract layers Proceedings of the 2010 ACM Symposium on Applied Computing, (2169-2175)
  74. ACM
    Lee B, Hirzel M, Grimm R and McKinley K Debug all your code Proceedings of the 24th ACM SIGPLAN conference on Object oriented programming systems languages and applications, (207-226)
  75. ACM
    Mirghasemi S Query-point debugging Proceedings of the 24th ACM SIGPLAN conference companion on Object oriented programming systems languages and applications, (763-764)
  76. ACM
    Lee B, Hirzel M, Grimm R and McKinley K (2009). Debug all your code, ACM SIGPLAN Notices, 44:10, (207-226), Online publication date: 25-Oct-2009.
  77. ACM
    Jeong G, Kim S and Zimmermann T Improving bug triage with bug tossing graphs Proceedings of the 7th joint meeting of the European software engineering conference and the ACM SIGSOFT symposium on The foundations of software engineering, (111-120)
  78. ACM
    Brummayer R and Biere A Fuzzing and delta-debugging SMT solvers Proceedings of the 7th International Workshop on Satisfiability Modulo Theories, (1-5)
  79. ACM
    Babenko A, Mariani L and Pastore F AVA Proceedings of the eighteenth international symposium on Software testing and analysis, (237-248)
  80. Mariani L, Pastore F and Pezze M A toolset for automated failure analysis Proceedings of the 31st International Conference on Software Engineering, (563-566)
  81. ACM
    Dimitrov M and Zhou H Anomaly-based bug prediction, isolation, and validation Proceedings of the 14th international conference on Architectural support for programming languages and operating systems, (61-72)
  82. ACM
    Dimitrov M and Zhou H (2009). Anomaly-based bug prediction, isolation, and validation, ACM SIGARCH Computer Architecture News, 37:1, (61-72), Online publication date: 1-Mar-2009.
  83. ACM
    Dimitrov M and Zhou H (2009). Anomaly-based bug prediction, isolation, and validation, ACM SIGPLAN Notices, 44:3, (61-72), Online publication date: 28-Feb-2009.
  84. ACM
    Burger M and Zeller A Replaying and isolating failing multi-object interactions Proceedings of the 2008 international workshop on dynamic analysis: held in conjunction with the ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA 2008), (71-77)
  85. Anckaert B, Jakubowski M, Venkatesan R and De Bosschere K Run-time randomization to mitigate tampering Proceedings of the Security 2nd international conference on Advances in information and computer security, (153-168)
  86. ACM
    Gorla A Towards design for self-healing Fourth international workshop on Software quality assurance: in conjunction with the 6th ESEC/FSE joint meeting, (86-89)
  87. Meyer B, Ciupa I, Leitner A and Liu L Automatic Testing of Object-Oriented Software Proceedings of the 33rd conference on Current Trends in Theory and Practice of Computer Science, (114-129)
  88. ACM
    Orso A, Joshi S, Burger M and Zeller A Isolating relevant component interactions with JINSI Proceedings of the 2006 international workshop on Dynamic systems analysis, (3-10)
  89. ACM
    Burger M, Lehmann K and Zeller A Automated debugging in eclipse Companion to the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, (184-185)
  90. ACM
    Cleve H and Zeller A Locating causes of program failures Proceedings of the 27th international conference on Software engineering, (342-351)
  91. Böttcher A, Thurner V, Schlierkamp K and Zehetmeier D Debugging students' debugging process 2016 IEEE Frontiers in Education Conference (FIE), (1-7)
Contributors
  • Saarland University

Recommendations

Fernando Berzal

Sadly, debugging is an often neglected topic in software engineering education. Although preventing errors in the first place is certainly desirable, to err is human, to rectify is wise, and to learn from mistakes is a must. From the creator of the GNU data display debugger, better known by its reiterative acronym, Why programs fail attempts to provide a systematic approach to finding, reproducing, and fixing programming errors, with a strong focus on the automation of many debugging techniques. Even though "there is no chance of an automated device that determines the defects" (in a software program), "we can come very close to the defects-and close to a good explanation of how the failure came to be" as long as we can automatically isolate potential causes. Before delving into the details of debugging techniques, Zeller covers some prerequisites every software developer should be acquainted with. In particular, problem-tracking systems are discussed, not only as tools for tracking and managing problem reports, but also as valuable idea repositories and requirements management systems. Testing techniques are also addressed in their own chapter. Here, the focus is on how to set up automated tests that support debugging tasks by isolating failing units and making failures reproducible. Once the stage is set, Zeller explores the debugging process in depth. After tracking the problem in the database, the first task in debugging is reproducing the failure as stated in the original problem report. It provides the foundation the debugging process is built upon. Apparently straightforward, this task can be harder than it seems, as shown by heisenbugs, where debugging tools interfere with the problem so that it disappears when it is being observed. Once you have a reproducible problem, you can proceed and simplify it with delta debugging [1], an automated method to simplify test cases. Debugging then consists of obtaining a theory that explains the bug (that is, a diagnosis). Zeller advocates for the application of the scientific method: reasoning about programs to create hypotheses, and performing experiments to validate or discard those hypotheses. He also suggests the use of a debugging logbook to make debugging explicit by writing down all hypotheses and observations. It relieves memory stress on the observer, and, what might be more important, it banishes the view of debugging as a black art. The core of the book deals with techniques for creating hypotheses and determining the failure causes of observed problems. Roughly speaking, they can be grouped into four groups. Deductive techniques cover the whole gamut of static analysis tools, from program slicing to specialized code smell detectors. Most debugging techniques, however, are dynamic by nature. Observational techniques include logging, dynamic slicing, using debuggers, and introducing assertions to automatically detect contract infringements and also to discard infection sites. Inductive techniques, such as coverage comparison or dynamic invariants, help make debugging more efficient by focusing on aspects of a failing run that differ from normal passing runs. Efficiency is also the focus of experimental techniques that try to automate the search for failure causes and failure-inducing program states. In summary, this is an outstanding practical book where many interesting ideas are explored. In the near future, we may see many of them integrated within our development environments. Some of them, such as delta debugging, are already available as plug-ins to existing integrated development environments and are purportedly being used by early adopters. Even though they might not be ready for a wider audience yet, they provide a wider perspective on debugging. If you would like to improve your detective skills as a programmer, this is certainly the book to read. Online Computing Reviews Service

Access critical reviews of Computing literature here

Become a reviewer for Computing Reviews.