Главная страница
Навигация по странице:

  • Время обнаружения дефекта Время внесения Выработка Проектирование Тестирование После дефекта требований архитектуры

  • Этап внесения дефекта Выработка требованийПроектирование архитектурыКонструированиеЭтап обнаружения дефекта

  • Тест готовности руководителя

  • 3.2. Определите тип ПО, над которым вы работаете

  • ГЛАВА 3

  • Встроенные системы, Системы целевого от которых зависит Бизнес-системы назначения жизнь людей Типичные

  • Модели жизнен

  • Планирование Инкрементное плаБазовое заблаговреИсчерпывающееи управление

  • Выработка НеформальнаяПолуформальная спеФормальная специтребований

  • ЧАСТЬ I

  • Конструирова Парное или индивиПарное или индивиПарное или индивиние

  • Тестирование Разработчики тестиРазработчики тестируют Разработчики тестии гарантия руют собственный код. собственный код.руют собственныйкачества

  • Внедрение Неформальная проце Формальная процедура Формальная процедуприложения

  • Влияние итеративных подходов на предварительные условия

  • Табл. 3-3. Влияние невыполнения предварительных условий на последовательный и итеративный проекты Подход 1: последовательный Подход 2: итеративный подход

  • Табл. 3-4. Влияние выполнения предварительных условий на последовательный и итеративный проекты Подход 3: последовательный Подход 4: итеративный подход

  • Перекрестная ссылка

  • Выбор между итеративным и последовательным подходом

  • 3.3. Предварительные условия, связанные с определением проблемы

  • Совершенный код. Совершенный код. Мастер-класс. Стив Макконнелл. Руководство по стилю программирования и конструированию по


    Скачать 5.88 Mb.
    НазваниеРуководство по стилю программирования и конструированию по
    АнкорСовершенный код
    Дата31.03.2023
    Размер5.88 Mb.
    Формат файлаpdf
    Имя файлаСовершенный код. Мастер-класс. Стив Макконнелл.pdf
    ТипРуководство
    #1028502
    страница6 из 106
    1   2   3   4   5   6   7   8   9   ...   106
    ГЛАВА 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%)

    28
    ЧАСТЬ 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,
    Спиральная
    Эволюционная разработка на осно#
    разработка.
    поставка.
    ве временных окон и т. д.).
    Эволюционное.
    прототипирование.
    Планирование
    Инкрементное пла#
    Базовое заблаговре#
    Исчерпывающее
    и управление
    нирование проекта.
    менное планирование.
    заблаговременное
    Планирование тести# Базовое планирова#
    планирование.
    рования и гарантии ние тестирования.
    Исчерпывающее качества по мере
    Планирование планирование тести#
    надобности.
    гарантии качества рования.
    Неформальный по мере надобности.
    Исчерпывающее пла#
    контроль над
    Формальный контроль нирование гарантии изменениями.
    над изменениями.
    качества.
    Тщательный контроль над изменениями.
    Выработка
    Неформальная
    Полуформальная спе#
    Формальная специ#
    требований
    спецификация цификация требований. фикация требований.
    требований.
    Обзоры требований
    Формальные инспек#
    по мере надобности.
    ции требований.
    (
    см. след. стр.)

    30
    ЧАСТЬ 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
    Итеративный проект с сокращенной программой выполнения предварительных условий или без нее отличается от аналогичного последовательного проекта двумя аспектами. Во#первых, при итеративном подходе затраты на исправление дефек#
    тов обычно ниже, потому что дефекты выявляются раньше. И все же это проис#
    ходит в конце каждой итерации, и исправление дефектов требует повторного проектирования, кодирования и тестирования фрагментов ПО, что делает затра#
    ты более крупными, чем они могли бы быть.
    Во#вторых, при итеративных подходах затраты распределяются по всему проекту,
    а не группируются в его конце. В конце концов и при итеративных, и при после#
    довательных подходах общая сумма затрат окажется похожей, но в первом случае она не будет казаться столь крупной, потому что будет уплачена по частям.

    32
    ЧАСТЬ 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), формальности проекта, технической среды,
    возможностей сотрудников и бизнес#модели проекта. Вы можете выбрать более последовательный подход (при котором вопросы решаются заблаговременно), если:
    
    требования довольно стабильны;
    
    проект приложения прост и относительно понятен;
    
    группа разработчиков знакома с прикладной областью;
    
    проект не связан с особым риском;

    34
    ЧАСТЬ I Основы разработки ПО
    
    важна долговременная предсказуемость проекта;
    
    затраты на изменение требований, проекта приложения и кода скорее всего окажутся высокими.
    Более итеративный подход (при котором вопросы решаются по мере работы)
    можно предпочесть, если:
    
    требования относительно непонятны или вам кажется, что они могут оказать#
    ся нестабильными по другим причинам;
    
    проект приложения сложен, не совсем ясен или и то и другое;
    
    группа разработчиков незнакома с прикладной областью;
    
    проект сопряжен с высоким риском;
    
    долговременная предсказуемость проекта не играет особой роли;
    
    затраты на изменение требований, проекта приложения и кода скорее всего будут низкими.
    Как бы то ни было, итеративные подходы эффективны гораздо чаще, чем после#
    довательные. Вы можете адаптировать предварительные условия к своему кон#
    кретному проекту, как считаете нужным, сделав их более или менее формальны#
    ми или полными. Мы подробнее обсудим разные подходы к крупным и неболь#
    шим (или формальным и неформальным) проектам в главе 27.
    Суть предварительных условий конструирования в том, что вам следует сначала определить, какие из них уместны для вашего проекта. В некоторых проектах предварительным условиям уделяется слишком мало времени, что приводит к дестабилизации на этапе конструирования и препятствует планомерному разви#
    тию проекта, хотя этого можно было избежать. В других проектах слишком мно#
    го работы выполняется наперед; программисты, работающие над такими проек#
    тами, слепо следуют требованиям и планам, которые впоследствии оказываются неудачными, и это также может снижать эффективность конструирования.
    Итак, изучив табл. 3#2, вы определили, какие предварительные условия уместны для вашего проекта, поэтому в оставшейся части главы я расскажу, как определить,
    были ли выполнены отдельные предварительные условия конструирования.
    3.3. Предварительные условия, связанные
    с определением проблемы
    Первое предварительное условие, которое нужно выполнить перед конструированием, — ясное формулирование пробле#
    мы, которую система должна решать. Это еще иногда назы#
    вают «видением продукции», «формулированием точки зре#
    ния», «формулированием задачи» или «определением про#
    дукции». Я буду называть это условие «определением про#
    блемы». Так как книга посвящена конструированию про#
    грамм, прочитав этот раздел, вы не научитесь разрабатывать определение проблемы, но узнаете, как определить, есть ли оно вообще и станет ли оно надежной основой конструирования.
    Если ограничения и условия описываются как «коробка», то хитрость в том, чтобы найти именно коробку… Не думайте о чем-то глобальном — найдите коробку.
    Энди Хант и Дэйв Томас (Andy
    Hunt and Dave Thomas)

    1   2   3   4   5   6   7   8   9   ...   106


    написать администратору сайта