Концепция циклов сопровождения ПО в методологии RUP компании Rational SoftwareФилипп Кручтен (PhilippeKruchten), Rational Software, Канада
В методологии RUP (Rational Unified Process) отсутствует концепция "фазы сопровождения". Некоторые утверждают, что это существенный недостаток, и предлагают добавить фазу производства (production phase), предназначенную для решения вопросов сопровождения, производственных процессов и поддержки1. Подобное дополнение, с моей точки зрения, вряд ли будет полезным. Во-первых, сопровождение, операции и поддержка представляют собой три значительно отличающихся процесса; хотя они, в принципе, и могут перекрываться по времени, тем не менее, в них вовлечены разные люди с разными обязанностями, и самое главное - они имеют различные цели. Совершенно очевидно, что операции и поддержка находятся за пределами функциональных границ RUP. С сопровождением дело обстоит иначе, но, несмотря на это, пока нет необходимости добавления очередной фазы в последовательность процессов RUP, состоящую из четырех фаз жизненного цикла: обследование, проработка проекта, построение системы, и передача в эксплуатацию. Методология RUP уже содержит всё необходимое для работы с ролями, операциями и артефактами, а также указания по сопровождению программных систем. И вследствие того, что методология RUP носит исключительно итеративный характер, возможность развивать, корректировать или отлаживать существующие артефакты, присуща большинству операций RUP. Сопровождение ПО
Комитет IEEE определяет термин "сопровождение ПО" как "процесс модификации программной системы или ее компонент, проводимый после поставки системы заказчику с целью устранения отказов, улучшения производительности или других атрибутов системы, или адаптации к изменившемуся программному окружению" 2 . Сопровождение ПО представляет процесс, позволяющий уже существующим продуктам выполнять свои функции, с продолжением продаж, установок и использования заказчиками, таким образом, принося прибыль организации-разработчику. В общем смысле, под сопровождением понимают все работы, проводимые уже после выпуска первоначального продукта. Тем не менее, в обиходе термин сопровождение применяется не столько к эволюции продукта, сколько для описания работ:
За счет своей итеративной природы, методология RUP хорошо справляется со всеми упомянутыми задачами. Действительно, эволюция или сопровождение системы полностью неотличимы от процесса создания первоначальной системы - настолько, что стандарт IEEE по сопровождению3 выглядит как руководство для разработчика, учитывая идентификацию модификаций, анализ, проектирование, реализацию, регрессивное и системное тестирование, тестирование по приемке продукта и его поставку заказчику! Для получения представления о роли RUP в более серьезных усовершенствованиях существующих систем, прочитайте мою статью в майском номере журнала Rational Edge : Using the RUP to Evolve a Legacy System . Циклы разработки ПО В методологии RUP определяется цикл разработки ПО, который всегда состоит из последовательности четырех фаз4:
В этих фазах действительно важно не то, что вы в них делали, или как долго они проводились - важно то, чего именно вам удалось добиться. Фаза оценивается по своим контрольным точкам, причем каждая из основных контрольных точек имеет явно определенные критерии завершения, выраженные в терминах артефактов, которые должны быть созданы или улучшены, а также в количественных показателях. Затем, уже в пределах каждой фазы, разработка ПО идет итеративно, путем повторения сходных наборов работ и последовательного улучшения создаваемой системы вплоть до момента, когда продукт может быть поставлен заказчику. Эти фазы являются обязательными и через них нельзя перешагнуть; хотя в некоторых случаях проводимые в них работы можно сократить до минимума, но практически никогда невозможно сократить до нуля. Не заблуждайтесь относительно "узловой диаграммы" методологии RUP (рис. 1); эта диаграмма не учитывает факта, что вы уже затратили определенное количество времени и денег на то, чтобы выполнить часть работ. Вот один из ключевых принципов RUP: " Не делайте ничего, не имея перед собой цели . " Рис. 1."Узловая диаграмма" методологии RUP Давайте, например, предположим, что вы только что вышли из фазы обследования, и поняли, что имеются все предпосылки для выхода из фазы проработки проекта:
Только в этом случае вы, возможно, закончили всю работу, которую следовало провести для фазы проработки проекта. Обратите внимание, что в этой точке важно все тщательно обдумать - только тогда у вас появится уверенность, что вы действительно находитесь на нужном моменте, а не пытаетесь поспешно начать другую фазу проекта. Как минимум, вам понадобится акт о завершении фазы проекта. В очень редком случае вы можете сжать фазу до минимума, как правило, при разработке нового ПО, (разработка "с нуля"), но иногда вы можете это сделать и для уже существующей системы. На рис. 2 изображен типичный профиль ресурсов для цикла начальной разработки.
Рис. 2. Версия 1.0: цикл начальной разработки Циклы развития Допустим, что система уже существует, и дальнейшая работа проходит в соответствии с циклом начальной разработки по методологии RUP. Рассмотрим, что произойдет дальше в цикле развития . Этот цикл будет иметь ту же самую последовательность фаз: обследование, проработка проекта, построение системы, передача в эксплуатацию , и закончится выпуском новой версии продукта. Тем не менее, так как система уже существует, отношение усилий, требуемых для проведения фаз, и реально проводимых на каждой фазе работ, будет другим по сравнению с циклом начальной разработки. В цикле начальной разработки требуется провести немало исследований и проявить определенную изобретательность, и артефакты зачастую создаются "с нуля" , что происходит главным образом в итерациях фаз обследования и проработки. В противоположность этому, в цикле развития мы работаем, главным образом, над усовершенствованием уже существующих артефактов. Является ли это чем-нибудь новым? Конечно, нет. Это в точности то же самое, что мы уже делали в завершающих итерациях фазы построения системы и во время всей фазы передачи системы в эксплуатацию цикла начальной разработки. Версия 2.0: Простое расширение функциональности Давайте предположим, что мы выпустили первоначальный продукт: версия 1.0. Цикл развития для перехода к версии 2.0 может выглядеть так, как показано на рисунке 3. Рис. 3. Добавление цикла развития для простого расширения функциональности Перед тем, как приступить к выполнению проекта, мы создали экономическое обоснование для перехода к версии 2.0. Функциональными границами этого проекта являются:
Если ни одна из этих задач не влияет на архитектуру приложения, и отсутствует риск ослабления функциональных возможностей, тогда фаза проработки проекта сокращается до одного-двух дней работы. Построение системы (до бета-версии) и передача в эксплуатацию происходят итеративно в соответствии с циклом начальной разработки, с тем же самым персоналом и тем же распределением ролей. Все артефакты обновляются в соответствии с развитием. Цикл процесса разработки будет выглядеть подобно, изображенному на рис. 4. Рис. 4. Добавление цикла развития с минимальной фазой проработки проекта Версия 3.0: Существенное расширение функциональности Далеко не все циклы развития могут быть настолько просты. Давайте предположим, что, основываясь на успехе версии 2.0 (однопользовательской, однопроцессорной версии), требования к версии 3.0 будут включать распределенную систему, поддерживающую несколько пользователей. Затем нам нужно провести ответственную фазу проработки проекта для усовершенствования и утверждения архитектуры системы, так как эволюция представляет собой достаточно рискованный шаг. Теперь цикл будет больше походить на оригинальный профиль цикла начальной разработки (см. рис. 2), с нетривиальными работами обследования и проработки процесса. Для дальнейшего обсуждения концепции улучшающего сопровождения, а также того, как развивать систему, оригинальная версия которой не была разработана с учетом требований RUP, см. мою статью в майском выпуске Rational Edge Using the RUP to Evolve a Legacy System . Циклы сопровождения Теперь давайте рассмотрим наиболее типичные случаи улучшающего и адаптивного сопровождения. Версия "исправление ошибок": улучшающее сопровождение Допустим, что нам нужна новая версия системы, в которой исправлены некоторые уже изрядно надоевшие проблемы, обнаруженные пользователями. Цикл развития будет включать:
Вот ключевые факторы для успеха - все проделываемые нами работы уже присутствовали в RUP . Альтернатива: Расширение вашей фазы передачи в эксплуатацию с помощью большего числа итераций Если улучшающее сопровождение влечет за собой лишь минимальное число изменений, в этом случае вы можете рассматривать его просто как дополнительную итерацию в вашей фазе передачи в эксплуатацию (см. рис. 5). Рис. 5. Добавление небольших итераций улучшающего сопровождения в фазу передачи системы в эксплуатацию Если мы рассматриваем это как экстремальное обстоятельство, то в таком случае мы имеем образец инкрементной поставки, описанной Томом Гилбом5: после того, как проделана первоначальная интенсивная работа, наступает следующий этап - система начинает инкрементно поставляться заказчику, с добавлением дополнительной функциональности на каждом шаге. Пример: Задачи для простого улучшающего сопровождения Ниже представлен список задач, выполнение которых может потребоваться при простой итерации улучшающего сопровождения:
Версия для совместимости: адаптивное сопровождение Зачастую нам требуется сопровождающая версия продукта (maintenancerelease), вследствие того, что обновилась одна из частей общей системы. Это могут быть изменения компонента системы, например такого, как база данных, или некоторых элементов системного окружения, скажем, операционной системы, платформы или коммуникационного интерфейса. Для того, чтобы сохранить совместимость продукта, нам следует перестроить (иногда) и повторно протестировать (практически всегда) программную систему, содержащую новые элементы. Но при этом сама система не нуждается в расширении. Этот тип цикла сопровождения будет также иметь обтекаемый вид. В простом случае, потребуется изменить лишь несколько артефактов, а основное время займет повторная генерация системы и ее тестирование. Если интерфейс системы изменился, тогда потребуется провести некоторое проектирование и кое-где поменять программный код. Все работы, которые нужно провести, уже описаны в RUP. Тем не менее, разумно запланировать две итерации, вследствие наличия неизбежных рисков:
Сравнение цикла начальной разработки и цикла сопровождения В чем состоят отличия цикла сопровождения по сравнению с циклом первоначальной разработки? Главным образом, нам следует скорректировать уровни формализации для:
Если мы нанимаем незначительный штат, возможно только с одним сотрудником для выполнения этой работы, то этому сотруднику придется выполнять многие роли, определенные в RUP: все задачи, необходимые для обновления различных артефактов, модификации программного кода, тестирования системы и последующего выпуска окончательной версии продукта. Эти артефакты не являются новыми или значительно отличающимися, они просто обновляются, точно так же, как мы это делали в заключительной итерации цикла начальной разработки. Чем лучше мы выполнили работу на более ранних циклах разработки, тем легче будут задачи персонала, проводящего цикл сопровождения. Если существует высокая вероятность возникновения риска, технического или какого-либо другого, тогда в процессе разработки следует продвигаться более осторожно, для обеспечения уверенности в том, что соответствующие риски правильно и заблаговременно поняты. Конфигурационное управление и управление изменениями имеет наивысший приоритет для цикла сопровождения, особенно с точки зрения проведения параллельного сопровождения многих версий продукта или поддержки предыдущих версий. Перекрывающиеся циклы Может ли цикл сопровождения начаться прежде, чем будет завершен предыдущий цикл? Да, вполне допустимо небольшое перекрытие циклов, как показано на рис. 6. Тем не менее, руководителю проекта рекомендуется помнить следующее.
Рис. 6. Перекрещивающиеся циклы: осуществимо, но не слишко надежно Заключение В методологии RUP отсутствует понятие "фазы сопровождения", следующей за фазой передачи в эксплуатацию, потому что в фазе сопровождения нет необходимости. В RUP имеются циклы развития и циклы сопровождения , следующие тому же самому шаблону, что и фазы:обследование, проработка проекта, построение системы, и передача в эксплуатацию. Каждая фаза должна соответствовать тем же выходным критериям, что и цикл начальной разработки. В зависимости от природы эволюции или сопровождения, количество усилий, затрачиваемых на каждую фазу, будет довольно сильно различаться, по сравнению с циклом начальной разработки. Все артефакты, задачи, роли и руководства RUP все еще применимы, но с акцентом не на создании новых, а на корректировке и усовершенствовании уже существующих артефактов. То, что происходит в цикле сопровождения, совсем не отличается от того, что делается на последних итерациях цикла начальной разработки. По мере того, как при приближении завершения проекта количество разработчиков часто уменьшается, персонал, выполняющий цикл сопровождения, должен обладать более обширными знаниями и навыками, так как этим работникам придется выполнять больше ролей, определенных в методологии RUP.
1 Scott Ambler, "Enhancing the Unified Process". SD Magazine , October 1999. |