Сопровождение программного обеспечения в разработке программного обеспечения — это модификация программного продукта после поставки для исправления ошибок, улучшения производительности или других атрибутов. [1] [2]
Распространено мнение, что техническое обслуживание включает в себя лишь устранение дефектов . Однако одно исследование показало, что более 80% усилий по техническому обслуживанию используется для некорректирующих действий. [3] Такое мнение поддерживается пользователями, отправляющими отчеты о проблемах, которые на самом деле являются улучшениями функциональности системы. [ нужна цитата ] Более поздние исследования показали, что доля исправленных ошибок приближается к 21%. [4]
Сопровождение программного обеспечения и эволюция систем впервые были рассмотрены Меиром М. Леманом в 1969 году. За двадцать лет его исследования привели к формулировке законов Лемана (Lehman 1997). Основные выводы его исследования заключаются в том, что обслуживание на самом деле является эволюционным развитием и что решения по обслуживанию принимаются благодаря пониманию того, что происходит с системами (и программным обеспечением) с течением времени. Леман продемонстрировал, что системы продолжают развиваться с течением времени. По мере развития они становятся более сложными, если не предпринимаются какие-либо действия, такие как рефакторинг кода, для уменьшения сложности. В конце 1970-х годов известное и широко цитируемое исследование, проведенное Лиентцем и Суонсоном, выявило очень высокую долю затрат в течение жизненного цикла , которые тратились на техническое обслуживание.
Опрос показал, что около 75% усилий по техническому обслуживанию приходится на первые два типа, а на исправление ошибок уходит около 21%. Многие последующие исследования предполагают аналогичный масштаб проблемы. Исследования показывают, что вклад конечных пользователей имеет решающее значение при сборе и анализе данных о новых требованиях. Это основная причина любых проблем при разработке и сопровождении программного обеспечения. Обслуживание программного обеспечения важно, поскольку оно занимает большую часть общих затрат на жизненный цикл, а также невозможность быстро и надежно изменить программное обеспечение означает потерю бизнес-возможностей.[5] [6] [7]
Ключевые вопросы сопровождения программного обеспечения являются управленческими и техническими. Вопросы управления включают согласование с приоритетами клиентов, укомплектование персоналом, распределение обязанностей и оценку затрат. К техническим проблемам относятся: ограниченное понимание, анализ воздействия , тестирование и измерение ремонтопригодности.
Обслуживание программного обеспечения — это обширная деятельность, включающая исправление ошибок, расширение возможностей, удаление устаревших возможностей и оптимизацию. Поскольку изменения неизбежны, необходимо разработать механизмы оценки, контроля и внесения изменений.
Любая работа, выполняемая над программным обеспечением после его развертывания, считается обслуживанием. Обслуживание сохраняет ценность программного обеспечения с течением времени. Ценность можно повысить за счет расширения клиентской базы, удовлетворения новых и дополнительных требований, упрощения использования, повышения эффективности и применения новых технологий. Техническое обслуживание может занимать десятилетия, тогда как первоначальная разработка обычно занимает менее 3 лет.
Неотъемлемой частью программного обеспечения является обслуживание, которое требует составления точного плана обслуживания во время разработки программного обеспечения. В нем должно быть указано, как пользователи будут запрашивать изменения или сообщать о проблемах. Бюджет должен включать смету ресурсов и затрат, а также должно быть принято новое решение для разработки каждой новой функции системы и ее целей в области качества. Сопровождение программного обеспечения, которое может длиться более 5 лет (или даже десятилетий) после процесса разработки, требует эффективного плана, который может охватывать объем сопровождения программного обеспечения, адаптацию процесса после поставки/развертывания, назначение тех, кто будет обеспечить техническое обслуживание и оценить затраты в течение жизненного цикла.
В этом разделе описываются шесть процессов обслуживания программного обеспечения:
Существует ряд процессов, действий и практик, которые являются уникальными для сопровождающих, например:
Э.Б. Свонсон первоначально выделил три категории технического обслуживания: корректирующее, адаптивное и совершенное. [8] Стандарт IEEE 1219 был заменен в июне 2010 года стандартом P14764 . [9] С тех пор они были обновлены, и в стандарте ISO/IEC 14764 представлены:
Существует также понятие обслуживания перед поставкой/предварительным выпуском, которое представляет собой все хорошие действия, которые вы делаете для снижения общей стоимости владения программным обеспечением. Такие вещи, как соответствие стандартам кодирования, включающим цели по ремонтопригодности программного обеспечения. Управление связностью и связностью программного обеспечения. Достижение целей поддержки программного обеспечения (например, SAE JA1004, JA1005 и JA1006). Некоторые академические учреждения [ кто? ] проводят исследования для количественной оценки стоимости текущего обслуживания программного обеспечения из-за нехватки ресурсов, таких как проектная документация, а также обучение и ресурсы для понимания системы/программного обеспечения (умножьте затраты примерно на 1,5–2,0, если данные о проектировании отсутствуют).
Влияние ключевых корректирующих факторов на техническое обслуживание (отсортировано в порядке максимального положительного воздействия)
Модули, подверженные ошибкам, не только создают проблемы, но и могут снизить производительность. Например, очень сложный спагетти-код довольно сложно безопасно поддерживать. Очень распространенной ситуацией, которая часто снижает производительность, является отсутствие подходящих инструментов обслуживания, таких как программное обеспечение для отслеживания дефектов, программное обеспечение для управления изменениями и программное обеспечение библиотеки тестирования. Ниже описаны некоторые факторы и диапазон их влияния на обслуживание программного обеспечения.
Влияние ключевых корректирующих факторов на техническое обслуживание (отсортировано в порядке максимального негативного воздействия)
[10]
В документе для 27-й Международной конференции по управлению качеством программного обеспечения в 2019 году [11] Джон Эстдейл ввел термин «задолженность по обслуживанию» для потребностей в обслуживании, вызванных зависимостью реализации от внешних ИТ-факторов, таких как библиотеки, платформы и инструменты, которые стали устаревший. [12] Приложение продолжает работать, а ИТ-отдел забывает об этой теоретической ответственности, сосредотачиваясь на более насущных требованиях и проблемах в других местах. Такой долг накапливается с течением времени, незаметно съедая стоимость программного актива. В конце концов происходит что-то, что делает изменение системы неизбежным.
Тогда владелец может обнаружить, что систему больше невозможно модифицировать – ее буквально невозможно поддерживать. Менее драматично то, что обслуживание может занять слишком много времени или стоить слишком дорого, чтобы решить бизнес-проблему, и необходимо найти альтернативное решение. Программное обеспечение внезапно упало до значения 0 фунтов стерлингов.
Эстдейл определяет «долг за обслуживание» [12] как: разрыв между текущим состоянием реализации приложения и идеальным, когда используются только функциональные возможности внешних компонентов, которые полностью поддерживаются и поддерживаются. Этот долг часто скрыт или не осознается. Общая ремонтопригодность приложения зависит от постоянной доступности компонентов всех видов от других поставщиков, в том числе:
и конечно
Полное исчезновение компонента может сделать приложение неперестраиваемым или необратимым в дальнейшем неподдерживаемым.
[13]