Файл: Руководство по стилю программирования и конструированию по.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 822
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
ГЛАВА 30 Инструменты программирования
697
рошо, потому что у вас должно быть как можно меньше препятствий для созда- ния лругих имен классов, методов и констант. Для обработки изменений строк в нескольких файлах служат такие инструменты, как Perl, AWK и sed.
Инструменты для сравнения
Если вы сделали несколько попыток исправить ошибку и хотите удалить неудач- ные попытки, то программа сравнения сопоставит исходный и исправленный файлы и перечислит измененные строки. Если вы работаете над проектом вмес- те с другими людьми и хотите увидеть, какие исправления они внесли с тех пор,
как вы работали с кодом в последний раз, программа сравнения (например, Diff)
сравнит текущую версию с последней версией кода, над которой вы работали, и покажет различия. Такая функциональность часто встроена в средства для конт- роля исправлений.
Инструменты для слияния
Один из видов контроля исправлений заключается в блокировании исходных файлов, так что только один человек может их модифицировать. Можно также позволить нескольким сотрудникам работать с файлами одновременно, а при регистрации производить слияние изменений. Предназначенные для этого ин- струменты обычно выполняют слияние простых изменений автоматически, а в сложных случаях и при возникновении конфликтов обращаются к пользователю.
Программы для украшения исходного кода
Программы украшения исходного кода выделяют имена классов и методов, стандартизуют стиль отступов, единооб- разно форматируют комментарии и т. д. Некоторые из них могут помещать каждый метод на отдельную Web-страни- цу или на печатную страницу и форматировать код. Большинство инструментов позволяет настраивать способы украшения кода.
Программы для украшения кода бывают двух видов. Одни используют исходный код как входные данные и не изменяют исходного кода. Другие изменяют сам исходный код, стандартизуя отступы, форматируя списки параметров и т. д. Это полезно при работе с большими объемами унаследованного кода.
Средства документирования интерфейса
Некоторые инструменты извлекают подробную документацию по программному интерфейсу из файлов с исходным кодом. Код в исходных файлах содержит не- которые подсказки, например, поля
@tag, определяющие текст, который следует извлечь. Инструмент для документирования интерфейса извлекает помеченный текст и представляет его в красиво отформатированном виде. Прекрасным при- мером такого инструмента может служить Javadoc.
Шаблоны
Шаблоны упрощают задачи ввода данных с клавиатуры. Допустим, вы хотите до- бавлять стандартный пролог комментариев перед началом ваших методов. Вы можете создать скелет такого пролога с использованием правильного синтакси-
Перекрестная ссылка О форма- тировании кода программы см.
главу 31.
698
ЧАСТЬ VI Системные вопросы са и поместить в него нужные элементы. Этот скелет станет «шаблоном», кото- рый вы сохраните в файле или назначите клавиатурному макросу. При создании нового метода вы легко вставите шаблон в файл с исходным кодом. Шаблоны позволяют настроить как крупные сущности, скажем, классы и файлы, так и не- большие структуры вроде циклов.
При работе над групповым проектом шаблоны могут стать простым способом достижения согласованного стиля кодирования и документирования.
Средства создания перекрестных ссылок
Инструментарий по созданию перекрестных ссылок перечисляет (обычно на Web- страницах) переменные и методы и все места, где они применяются.
Генераторы иерархии классов
Генератор иерархии классов предоставляет сведения о деревьях наследования. Это бывает полезно при отладке, но чаще всего применяется для анализа структуры программы или для разбиения программы на модули, пакеты или подсистемы. Такая функциональность иногда реализована и в IDE.
Анализаторы качества кода
Инструментарий этой категории исследует статический исходный код с целью оценки его качества.
Программы углубленного контроля синтаксиса и семантики
Средства контроля синтаксиса и семантики осуществляют более тщательную про- верку кода, чем это обычно делает компилятор. Ваш компилятор может проверять наличие только элементарных синтаксических ошибок. При углубленном конт- роле могут учитываться нюансы языка, что позволяет проверить наличие более коварных ошибок — тех, что не выглядят таковыми с точки зрения компилятора.
Например, в C++ выражение:
while ( i = 0 ) ...
абсолютно законно, но обычно имеется в виду:
while ( i == 0 ) ...
Первая строка синтаксически корректна, но путаница со знаками
= и == является распространенной ошибкой, и данная строка, возможно, неправильна. Lint —
углубленный анализатор синтаксиса и семантики, используемый во многих сре- дах C/C++, — предупреждает о наличии неинициализированных переменных, пе- ременных, которым присвоено значение, но которые никогда не используются,
выходных параметрах метода, которым не было присвоено значение внутри ме- тода, подозрительных операциях с указателями, подозрительных логических срав- нениях (вроде приведенного выше), недостижимом коде и прочих распростра- ненных проблемах. Другие языки предлагают похожие инструменты.
ГЛАВА 30 Инструменты программирования
699
Генераторы отчетов о метриках
Некоторые инструменты составляют отчет о качестве кода.
Например, средства, сообщающие о сложности каждого ме- тода, позволяют направить наиболее сложные функции на дополнительное рецензирование, тестирование или перепроектирование. Неко- торые средства подсчитывают количество строк кода, объявлений данных, ком- ментариев и пустых строк как для всей программы, так и для отдельных методов.
Они отслеживают дефекты, внесенные конкретными программистами, Затем фик- сируют изменения, сделанные для исправления дефектов, и программистов, вне- сших эти правки. Они подсчитывают количество модификаций ПО и выделяют процедуры, которые исправляются чаше всего. Установлено, что средства анали- за сложности положительно влияют на производительность сопровождения, уве- личивая ее примерно на 20% (Jones, 2000).
Рефакторинг исходного кода
Несколько инструментов оказывают помощь при конвертации исходного кода из одного формата в другой.
Инструменты для рефакторинга
Программа рефакторинга поддерживает процесс рефакто- ринга кода как в автономном режиме, так и с интеграцией в IDE. Браузеры рефакторинга позволяют легко изменить имя класса по всему исходному коду. Они дают возможность создавать новый метод,
просто выделив код, который в него нужно перенести, указав имя для этого но- вого метода и перечислив список параметров. Средства рефакторинга делают процесс изменения кода более быстрым и менее подверженным ошибкам. Они уже доступны для языков Java и Smalltalk и получают все большее распростране- ние для других языков. Об инструментах рефакторинга см. также главу 14 «Refac- toring Tools» в книге «Refactoring» (Fowler, 1999).
Инструменты для реструктуризации
Программа реструктуризации преобразует тарелку спагетти-кода с операторами
goto
в более питательное блюдо из структурированного кода без
goto. Кейперс Джонс сообщает, что в процессе сопровождения средства реструктуризации могут повы- сить производительность на 25–30% (Jones, 2000). Программе реструктуризации при конвертации кода приходится делать массу допущений, и, если логика оригинала была ужасной, она останется такой и в сконвертированной версии. Однако если вы выполняете преобразование вручную, вы можете использовать этот инструмент для простых вариантов, а сложные участки обработать вручную. В качестве альтер- нативы можно прогнать код через программу реструктуризации и использовать ре- зультат как отправную точку для ручного преобразования.
Трансляторы кода
Некоторые инструменты переводят код с одного языка программирования на другой. Транслятор позволяет перенести большой объем кода в другую среду. Учтите
Перекрестная ссылка О метри- ках см. раздел 28.4.
Перекрестная ссылка О рефак- торинге см. главу 24.
700
ЧАСТЬ VI Системные вопросы однако, что, если вы изначально имеете плохой код, транслятор просто переве- дет этот плохой код на другой язык.
Управление версиями
Справиться с быстро растущим количеством версий ПО по- зволяют инструменты управления версиями, которые пре- доставляют следующие возможности:
쐽
управление исходным кодом;
쐽
управление зависимостями наподобие того, что делает утилита make в операционных системах UNIX;
쐽
управление версиями проектной документации;
쐽
установка соответствия между элементами проекта, такими как требования, код и тестовые данные, чтобы в случае изменения требований вы могли опреде- лить, какой код и какие тесты будут затронуты.
Словари данных
Так называются базы данных, которые описывают важную для проекта информа- цию. Во многих случаях словарь связан преимущественно со схемами баз данных.
В больших проектах такой словарь служит для отслеживания сотен или тысяч оп- ределений классов. В больших групповых проектах он позволяет избежать конф- ликтов имен. Конфликт может быть просто синтаксическим (когда одно и то же имя используется дважды) и более запутанным, при котором различные имена слу- жат для обозначения одного и того же понятия или одно и то же имя обозначает немного разные вещи. Для каждого элемента данных (таблицы базы данных или класса) словарь содержит имя и описание. Кроме того, в нем могут содержаться пояснения относительно применения элемента.
30.3. Инструменты для работы
с исполняемым кодом
Средства для работы с исполняемым кодом столь же разнообразны, как и инст- рументы, предназначенные для исходного кода.
Создание кода
Инструменты, описанные в этом разделе, оказывают помощь при создании про- граммы.
Компиляторы и компоновщики
Компиляторы преобразуют исходный код в исполняемый. Большинство программ предназначено для компиляции, хотя еще встречается и интерпретируемый код.
Типичный компоновщик связывает один или несколько объектных файлов, ко- торые компилятор сгенерировал из ваших исходников, со стандартным кодом,
необходимым для создания исполняемых программ. Компоновщики, как прави- ло, могут объединять файлы, созданные на разных языках, позволяя вам выбирать
Перекрестная ссылка О таких инструментах см. подраздел
«Изменения в коде программ- ного обеспечения» раздела 28.2.
ГЛАВА 30 Инструменты программирования
701
язык, наиболее подходящий для каждой части вашей программы, и не задумываться над деталями интеграции.
Оверлейные компоновщики помогают вместить 10 фунтов в 5-фунтовый мешок,
создавая программы, выполняющиеся в меньшем объеме памяти, чем требуется для их размещения. Оверлейный компоновщик создает такой исполняемый файл,
который в любой момент времени загружен в память только частично, а остав- шаяся часть хранится на диске «до востребования».
Инструменты для сборки
Инструменты сборки ускоряют создание программы из текущих версий файлов исходного кода. Для каждого объектного файла вы указываете исходные файлы, от которых он зависит, и правила его создания. Программы сборки также устраняют ошибки несогласованности исходных данных, они гарантируют, что все файлы будут приведены в согласованное состояние. К распространенным средствам сборки относится утилита make в UNIX и ant, используемая в Java-программах.
Допустим, у вас есть объектный файл
userface.obj. В make-файле вы определяете,
что для создания
userface.obj нужно скомпилировать файл userface.cpp. Вы также указываете, что
userface.cpp зависит от userface.h, stdlib.h и project.h. «Зависит от»
просто означает, что если файлы
userface.h, stdlib.h или project.h изменяются, то файл
userface.cpp надо перекомпилировать.
При сборке программы утилита make проверяет перечисленные зависимости и определяет файлы, которые необходимо перекомпилировать. Если 5 из 250 ис- ходных файлов зависят от определения данных в
userface.h, в котором произо- шли изменения, то make автоматически перекомпилирует эти зависящие от него пять файлов. Она не трогает остальные 245 файлов, не связанные с
userface.h. Ис- пользование make или ant предоставляет альтернативу перекомпиляции всех
250 файлов или ручной компиляции отдельных файлов, чреватую пропуском одного из них и получением загадочных ошибок, появляющихся в результате рас- синхронизации. Такие средства, как make или ant, заметно повышают скорость и надежность цикла компиляции, компоновки и выполнения.
В некоторых группах найдены интересные альтернативы инструментам провер- ки зависимостей. Так, группа, работающая над Microsoft Word, выяснила, что пол- ная сборка всех исходных файлов проходит быстрее, чем выполнение всесторон- ней проверки зависимостей с помощью make при условии оптимизации самих исходных файлов (в частности, содержимого заголовочных файлов и т. п.). При таком подходе средняя машина разработчика Word может полностью собрать исполняемый файл Word — а это несколько миллионов строк кода — примерно за 13 минут.
Библиотеки кода
Хороший способ быстро написать высококачественный код состоит в том, что- бы не писать его полностью, а найти версию с открытым исходным кодом. Вы можете найти высококачественные библиотеки для:
쐽
контейнерных классов;
쐽
сервисов транзакций по кредитным картам (службы e-commerce);