Файл: Руководство по стилю программирования и конструированию по.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 835
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
ГЛАВА
29 Интеграция
691
В свободное время я руковожу работой дискуссионной группы, главных технических менеджеров таких компаний, как Ama zon.com, Boeing, Expe- dia, Microsoft, Nordstrom и др. Опрос показал, что
никто из руководителей не считает непрерывную интеграцию предпочтительней ежедневной. В средних и больших проектах иногда имеет смысл допустить рассинхронизацию кода на короткое время. Разработчики часто нарушают синхронизацию, когда делают масштабные изменения. Через какое-то время они могут синхронизировать про- ект снова. Ежедневные сборки позволяют проектной команде организовать точки согласования достаточно часто. Если изменения синхронизируются ежедневно, нет нужды делать это непрерывно.
Контрольный список: интеграция
Стратегия интеграции
Определяет ли стратегия оптимальный порядок, в кото- ром должны интегрироваться подсистемы, классы и методы?
Скоординирован ли порядок интеграции с порядком конструирования, чтобы классы были подготовлены к интеграции вовремя?
Приводит ли стратегия к упрощению диагностики дефектов?
Позволяет ли стратегия сократить использование «подпорок» до миниму- ма?
Имеет ли выбранная стратегия преимущества перед другими подходами?
Хорошо ли определены интерфейсы между компонентами? (Определение интерфейсов не является задачей интеграции, а проверка правильности их определения — является.)
Ежедневная сборка и дымовые тесты
Выполняется ли сборка проекта достаточно часто (в идеале каждый день), чтобы поддерживать инкрементную интеграцию?
Выполняется ли дымовой тест для каждой сборки так, что вам становится известно, находится ли сборка в рабочем состоянии?
Автоматизированы ли сборка и дымовой тест?
Часто ли разработчики регистрируют свой код: не превышает ли время между исправлениями день или два?
Поддерживается ли дымовой тест в соответствии с кодом, расширяясь при его расширении?
Редко ли происходит нарушение работоспособности сборки?
Выполняете ли вы сборку и дымовой тест даже в экстремальных обстоя- тельствах?
Дополнительные ресурсы
Вопросам, обсуждаемым в этой главе, посвящены следующие публикации.
Интеграция
Lakos, John.
Large-Scale C++ Software Design. Boston, MA: Addison-Wesley, 1996. Лей- кос доказывает, что «физическое представление» системы — иерархия файлов, каталогов и библиотек — заметно влияет на способность команды разработчиков http://cc2e.com/2992
http://cc2e.com/2999
692
ЧАСТЬ
VI Системные вопросы скомпилировать ПО. Если вы не обращаете должного внимания на физическое представление, то время сборки проекта может стать довольно долгим, что сведет на нет преимущества частой интеграции. Лейкос пишет о C++, но выводы, от- носящиеся к «физическому представлению» актуальны, и для проектов на других языках.
Myers, Glenford J.
The Art of Software Testing. New York, NY: John Wiley & Sons, 1979.
В этой классической книге о тестировании интеграция рассматривается как опе- рация тестирования.
Инкрементный подход
McConnell, Steve.
Rapid Development. Redmond, WA: Microsoft Press, 1996. В главе 7
(Lifecycle Planning) «Планирование жизненного цикла» подробно рассмотрены плюсы и минусы более гибких и менее гибких моделей жизненного цикла. В гла- вах 20, 21, 35 и 36 обсуждаются конкретные модели жизненных циклов, поддер- живающие инкрементный подход в разной степени. Глава 19 содержит описание
«
проектирования с поддержкой изменений» (designing for change) — ключевой методики, необходимой для поддержки интерактивной и инкрементной моделей разработки.
Boehm, Barry W. «A Spiral Model of Software Development and Enhancement».
Computer,
May 1988: 61–72. В этой статье Бом описывает свою «спиральную модель» разра- ботки ПО. Он предлагает эту модель в качестве подхода к управлению рисками в программном проекте, поэтому статья больше касается разработки в целом, чем конкретно интеграции. Бом — один из выдающихся экспертов в области мас-штабных вопросов разработки ПО, и доходчивость его объяснений отражает глубину его понимания темы.
Gilb, Tom.
Principles of Software Engineering Management. Wokingham, England:
Addison-Wesley, 1988. Главы 7 и 15 содержат исчерпывающее обсуждение эволю- ционной поставки — одного из первых подходов к инкрементной разработке.
Beck, Kent.
Extreme Programming Explained: Embrace Change.Reading, MA: Addi son-Wesley,
2000. Эта книга содержит более современное, лаконичное и евангеличе-ское пред- ставление большинства идей, приведены в книге Гилба. Лично я отдаю предпочте- ние глубокому анализу Гилба, но некоторые читатели могут посчитать изложение
Бека более доступным или применимым непосредственно к тому типу проекта, над которым они работают.
Ключевые моменты
쐽
Последовательность конструирования и интеграционный подход влияют на порядок, в котором классы проектируются, кодируются и тестируются.
쐽
Порядок интеграции снижает затраты на тестирование и упрощает отладку.
쐽
Инкрементная интеграция имеет несколько вариантов, и, помимо совсем три- виальных проектов, любой из них лучше, чем поэтапная интеграция.
ГЛАВА
29 Интеграция
693
쐽
Лучший интеграционный подход для каждого конкретного проекта — обычно сочетание нисходящего, восходящего, риск-ориентированного и других инте- грационных подходов. Т-образная интеграция и интеграция с вертикальным секционированием часто дают хорошие результаты.
쐽
Ежедневные сборки могут уменьшить проблемы с интеграцией, улучшить мо- ральный климат среди разработчиков и предоставить полезную информацию, касающуюся управления проектом.
694
ЧАСТЬ VI Системные вопросы
Г Л А В А 3 0
Инструменты
программирования
Содержание
쐽
30.1. Инструменты для проектирования
쐽
30.2. Инструменты для работы с исходным кодом
쐽
30.3. Инструменты для работы с исполняемым кодом
쐽
30.4. Инструменты и среды
쐽
30.5. Создание собственного программного инструментария
쐽
30.6. Волшебная страна инструментальных средств
Связанные темы
쐽
Инструменты для управления версиями: раздел 28.2
쐽
Инструменты для отладки: раздел 23.5
쐽
Инструменты для облегчения тестирования: раздел 22.5
Современные инструменты сокращают время конструирования. Передовой набор инструментов (и знание этих средств) позволяет повысить производительность более, чем на 50% (Jones, 2000; Boehm et al., 2000). Программный инструмента- рий также позволяет уменьшить объем однообразной, монотонной работы.
Собака, может, и лучший друг человека, но хорошие инструменты — луч- шие друзья программиста. Как уже давно выяснил Барри Бом, 20% ин- струментария используются приблизительно в 80% случаев (1987b). Если вы не знакомы с каким-то из наиболее полезных инструментов, вы упускаете шанс облегчить себе жизнь.
В этой главе мы поговорим об инструментах для конструирования (об инстру- ментах, применяемых в процессе определения требований, управления, а также на протяжении всего цикла разработки, см. раздел «Дополнительные ресурсы» в конце главы). Темой нашего разговора будут не конкретные средства, а их разно- видности. Некоторые инструменты настолько широко распространены, что упо- минаются по имени, но номера версий, имена продуктов и компаний меняются так быстро, что информация о большинстве из них оказалась бы устаревшей до того, как высохли бы чернила на этих страницах.
http://cc2e.com/3084
1 ... 78 79 80 81 82 83 84 85 ... 104
ГЛАВА 30 Инструменты программирования
695
30.1. Инструменты для проектирования
Существующие инструменты для проектирования в основ- ном представляют собой графические средства, позволяю- щие создавать диаграммы проекта. Иногда они встроены в
ПО для автоматизированной разработки (CASE-средства) с более широкими функ- циями. Некоторые поставщики рекламируют инструменты для проектирования как самостоятельные CASE-средства. Проектирование с помощью графических ин- струментов позволяет использовать для проекта стандартные графические нота- ции: UML, архитектурные блок-схемы, иерархические диаграммы, диаграммы связи сущностей или диаграммы классов. Некоторые инструменты поддерживают только одну нотацию, другие — несколько.
Может показаться, что инструменты для проектирования — всего лишь необыч- ные графические пакеты. Однако они обладают возможностями, которых в обыч- ных графических пакетах нет: если нарисовать схему с помощью кружков и стре- лочек, а затем удалить один кружок, графическое средство проектирования авто- матически перестроит другие элементы, включая соединительные стрелки и кружки более низкого уровня, которые взаимодействовали с удаленным кружком. Инст- рументарий берет на себя служебные операции и при добавлении нового круж- ка. Средство проектирования позволяет перемещаться между уровнями абстрак- ции. Инструмент проверит целостность проекта, а некоторые могут создавать код на основе разработанного проекта.
30.2. Инструменты для работы
с исходным кодом
Инструменты, для работы с исходным кодом обладают более широкими и разви- тыми возможностями в сравнении со средствами, предназначенными для проек- тирования.
Редактирование
Эта группа инструментов служит для редактирования исходного кода.
Интегрированные среды разработки (IDE)
По некоторым оценкам до 40% рабочего времени программист тратит на редактирование исходного кода (Parikh, 1986; Ratliff, 1987). В таком случае покупка IDE — хорошее вложение денег.
В дополнение к основным функциям по обработке текста хорошие среды разра- ботки предлагают следующую функциональность:
쐽
компиляция и поиск ошибок, не выходя из редактора;
쐽
интеграция с системой управления версиями, средствами тестирования и от- ладки;
쐽
сжатое или развернутое представление программы (вывод имен классов или логических структур без показа их содержания, также называемый «свертыва- нием»);
Перекрестная ссылка О проек- тировании см. главы 5–9.
696
ЧАСТЬ VI Системные вопросы
쐽
переход к определениям классов, методов и переменных;
쐽
переход к любым местам использования класса, метода или переменной;
쐽
форматирование в соответствии с используемым языком;
쐽
интерактивная подсказка для языка редактируемой программы;
쐽
поиск соответствующих скобок (операторов
begin-end);
쐽
шаблоны для часто применяемых языковых конструкций (например, редактор может ввести полную структуру цикла
for после того, как программист набе- рет слово
for);
쐽
интеллектуальные отступы (включая возможность простого изменения отсту- пов в блоке выражений при изменении логики);
쐽
автоматизированное преобразование и рефакторинг кода;
쐽
создание макросов на знакомом языке программирования;
쐽
список строк для поиска, который позволяет не набирать повторно часто ис- пользуемые строки;
쐽
регулярные выражения в операциях поиска и замены;
쐽
поиск и замена в группе файлов;
쐽
одновременное редактирование нескольких файлов;
쐽
параллельное сравнение файлов;
쐽
многоуровневая операция отмены.
Кстати, есть программы, поддерживающие все перечисленные возможности.
Поиск и замена строк в нескольких файлах
Если ваш редактор не поддерживает поиск и замену строк в нескольких файлах одновременно, вы можете тем не менее найти дополнительные средства для вы- полнения этого задания. Эти инструменты позволяют искать все вхождения на- звания класса или метода. Обнаружив ошибку в своем коде, вы можете использо- вать такой инструмент для поиска похожих ошибок в других файлах.
Вы можете искать точное совпадение строки, похожие строки (без учета регист- ра символов) или использовать регулярные выражения. Регулярные выражения предоставляют особенно мощные возможности, поскольку позволяют произво- дить поиск, применяя сложные строковые шаблоны. Если бы вы хотели найти все случаи применения массивов с использованием магических чисел (цифр от «0»
до «9»), вы могли бы выполнить поиск символа «[», за которым идет 0 или несколько пробелов, за которыми следует одно или несколько чисел, потом опять 0 или больше пробелов и символ «]». Одна широко распространенная программа поис- ка называется «grep». Запрос для поиска магических чисел с помощью grep мог бы выглядеть так:
grep “\[ *[0–9]+ *\]” *.cpp
Критерий поиска можно усложнить, чтобы точней настроить поисковую строку.
Полезно иметь возможность заменять строки в нескольких файлах одновремен- но. Например, чтобы дать методу, константе или глобальной переменной лучшее имя, может понадобиться выполнить замену в нескольких файлах. Это легко сде- лать с помощью утилит, позволяющих менять строки в наборе файлов, и это хо-