Автор с переменным успехом скрупулезно описывает инструменты и техники, позволяющие максимально автоматизировать процесс нахождения источников ошибок. Правда многие инструменты либо маргинальны (т.е. далеко не 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 - для визуализации исполнившихся кусков кода, отличающихся при нормальном и содержащем дефект запусках
Комментариев нет:
Отправить комментарий