Программистам приходится регулярно читать и анализировать тексты готовых программ и выбирать из них фрагменты для дальнейшего использования. Поэтому знакомство с книгой «Анализ программного кода на примере проектов Open Source» будет для них важно, тем более, что литературы подобного направления на прилавках пока явно недостаточно.
![](http://www.osp.ru/data/317/531/1234/073_0.jpg)
По авторскому замыслу, книга предназначена для совершенствования навыков чтения и анализа программ на языках высокого уровня «с целью доработки, извлечения готовых технических решений или изучения новых методов», и представляет собой «учебник и справочник». Начиная свою книгу с рассказа о том, что он понимает под чтением программ, автор отвечает на вопрос: «Зачем и как читать?» Код, по его мнению, может служить в роли сборника примеров, быть полезен при отладке, внесении изменений, при усовершенствовании, повторном использовании и ревизии кода. Автор предлагает базу исходного кода объемом 53 тыс. файлов и размером в 540 Мбайт, на которую ссылаются все примеры книги. Ну и, конечно, автором оговорены используемые инструментальные средства; все они доступны, распространяются бесплатно и могут быть установлены на различных аппаратных платформах. Большинство примеров из книги взяты из программ на языке Си, работающих с POSIX, что вызвано, по мнению Спинеллиса, большим распространением открытого кода именно такого типа.
Основное содержание книги автор связывает с такими моментами чтения программ, как установление элементов программ, к которым относятся части, составляющие программу, например, функции и глобальные переменные, различные циклы, операторы и управляющие структуры, типы данных; понимание типов и структур данных в Си-программах; понимание на основе чтения сложных средств управления программами. Знакомство с большими программными проектами отличается от понимания текста отдельной программы, поэтому посвященная этому вопросу шестая глава книги акцентирует внимание программиста на методах проектирования, реализации, организации и процессах формирования проекта, а также на конфигурировании, управлении версиями, специальных программных средствх, включая тестирование. Разумеется, при знакомстве с кодом важно понять стиль программирования, включая порядок выбора имен и способ организации файлов, форматирование, программные конструкции и стандарты разработки.
Отдельная глава книги посвящена роли документации при чтении кода. Здесь говорится не только о разновидности документации, но и о том, как с ней рационально знакомиться, учитывая, в частности, форматы документации в проектах с открытым кодом, дополнительные источники и проблемы с документацией, дезориентирующие читателя (например, «недокументированные возможности», «идеализированное представление» и др.).
Девятая глава содержит методологию понимания архитектуры системы. При чтении кода необходимо понять общие принципы построения системы, модели управления, группировку элементов кода и способы переноса архитектуры (рабочие среды, генераторы кода, структурные шаблоны и проблемно-ориентированные компоненты). Современные возможности работы с кодом допускают чтение его различных форм, для чего используются вспомогательные программные средства, с которыми читатель может познакомиться в десятой главе.
Завершают книгу практический пример и пять приложений. Крупномасштабный пример — усовершенствование СУБД путем добавления новой SQL-функции даты-времени. Основные этапы этого проекта: подготовка, стратегическое планирование, перенос кода, тестирование и отладка, документирование. Приложения содержат обзор кода примера, указатель файлов исходного кода, собранных на компакт-диске, прилагаемом к книге. В приложении имеется также перечень из 268 правил чтения кода, который преподаватели и студенты могут рассматривать в качестве материала для тренинга.
В целом оценивая книгу как весьма удачное пособие для программистов, которое, несомненно, найдет своего читателя, хочется обратить внимание на вольное обращение со стороны переводчика со словом «анализ». Не случайно в оригинальном названии (Code Reading. The Open Source Perspective) акцент сделан на слове reading («чтение»): в книге преследуется цель не анализа, а скорее осмысления текста в контексте знаний о программировании, и лишь небольшой раздел 11.6 можно отнести к попытке анализа.
Диомидис Спинеллис, Анализ программного кода на примере проектов Open Source.
М.: Издательский дом «Вильямс», 2004. —528 с.: ил.