Именно так называется книга Мэтта Тэлеса и Юаня Хсиха, посвященная проблемам отладки программ. Подобная тема скорее всего навеяна науками, делящимися на теоретическую и экспериментальную части и имеющих историю несравненно более долгую чем программирование, поэтому данную книгу скорее всего стоит воспринимать, как обстоятельное изложение в первую очередь авторского опыта.

Назначение данной работы двоякое. Разумеется, она представляет собой замечательное учебное пособие для начинающих, но еще и думающих программистов, которые прислушиваются к чужому опыту и образумливают свой собственный труд. Кроме того, в ней найдут увлекательное чтение и маститые — книга полна исторических подробностей и баек, столь милых сердцу любого бывалого программиста. Интересно в этой работе и то, что она как у Ильфа и Петрова сделана двумя авторами, но здесь не придется устанавливать, кто и что написал — каждая глава авторская.

Уже с первой главы читатель погружается в науку устранения программных ошибок. В кодах, есть обнаруживающие ошибки, а есть устраняющие, причем в метрике Хэмминга даже установлено количественное соотношение между соответствующими количествами ошибок. Значительный объем книги (556 страниц) позволяет рассмотреть работу над программными ошибками весьма подробно, начиная с их толкований: упрощенное, при котором ошибкой является нежелательное поведение системы; циничное, когда поведение системы нежелательно с точки зрения сильных мира сего; человекоцентричное, если поведение системы нежелательно с точки зрения программистов, тестировщиков, менеджеров и заказчиков. Интересно, что авторы различают ошибку (bug) и программный дефект (software defect): «программная ошибка — это физическое проявление программного дефекта». Предложенная в книге типизация ошибок носит качественный характер, тем не менее, предлагаемый порядок работы с ними охватывает наладку, т.е. работу, предваряющую поиск ошибок. В лучших традициях системного анализа вводится понятие жизненного цикла ошибки, с которым связана систематика. Их основные классы представляют ошибки планирования, проектирования, реализации и технологии.

Описывая детекторскую фазу работы над ошибками, авторы выделяют холистическую часть, при которой акцент делается на целостном представлении — система рассматривается во взаимодействии частей. Важен также выбор метода наладки: научный, интуитивный или «внезапного озарения». Естественно, особое место в наладке занимают «хитрости профессии», к которым обычно относят встроенные отладчики, объекты протоколов и т.п. При этом для поиска ошибок весьма важны воспроизводимые случаи, для обнаружения которых полезны тесты и выявление зависимоcти от данных и некоторые другие приемы, позволяющие набрать статистику и использовать ту или иную метрику.

Отдельная глава книги посвящена инструментам отладки и их использованию: тестовая и наладочная среда, встроенные средства диагностики и др. Здесь даются весьма полезные советы по использованию этих инструментов. Обсуждение процесса наладки в книге напомнит читателю прогулку с внимательным воспитателем, который и объяснит, и покажет, и остережет: лишь бы вы правильно поставили процесс. Разумеется, авторы уделяют серьезное внимание методикам наладки, особо выделяя наладку приложений различных типов. Прежде всего, при выборе методики следует отталкиваться от масштаба приложения: самостоятельные малого и среднего размера, клиент-серверной архитектуры среднего размера, крупномасштабные приложения, а также системы реального времени, встроенные, распределенные и имитированные.

Следующий шаг в работе по тестированию — постналадка, проводимая после исправления обнаруженной ошибки и служащая контрольным действием наладки. В книге также подробно обсуждаются вопросы предналадки — процесса сокращения числа ошибок, для чего даже предлагаются общие методы: подбор программистов и организация их работы, причинный анализ и обнаружение дефектов и т.п. Естественно, что в книге про наладку имеется глава о тестировании, как средстве обнаружения ошибок, которое полезно для того, чтобы наладка была эффективной. Тестирование бывает необходимо, в частности, при оценке качества и сложности программ, поэтому и методики тестирования столь различны: тестирование пути, транзакции, проверка входных данных, алгоритмов и многое другое.

Завершает книгу глава о сопровождении программ, где имеется раздел по созданию обслуживаемой программной системы. Справедливо, что авторы книги постарались представить наладку как профессию, рассмотрев не только вопросы обучения, использования, и даже организации труда.

К достоинствам книги необходимо отнести предлагаемые в каждой главе задачи с решениями, а также дополнительный список литературы. Следует выразить надежду, что книга непременно найдет своих читателей, как среди профессионалов, так и среди учащихся.

Мэтт Тэллес, Юань Хсих, Наука отладки. М.: Кудиц-Образ, 2003. — 560 с.