Файл: Руководство по стилю программирования и конструированию по.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 788
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
2 6
ЧАСТЬ I Основы разработки ПО
Если среда загрязнена, жучки плавают в ядерных отходах, а рыба плещется в неф- тяных пятнах. Чайкам не повезло больше всего: находясь в конце пищевой цепи,
они травятся и нефтью, и ядерными отходами. Если ваши требования неудачны,
они отравляют архитектуру, которая в свою очередь травит процесс конструиро- вания. Результат? Раздражительные программисты и полное изъянов ПО.
При планировании в высокой степени итеративного проекта вы до начала кон- струирования должны определить важнейшие требования и архитектурные эле- менты, влияющие на каждый конструируемый фрагмент программы. Строителям,
собирающимся строить поселок, не нужна полная информация о каждом доме до начала возведения первого дома, однако они должны исследовать место, соста- вить план канализации и электрических линий и т. д. Если строители плохо под- готовятся, канализационные трубы, возможно, придется проводить в уже постро- енный дом.
Обращение к данным
Исследования последних 25 лет убедительно доказали выгоду правильного выпол- нения проектов с первого раза и дороговизну внесения изменений, которых можно было избежать.
Ученые из компаний Hewlett-Packard, IBM, Hughes Aircraft, TRW и других организаций обнаружили, что исправление ошибки к началу конструи- рования обходится в 10–100 раз дешевле, чем ее устранение в конце ра- боты над проектом, во время тестирования приложения или после его выпуска
(Fagan, 1976; Humphrey, Snyder, and Willis, 1991; Leffingwell 1997; Willis et al., 1998;
Grady, 1999; Shull et al., 2002; Boehm and Turner, 2004).
Общий принцип прост: исправлять ошибки нужно как можно раньше. Чем доль- ше дефект сохраняется в пищевой цепи разработки ПО, тем больше вреда он приносит на следующих этапах. Так как раньше всего вырабатываются требова- ния, ошибки, допущенные на этом этапе, присутствуют в системе дольше и обхо- дятся дороже. Кроме того, дефекты, внесенные в систему раньше, оказывают бо- лее широкое влияние, чем дефекты, внесенные позднее. Это также повышает цену более ранних дефектов.
Вот данные об относительной дороговизне исправления дефектов в за- висимости от этапов их внесения и обнаружения (табл. 3-1):
1 2 3 4 5 6 7 8 9 ... 104
ГЛАВА 3 Семь раз отмерь, один раз отрежь: предварительные условия
27
Табл. 3-1. Средняя стоимость исправления дефектов в зависимости
от времени их внесения и обнаружения
Время обнаружения дефекта
Время
внесения
Выработка
Проектирование
Тестирование После
дефекта
требований архитектуры
Конструирование системы
выпуска ПО
Выработка
1 3
5–10 10 10–100
требований
Проектиро- —
1 10 15 25–100
вание архи- тектуры
Конструи-
—
—
1 10 10–25
рование
Источник: адаптировано из работ «Design and Code Inspections to Reduce Errors in
Program Development» (Fagan 1976), «Software Defect Removal» (Dunn, 1984), «Software
Process Improvement at Hughes Aircraft» (Humphrey, Snyder, and Willis, 1991), «Calculating the Return on Investment from More Effective Requirements Management» (Leffingwell,
1997), «Hughes Aircraft’s Widespread Deployment of a Continuously Improving Software
Process» (Willis et al., 1998), «An Economic Release Decision Model: Insights into Software
Project Management» (Grady, 1999), «What We Have Learned About Fighting Defects» (Shull et al., 2002) и «Balancing Agility and Discipline: A Guide for the Perplexed» (Boehm and
Turner, 2004).
Эти данные говорят, например, о том, что дефект архитектуры, исправление ко- торого при проектировании архитектуры обходится в $1000, может во время те- стировании системы вылиться в $15 000 (рис. 3-1).
Этап внесения
дефекта
Выработка требований
Проектирование архитектуры
Конструирование
Этап обнаружения дефекта
Выработка требований
Проектирование архитектуры
Конструирование
Т
естирование системы
После выпуска ПО
Затраты
Рис. 3-1. С увеличением интервала между моментами внесения и обнаружения
дефекта стоимость его исправления сильно возрастает. Это верно и для очень
последовательных проектов (выработка требований и проектирование на 100%
выполняются заблаговременно), и для очень итеративных (аналогичный показатель
равен 5%)
2 8
ЧАСТЬ I Основы разработки ПО
В большинстве проектов основная часть усилий по исправлению дефек- тов все еще приходится на правую часть рис. 3-1, а значит, на отладку и переделывание работы уходит около 50% времени типичного цикла раз- работки ПО (Mills, 1983; Boehm, 1987; Cooper and Mullen, 1993; Fishman, 1996; Haley,
1996; Wheeler, Brykczynski, and Meeson, 1996; Jones, 1998; Shull et al., 2002; Wiegers,
2002). В десятках компаний было обнаружено, что политика раннего исправле- ния дефектов может в два и более раз снизить финансовые и временные затраты на разработку ПО (McConnell, 2004). Это очень веский довод в пользу как можно более раннего нахождения и решения проблем.
Тест готовности руководителя
Если вам кажется, что ваш руководитель понимает важность выполнения предва- рительных условий до начала конструирования, попросите его пройти следую- щий тест, чтобы убедиться в этом.
Какие из этих утверждений являются самоисполняющимися пророчествами?
쐽
Предлагаю приступить к кодированию прямо сейчас, потому что нам предстоит потратить много времени на отладку.
쐽
Мы не выделили много времени на тестирование, поскольку не ожидаем об- наружить много дефектов.
쐽
Мы изучили требования и проект приложения так хорошо, что я не представ- ляю, какие крупные проблемы могут у нас возникнуть во время кодирования или отладки.
Все эти высказывания — самоисполняющиеся пророчества. Стремитесь к тому,
чтобы исполнилось последнее.
Если вы еще не уверены, что предварительные условия актуальны для вашего проекта, следующий раздел поможет вам принять окончательное решение.
3.2. Определите тип ПО, над которым
вы работаете
Обобщая 20 лет исследований разработки ПО, Кейперс Джонс, руководитель ис- следовательских работ в компании Software Productivity Research, заявил, что он и его коллеги сталкивались с 40 разными методами сбора требований, 50 вари- антами проектирования ПО и 30 видами тестирования, применявшимися в про- ектах, реализуемых более чем на 700 языках программирования (Jones, 2003).
Разные типы проектов призывают к разным сочетаниям подготовки и конструи- рования. Каждый проект уникален, однако обычно проекты подпадают под общие стили разработки. Вот три самых популярных типа проектов, а также оптималь- ные в большинстве случаев методы работы над ними (табл. 3-2):
ГЛАВА 3 Семь раз отмерь, один раз отрежь: предварительные условия
29
Табл. 3-2. Оптимальные методы работы над программными проектами
трех популярных типов
Тип ПО
Встроенные системы,
Системы целевого
от которых зависит
Бизнес-системы
назначения
жизнь людей
Типичные
Интернет-сайты.
Встроенное ПО.
Авиационное ПО.
приложения
Сайты в интрасетях.
Игры.
Встроенное ПО.
Системы управле-
Интернет-сайты.
ПО для медицинских ния материально-
Пакетное ПО.
устройств.
техническим
Программные
Операционные снабжением.
инструменты.
системы.
Игры.
Web-сервисы.
Пакетное ПО.
Системы управле- ния информацией.
Системы выплаты заработной платы.
Модели жизнен- Гибкая разработка
Поэтапная поставка.
Поэтапная поставка.
ного цикла
(экстремальное
Эволюционная
Спиральная программирование,
поставка.
разработка.
методология Scrum,
Спиральная
Эволюционная разработка на осно- разработка.
поставка.
ве временных окон и т. д.).
Эволюционное.
прототипирование.
Планирование
Инкрементное пла-
Базовое заблаговре-
Исчерпывающее
и управление
нирование проекта.
менное планирование.
заблаговременное
Планирование тести- Базовое планирова- планирование.
рования и гарантии ние тестирования.
Исчерпывающее качества по мере
Планирование планирование тести- надобности.
гарантии качества рования.
Неформальный по мере надобности.
Исчерпывающее пла- контроль над
Формальный контроль нирование гарантии изменениями.
над изменениями.
качества.
Тщательный контроль над изменениями.
Выработка
Неформальная
Полуформальная спе-
Формальная специ-
требований
спецификация цификация требований. фикация требований.
требований.
Обзоры требований
Формальные инспек- по мере надобности.
ции требований.
(
см. след. стр.)
3 0
ЧАСТЬ I Основы разработки ПО
Табл. 3-2. (окончание)
Тип ПО
Встроенные системы,
Системы целевого
от которых зависит
Бизнес-системы
назначения
жизнь людей
Проектирова-
Комбинация
Проектирование
Проектирование
ние
проектирования архитектуры.
архитектуры.
и кодирования.
Неформальное деталь-
Формальные инспек- ное проектирование.
ции архитектуры.
Обзоры проекта
Формальное деталь- по мере надобности.
ное проектирование.
Формальные инспек- ции детального проекта.
Конструирова-
Парное или индиви-
Парное или индиви-
Парное или индиви-
ние
дуальное программи- дуальное программи- дуальное программи- рование.
рование.
рование.
Неформальная про-
Неформальная проце-
Формальная процеду- цедура регистрации дура регистрации кода. ра регистрации кода.
кода или ее отсутст-
Обзоры кода по мере
Формальные инспек- вие.
надобности.
ции кода.
Тестирование
Разработчики тести-
Разработчики тестируют Разработчики тести-
и гарантия
руют собственный код. собственный код.
руют собственный
качества
Предварительная
Предварительная разра- код.
разработка тестов.
ботка тестов.
Предварительная
Тестирование отдель- Отдельная группа разработка тестов.
ной группой прово- тестирования.
Отдельная группа дится в малом объеме тестирования.
или не проводится
Отдельная группа вообще.
гарантии качества.
Внедрение
Неформальная проце- Формальная процедура Формальная процеду-
приложения
дура внедрения.
внедрения.
ра внедрения.
Работая над реальными проектами, вы столкнетесь с бесчисленными вариация- ми на три темы, указанные в таблице, однако можно сделать и некоторые общие выводы. При разработке бизнес-систем предпочтительно использовать высоко- итеративные подходы, при которых планирование, выработка требований и про- ектирование архитектуры перемежаются с конструированием, тестированием си- стемы и гарантией качества. Системы, от которых зависит жизнь людей, требуют более последовательных подходов, поскольку стабильность требований — одно из условий высочайшей надежности системы.
Влияние итеративных подходов
на предварительные условия
Кое-кто утверждает, что при использовании итеративных методов не нужно осо- бо возиться с предварительными условиями, но эта точка зрения неверна. Итера-
ГЛАВА 3 Семь раз отмерь, один раз отрежь: предварительные условия
31
тивные подходы ослабляют следствия неадекватной подготовки, но не устраня- ют их. Давайте изучим табл. 3-3, в которой приведены данные о проектах, в нача- ле которых не были выполнены предварительные условия. Первый проект выпол- няется последовательно, при этом дефекты обнаруживаются только на этапе тес- тирования; второй выполняется итеративно, и разработчики находят дефекты по мере работы. В первом случае основной объем работы по исправлению дефектов откладывается на конец проекта, что приводит к росту расходов (табл. 3-1). При итеративном подходе дефекты исправляются по мере развития проекта, что по- зволяет снизить общие расходы. Табл. 3-3 и 3-4 приведены исключительно в ил- люстративных целях, однако соотношение затрат при этих двух общих подходах хорошо подтверждается исследованием, описанным выше.
Табл. 3-3. Влияние невыполнения предварительных условий
на последовательный и итеративный проекты
Подход 1: последовательный
Подход 2: итеративный подход
подход без выполнения
без выполнения
предварительных условий
предварительных условий
Степень
Затраты
Затраты
Затраты
Затраты завершенности на работу на исправление на работу на исправление проекта дефектов дефектов
20%
$100 000
$0
$100 000
$75 000 40%
$100 000
$0
$100 000
$75 000 60%
$100 000
$0
$100 000
$75 000 80%
$100 000
$0
$100 000
$75 000 100%
$100 000
$0
$100 000
$75 000
Затраты на исправ- $0
$500 000
$0
$0
ление дефектов в конце проекта
СУММА
$500 000
$500 000
$500 000
$375 000
ОБЩАЯ СУММА
$1 000 000
$875 000
Итеративный проект с сокращенной программой выполнения предварительных условий или без нее отличается от аналогичного последовательного проекта двумя аспектами. Во-первых, при итеративном подходе затраты на исправление дефек- тов обычно ниже, потому что дефекты выявляются раньше. И все же это проис- ходит в конце каждой итерации, и исправление дефектов требует повторного проектирования, кодирования и тестирования фрагментов ПО, что делает затра- ты более крупными, чем они могли бы быть.
Во-вторых, при итеративных подходах затраты распределяются по всему проекту,
а не группируются в его конце. В конце концов и при итеративных, и при после- довательных подходах общая сумма затрат окажется похожей, но в первом случае она не будет казаться столь крупной, потому что будет уплачена по частям.
3 2
ЧАСТЬ I Основы разработки ПО
Адекватное внимание к выполнению предварительных условий позволяет снизить затраты независимо от типа используемого подхода (табл. 3-4). Итеративные подходы обычно по многим параметрам лучше последовательных, однако итера- тивный подход, при котором пренебрегают предварительными условиями, может в итоге оказаться гораздо дороже, чем должным образом подготовленный после- довательный проект.
Табл. 3-4. Влияние выполнения предварительных условий
на последовательный и итеративный проекты
Подход 3: последовательный
Подход 4: итеративный подход
подход с выполнением
с выполнением
предварительных условий
предварительных условий
Степень
Затраты
Затраты
Затраты
Затраты завершенности на работу на исправление на работу на исправление проекта дефектов дефектов
20%
$100 000
$20 000
$100 000
$10 000 40%
$100 000
$20 000
$100 000
$10 000 60%
$100 000
$20 000
$100 000
$10 000 80%
$100 000
$20 000
$100 000
$10 000 100%
$100 000
$20 000
$100 000
$10 000
Затраты на исправ- $0
$0
$0
$0
ление дефектов в конце проекта
СУММА
$500 000
$100 000
$500 000
$50 000
ОБЩАЯ СУММА
$600 000
$550 000
Эти данные наводят на мысль, что большинство проектов не являются ни полностью последовательными, ни полностью итеративными. Опре- делять требования или выполнять проектирование на 100% наперед не- практично, однако обычно определение самых важных требований и архитектур- ных элементов на раннем этапе оказывается выгодным.
Одно популярное практическое правило состоит в том, что- бы заблаговременно определить около 80% требований,
предусмотреть время для более позднего определения до- полнительных требований и выполнять по мере работы си- стематичный контроль изменений, принимая только самые важные требования. Возможен и другой вариант: вы можете определить заранее
20% только самых важных требований и разрабатывать оставшуюся часть ПО
небольшими фрагментами, определяя дополнительные требования и дорабаты- вая проект приложения по мере прогресса (рис. 3-2 и 3-3).
Перекрестная ссылка Об адапта- ции подхода разработки к про- граммам разных размеров см.
главу 27.
ГЛАВА 3 Семь раз отмерь, один раз отрежь: предварительные условия
33
Время
Выработка требований
Проектирование архитектуры
Детальное проектирование
Конструирование
Гарантия качества/Тестирование системы
Рис. 3-2. Этапы работы над проектами — даже самыми последовательными —
обычно несколько перекрываются
Выработка требований
Проектирование архитектуры
Детальное проектирование
Конструирование
Гарантия качества/Тестирование системы
Время
Рис. 3-3. В других случаях этапы перекрываются на всем протяжении проекта.
Понимание степени выполнения предварительных условий и соответствующая
адаптация проекта — одно из условий успешного конструирования
Выбор между итеративным и последовательным подходом
Степень, в которой предварительные условия должны быть выполнены наперед,
зависит от типа проекта (табл. 3-2), формальности проекта, технической среды,
возможностей сотрудников и бизнес-модели проекта. Вы можете выбрать более последовательный подход (при котором вопросы решаются заблаговременно), если:
쐽
требования довольно стабильны;
쐽
проект приложения прост и относительно понятен;
쐽
группа разработчиков знакома с прикладной областью;
쐽
проект не связан с особым риском;