Методологии разработки ПО

У любой компании, занимающейся разработкой ПО, рано или поздно просыпается интерес к различным методологиям разработки. Это связано с расширением команды, возрастающей сложностью проектов, желанием улучшить качество продуктов и сделать их выпуск более предсказуемым. Когда над проектом трудится хотя бы 5 человек, нужно каким-то образом организовать слаженную работу, разделить обязанности и вообще сделать так, чтобы хаоса было поменьше. Вот тогда управляющий проектом и задумывается над тем, что поставленный процесс разработки поможет решить многие из возникающих проблем. Встает совершенно логичный вопрос: какие методологии существуют в природе и какая именно подойдет для его команды и для его проекта?

Очевидно, что выбор методологии - дело непростое, особенно когда нет опыта использования. Для начала неплохо бы познакомиться с ними поближе.


Rational Unified Process

На сегодняшний день это одна из самых известных методологий. Разработана она компанией Rational Software для поддержки своих продуктов, которых насчитывается более десятка (среди самых знаменитых - Rational Rose и Requisite Pro). RUP создан тремя небезызвестными личностями - это Гради Буч, Ивар Якобсон и Джеймс Рамбо (как только не переводят на русский его фамилию Rumbaugh). Все они имеют огромный опыт разработки сложного программного обеспечения, что и нашло свое отражение в RUP.


Итеративность

 

RUP, как и любой современный продвинутый процесс, является итеративным. Это значит, что создание продукта происходит за несколько итераций. В конце каждой итерации получается работающая версия продукта, но с неполным функционалом. В последующих итерациях функционал дорабатывается и в конце последней получается полностью готовый продукт. Идею итеративного процесса можно показать следующим образом (см. рис.1).

Рис. 1. Каждый виток спирали является итерацией. Таким образом, система постепенно обрастает функционалом.

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

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


Сценарии пользователей

Сценарий пользователя (Use Case) - это описание последовательности действий пользователя при выполнении определенной операции. Например, можно написать сценарий пользователя для открытия нового документа и т.п.

Кроме того, RUP управляется сценариями пользователей (или прецедентами). Сценарии пользователей позволяют более точно представить разработчикам, что же должна делать система и как именно она должна это делать. Сценарии пользователя являются частью функциональной спецификации системы. Вообще такие сценарии крайне полезны при разработке программы, потому что они:

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

В RUP сценариям пользователей отведено почетное место, процесс является use-case driven, то есть управляемый сценариями пользователей.


Структура RUP

Процесс имеет четыре фазы:

  1. Исследование (Inception)
  2. Уточнение плана (Elaboration)
  3. Построение (Construction)
  4. Развертывание (Transition)

На каждой из фаз основное внимание уделяется разным процессам. На фазе исследования идет сбор и анализ требований, на фазе уточнения плана - анализ требований и проектирование системы, на фазе построения - разработка и кодирование, на фазе развертывания - тестирование и распространение.

Методология RUP основана на 9 основных потоках:

  1. Бизнес-анализ (анализ потребностей)
  2. Сбор требований и управление требованиями (перевод требований в функциональные спецификации)
  3. Анализ и моделирование (перевод требований в программную модель)
  4. Кодирование
  5. Тестирование (проверка того, что программа соответствует требованиям)
  6. Управление конфигурацией и изменениями (отслеживание изменений в разных версиях продукта)
  7. Управление проектом
  8. Создание и поддержка среды разработки
  9. Развертывание (все что нужно для продажи или передачи продукта).

Все эти девять потоков и четыре фазы изображают в виде затасканной картинки, которую аккуратно вставляют в любую статью о RUP, но объяснение дают не часто. Повторять ее вновь нет особого смысла, лучше все объяснить словами.

Любой проект в RUP проходит четыре фазы. Через эти фазы проходят и все девять потоков. Каждая фаза, в свою очередь, разбивается на итерации. Если взять, например, первую итерацию на фазе "Исследования", то основное внимание на этой итерации уделяется бизнес-анализу, сбору требований и моделированию, но кодирование тоже есть. Если взять одну из последних итераций на фазе "Построения", то основное внимание уделяется кодированию, тестированию и управлению конфигурацией. Иными словами, по мере развития проекта в каждой итерации смещаются акценты. Это и правильно, ближе к концу особо анализировать нечего, а требования собирать как-то поздно.

Артефактом (Artefact) называется продукт, который создается и используется в процессе разработки ПО. Например, артефактами являются документы, модели, исходный код. Примеры артефактов: руководство пользователя, диаграмма классов в UML и т.п.

Неотъемлемую часть RUP составляют артефакты и роли. При разработке программы создаются разные артефакты, и за создание того или иного артефакта отвечает определенная роль. Например, диаграмму классов создает "Архитектор", а сценарии тестирования пишет "Дизайнер тестов".

Все визуальное моделирование осуществляется с помощью CASE-средств. Основой для него служит язык UML (Unified Modeling Language), что не удивительно, потому что UML разрабатывался авторами RUP.


Лучшие практики

Сама RUP основывается на шести лучших практиках (best practices):

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

Они не являются непосредственной частью RUP, но их рекомендуется соблюдать при настройке процесса.

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

Управление требованиями - один из важнейших процессов при разработке более-менее серьезных продуктов. Благодаря ему продукт более точно соответствует ожиданиям заказчика. Инструментальная поддержка обеспечивается Requisite Pro.

В теории модульная архитектура позволяет повторно использовать код, и система получается более гибкой. На практике это практически невозможно реализовать.

Визуальное моделирование позволяет эффективно бороться с возрастающей сложностью систем. Модели помогают понять, как на самом работает система, что она делает и как она это делает. Кроме того, модели являются средствами коммуникаций между разработчиками, но для этого они должны быть понятны каждому. Вот для этого в RUP используется UML, который позволяет разработчикам говорить на одном языке. Инструментальная поддержка обеспечивается Rational Rose.

Качество продукта - одна из важнейших его характеристик. Заявляется, что RUP ориентирован на достижение приемлемого уровня качества, однако в процессе адаптации этой методологии с качеством могут возникать проблемы, если адаптация будет не совсем удачной. Инструментальная поддержка обеспечивается целым рядом программ: Rational Purify, Rational PureCoverage, Rational Quantify, Rational Robot.

Отслеживание изменений позволяет оперативно реагировать на изменение требований заказчика либо на изменяющиеся условия внешней среды. RUP имеет процессы, которые позволяют эффективно отслеживать изменения. Инструментальная поддержка обеспечивается Rational ClearCase и Rational ClearQuest.


Настройка RUP

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

В RUP 2000, например, насчитывается более 30 ролей и более 50 артефактов. Естественно, что если команда состоит из 5 человек, то просто нет смысла вводить все эти роли и создавать все артефакты. Вообще чем меньше команда, тем легче должен быть процесс. То есть надо создавать минимум артефактов и вводить минимум ролей.

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

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

Однако настройка RUP под конкретный проект - нетривиальная задача. Если решать ее будет тот, кто до этого внедрением RUP не занимался, есть риск получить на выходе совершенно неподходящий процесс, состоящий из бестолкового нагромождения артефактов, потоков и ролей, на которые тяжелым грузом лягут продукты Rational Software.

Вообще считается, что RUP достаточно тяжелая методология, которая лучше подходит для больших команд. Одной из попыток облегчить RUP является методология dX. Она объединяет в себе RUP и XP, о которой мы поговорим в следующий раз.

Михаил ДУБАКОВ,
wa.artel.by

Версия для печатиВерсия для печати

Номер: 

09 за 2003 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!
 

Комментарии

Страницы

Аватар пользователя Dionique
Боже, спаси нас, от этих всяких "журналистов", которые пишут всякую чушь о методологиях разработки программного обеспечения!!!

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

Боже, помоги нашим "умным" в конце концов приобрести хоть чуть-чуть мудрости и здравого смысла!!!

Не хочу ругаться, а надо бы...

Аватар пользователя FireFalcon
Давайте поругаемся. Покажите плз где там "чушь". И вообще, причем здесь роботы? Обычный обзор RUP. Ничего более.
Аватар пользователя Dionique
Я, если честно, ни разу не слышал о каком-либо успехе, вызванным RUP. Это байка, придуманная консультантами для снятия бабок с глупых менеджеров. Это тоже самое, что теория принятия управленческих решений или анализ продуктовых стратегий. Умная хрень!!!

Я считаю, что нельзя писать о таких достаточно сложных вещах как RUP без дополнительных комментариев. RUP - это всего лишь теория, как любая другая теория, связанная с человеческой деятельностью, она применима только на 30-40% к реальной жизни.

Мы своми статьями, пудрим могзи нашим программерам и манагерам, которые начинают читать этот бред вместо написания кода... Жалко людей, которые покупаются все это и тратят вою жизнь на глупые исследования на научные темы по RUP.

Все нужно комментировать и проверять, как оно в жизни и было ли кем-нибудь воплощено хоть как-нибудь. Да и в теме нужно хорошо разбираться, чтобы писать о таких сложных вещах.

Советую про XP не писать или же хотя бы изучить проблему на сайте:

www.softwarereality.com

Там в общем и про RUP, и про CMM написано.

Да, и вообще, в начале статьи нужно было написать: "А сегодня мы расскажем еще об одной умной хреновине, придуманной америкосами для снятия бабок с некомпетентных работников IT. Вообще она не применимая и Вы, уважаемые читатели, не торопитесь пудрить мозги своим подчиненным и друзьям, однако полезная, т.к. позволяет взгянуть на процес разработки с теоретической точки зрения.".

В конце статьи нужно бы довабить: "К сожелению, Вам, уважаемые манагеры проектов, все же придется делать вещи самим и не рассчитвайте на какие-нить там методологии. Иначе - хана вам'с".

Аватар пользователя Dionique
Вот еще, стоит посмотреть:

* http://www.agilealliance.org

* http://www.agilemodeling.com

Аватар пользователя FireFalcon
Пару замечаний. Вообще RUP методология тяжеловесная. Она подходит для команд в несколько десятков человек и ее ну просто невозможно использовать для команды в 3-6 человек.

Насчет того, что надо было бы написать в начале статьи, то согласен, не помешало бы :)

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

>все же придется делать вещи самим и не рассчитвайте на какие-нить там методологии

Ну, вещи в любом случае самим надо делать ;) Но в каждой методологии есть практики, которые на самом деле повышают качество, или там производительность. Просто надо думать и все будет хорошо. Когда-нибудь.

P.S. Легкие методологии (типа Crystals и ASD) будут в последней части обзора.

Аватар пользователя Dionique
>Вообще RUP методология тяжеловесная. Она подходит для команд в несколько десятков человек и ее ну просто невозможно использовать для команды в 3-6 человек.

RUP - это хрень, ваше утверждение - тоже хрень. Посморел тонну successfull story - все гавно, никто ничего не внедрил. Все заканчивается диаграммами юсе-кейсов, реквизитами про, сценариями тестирования и прочей дребеденью (набор стрелочек и квадратиков из рупа хотя бы на 20-30% никто не реализовал). Почему Вы ваще решили, что она подойдет для какой-т конторы. Я не знаю ни одной конторы в мире, где реализован RUP. Это так принято говорить, у нас реализован "РУПЬ", Мы КРУТЫЯ!!!

Сам пробывал, убил тонну времени, результата на конторе 0, всеравно, все делается по-старому, короче гавно, т.к. очень сложно и непонятно!

А непонятно и сложно - значит неправильно, значит опять хотят на***ть на деньги!

>А вообще любой нормальный разработчик или PM пять раз подумает, прежде чем начать внедрение какой-либо методологии. В любом случае, это долгий и тяжелый процесс.

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

>Ну, вещи в любом случае самим надо делать ;) Но в каждой методологии есть практики, которые на самом деле повышают качество, или там производительность. Просто надо думать и все будет хорошо. Когда-нибудь.

Опять хрень!!! Качество повышают не методологии, а люди. Бог не повышает качество хеад-ынд-шолдерс!

Что пишут методологии - пишите сценарии тестов до кода, а как программеры будут их писать, если они ваще не знают, что будут писать завтра?! Почему? потому что сами клиенты не будут знать, что будет завтра!

P.S. Легкие методологии (типа Crystals и ASD) будут в последней части обзора.

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

Нехрен пудрить нашим программерам головы всякой бюрократией!!! Итак при советском режими намучались. Не нужно пытаться загонять все в какие-то рамки, нужно освободить сознание и п***овать вперед, пока индусы и китаесы все проекты не забрали!!!

Аватар пользователя FireFalcon
>Сам пробывал, убил тонну времени, результата на конторе 0, всеравно, все делается по-старому, короче гавно, т.к. очень сложно и непонятно!

А сколько у вас в конторе человек работает над одним проектом? 10? 20? Если меньше, то вы бы еще попробовали внедрить процесс со строгостью создания космического корабля.

Я RUP не отстаиваю и никому бы в беларуси RUP не рекомендовал. Менталитет не тот.

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

:))

>но стоить все нужно только исходя из конкретной ситуации, т.к. иначе он забудет про проекты, а будет думать только о боге по кличке "РУП" и стараться угождать только ему.

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

>Что пишут методологии - пишите сценарии тестов до кода, а как программеры будут их писать, если они ваще не знают, что будут писать завтра?! Почему? потому что сами клиенты не будут знать, что будет завтра!

Ну, а например, парное программирование пробовали внедрять? Или написание сценариев? А как вы вообще требования собираете?

Мне очень интересно узнать, как поставлен процесс разработки в вашей конторе. Складывается впечатление, что вот начинается проект. Вот программеры приходят на работу и с бешенной скоростью начинают код писать? И через неделю все готово? И заказчики довольны? Еще раз повторяю, я не за или против методологий вообще. В своей конторе я хочу, чтобы проекты заканчивались в срок и с хорошим качеством, и чтобы люди получали удовольствие от работы. Изучение методологий помогает понять, как этого добиться.

Аватар пользователя Dionique
Ну лана, раз я ввязался, тада буду прадалжаць!!!

Что Вы к фицрам то привязываетесь? Ну был я на конторе, где 10 человек работало над проектом, ну и что?

Вы говорите, как теоретик из универа да еще и делаете ошибки в суждениях!

"...вы бы еще попробовали внедрить процесс со строгостью создания космического корабля."

Я RUP не отстаиваю и никому бы в беларуси RUP не рекомендовал. Менталитет не тот."

Причем здесь, бл., менталитет и космические корабли. Менталитет - еще одно умное слово, которое нужно забыть!

Космические корабли с нашим софтом сравнивать нельзя!

"...Мне очень интересно узнать, как поставлен процесс разработки в вашей конторе. Складывается впечатление, что вот начинается проект. Вот программеры приходят на работу и с бешенной скоростью начинают код писать"

Никак не поставлен, все начинается от задачи - какие задачи такие и процессы. Нужно писать спеку - пишем, нужно писать юсе-кейзы - пишым, нужны диаграммы классов - рисуем, но только если нужно. Если не нужно - нахрен их, только время сьедают!!!

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

Глупость - судить о методологии по количеству программеров, которые работают над проектом. Ко так судит - начитался глупых статей с interface.ru или quality.stability.ru или с рационале.ком. Все это хрень!!!

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

Детские суждения! Если вы выбились из графика с 2-ным бюджетом, значит вы внедряли РУПь или какую-нить другую умную хрень, это точно!

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

ФСЕ ИШЧУЦЬ рашэнне, штобы можно было запрячь людей, заставить их х***ить код, а самому в потолок пляваць!

В т.ч., вижу, и Вы тожа!

Аватар пользователя FireFalcon
>Космические корабли с нашим софтом сравнивать нельзя!

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

>Все кто пробывал парное программирование - плюются потом, почитайте в инете.

Читал. Как обычно мнения разделились :)

>Глупость - судить о методологии по количеству программеров, которые работают над проектом

Нет, вы, наверное, не втыкаете. Я не говорю, что проект из 50 чел крутой и наоборот. Но это показатель "веса" проекта. Если между 3-6 разработчиками можно легко наладить коммуникации обычным общением (и это правильно), то координировать 50 человек так нифига не выйдет. В этом разница.

>Никак не поставлен, все начинается от задачи - какие задачи такие и процессы. Нужно писать спеку - пишем, нужно писать юсе-кейзы - пишым, нужны диаграммы классов - рисуем, но только если нужно. Если не нужно - нахрен их, только время сьедают!!!

Ага. А откуда вы узнали, что есть такие вещи, как юз-кейсы? Или диаграммы классов? Буча прочитали? Каждый проект нуждается в своем процессе. Если вам не надо SRS - отлично, нахрен его. Если вам надо юз-кейсы. Замечательно, колбасьте. Но кто-то должен все это решать. Кто-то должен знать, какая хрень из какой методологии или вообще понадобится в начинающемся проекте. Возможно, это будет делать команда сообща, и это часто правильно. Повторяю, все зависит от конкретной команды и конкретного проекта. Конечно это идиотизм взять RUP и аккуратно долбить все артефакты для всех проектов. Нафиг это надо. Но определить хотя бы в кратце процесс при старте нового проекта необходимо. Захочется тим-лидеру потом сделать так, чтобы UML пользовались. А его никто не знает, вот засада! Захочет, чтобы CVS или SourceSafe пользовались, а никто о них и не слышал. И что делать тогда?

>Писать надо о том, что наши манагеры необразованные в области менеджмента,

Вот с этим согласен. С менеджерами у нас туго.

Аватар пользователя Dionique
Продолжим:

"...Ага. А откуда вы узнали, что есть такие вещи, как юз-кейсы? Или диаграммы классов? Буча прочитали? Каждый проект нуждается в своем процессе."

Ну я, предположим, читал про все эти методо-лох-ии и фрэйм-ф-орки. А варианты-использования не имеют отношение к РУП-у. Они появились гораздо раньше, даже раньше UML-я. Не удивлюсь, если их переняли из каких-нить ролевых игр или еще у чего-нить.

У вас я уже замечаю нотки более логического мышления, но все же "...проект нуждается в своем процессе" - эта хрень выглядит как "каждому кабинету по бюрократу" в вашем понимании.

"Если между 3-6 разработчиками можно легко наладить коммуникации обычным общением (и это правильно), то координировать 50 человек так нифига не выйдет. В этом разница."

Ну почему, очень даже можно:

1. Как в рупе - сделать из них роботов

2. Как у микрософта и всех других умных контор - поделить на маленькие функциональные команды 5-6 чел.

Первый вариант не пройдет - роботы - это дибилы из космоса, они медленно двигаются, не обладают гибкостью мышления. Роботы нужны на войне, а не в творческой работе.

"Повторяю, все зависит от конкретной команды и конкретного проекта." - вот уже лучше...

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

"Захочется тим-лидеру потом сделать так, чтобы UML пользовались." - если ему захочется, надо его по голове палкой ударить, чтобы он больше не хотел, а то че-то хочет, а сам не знает, чего.

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

да, в прочем, программера можно научишь Вашему емелю за 30 минут, зато проектировать придется учить несколько лет. так что не надо подменять опыт всякими там емелями.

"Кто-то должен знать, какая хрень из какой методологии или вообще понадобится в начинающемся проекте."

Перевожу на русский: "Кто-то должен знать, как кому голову заморочить с начала проекта, чтобы его постоянно боялись".

Я бы сказал, кто-то должен хоть немного разбираться в организационном дизайне, хоть немного уметь проектировать и писать нормальный код. Если никто этого не умеет, методология просто сведет всех с ума.

В любом случае, все самое юзабельное - как сценарии (Use Case), UML, MS Project, MS Word не принадлежат ни одной из методологий, слава богу.

А сколько бы всякие там консультанты не придумывали, всех денег им все равно не заработать!

Страницы