Роббинс Дж. Отладка приложений для Microsoft .NET и Microsoft. Пер. с англ. М.: ИТД "Русская Редакция", 2004. - 736 с., компакт-диск.

Когда говорят о положительных эмоциях при разработке ПО, то обычно вспоминают о таких приятных вещах, как визуальное проектирование с использованием UML, написание изощренного программного кода, формирование элегантного пользовательского интерфейса и пр. Добрые слова в адрес отладки ПО чаще всего ограничиваются фразами типа: "Слава Богу, что этот кошмар закончился!". (Впрочем, говорить о том, что отладка системы завершена окончательно, вообще нельзя: как известно, каждая последняя найденная ошибка является на самом деле предпоследней...) Но такие слова обычно произносятся в конце проекта, который только что удалось свалить с плеч. Когда же мы вспоминаем эти события десять-двадцать лет спустя, почему-то на память приходят совсем иные ассоциации: "Одним из самых классных случаев в моей карьере разработчика был момент, когда я после полуторамесячной охоты за случайно возникающей ошибкой нашел-таки ее!".

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

Однако прежде всего нужно разобраться с самим понятием "отладка", которое мы обычно используем либо в широком, либо в узком смысле. В широком смысле отладка - это процесс доводки ПО после его написания, но до эксплуатационного состояния. Он состоит из двух основных элементов: тестирования обнаружения ошибок (точнее, несоответствий исходным требованиям); отладки (в узком смысле) - поиска причин ошибки и их устранения *1.

_____

*1. Разделение жизненного цикла создания ПО на различные этапы и виды работ является весьма условным. Обычно системы создаются в итерационном режиме, когда на каждом шаге выполняется цикл "написание кода - тестирование - отладка". Это же относится и к сочетанию "тестирование - отладка": например, для выявления причин ошибки нужно выполнять дополнительно специальные тестовые исследования.

В английском языке отладке в узком понимании соответствует более точный термин debugging (устранение жучков-ошибок). Именно этому виду программистской деятельности и посвящена книга Джона Роббинса.

Актуальность данной работы можно проиллюстрировать на простом примере. Как уже отмечалось выше, отладка и тестирование занимают до половины времени разработчика. Но сравните: сколько литературы (книг, статей) посвящено проектированию и кодированию и сколько - отладке!? А сколько времени отводится этой теме в общей программе подготовки разработчика? Боюсь, что нам придется согласиться с автором, который утверждает: "Даже если у вас специальное образование, бьюсь об заклад, что вы никогда не сталкивались со специальным курсом, посвященным отладке". Действительно, в жизни ситуация такова, что осваивать технику отладки обычно приходится в процессе практической работы. Представленная здесь книга - это хорошо структурированное обобщение богатого опыта автора с учетом разнообразных критических пожеланий большой группы разработчиков, участвовавших в рецензировании данной публикации.

Книга посвящена отладке приложений, создаваемых для Windows и .NET, в первую очередь с использованием языка C++ и в меньшей степени - C#, при этом особое внимание уделяется вопросам низкоуровневого программирования с применением неуправляемого кода. Это уже само по себе предполагает, что читатели имеют достаточно хорошую подготовку и ориентированы на создание сложных эффективных приложений. Однако первые две части книги (восемь глав) я бы посоветовал прочесть всем программистам независимо от их квалификации, используемого языка и платформы.

В части I обсуждаются общеметодические вопросы процесса коллективной отладки. Позволю себе привести некоторые полезные сведения из первой главы "Откуда берутся ошибки".

Основные категории ошибок:

- нелогичный пользовательский интерфейс;

- неудовлетворенные ожидания;

- низкая производительность;

- аварийные завершения или разрушения данных.

Причины ошибок:

- недостаточные сроки для выполнения проекта;

- подход "сначала кодируй, а потом думай";

- непонимание требований;

- низкая квалификация разработчика;

- недооценка важности качества конечного продукта.

А вот как выглядит общая последовательность правильно организованного процесса отладки:

- воспроизведи ошибку;

- опиши ошибку;

- всегда предполагай, что ошибку сделал ты;

- разделяй и властвуй;

- мысли творчески;

- усиль инструментарий;

- начни интенсивную отладку;

- проверь, что ошибка устранена;

- научись и поделись.

Стоит особо сказать о том, что автор думает по поводу извечных дискуссий о необходимости комментариев в программе: "Комментировать, комментировать и еще раз комментировать!".

Главы 4-8 посвящены обзору возможностей различных инструментальных средств отладки для Windows, при этом основное внимание уделяется отладчику Visual Studio .NET. Познакомиться с ним полезно всем, так как даже опытные разработчики чаще всего пользуются очень ограниченным набором функций, имеющихся в инструментарии.

Различные практические методы отладки и применения соответствующих инструментов описаны в главах 9-19, разделенных на две части: работа с .NET-приложениями (часть III) и отладка неуправляемого кода (часть IV). В принципе, их можно изучать в произвольной последовательности, в зависимости от того, какие вопросы вас интересуют в первую очередь.

В части III отдельная глава посвящена общим вопросам расширения возможностей интегрированной среды разработки Visual Studio .NET и создания специальных настроек для повышения эффективности отладки.

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

Полезная информация содержится и в приложениях. Очень интересен аннотированный список ресурсов (книги, инструменты, Web-сайты), которые автор использовал в своей работе. На прилагаемом компакт-диске читатель найдет исходные тексты примеров, утилиты и инструментальные отладочные средства.

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

Версия для печати