Программистам приходится регулярно читать и анализировать тексты готовых программ и выбирать из них фрагменты для дальнейшего использования. Поэтому знакомство с книгой «Анализ программного кода на примере проектов Open Source» будет для них важно, тем более, что литературы подобного направления на прилавках пока явно недостаточно.

По авторскому замыслу, книга предназначена для совершенствования навыков чтения и анализа программ на языках высокого уровня «с целью доработки, извлечения готовых технических решений или изучения новых методов», и представляет собой «учебник и справочник». Начиная свою книгу с рассказа о том, что он понимает под чтением программ, автор отвечает на вопрос: «Зачем и как читать?» Код, по его мнению, может служить в роли сборника примеров, быть полезен при отладке, внесении изменений, при усовершенствовании, повторном использовании и ревизии кода. Автор предлагает базу исходного кода объемом 53 тыс. файлов и размером в 540 Мбайт, на которую ссылаются все примеры книги. Ну и, конечно, автором оговорены используемые инструментальные средства; все они доступны, распространяются бесплатно и могут быть установлены на различных аппаратных платформах. Большинство примеров из книги взяты из программ на языке Си, работающих с POSIX, что вызвано, по мнению Спинеллиса, большим распространением открытого кода именно такого типа.

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

Отдельная глава книги посвящена роли документации при чтении кода. Здесь говорится не только о разновидности документации, но и о том, как с ней рационально знакомиться, учитывая, в частности, форматы документации в проектах с открытым кодом, дополнительные источники и проблемы с документацией, дезориентирующие читателя (например, «недокументированные возможности», «идеализированное представление» и др.).

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

Завершают книгу практический пример и пять приложений. Крупномасштабный пример — усовершенствование СУБД путем добавления новой SQL-функции даты-времени. Основные этапы этого проекта: подготовка, стратегическое планирование, перенос кода, тестирование и отладка, документирование. Приложения содержат обзор кода примера, указатель файлов исходного кода, собранных на компакт-диске, прилагаемом к книге. В приложении имеется также перечень из 268 правил чтения кода, который преподаватели и студенты могут рассматривать в качестве материала для тренинга.

В целом оценивая книгу как весьма удачное пособие для программистов, которое, несомненно, найдет своего читателя, хочется обратить внимание на вольное обращение со стороны переводчика со словом «анализ». Не случайно в оригинальном названии (Code Reading. The Open Source Perspective) акцент сделан на слове reading («чтение»): в книге преследуется цель не анализа, а скорее осмысления текста в контексте знаний о программировании, и лишь небольшой раздел 11.6 можно отнести к попытке анализа.


Диомидис Спинеллис, Анализ программного кода на примере проектов Open Source.
М.: Издательский дом «Вильямс», 2004. —528 с.: ил.