«И они жили долго и счастливо» возможно только в сказке, невозмож-но создать программную систему, которая не потребует изменений в будущем. Как только успешно разработанное программное обеспечение вводится в эксплуатацию, возникают новые требования к системе, обу-словленные непрерывным развитием бизнес-процессов и все возрастающими общими требованиями к программным системам. Иногда в си-стеме следует изменить некоторые составляющие в целях повышения производительности или улучшения других характеристик, а также для исправления обнаруженных ошибок. Все это требует дальнейшего раз-вития системы уже после ее ввода в эксплуатацию, и этот непрерыв-ный процесс – сопровождения следует планировать как можно раньше, чтобы обеспечить экономическую эффективность поддержки ПО.
Процесс сопровождения активируется при внесении изменений в программные коды и документы конкретного программного средства вследствие обнаруженных в нем несоответствий или необходимо-сти его практического применения в условиях соответствующей среды. Его целью является модификация существующего программного продукта, обеспечивающая его целостность.
Артефакты: запрос на изменения, отчет об принятии или отклонении из-менений, тестовые наборы
Этот раздел у вас хорошо вписывается в общую карту SWEBOK, но сейчас он немного выглядит как «последняя глава после выпуска». Я бы сделал акцент не на поддержке уже готового продукта, а на эволюции программной системы.
Ключевая идея, которая хорошо связывает все предыдущие разделы:
Разработка ПО не заканчивается выпуском. Выпуск — это начало длительного жизненного цикла системы в изменяющейся среде.
То есть получается замкнутый цикл:
Требования
↓
Архитектура
↓
Проектирование
↓
Конструирование
↓
Тестирование
↓
Выпуск
↓
Эксплуатация
↓
Сопровождение
↓
Новые требования
↺
Главная задача сопровождения:
Сохранить ценность программного продукта путем управляемого изменения его кода, данных, документации и архитектуры.
1. Необходимость сопровождения ПО
Причины изменений
|
--------------------------------
| | |
Ошибки Новые Изменение
системы требования среды
| | |
Corrective Perfective Adaptive
2. Типы сопровождения ПО
| Тип сопровождения | Назначение | Пример |
|---|---|---|
| Корректирующее (Corrective) | Исправление ошибок | Исправление найденного дефекта |
| Адаптивное (Adaptive) | Приспособление к изменению среды | Новая версия ОС, БД, законодательство |
| Совершенствующее (Perfective) | Улучшение характеристик и расширение функций | Новая возможность, улучшение интерфейса |
| Профилактическое (Preventive) | Предотвращение будущих проблем | Рефакторинг, обновление архитектуры |

3. Этапы процесса сопровождения
Запрос на изменение
↓
Анализ влияния
↓
Оценка стоимости
↓
Одобрение изменения
↓
Реализация
↓
Тестирование
↓
Выпуск новой версии
Артефакты:
- Change Request;
- отчет анализа влияния;
- решение о принятии/отклонении;
- измененный код;
- обновленная документация;
- тестовые сценарии.
4. Методы эволюции ПО
4.1 Рефакторинг
Изменение внутренней структуры без изменения внешнего поведения.
До:
Большой сложный модуль
После:
Набор понятных компонентов
4.2 Реинжиниринг
Перестройка существующей системы для повышения сопровождаемости.
Например:
Legacy System
↓
Reverse Engineering
↓
Новая архитектура
4.3 Миграция системы
Перенос на новую платформу:
- новая БД;
- облачная инфраструктура;
- новый язык;
- новая архитектура.
4.4 Непрерывная доставка изменений
Современная эволюция:
Change
↓
Code
↓
Test
↓
Deploy
↓
Feedback
↺
5. Наследуемые системы (Legacy Systems)
Legacy-система — это программная система, которая продолжает использоваться, но ее изменение затруднено из-за возраста, сложности или отсутствия документации.
| Проблема | Причина |
|---|---|
| Высокая стоимость изменений | Сложная архитектура |
| Потеря знаний | Уход разработчиков |
| Отсутствие тестов | Историческое развитие |
| Технологическое устаревание | Старые платформы |
6. Снятие с эксплуатации (Retirement)
Финальный этап жизни системы.
Эксплуатация
↓
Решение о выводе
↓
Миграция данных
↓
Архивирование
↓
Остановка системы
Архитектура определяет способность системы изменяться.
То есть сопровождение возвращает нас к архитектуре:
Хорошая архитектура
↓
Дешевые изменения
↓
Долгая жизнь системы
Плохая архитектура
↓
Рост сложности
↓
Замена системы
Программная инженерия занимается не созданием «законченных программ», а управлением эволюцией сложных программных систем во времени.