Jump to ratings and reviews
Rate this book

Why Programs Fail: A Guide to Systematic Debugging

Rate this book
Why Programs Fail is about bugs in computer programs, how to find them, how to reproduce them, and how to fix them in such a way that they do not occur anymore. This is the first comprehensive book on systematic debugging and covers a wide range of tools and techniques ranging from hands-on observation to fully automated diagnoses, and includes instructions for building automated debuggers. This discussion is built upon a solid theory of how failures occur, rather than relying on seat-of-the-pants techniques, which are of little help with large software systems or to those learning to program. The author, Andreas Zeller, is well known in the programming community for creating the GNU Data Display Debugger (DDD), a tool that visualizes the data structures of a program while it is running.

480 pages, Paperback

First published October 1, 2005

29 people are currently reading
639 people want to read

About the author

Andreas Zeller

15 books3 followers

Ratings & Reviews

What do you think?
Rate this book

Friends & Following

Create a free account to discover what your friends think of this book!

Community Reviews

5 stars
14 (20%)
4 stars
31 (44%)
3 stars
17 (24%)
2 stars
5 (7%)
1 star
2 (2%)
Displaying 1 - 6 of 6 reviews
Author 1 book3 followers
July 15, 2017
Немного странная книга. Это учебник по курсу, который исследователь в области автоматизированной отладки читает своим студентам.

Автор рассказывает про bleeding edge в автоматизированной отладке на 2009 год. Но, судя по отладчикам, которыми сейчас приходится пользоваться, ничего особо не поменялось. В книге есть всякие интересные идеи и примеры:

* Автоматическая минимизация входных данных, которые приводят к багу. Или минимизация разницы между failing run и passing run (т.н. delta debugging). При этом в качестве входных данных могут рассматриваться совсем разные вещи:
- собственно входные данные (например, HTML-документ, который приводит к падению печати в FireFox)
- записанные действия пользователя (куда мышку двигал, на какие кнопки нажимал)
- расписание context switch в многопоточном приложении (так можно выделить, по сути, порядок выполнения каких-то частей, который приводит к ошибке)
* Нахождение всяких static и dynamic backward/forward slices. Это выделение частей программы, которые могут как-то влиять на данную строчку, либо наоборот, на которые может влиять данная строчка. Если есть возможность удобно выделять такие куски, то можно сильно сократить количество кода, на которое нужно смотреть, чтобы понять, что происходит в конкретной строке.
* Omniscient debugging. Возможность записывать полностью всё выполнение программы и потом во время отладки ходить не по текущему стеку вверх-вниз, а ходить по времени. Вот это должно быть очень-очень круто. Но в open-source отладчиках пока, похоже, нет ничего юзабельного (такая возможность в GDB вроде как замедляет выполнение в 50000 раз).
* Поиск аномалий при нескольких прогонах кода (например, строки, которые запускаются только в failing runs и никогда в passing runs и наоборот).
* Извлечение и сравнение "состояний" программы (memory-graphs) и выделение цепочек cause-effect из них.
* Выявление проблемных мест/компонент в коде (на основании багов/фиксов из трекера), чтобы этим местам можно было уделять особенное внимание при QA, например.

Со всеми этими крутыми штуками есть только одна проблема. Вообще непонятно, как это применять в реальной жизни. Вот прям взять какой-нибудь известный баг и применить к нему полученную информацию. Чтобы использовать приведённые подходы, подойдёт совсем не любой язык программирования. И нужно в эти подходы вкладываться с самого начала. И не факт, что они вообще на конкретном проекте заработают. Поэтому почитать про это любопытно, но практической ценности немного.

Книгу можно рекомендовать, если хочется почитать "как оно там бывает". Она немаленькая (388 страниц), местами сухая, поэтому иногда хочется, чтобы она уже поскорее закончилась.
Profile Image for Dima.
12 reviews2 followers
November 16, 2012
The book presents a lot of cutting-edge research studies on automated debugging techniques. I think this is the main strength of the book. It also has good chapters that formalize the general intuition of debugging and introduce the theory of these processes. The only reason, why I gave 4 stars and not 5 is that sometimes I was expecting more real-life guidelines for debugging and was tired (at some points) of cutting-edge automated prototype tools.
Profile Image for Олександр Бежан.
18 reviews
November 20, 2018
Amazing fell-researched and structured knowledge on debugging programs.

The most important topics for me from this book are scientific method and deduction and how to use those to find failure causes effectively.

Though slightly dated, the book is a gold nugget for all software engineers.
Profile Image for Jeremiah.
15 reviews
August 6, 2024
Great input that really stresses testing and various other strategies.
Profile Image for Irina.
20 reviews
August 16, 2016
A good intro for beginners into defects and debugging. However, the book is a bit too verbose.
Displaying 1 - 6 of 6 reviews

Can't find what you're looking for?

Get help and learn more about the design.