воскресенье, 6 февраля 2011 г.

Why Programs Fail. A Guide to Systematic Debugging

отличная книжка например - в ней прекрасно все кроме попсового названия (честно говоря из-за названия я едва не решил ее не читать вовсе - думал что это очередной сборник малосвязанных паттернов типа Memory Dump Analysis Anthology)
Автор с переменным успехом скрупулезно описывает инструменты и техники, позволяющие максимально автоматизировать процесс нахождения источников ошибок. Правда многие инструменты либо маргинальны (т.е. далеко не mainstream), либо требуют кучи ресурсов, либо применимы только в ограниченном числе случаев.

Вот например в главе 13.6 описывается fuzzer для планировщика потоков под названием dejavu (Java only). Для отладки весьма небольшого куска кода (733 строки, если выкинуть все не относящееся к делу - 6 строчек) получается 3.8 миллиарда различающихся состояний. Хотя и утверждается что алгоритм O(log) и автоматически нашел комбинацию исполнения потоков, приводящую к ошибке, всего за 50 тестов - у меня есть обоснованные сомнения что это хорошо будет масштабироваться на более-менее реальных примерах. C другой стороны подобный scheduling fuzzer был бы ацки полезен для нахождения race conditions

Глава 7 содержит очень полезные техники для статического анализа кода, а также его фундаментальные ограничения.
Глава 10 посвящена разнообразным динамическим проверкам - от обычного assert до valgrind & purify

Перечислю инструменты, показавшиеся мне особенно полезными:
  • FAUMachine is a virtual machine specifically built for testing purposes. Among others, the FAUMachine allows you to control the entire virtual machine via scripts
  • codesurfer - анализатор исходников, умеющий показывать пути в графе codeflow, где переменная изменяется и где используется
  • ODB - т.н. omniscient debugger. Способен прокрутить сохраненное состояние отлаживаемой программы как вперед, так и назад, с любого момента
  • tarantula - для визуализации исполнившихся кусков кода, отличающихся при нормальном и содержащем дефект запусках

Комментариев нет:

Отправить комментарий