3.7

Смотреть на английском

3.7 Сопровождение программного обеспечения

Обзор и мотивация

Большинство программ проводит подавляющую часть жизни не в построении, а в сопровождении. В момент ввода системы в эксплуатацию она входит в фазу (часто длящуюся годы или десятилетия) исправления дефектов, адаптации к меняющейся среде, улучшения уже работающего и предотвращения будущих проблем. В больших корпорациях, и особенно в государстве, эта фаза доминирует. Налоговые движки, системы пособий, оборонные платформы и основные финансовые книги обычно сопровождаются гораздо дольше, чем кто-либо из заказавших ожидал. Сопровождение программного обеспечения это дисциплина сохранения поставленной программы корректной, актуальной и ценной на протяжении всей её эксплуатационной жизни.

Сопровождение хронически недооценивают и недооценивают его значение, и эта ошибка дорого обходится. Исследование за исследованием на протяжении десятилетий относят сопровождение к значительно более чем половине совокупной стоимости жизненного цикла программы, обычно называя диапазон от 60 до 90 процентов для долгоживущих систем. Однако организации планируют, бюджетируют, комплектуют и празднуют первоначальное построение так, будто это всё предприятие. Затем они воспринимают всё после как запоздалую мысль, финансируемую из сокращающегося котла и поручаемую тому, кто свободен. Результат предсказуем: хрупкие системы, деморализованные сопровождающие, растущая стоимость изменений и в итоге кризис, подаваемый как «проблема наследия» (глава 3.6), когда на деле это всегда была проблема неуправляемого сопровождения.

Эта глава следует области знаний «Сопровождение программного обеспечения» SWEBOK (свода знаний по программной инженерии) и ISO/IEC 14764. Она охватывает основы сопровождения и четыре признанные категории; ключевые вопросы, делающие сопровождение трудным, включая стоимость, комплектование и моральный дух; процесс сопровождения; основные техники понимания программ, реинжиниринга и рефакторинга; оценку стоимости сопровождения и (самую рычажную идею главы) проектирование под сопровождаемость с самого начала. Центральное убеждение: сопровождение не второстепенная деятельность, следующая за инженерией. Это наибольшая часть программной инженерии, и его нужно планировать, обеспечивать ресурсами и уважать как таковое.

Ключевые принципы

  • Сопровождение это большая часть жизненного цикла, а не эпилог. Планируйте и бюджетируйте его с первого дня; оно будет стоить больше построения.
  • Четыре категории это разная работа. Корректирующее, адаптивное, совершенствующее и профилактическое сопровождение имеют разные драйверы и ритмы; большая часть усилий не исправление ошибок.
  • Нельзя менять то, чего не понимаешь. Понимание программ крупнейшая отдельная деятельность в сопровождении; делайте код и его историю читаемыми.
  • Сопровождаемость это свойство проекта. Стоимость будущих изменений во многом определяется решениями, принятыми при конструировании; проектируйте под неё намеренно.
  • Малые, безопасные, непрерывные изменения побеждают отложенные большие. Рефакторьте и модернизируйте постепенно под страховочной сеткой тестов, а не накапливайте долг изменений.
  • Программы стареют, даже когда стоят на месте. Среда движется (зависимости, платформы, нормы), поэтому статичная система молча гниёт; профилактическое сопровождение это реальная работа.
  • Сопровождающие заслуживают первоклассного статуса. Моральный дух, удержание знаний и комплектование команд сопровождения напрямую определяют долгосрочные стоимость и риск.

Рекомендации

Различайте четыре категории сопровождения и комплектуйте под все

ISO/IEC 14764 и SWEBOK признают четыре категории, и их путаница частая ошибка планирования. Корректирующее сопровождение исправляет дефекты, найденные в эксплуатации. Адаптивное сопровождение сохраняет работоспособность программы по мере изменения её среды: новые операционные системы, браузеры, зависимости, оборудование, нормы или взаимодействующие системы. Совершенствующее сопровождение улучшает программу для пользователей и сопровождающих через новые функции, лучшую производительность, улучшенное удобство использования и повышенную сопровождаемость. Профилактическое сопровождение исправляет скрытые неисправности и снижает будущий риск до его проявления через укрепление, уборку и модернизацию хрупких областей. Полезное дальнейшее деление группирует корректирующее и профилактическое как исправление (работа с неисправностями), а адаптивное и совершенствующее как улучшение (работа с новыми требованиями). Принципиально, эмпирические исследования последовательно находят, что большая часть сопровождения не корректирующая; доминируют улучшение и адаптация. Бюджетируйте и комплектуйте соответственно и отслеживайте, к какой категории фактически относятся ваши усилия, чтобы управлять ими.

Вкладывайтесь в понимание программ

Крупнейшая отдельная деятельность в сопровождении это понимание существующей системы достаточно хорошо, чтобы безопасно её менять. Сопровождающие регулярно тратят больше времени на чтение и осмысление кода, чем на его изменение. Сделайте это дешевле намеренно. Держите документацию рядом с кодом и актуальной (глава 2.7). Сохраняйте историю решений через записи об архитектурных решениях (глава 1.6) и чистую историю коммитов (глава 2.6). Используйте статический анализ, графы зависимостей и инструменты навигации по коду, чтобы картографировать незнакомую территорию. Характеризующие тесты (тесты, фиксирующие текущее поведение, включая причуды) превращают неявное понимание в исполняемое долговечное знание. Когда понимание дорого, каждое изменение медленно и рискованно. Когда оно дёшево, сопровождение становится рутиной.

Рефакторьте непрерывно под страховочной сеткой тестов

Рефакторинг это дисциплинированная перестройка кода, улучшающая его внутреннее качество без изменения внешнего поведения. Выполняемый непрерывно и малыми шагами, он противодействует естественному дрейфу к сложности и держит стоимость изменений постоянной, а не растущей. Непременная предпосылка надёжный автоматизированный набор тестов (глава 2.4). Без него «рефакторинг» просто рискованное переписывание. Вплетайте рефакторинг в повседневную работу: оставляйте каждый модуль немного чище, чем нашли, а не приберегайте для редких, больших, опасных уборок. Это профилактическое сопровождение на практике, и это самое дешёвое сопровождение из существующих.

Проводите реинжиниринг, когда постепенных изменений больше недостаточно

Когда компонент деградировал до того, что рутинные изменения слишком дороги или рискованны, реинжиниринг (исследование и изменение системы для её воссоздания в новой форме) более тяжёлый инструмент. Реинжиниринг обычно сочетает обратную разработку (восстановление проекта и замысла из реализации) с прямым реинжинирингом (перестройка в лучшую структуру с сохранением поведения). Предпочитайте проводить реинжиниринг ограниченными постепенными срезами, используя такие шаблоны, как «душащая фига» и ветвление через абстракцию (глава 3.6), а не как сплошное переписывание. Реинжиниринг находится на континууме от сопровождения до модернизации: рефакторинг для малого и локального, реинжиниринг для структурного, модернизация для уровня платформы.

Ведите определённый процесс сопровождения

Сопровождению полезен явный повторяемый процесс, описанный в ISO/IEC 14764: реализация процесса (установление планов и процедур), анализ проблем и модификаций (сортировка, воспроизведение, оценка влияния и стоимости), реализация модификации, ревью и приёмка сопровождения, миграция и вывод из эксплуатации. Оберните его дисциплинированным управлением изменениями: каждый запрос на сопровождение (отчёт о дефекте или улучшение) должен регистрироваться, классифицироваться по категории, оцениваться по влиянию, приоритизироваться, реализовываться под контролем версий с тестами, рецензироваться и выпускаться через обычный конвейер (глава 11.2). Анализ влияния, понимание всего, чего может коснуться предлагаемое изменение, централен и заслуживает реальных усилий. Вывод из эксплуатации тоже часть процесса: безопасное прекращение работы системы, миграция её данных и пользователей и сохранение записей это работа по сопровождению, которую нужно планировать, а не импровизировать.

Оценивайте стоимость сопровождения явно и финансируйте её

Не воспринимайте сопровождение как бесплатное или как шум в бюджете построения. Оценивайте его. Распространённые подходы включают отношения затрат на сопровождение (широко используемое эмпирическое правило, что годовое сопровождение составляет примерно от 15 до 25 процентов первоначальной стоимости разработки, хотя долгоживущие критичные системы накапливают гораздо больше за свою жизнь), параметрические модели вроде COCOMO II (конструктивной модели стоимости) с её расширениями для сопровождения и повторного использования и прогнозирование на основе метрик по вашим собственным историческим данным о долях дефектов, объёме изменений и стоимости изменений. Направляйте эти оценки в анализ совокупной стоимости владения и экономику, обсуждаемую в главе 10.10. Цена покупки или стоимость построения системы лишь первоначальный взнос. Ипотека это сопровождение, и оно должно присутствовать в каждом бизнес-обосновании.

Проектируйте под сопровождаемость с самого начала

Наибольший рычаг над стоимостью сопровождения прилагается до начала сопровождения. Сопровождаемость (анализируемость, изменяемость, тестируемость и модульность в словаре ISO/IEC 25010) это качество проекта, которое должно быть явным требованием, а не счастливой случайностью. Отдавайте предпочтение модульным, слабосцепленным проектам с высокой связностью (глава 2.2); ясным интерфейсам и разделению ответственности; сильным автоматическим тестам; читаемому коду и актуальной документации; и богатой наблюдаемости, чтобы операторы и сопровождающие могли видеть, что делает система (часть 9). Каждое из этих решений меняет немного больше усилий сейчас на большую, накапливающуюся экономию на десятилетия, которые система действительно проживёт. Построение под сопровождаемость вложение с наибольшей отдачей во всём жизненном цикле.

Компромиссы: плюсы и минусы

ПодходПлюсыМинусы
Непрерывный рефакторинг / профилактическое сопровождениеДержит стоимость изменений постоянной, снижает риск, высокий ROIПостоянные усилия без видимых новых функций; нужны сильные тесты
Откладывание сопровождения («держать свет включённым»)Дешевле всего в этом квартале; освобождает мощность для функцийДолг изменений нарастает; в итоге кризис и вынужденное дорогое действие
Реинжиниринг деградировавшего компонентаВосстанавливает сопровождаемость и продлевает полезную жизньЗначительные усилия и риск; поведение нужно тщательно сохранить
Проектирование под сопровождаемость заранееНакапливающаяся экономия за жизнь; легче каждое будущее изменениеБолее высокая начальная стоимость и дисциплина; выгоды отложены и менее видимы

Повторяющийся компромисс в сопровождении это текущая стоимость против будущей, и искушение всегда тянет к откладыванию. Пропуск рефакторинга, старение зависимостей и голодание команды сопровождения всё выглядит бесплатным в этом квартале, потому что счёт приходит позже: как более медленная, рискованная, дорогая система и в итоге как «кризис наследия». Дисциплина хорошего сопровождения в том, чтобы платить малые, непрерывные, видимые затраты сейчас, избегая больших, внезапных, определяющих карьеру затрат потом. Поскольку экономия отложена и невидима, этот размен требует руководства, понимающего экономику жизненного цикла, а не только даты запуска.

Вопросы для обсуждения с командой

  1. Кто владеет числом сопровождения в вашем бюджете и это ли первоклассная статья или остаток, наскребаемый из того, что не потратило построение? Сопровождение это большая часть совокупной стоимости жизненного цикла, обычно от 60 до 90 процентов для долгоживущих систем, однако его регулярно финансируют как запоздалую мысль и комплектуют тем, кто свободен. Когда бюджет остаточный, профилактическая работа первой урезается, долг изменений нарастает, и следует предсказуемое скольжение в «кризис наследия». Принесите реальную оценку (отношение затрат на сопровождение, параметрическую модель или ваши собственные исторические данные о стоимости изменений) и назовите человека, ответственного за её финансирование на протяжении жизни системы. Исправление в том, чтобы бюджетировать сопровождение явно в каждом бизнес-обосновании, как ипотека стоит рядом с ценой покупки. Руководство, празднующее только запуски, будет недофинансировать фазу, где на самом деле живут большая часть денег и риска.

  2. Выделяете ли вы мощность на профилактическое сопровождение или она всегда проигрывает следующей функции? Профилактическая работа (рефакторинг под сеткой тестов, поддержание зависимостей актуальными, укрепление хрупких областей) самое дешёвое сопровождение, потому что держит кривую стоимости изменений плоской, а не позволяет ей расти. Её же легче всего отложить, поскольку пропуск выглядит бесплатным в этом квартале, а счёт приходит позже как более медленная, рискованная система. Помогает конкретный механизм: постоянное выделение, и многие сильные команды защищают примерно пятую часть мощности, охраняемое, а не пересматриваемое каждый спринт. Принесите ваш тренд стоимости изменений как свидетельство; если он растёт, вы уже недоинвестируете. Дисциплина в уплате малых видимых затрат сейчас, чтобы избежать больших внезапных, определяющих карьеру потом, и это требует руководства, читающего экономику жизненного цикла, а не даты запуска.

  3. Каков ваш план вывода системы из эксплуатации и когда вы в последний раз действительно выводили одну? Вывод из эксплуатации явная часть процесса сопровождения (миграция данных, переключение пользователей, сохранение записей, безопасное прекращение работы), однако организации годами несут мёртвые и избыточные системы, потому что вывод неромантичен и не заложен в бюджет. Каждая система-зомби по-прежнему потребляет лицензии, патчи безопасности, поверхность интеграции и внимание людей, которые могли бы быть в другом месте. Принесите опись и пометьте системы без активных пользователей или с уже живой полной заменой, затем планируйте их отключение, как любую другую работу: мигрируйте данные, сохраняйте то, что требует закон, и убедитесь, что ничто больше от них не зависит. Особенно в государстве закон о хранении записей определяет, как вы выводите, поэтому рано привлекайте соответствие. Стоящий отслеживания признак зрелости: когда ваша организация в последний раз намеренно что-то выключила?

  4. Какая доля каждого изменения тратится на понимание системы до того, как её трогать, и каков ваш автобусный фактор на важнейших системах? Понимание программ крупнейшая отдельная деятельность в сопровождении, а его стоимость определяется тем, насколько читаемыми вы сохранили код, его историю и поведение. Когда понимание живёт только в нескольких головах давних сотрудников, каждый уход или выход на пенсию повышает цену каждого будущего изменения, а одно отсутствие может остановить критичное исправление. Принесите свидетельства: отношение времени чтения и осмысления ко времени правки в недавних изменениях, число людей, которые могут безопасно менять каждый основной модуль, и документированы ли бизнес-правила и решения рядом с кодом или восстанавливаются из памяти каждый раз. Противоположное соображение в том, что документация и характеризующие тесты стоят усилий сейчас ради экономии, проявляющейся только позже, поэтому их легко пропустить. В корпоративной и государственной среде, где системы переживают первоначальных авторов на десятилетия, а установленные законом правила погребены в расчётном движке, который никто полностью не помнит, воспринимайте захваченное понимание (записи об архитектурных решениях, характеризующие тесты, актуальную документацию) как актив, финансируемый намеренно, а не любезность, происходящую, когда у кого-то есть свободное время.

  5. Кто на самом деле комплектует вашу работу по сопровождению и соответствуют ли её статус и моральный дух её важности? Сопровождение это большая часть совокупной стоимости жизненного цикла и труднейшая инженерия, безопасное изменение систем, которых вы не строили и, возможно, не полностью понимаете, однако его регулярно отдают наименее опытным людям и подают как низкостатусное «держание света включённым». Этот сигнал разъедает: ваши лучшие инженеры избегают работы, знания концентрируются и затем уходят за дверь, а стоимость изменений растёт, пока никто не смотрит. Принесите профиль старшинства тех, кто сопровождает ваши самые долгоживущие системы, ваши данные о текучести и удержании знаний и честную оценку того, тупик ли сопровождение в карьере или уважаемая специализация в вашей организации. Напряжение реально, поскольку амбициозные инженеры хотят строить новое, а руководители хотят праздновать запуски, поэтому уважение к сопровождению требует намеренной структуры. Для большой корпорации или государственного органа, эксплуатирующего системы, несущие регуляторный и финансовый риск десятилетиями, комплектование сопровождения уважаемыми старшими инженерами решение по управлению рисками, а превращение сопровождения в штрафное назначение то, как вы производите следующий кризис наследия.

  6. Отслеживаете ли вы, к какой из четырёх категорий на самом деле относятся ваши усилия, и измеряете ли стоимость изменений как опережающий индикатор? Команды регулярно планируют сопровождение так, будто это в основном исправление ошибок, хотя эмпирические исследования показывают, что доминируют улучшение и адаптация, поэтому портфель, финансируемый только под корректирующую работу, неверно определён с самого начала. Без отслеживания категорий вы не видите, что система переделывается постоянным потоком регуляторных адаптаций, а без метрики стоимости изменений (время выполнения изменения, доля неудачных изменений, тренды сложности) вы не можете сказать, плоская ли ваша кривая или тихо ползёт к кризису. Принесите ваше фактическое распределение по категориям за прошлый год, тренд стоимости изменений, если он есть, и честную заметку о том, настоящий ли шаг анализ влияния или формальность, пропускаемая под давлением срока. Противоположное тяготение в том, что само измерение требует усилий и может казаться накладными расходами, пока система ещё работает. В корпоративных и государственных портфелях, где многие команды сопровождают много систем, а растущая кривая стоимости на любой из них ранний сигнал, достойный действия, общее отслеживание категорий и индикаторы стоимости изменений позволяют руководству провести реинжиниринг модуля до его деградации, а не после публичного отказа.

Взгляд по секторам

Стартап. С горсткой инженеров и небольшим запасом времени вы не можете позволить тяжёлый процесс сопровождения, но не можете позволить и кодовую базу, которой никто не коснётся. Выделите небольшую постоянную долю каждого цикла (примерно день из пяти) на профилактическую работу: патчите зависимости, расчищайте мелкие дефекты, пока они не накопились, и рефакторьте углы, которых вы уже боитесь, под какими бы тестами ни располагали. Цель держать код дешёвым для изменений, пока вы меняете направление, чтобы никогда не проснуться на двадцати инженерах, принимая отложенное сопровождение за «проблему наследия».

Малый бизнес. Без выделенного специалиста по сопровождению и при ограниченном бюджете склоняйтесь к покупке и хостингу, а не построению, чтобы адаптивное сопровождение (патчи безопасности, обновления платформ и зависимостей) в основном было чужой работой. Где вы владеете кодом, держите его малым, скучным и хорошо документированным и убедитесь, что хотя бы двое понимают всё, от чего зависит бизнес. Отслеживайте горстку систем, которые вы не можете позволить себе потерять, и закладывайте скромную явную статью на поддержание их актуальными, а не делайте вид, что сопровождение бесплатно.

Крупная организация. В масштабе вы сопровождаете много долгоживущих систем многими командами, поэтому приоритет определённый повторяемый процесс: журналируемый и сортируемый конвейер запросов, классификация по четырём категориям, рутинный анализ влияния и постоянное профилактическое выделение, охраняемое, а не пересматриваемое. Финансируйте сопровождение как первоклассную программу, измеряйте индикаторы стоимости изменений по портфелю и используйте растущую кривую как триггер реинжиниринга модуля, прежде чем он станет обузой. Ожидания управления и аудита означают, что отслеживание категорий и записи об изменениях не накладные расходы, а свидетельство того, что хозяйство под контролем.

Государственный сектор. Правила закупок, прозрачность и публичная подотчётность определяют сопровождение не меньше, чем инженерия. Адаптивное сопровождение, вызванное законом, приходит с жёсткими ежегодными сроками, которые нельзя сдвинуть, поэтому бюджетируйте сопровождение как бессрочные операционные затраты и укомплектуйте стабильную экспертную команду для удержания знаний о правилах, чьи авторы давно ушли на пенсию. Вывод из эксплуатации ограничен законом о хранении записей, поэтому планируйте вывод с соответствием с самого начала и отдавайте предпочтение контрактам и архитектурам, сохраняющим систему сопровождаемой и переносимой, а не запирающим вас с единственным поставщиком на десятилетия.

Примеры

Стартап. Стартап, только что выпустивший MVP, искушён вложить каждый час в новые функции, но его основатель-инженер выделяет постоянную долю каждого спринта (примерно один день из пяти) на сопровождение с самого первого месяца. Этот бюджет держит зависимости пропатченными, расчищает мелкие дефекты, пока они не накопились, и рефакторит углы, которых команда уже боится, так что кодовая база остаётся дешёвой для изменений, пока продукт меняет направление. Стартапы, пропускающие это, добираются до двадцати инженеров с кодовой базой, которой никто не хочет касаться, и принимают её за «проблему наследия», когда это всё время было отложенное сопровождение.

Крупная организация. Международный банк ведёт платёжную платформу, работающую в эксплуатации пятнадцать лет. Он финансирует сопровождение как постоянную первоклассную программу, а не остаточную статью. Работа сортируется по четырём категориям: устойчивый поток адаптивных изменений отслеживает новые нормы и обновления интерфейсов банков-партнёров, совершенствующая работа добавляет функции и улучшает пропускную способность, корректирующая работа расчищает дефекты в рамках строгих соглашений об уровне обслуживания (SLA), а постоянное профилактическое выделение (примерно пятая часть мощности команды) гасит сложность непрерывным рефакторингом под исчерпывающим набором тестов. Команда измеряет время выполнения изменения и долю неудачных изменений и воспринимает растущую стоимость изменений как раннее предупреждение о необходимости реинжиниринга модуля, прежде чем он станет обузой. Сопровождающие это старшие уважаемые инженеры, а не младший персонал, припаркованный на «держании света включённым».

Государственный сектор. Национальное налоговое управление сопровождает систему, работающую более тридцати лет и ежегодно изменяемую по мере изменения налогового законодательства. Доминирующая здесь категория адаптивное сопровождение, вызванное законом, с жёсткими ежегодными сроками, которые нельзя сдвинуть. Управление существенно вкладывается в понимание программ: бизнес-правила документируются рядом с кодом, характеризующие тесты фиксируют поведение правил, чьи первоначальные авторы давно ушли на пенсию, а анализ влияния формальный шаг перед любым изменением расчётного движка. Поскольку среда (закон) меняется непрерывно, систему никогда нельзя «закончить», поэтому управление бюджетирует сопровождение как бессрочные операционные затраты, комплектует стабильную экспертную команду для удержания знаний и модернизирует окружающие практики поставки, такие как контроль версий, непрерывная интеграция (CI) и автоматическое тестирование, даже пока ядро остаётся.

Бизнес-обоснование: мотивы, ROI и TCO

Основной бизнес-факт программ в том, что деньги уходят в сопровождение, а не в построение. По всей отрасли и в исследованиях десятилетий сопровождение составляет явное большинство совокупной стоимости жизненного цикла, часто называемое от 60 до 90 процентов для долго живущих систем, а в корпоративной и государственной среде это большинство. Любой анализ совокупной стоимости владения, останавливающийся на вводе в эксплуатацию, ошибается в несколько раз. Основное бизнес-обоснование серьёзного отношения к сопровождению просто точность: бюджетируйте на всю жизнь системы или будьте раз за разом удивлены счётом.

Отдача приходит от изгиба кривой стоимости. В пренебрегаемой системе стоимость каждого изменения растёт со временем по мере накопления сложности и распада понимания, пока изменение не становится запредельно медленным и рискованным. В хорошо сопровождаемой системе непрерывная профилактическая работа (рефакторинг, актуальность зависимостей, покрытие тестами, документация) держит эту кривую плоской, так что тысячное изменение стоит примерно как десятое. Вложения в сопровождаемость и профилактическое сопровождение поэтому не расход, который нужно минимизировать. Это рычаг, определяющий, останется ли система доступной для изменений или сползёт в растущие стоимость и риск унаследованного хозяйства (глава 3.6) и проблем поддержания из главы 10.4. Финансируйте сопровождение намеренно, измеряйте стоимость изменений как опережающий индикатор и воспринимайте растущую кривую как сигнал действовать, а не как закон природы. Экономика рассматривается дальше в главе 10.10.

Антипаттерны и ловушки

  • Воспринимание сопровождения как запоздалой мысли. Бюджетирование и празднование только построения с голоданием гораздо большей и более долгой фазы сопровождения.
  • Комплектование сопровождения наименее опытными людьми. Поручение труднейшей работы (безопасного изменения систем, которых вы полностью не понимаете) наименее подготовленным и сигнал, что сопровождение низкостатусное.
  • Путаница сопровождения и исправления ошибок. Планирование только корректирующей работы, хотя усилия на самом деле доминируют адаптация и улучшение.
  • Бесконечное откладывание профилактического сопровождения. Никогда не рефакторить, никогда не обновлять зависимости, пока долг изменений не вынудит дорогой кризис.
  • Изменение кода без анализа влияния. «Небольшое исправление», расходящееся рябью в непредвиденные сбои в другом месте.
  • Рефакторинг без страховочной сетки тестов. Перестройка кода без способа доказать сохранение поведения: это просто рискованное переписывание.
  • Позволять знаниям уходить за дверь. Непродокументированные бизнес-правила и решения, из-за чего каждый выход на пенсию или уход повышает стоимость каждого будущего изменения.
  • Никогда ничего не выводить. Несение мёртвых и избыточных систем вечно, потому что вывод неромантичен и не запланирован.

Модель зрелости

  • Уровень 1: Начальный. Сопровождение не планируется и не финансируется, обрабатывается реактивно тем, кто свободен. Оно воспринимается как исправление ошибок и низкостатусная работа. Нет ни отслеживания категорий, ни оценки стоимости, а знания живут в нескольких головах. Стоимость изменений растёт незаметно, пока исправление не застопорится или кризис не вынудит обратить внимание.
  • Уровень 2: Развитие. Некоторые команды начали регистрировать и сортировать запросы на сопровождение и вести статью бюджета, но практика непоследовательна по организации, а бюджет обычно остаточный. Корректирующая работа отслеживается, тогда как адаптивные и совершенствующие усилия чётко не различаются. Некоторые тесты и документация существуют в карманах, так что изменение отчасти контролируется, но понимание остаётся дорогим и неравномерным от команды к команде.
  • Уровень 3: Стандартизация. Определённый процесс сопровождения (по ISO/IEC 14764) задокументирован и соблюдается по организации: работа классифицируется по четырём категориям, анализ влияния и управление изменениями рутинны, а сопровождение оценивается и финансируется явно в каждом бизнес-обосновании. Профилактическое сопровождение и рефакторинг стандартная практика под надёжным набором тестов, а сопровождаемость (анализируемость, изменяемость, тестируемость, модульность) явное проектное требование, а не локальная привычка.
  • Уровень 4: Управление. Сопровождение измеряется и контролируется данными относительно базовых значений. Индикаторы стоимости изменений (время выполнения изменения, доля неудачных изменений, тренды сложности и дефектов) отслеживаются по системе, распределение усилий по четырём категориям количественно оценивается относительно ожиданий, а отношения затрат на сопровождение и параметрические оценки проверяются относительно фактической исторической стоимости изменений. Растущая кривая стоимости обнаруживается как опережающий индикатор и запускает действие, а профилактическое выделение определяется по свидетельствам, а не догадке. Решения о рефакторинге, реинжиниринге или выводе принимаются по измеренным порогам, а не интуиции.
  • Уровень 5: Оркестрация. Сопровождение непрерывно улучшается и интегрировано по организации и её экономике жизненного цикла. TCO жизненного цикла определяет вложения в портфель, реинжиниринг применяется намеренно до деградации компонентов, знания активно удерживаются, а вывод из эксплуатации планируется и регулярно выполняется. Организация перебалансирует усилия по сопровождению по мере смещения среды (нормы, платформы, зависимости), сопровождающие это уважаемые старшие инженеры, а всё хозяйство адаптируется так, чтобы стоимость изменений оставалась плоской для систем, живущих десятилетиями.

Идеи для обсуждения

  1. Какая доля ваших инженерных усилий на самом деле идёт на сопровождение и отражают ли это ваш бюджет и комплектование?
  2. Можете ли вы разбить вашу работу по сопровождению на четыре категории и соответствует ли распределение вашим допущениям?
  3. Какая доля типичного изменения тратится на понимание системы против её изменения и что сделало бы понимание дешевле?
  4. Растёт, остаётся плоской или падает ваша стоимость изменений со временем и измеряете ли вы её вообще?
  5. Есть ли у ваших команд надёжная страховочная сетка тестов, делающая безопасным непрерывный рефакторинг, или перестройка слишком рискованна для попыток?
  6. Кто сопровождает ваши самые долгоживущие системы, как захвачены их знания и каковы статус и моральный дух этой работы?

Главные выводы

  • Сопровождение это большая часть совокупной стоимости жизненного цикла программы (обычно от 60 до 90 процентов для долгоживущих систем) и должно планироваться, бюджетироваться и комплектоваться как первоклассная деятельность.
  • Четыре категории (корректирующее, адаптивное, совершенствующее, профилактическое) различная работа, и улучшение и адаптация, а не исправление ошибок, обычно доминируют.
  • Понимание программ крупнейшая деятельность в сопровождении; делайте код, историю и поведение читаемыми, чтобы каждое изменение оставалось дешёвым.
  • Рефакторьте непрерывно под страховочной сеткой тестов и проводите реинжиниринг деградировавших компонентов постепенно, чтобы держать стоимость изменений плоской.
  • Оценивайте стоимость сопровождения явно и направляйте её в совокупную стоимость владения и экономические решения.
  • Проектируйте под сопровождаемость с самого начала (вложение с наибольшей отдачей во всём жизненном цикле) и воспринимайте сопровождающих как старших профессионалов, какими они должны быть.

Источники и дополнительное чтение

  • IEEE Computer Society, SWEBOK Guide (Software Engineering Body of Knowledge), Software Maintenance knowledge area
  • ISO/IEC 14764 / IEEE 14764, Software Engineering: Software Life Cycle Processes, Maintenance
  • ISO/IEC 25010, Systems and software Quality Requirements and Evaluation (SQuaRE): maintainability quality characteristics
  • Martin Fowler, Refactoring: Improving the Design of Existing Code
  • Michael Feathers, Working Effectively with Legacy Code
  • Thomas M. Pigoski, Practical Software Maintenance
  • Penny Grubb and Armstrong A. Takang, Software Maintenance: Concepts and Practice
  • Barry Boehm et al., Software Cost Estimation with COCOMO II (maintenance and reuse models)
  • Meir M. Lehman, “Laws of Software Evolution” (on why software must continually change or become less useful)
  • Robert C. Seacord, Daniel Plakosh, and Grace A. Lewis, Modernising Legacy Systems