Лекция 15. Эволюция ПО

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

Существует несколько причин, по которым эволюция ПО объективно необходима:

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

Презентация: Лекция 15.

Эмпирические законы эволюции программного обеспечения были впервые сформулированы Lehman, Belady в 1985 году. Достаточно интересным результатом исследования динамики развития ПО является эргодичность эволюции:

  • Эволюция ПО — саморегулирующийся процесс. Характеристики изменений (число ошибок, размер системы, периодичность выпусков) приблизительно одинаковы для всех выпусков.
  • Темп разработки программной системы стабилен в течение всего ЖЦ и слабо зависит от затраченных на разработку ресурсов.
  • Объем вносимых с каждым выпуском изменений остается стабильным в течение всего периода разработки. (Причина: необходимость сохранения высокого уровня знаний разработчиков о системе.)

Пожалуй, наиболее важный вывод, который можно сделать из законов эволюции ПО — необходимость упрощения программной системы в процессе разработки. Для этого используется реинженерия (reengineering) исходного кода программы и используемых данных. Пример реинженерии — автоматизированная трансляция кода программы на более новую версию языка программирования; например, утилита 2to3 осуществляет трансляцию из Python 2.x в Python 3.x.

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *