Эволюция программного обеспечения

Тема 7

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

Процесс сопровождения активируется при внесении изменений в программные коды и документы конкретного программного средства вследствие обнаруженных в нем несоответствий или необходимо-сти его практического применения в условиях соответствующей среды. Его целью является модификация существующего программного продукта, обеспечивающая его целостность.

Артефакты: запрос на изменения, отчет об принятии или отклонении из-менений, тестовые наборы

Этот раздел у вас хорошо вписывается в общую карту SWEBOK, но сейчас он немного выглядит как «последняя глава после выпуска». Я бы сделал акцент не на поддержке уже готового продукта, а на эволюции программной системы.

Ключевая идея, которая хорошо связывает все предыдущие разделы:

Разработка ПО не заканчивается выпуском. Выпуск — это начало длительного жизненного цикла системы в изменяющейся среде.

То есть получается замкнутый цикл:

Требования
    ↓
Архитектура
    ↓
Проектирование
    ↓
Конструирование
    ↓
Тестирование
    ↓
Выпуск
    ↓
Эксплуатация
    ↓
Сопровождение
    ↓
Новые требования
    ↺

Главная задача сопровождения:

Сохранить ценность программного продукта путем управляемого изменения его кода, данных, документации и архитектуры.


1. Необходимость сопровождения ПО

              Причины изменений

                     |
      --------------------------------
      |              |               |
   Ошибки        Новые            Изменение
   системы     требования        среды

      |              |               |

   Corrective    Perfective      Adaptive

2. Типы сопровождения ПО

Тип сопровождения Назначение Пример
Корректирующее (Corrective) Исправление ошибок Исправление найденного дефекта
Адаптивное (Adaptive) Приспособление к изменению среды Новая версия ОС, БД, законодательство
Совершенствующее (Perfective) Улучшение характеристик и расширение функций Новая возможность, улучшение интерфейса
Профилактическое (Preventive) Предотвращение будущих проблем Рефакторинг, обновление архитектуры

manc.png

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)

Финальный этап жизни системы.

Эксплуатация

      ↓

Решение о выводе

      ↓

Миграция данных

      ↓

Архивирование

      ↓

Остановка системы

Архитектура определяет способность системы изменяться.

То есть сопровождение возвращает нас к архитектуре:

Хорошая архитектура
        ↓
Дешевые изменения
        ↓
Долгая жизнь системы

Плохая архитектура
        ↓
Рост сложности
        ↓
Замена системы

Программная инженерия занимается не созданием «законченных программ», а управлением эволюцией сложных программных систем во времени.