Файл: Руководство по стилю программирования и конструированию по.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 863
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
648
ЧАСТЬ VI Системные вопросы
Один из самых успешных проектов, о котором когда-либо сообщалось,
был реализован за 11 лет и состоял из 83 000 строк кода. За первые 13
месяцев эксплуатации была выявлена только одна ошибка, приведшая к системному сбою. Это достижение еще больше ошеломляет, если учитывать, что проект был завершен в конце 1960-х, без использования онлайн-компиляции и интерактивной отладки. Производительность проекта —7500 строк кода в год в конце 60-х — и по сегодняшним стандартам достаточно впечатляет. Главный про- граммист проекта сообщил, что одним из залогов успеха было признание всех машинных прогонов (ошибочных и нет) общим, а не частным достоянием (Baker and Mills, 1973). Эта идея нашла свое воплощение и в современной ситуации, на- пример, в ПО с открытым исходными кодом (Open Source Software) (Raymond,
2000), экстремальном программировании с его понятием о коллективном владе- нии (Beck, 2000) и во многих других случаях.
Награждайте за хороший код Используйте систему поощрений для закреп- ления практики хорошего кодирования. При разработке таких поощрений при- нимайте во внимание следующие соображения.
쐽
Награда должна представлять интерес для программиста. (Многим из них по- ощрения типа «Какой молодец!» неприятны, особенно когда исходят от нетех- нических менеджеров.)
쐽
Код, поощряемый таким образом, должен быть исключительно хорошим. На- граждая программиста, которого все остальные считают плохим работником,
вы уподобляетесь Гомеру Симпсону, пытающемуся запустить ядерный реактор.
Не имеет значения, что этот программист всегда демонстрирует готовность к сотрудничеству или никогда не опаздывает на работу. Вы потеряете кредит доверия, если ваша награда не будет соответствовать технической стороне вопроса. Если вы недостаточно технически подкованы, чтобы судить о каче- стве кода, — не делайте этого. Лучше совсем не вручать награду или позволить команде выбрать достойного.
Один простой стандарт Если вы управляете программным проектом и в про- шлом сами были программистом, то простым и эффективным способом добить- ся хорошего результата будет фраза: «Я должен быть в состоянии прочесть и по- нять любой код, написанный в проекте». То, что менеджер — не самый техничес- ки продвинутый специалист, может быть преимуществом, так как препятствует созданию заумного или хитрого кода.
Роль этой книги
Большая часть книги содержит обсуждение хорошей практики программирова- ния. Она не предназначена для оправдания жестких стандартов — используйте ее как повод для дискуссии, источник сведений о хорошей программной практике,
а также для поиска таких методик, которые могут дать преимущества в вашей среде программирования.
ГЛАВА 28 Управление конструированием
649
28.2. Управление конфигурацией
Программный проект динамичен. Меняется код, меняется проект, меняются и требования. Более того, изменения в требованиях влекут еще большие изменения в проекте, а изменения в проекте приводят к еще более значительным изменени- ям в коде и тестовых примерах.
Что такое управление конфигурацией?
Управление конфигурацией — это практика определения элементов проекта и систематическая обработка изменений таким образом, чтобы система могла под- держивать свою целостность длительное время. Другое название этого процесса
— «контроль изменений». Он включает в себя методики определения предпола- гаемых изменений, отслеживание изменений и хранение копий системы в том виде, в каком она существовала в разные моменты.
Если вы не контролируете изменения в технических требованиях, это может за- кончиться написанием кода для тех частей системы, которые в какой-то момент были отменены. Вы можете создать код, несовместимый с новыми элементами системы. Эти несовместимости можно не обнаружить до момента интеграции,
который также станет началом поиска виноватых, потому что на самом деле никто не будет знать, что происходит.
Если не контролируются изменения в коде, вы можете изменить содержимое ме- тода, который в то же время меняет кто-то другой, причем успешно объединить ваши и чужие изменения будет проблематично. При неконтролируемых измене- ниях код может выглядеть протестированным лучше, чем на самом деле. Версия,
прошедшая тестирование, возможно, была старой, еще не измененной. Без хоро- шего контроля изменений вы можете внести в метод несколько исправлений, найти новые ошибки, но при этом не будете иметь возможности восстановления пре- дыдущей рабочей версии метода.
Если изменения не обрабатываются систематически, то вы блуждаете в тумане,
вместо того чтобы двигаться прямиком к ясной цели. Без хорошего контроля изменений вместо разработки кода вы впустую тратите время. Управление кон- фигурацией позволяет использовать время эффективно.
Несмотря на очевидную необходимость управления конфигурацией,
многие программисты избегают его десятилетиями. Опрос, проведенный более 20 лет назад, выяснил, что около трети программистов даже не были знакомы с этой идеей (Beck and Perkins, 1983), и нет никаких признаков, что это положение изменилось. Более свежее исследование Института Разработки ПО по- казало, что среди организаций, использующих неформальные методики разработ- ки ПО менее 20% применяют адекватное управление конфигурацией (SEI, 2003).
Управление конфигурацией изобрели не программисты, но поскольку программ- ные проекты чрезвычайно изменчивы, то для них оно особенно полезно. Приме- нительно к программным проектам управление конфигурацией обычно называ- ется «управление конфигурацией ПО» (software configuration management, SCM).
SCM сосредотачивается на программных требованиях, исходном коде, докумен- тации и тестах.
650
ЧАСТЬ VI Системные вопросы
Систематическая ошибка SCM заключается в избыточном контроле. Абсолютно надежный способ прекратить автомобильные аварии — это запретить всем водить машину, а абсолютно надежный способ предотвратить проблемы с разработкой
ПО — прекратить всю разработку. Хотя это и один из вариантов контроля изме- нений, это неудачный способ разрабатывать ПО. Необходимо тщательно плани- ровать SCM, чтобы оно давало преимущества, а не было камнем на шее.
В маленьком проекте, разрабатываемом в одиночку, вы,
вполне возможно, обойдетесь без всякого SCM, исключая планирование периодического нерегулярного создания ре- зервных копий. И все же управление конфигурацией еще способно принести пользу (на самом деле я пользовался такой системой при со- здании этой рукописи). В больших проектах, выполняемых 50 участниками, вам,
вероятно, потребуется полнофункциональная схема SCM, включающая довольно формальные процедуры резервного копирования, контроль изменений требова- ний и проекта, а также контроль над документами, исходным кодом, содержани- ем, тестовыми вариантами и другими элементами проекта. Если ваш проект не слишком велик и не слишком мал, вы должны установить уровень формальности,
находящийся между двумя экстремумами. Следующие подразделы описывают не- которые варианты реализации SCM.
Изменения в требованиях и проекте
Во время разработки вас переполняют идеи о том, как улуч- шить систему. Если вы будете реализовывать каждое изме- нение, вы скоро почувствуете, что бежите на месте: хотя система будет постоянно меняться, она не будет приближать- ся к завершению. Вот некоторые советы по контролю из- менений в проекте.
Следуйте систематической процедуре контроля изменений Систематичес- кая процедура контроля изменений — это настоящая находка в случае, когда у вас большое количество запросов на изменение (см. раздел 3.4). Установив система- тическую процедуру, вы даете понять, что изменения будут рассмотрены в кон- тексте наибольшей пользы для проекта в целом.
Обрабатывайте запросы на изменения группами Реализация простых из- менений по мере возникновения идей выглядит заманчиво. Проблема такого под- хода в том, что хорошие изменения могут затеряться. Если вы задумали простое изменение при 25%-й готовности проекта и сроки это позволяют, вы внесете это изменение. Если вы придумали еще одно простое изменение, когда готово 50%
проекта, но вы уже опаздываете, вы не будете его вносить. Когда сроки начинают поджимать в конце проекта, уже не имеет значения, что второе изменение в 10
раз лучше, чем первое: вы не в том положении, чтобы делать несущественные исправления. Часть самых лучших изменений может уйти сквозь пальцы просто потому, что подумали о них слишком поздно.
Решение этой проблемы состоит в записи всех идей и предложений (независимо от легкости их реализации) и сохранения их до тех пор, пока не появится воз- можность ими заняться. Тогда, рассматривая их целой группой, выберите из них наиболее полезные.
Перекрестная ссылка О влиянии размера проекта на конструиро- вание см. главу 27.
Перекрестная ссылка Одни под- ходы к разработке лучше под- держивают изменения, другие
— хуже (см. раздел 3.2).
1 ... 74 75 76 77 78 79 80 81 ... 104
ГЛАВА 28 Управление конструированием
651
Оценивайте затраты на каждое изменение Каждый раз, когда ваш заказ- чик, босс или вы сами намерены изменить систему, оценивайте время, необходи- мое на внесение изменения, включая рецензирование кода этого изменения и по- вторное тестирование всей системы. Учтите в вашей оценке расходы, касающие- ся возникновения волнового эффекта от этого изменения, распространяющего- ся по направлению от требований к проектированию, кодированию, тестирова- нию и обновлениям в пользовательской документации. Пусть все заинтересован- ные стороны знают, что ПО имеет сложнопереплетенную структуру, и что вре- менная оценка требуется, даже если изменение кажется небольшим.
Независимо от того, как оптимистично вы оцениваете предложенное изменение,
воздержитесь от немедленной оценки. Такие оценки обычно ошибочны в два и более раз.
Относитесь с подозрением к изменениям большого
объема Некоторое количество изменений неизбежно, но большой объем запросов на изменение сигнализирует о том,
что требования, архитектура или высокоуровневое проек- тирование не были выполнены достаточно качественно,
чтобы способствовать эффективному конструированию.
Возврат к работе над требованиями или архитектурой мо- жет показаться накладным, но он гораздо дешевле, чем кон- струирование ПО более одного раза или выбрасывание кода тех функций систе- мы, которые, как выяснилось, вам не нужны.
Учредите комитет контроля изменений Работа комитета контроля измене- ний состоит в отделении зерен от плевел в запросах на изменение. Любой, кто хочет предложить изменение, отправляет запрос этому комитету. Термин «запрос на изменение» относится к любому запросу, который приводит к изменению ПО:
идея новой функции, изменение в существующей функциональности, «отчет об ошибке», который сигнализирует о действительной или мнимой ошибке, и т. д.
Комитет периодически собирается и рассматривает предложенные изменения. Он одобряет, отвергает или откладывает каждое изменение. Комитеты контроля из- менений считаются лучшим решением для расстановки приоритетов и контроля изменений в требованиях, но они еще довольно редко встречаются в коммерче- ских структурах (Jones, 1998; Jones, 2000).
Соблюдайте бюрократические процедуры, но не позволяйте страху пе-