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

Тема 7

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

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

1. Необходимость эволюции ПО

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

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

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

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

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

      |              |               |

   Corrective    Perfective      Adaptive

Инженерная задача

Есть запрос:

«Нужно изменить систему».

Определите:

  1. почему требуется изменение;
  2. какой тип изменения;
  3. какие элементы системы оно затронет;
  4. какие риски возникнут.

Артефакт

Запрос на изменение

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

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

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

manc.png

Артефакт

Классификация изменений

3. Этапы процесса сопровождения

Запрос на изменение
        ↓
Анализ влияния
        ↓
Оценка стоимости
        ↓
Одобрение изменения
        ↓
Реализация
        ↓
Тестирование
        ↓
Выпуск новой версии

Перед реализацией изменения необходимо определить его область распространения по системе.

Анализ влияния

Перед реализацией изменения необходимо определить его область распространения по системе.

Инженерная задача

Дано изменение:

«Добавить оплату через новый способ».

Определить:

  • какие требования изменятся;
  • какие компоненты затронуты;
  • какие интерфейсы изменятся;
  • какие модули придется изменить;
  • какие тесты необходимо добавить;
  • какую документацию обновить.

Артефакт

Отчет анализа влияния

Оценка стоимости и риска изменения

После impact analysis возникает естественный вопрос:

Стоит ли вообще вносить изменение?

Инженерная задача

Для изменения оценить:

  • трудоемкость;
  • затронутые компоненты;
  • технический риск;
  • риск регрессии;
  • стоимость тестирования;
  • необходимость изменения документации.

Артефакт

Оценка риска

решение о принятии/отклонении

4. Методы эволюции ПО

4.1 Рефакторинг

Изменение внутренней структуры без изменения внешнего поведения.

До:

Большой сложный модуль

После:

Набор понятных компонентов

4.2 Реинжиниринг

Перестройка существующей системы для повышения сопровождаемости.

Например:

Legacy System

        ↓

Reverse Engineering

        ↓

Новая архитектура

4.3 Миграция системы

Перенос на новую платформу:

  • новая БД;
  • облачная инфраструктура;
  • новый язык;
  • новая архитектура.

5. Наследуемые системы (Legacy Systems)

Legacy-система — это программная система, которая продолжает использоваться, но ее изменение затруднено из-за возраста, сложности или отсутствия документации.

Проблема Причина
Высокая стоимость изменений Сложная архитектура
Потеря знаний Уход разработчиков
Отсутствие тестов Историческое развитие
Технологическое устаревание Старые платформы

Инженерная задача

Дана legacy-система без актуальной документации.

Необходимо:

  1. восстановить понимание системы;
  2. определить текущую архитектуру;
  3. выявить проблемные места;
  4. спроектировать целевое состояние;
  5. определить путь перехода.

Артефакты

  • текущая архитектура;
  • целевая архитектура;
  • план миграции.

6. Снятие с эксплуатации

clear.png

Снятие с эксплуатации — такое же инженерное решение, как создание новой системы.

Инженерная задача

Принять решение:

Систему продолжать развивать или выводить из эксплуатации?

Оценить:

  • стоимость сопровождения;
  • технический долг;
  • ценность системы;
  • наличие замены;
  • стоимость миграции;
  • риски прекращения работы.

Артефакт

План ввывода из эксплуатации