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

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

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

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

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

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

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

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

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

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

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