2. Жизненный цикл программного обеспечения
В основе деятельности по созданию и использованию программного обеспечения лежит понятие жизненного цикла. Жизненный цикл является моделью создания и использования программного обеспечения, отражающей его различные состояния, начиная с момента возникновения необходимости в данном ПО и заканчивая моментом его полного выхода из употребления у пользователей.
Модель жизненного цикла включает в себя набор этапов и связей между ними. Дается детальное описание действий, моделей и результатов каждого этапа. Может быть предложено несколько моделей жизненного цикла, каждая из которых определяет различную методологию создания систем.
2.1 Стандартные модели жизненного цикла
2.1.1 Этапы жизненного цикла
Традиционно, во всех стандартных моделях, выделяют следующие основные этапы жизненного цикла:
- стратегическое планирование;
- анализ требований;
- проектирование (предварительное и детальное);
- кодирование (программирование);
- тестирование и отладка;
- эксплуатация и сопровождение.
Каждому этапу соответствуют определенный результат и набор документации, являющейся исходными данными для следующего этапа. В заключение каждого этапа производится верификация документов и решений с целью проверки их соответствия первоначальным требованиям заказчика.
Рассмотрим подробнее отдельные этапы жизненного цикла.
Этапы стратегического планирования и анализа используются для определения самых общих требований к программной системе. Данные этапы предполагают решение следующих задач:
- определение целесообразности разработки и сравнение с аналогами,
- определение необходимых ресурсов для решения задачи,
- спецификация требований к системе в виде ⌠что она должна делать■, но не в виде ⌠как это реализовать■,
- проверка корректности и реализуемости требований.
На этапе проектирования создается структура будущей программой системы
Можно определить следующие фазы проектирования:
- проектирование архитектуры, включает в себя определение состава подсистем,
- спецификация подсистем, определяет спецификацию каждой подсистемы,
- проектирование интерфейса, определяет интерфейс каждой подсистемы, т.е. метод взаимодействия данной подсистемы с другими,
- проектирование компонентов, каждая подсистема разделяется на компоненты,
- проектирование структур данных, определяет где и как хранятся данные,
- проектирование алгоритмов, определяются алгоритмы обработки данных.
Реализация подразумевает выбор языка программирования и составление текста программы ( кодирование ), а также, возможно, выполнение тестирования и отладки отдельных фрагментов.
Этап тестирования и отладки включает выполнение комплексного тестирования всей программной системы специальной группой и исправление ошибок
На этапе сопровождения и эксплуатации программная система сдается в эксплуатацию, происходит обслуживание пользователей, возможно устранение незначительных ошибок (сейчас это делается повсеместно с помощью распространения так называемых patсh - файлов ).
2.1.2 Модели жизненного цикла
Исторически, в ходе эволюционного развития теории проектирования программного обеспечения и по мере его усложнения, сложились три основные модели жизненного цикла. Эти модели выражают последовательность этапов жизненного цикла ПО.
Первой, по времени появления, и самой распространенной являлась каскадная модель (рис. 2.1):
Рис. 2.1. Каскадная модель жизненного цикла
Модель предполагает следующие свойства взаимодействия этапов:
- модель состоит из последовательно расположенных этапов,
- каждый этап полностью заканчивается до того как начнется следующий,
- этапы не перекрываются во времени, т.е. следующий этап не начинается пока не завершится предыдущий,
- возврат к предыдущим этапам не предусматривается или крайне ограничен,
- результат появляется только в конце разработки.
Выявление и устранение ошибок в такой модели производится только на стадии тестирования, которая может растянутся во времени, или, вообще ни когда не завершиться.
Следующим шагом явилась итерационная модель, известная также, как поэтапная модель с промежуточным контролем. Это модель разработки ПО с обратными связями между этапами. Проверки и корректировки разрабатываемой ИС проводятся на каждом из этапов, что позволяет существенно снизить трудоемкость отладки по сравнению с каскадной моделью. Итерационность модели проявляется в обработке ошибок выявленных промежуточным контролем. Если на каком-либо из этапов в ходе промежуточной проверки обнаружилась ошибка, допущенная на более ранней стадии разработки, работы этапа, повлекшего ошибку, необходимо провести повторно. При этом анализируются причины ошибки и корректируются, по необходимости, исходные данные этапа или перечень проводимых работ.
В ходе работ над системой могут измениться начальные требования, и в этом случае итерационная модель может оказаться неэффективной.
Спиральная модель поддерживает итерации поэтапной модели, но особое внимание уделяется начальным этапам проектирования: анализу требований, проектированию спецификаций, предварительному проектированию и детальному проектированию. Каждый виток спирали соответствует поэтапной модели создания фрагмента или версии ПО, уточняются цели и требования к ПО, оценивается качество разработанного фрагмента или версии ПО и планируются работы следующего витка. Таким образом, углубляются и конкретизируются все детали проектируемого ПО и в результате получается вариант, который удовлетворяет всем требованиям заказчика.
2.2 Объектно-ориентированные модели жизненного цикла
Сначала появилось объектно-ориентированное программирование и только затем объектно-ориентированное проектирование. Таким образом применение методологии началось с этапа кодирования. Ранние этапы описания предметной области и разработки архитектуры системы не поддерживались. Первые варианты применения объектно-ориентированной методологии в большой степени являлись чистым повторением принципов объектно-ориентированного программирования. Такие вопросы как декомпозиция предметной области, спецификация требования, интерфейс с пользователем не рассматривались. Но успехи объектно-ориентированного программирования заставили распространить новую технологию на весь жизненный цикл.
Объектно-ориентированная методология должна покрывать весь жизненный цикл для того чтобы использовать все преимущества подхода не только на этапе кодирования, но и на более ранних этапах. Таким образом это должна быть методология, включающая в себя следующие компоненты:
- модель жизненного цикла,
- действия,
- нотация языка.
2.3 Жизненный цикл UML ( Rational Objectory Process )
Фирма Rational Software, разработавшая язык UML, предложила так же и свою модель жизненного цикла, которая называется Rational Objectory Process ( данный термин труден для перевода, т.к., во-первых, слово Rational имеет значение ⌠рациональный■ и название фирмы одновременно, во-вторых, слова objectory нет в английском языке, оно построено по аналогии со словом repository (накопитель) ).
Можно перечислить следующие основные свойства данной технологии:
- процесс итеративный, т.е. происходит последовательное уточнение результатов,
- действия процесса направлены на создание моделей, а не других элементов проекта, например, текстовых документов,
- действия жизненного цикла определяются в первую очередь блоками использования ( use case ) ( см. диаграммы использования ).
Жизненный цикл разбит на циклы, результатом каждого из которых является собственная версия программной системы. Каждый цикл состоит из четырех фаз:
Начало ( Inception )
Совершенствование ( Elaboration )
Построение ( Construction )
Переход ( Transition )
Рис. 2.2 Модель жизненного цикла UML
На рисунке ниже представлены основные модели UML в виде прямоугольников. Линии между ними обозначают отношение ⌠входит в■ [7]
Рис. 2.3. Основные модели UML