Фазы жизненного цикла, их цели и контрольные точки (вехи)

advertisement
Фазы жизненного цикла, их цели и контрольные точки (вехи)
Фазы
Фаза имеет внутри себя несколько итераций (возможно, одну). На каждой итерации могут
выполняться различные виды работ — рабочих и поддерживающих процессов.
Рабочие процессы связаны непосредственно с созданием продукта, поддерживающие —
помогают в этом (управление проектом, багтрекер, контроль версий, …).
Для чего выполняются итерации? Чтобы достигнуть целей каждой фазы.
Каждая фаза заканчивается контрольной точкой, подтверждающей выполнение целей (см.
раздел «Контрольные точки» ниже). А вовсе не созданием правильного набора красивых и
бесполезных артефактов: документов, диаграмм UML, …
Если контрольная точка еще не пройдена — нужно добавить итераций (вроде как) и чесать
репу, типа чо не так?.
Начало/Начальная фаза (Inception)
Идея: понять проект, получить как можно больше информации для обоснования, что он крут и
нужен (или что наоборот).
Цели:
1. Понять, что создавать
 Создать высокоуровневое Видение (Концепцию, Vision) — чудо-документ,
содержащий понимание, для чего вообще нужен проект и что он вообще будет
делать.
 Сформировать широкое, но неглубокое описание системы
i. Выделить хоть сколько-нибудь актеров. Актер — это человек или другая
система, взаимодействующая с нашей.
ii. Выделить прецеденты использования (юзкейсы, use cases) с их участием.
Кратко описать взаимодействие актеров с системой.
iii. Для каждого прецедента определить, требуется ли при его исполнении
взаимодействие с другими пользователями или системами. Если да — мы
нашли новых актеров, ура!
iv. Для каждого прецедента и актера описать (пару абзацев), про что они.
Главное, чтобы описанием занимался не один человек, а несколько, тогда
можно взглянуть на юзкейсы с разных сторон и понять, что упущено или
недопонято!
Чтобы выявить как можно больше валидных юзкейсов, мозговые штурмы!
v. Глоссарий, чтобы все говорили на одном языке.
vi. Выделить критичные/существенные (1..2) юзкейсов, без которых система
существовать не может или не имеет смысла. Они будут полезны при
реализации следующей цели.
2. Определить ключевую с точки зрения архитектуры функциональность (юзкейсы). Такая
функциональность:
 является ключевой для приложения или использует ключевые интерфейсы
системы;
 обязательно должна быть реализована (без нее выпуск приложения является
бессмысленным);
 охватывает область архитектуры, не охваченную иными, уже найденными
ключевыми юзкейсами.
3. Выявить хотя бы одно возможное решение
Понять, какую архитектуру, компоненты и технологии можно использовать для
создания приложения, как их необходимо развить (необходимо ли?). Грубо
оценить стоимость реализации и риски (типа «много-мало»).
Может потребоваться (в нашем случае — требуется) реализовать некоторые
ключевые элементы архитектуры (тот же контейнер-сетри Петри (тм), например),
чтобы оценить риск, возможные альтернативы и т.п. Да, на это йдет какое-то
время, зато будет показано, что в Видении были написаны не пустые слова, что
проект осуществим.
4. Выяснить стоимость, сроки, риски
Выявить затраты на реализацию проекта, установить сроки и четко прописать
основные риски проекта. Это все пишется в бизнес-кейс (business case) —
экономическое обоснование. Для нас достаточно записки + плана в прожекте
(наверное…)
5. Решить, какому процессу следовать и какие средства использовать
Задать Development Case (прецедент разработки) — чудесный документ,
определяющий какие собственно части RUP будут использованы (какие артефакты
создаем и фиксируем, какие похерили) и кто будет этим заниматься
(распределение ролей и времени участников проекта).
Умные аффторы рекомендуют периодически пересматривать прецедент
разработки, и вообще хранить его на видном месте, доступном для детей ,
например, на внутреннем веб-сайте проекта.
Итераций для мелких проектов: 1
Контрольная точка: веха целей жизненного цикла
Проектирование/Уточнение (Elaboration)
Идея: создать архитектурную основу («кости»), на которую в следующей фазе можно будет
нарастить конкретный функционал приложения («мясо»). Архитектура должна быть
исполняемой!!! Архитектурная основа — это основные подсистемы, их интерфейсы, ключевые
компоненты и механизмы, такие как межпроцессные коммуникации и хранение данных
(сериализация).
Цели:
1. Более глубоко понять требования. Убедиться в правильности понимания юзкейсов,
частично реализовав критичные юзкейсы. Получить информацию о
правильности/неправильности юзкейсов со стороны заинтересованных лиц. Результат —
уточнены все юзкейсы, реализованы самые главные, но частично.
2. Спроектировать, реализовать и протестировать базовую архитектуру («исполняемую
архитектуру») с помощью развития начального функционального прототипа с фазы
«Начало». Прогнать на ней основные юнит-тесты внешних интерфейсов (тесты API), тесты
нефункциональных требований (обработка ошибок, переконфигурирование,
востановление) и тесты под нагрузкой (на масштабируемость, производительность).
Архитектура, сцуко, должна быть масштабируемой и быстрой, иначе на ней можно
построить только дом из конопли, как в сказке «три поросенка и менеджер проекта».
Здесь, при реализации, принимаются решения типа «купим компонент или сделаем
сами», и в целом выбираются технологии, компоненты и их интерфейсы.
3. Снизить существенные риски и уточнить оценки сроков и стоимости. (Вследствие
детализации требований, теперь более понятно, сколько это будет стоить и сколько
займет времени). Составить план разработки оставшейся части системы в фазе
Построение.
4. Уточнить прецедент разработки (список используемых артефактов и ролей RUP) и
установить среду разработки (набор используемых для разработки инструментов).
Итераций для мелких проектов: 1
Контрольная точка: веха архитектуры жизненного цикла
Построение (Construction)
Идея: реализовать полноценную систему на базе того архитектурного каркаса, который создан в
фазе «Проектирование». Реализованная система может быть (и скорее всего, будет)
неоптимальной — недотестированной, не оптимизированной по производительности и т.д.
(Доводка — цель следующей фазы).
Цели:
I. Снижение стоимости разработки и повышение параллелизма
1. организация вокруг архитектуры (которая уже есть и работает! ура!). Каждый может
сконцентрироваться на своей подсистеме, но есть группа архитекторов, через которых
разные команды разработчиков могут связаться друг с другом (к нам это почти не
относится, нас слишком мало, чтобы сложность непосредственного общения была
высока).
2. укрепление архитектуры. существуют готовые архитектурные решения часто
встречающихся проблем, и используются только они, а не самопридуманные варианты,
которые наверняка меньше тестируются. поощряйте их использование.
3. непрерывный процесс разработки.
a. одна команда — одна задача! нет отдельно тестировщиков, отдельно аналитиков
— каждый участвует в общем деле, все многофункциональны
b. четкие, достижимые цели — каждый разработчик знает, что он должен сделать, и
согласен, что результаты достижимы
c. постоянная демонстрация и тестирование кода — покрыть всё юнит-тестами!
демо-запуски! публичная порка!
d. непрерывная интеграция — по возможности, ежедневные билды системы, чтобы
сломанные компоненты и/или связи между ними обнаруживались и фиксились
быстро
II. Разработка окончательного продукта, готового к показу конечным пользователям,
итеративным методом
1. Завершить описание оставшихся юзкейсов и прочих (в т.ч. нефункциональных) требований
2. Завершить проектирование верхних слоев архитектуры (низ, «фундамент», был завершен
на предыдущей фазе).
3. Спроектировать (откорректировать) базу данных по сравнению с черновой версией
предыдущей фазы: мелкие изменения, типа добавления представлений (views), индексов
и т.п.
4. Реализовать код и провести юнит-тестирование.
5. Провести интеграцию компонентов и системное тестирование (вся сборка в целом)
6. Раннее внедрение и обратная связь от юзеров-камикадзе (альфа-версии,
демонстрируемые пользователям).
7. Подготовиться к выпуску бета-версии: много тестирования и предварительного просмотра
релиза. Учитывать пожелания камикадзе из альфа-версии.
8. Подготовка к окончательному развертыванию: материалы для обучения (электронные и
печатные) [это нам не грозит], площадка (сайт) для развертывания [это нам не грозит],
подготовка к запуску (упаковка, тиражирование), обучение юзеров. Начинать с момента
выпуска бета-версии, а то и раньше. Заказчик должен видеть, что он покупает!
Итераций для мелких проектов: 3-4 (в книжке не написано, или я не нашел)
Контрольная точка: веха начальной функциональной готовности
Внедрение (Transition)
Идея: настроить (довести) продукт под конкретных потребителей: всесторонне протестировать и
обеспечить оптимальную производительность, а затем выпустить релиз. В процессе могут
вноситься мелкие изменения по просьбе пользователей, участвующих в бета-тестировании.
В отличие от модели типа «водопад» (она же «всёподряд» (с)) – мы приходим сюда с почти
готовой системой, которая (в идеале) постоянно интегрируется (каждодневный билд).
Цели:
I. Бета-тест
1. На предыдущей фазе была развернута бета-версия. Теперь выполняется бетатестирование, обеспечивающее обратную связь с пользователями. Информация от юзеров
анализируется, рецензируются запросы от пользователей на изменения, составляется
список необходимых изменений. Обычно такие запросы касаются мелких улучшений и
багфиксов. (Новые свойства на такой стадии добавлять допустимо, но только в крупных
проектах и с большой осторожностью. Нам — нельзя).
2. Полномасштабное регрессионное тестирование по мере доводки системы и реализации
последних нереализованных юзкейсов.
II. Обучение пользователей (мануалы, курсы (сначала обучаем инструкторов, затем они —
юзеров) и т.п.)
III. Подготовка площадки (сайта) для развертывания, конвертация рабочих баз данных (если
была пред. версия софта) — хитровымученные проблемы развертывания при работе
одновременно старой и новой системы и последовательного перехода к новой — к нам не
относится, пропускаем
IV. Подготовка упаковки, тиражирования, рекламных материалов, выпуск в дистрибуцию и
продажу — тоже почти ничего к нам не относится. Может быть, инсталлятор сделать и на сайт
выложить 
V. Достижение соглашения с заинтересованными лицами о том, что развертывание завершено
VI. Повышение производительности в будущем на основе полученного опыта («что было
хорошо, что было плохо, как нельзя делать?»)
Итераций для мелких проектов: 1
Контрольная точка: веха готового продукта
Контрольные точки
Ниже приводятся условия прохождения контрольных точек каждой из фаз.
Если эти условия не выполнены, либо новая итерация, либо проект закрывается, либо какие-то
иные крайние меры (зависит от того, насколько мы опаздываем).
Контрольная точка целей жизненного цикла (фаза Начало)
Если проект дошел досюда и не удовлетворяет критериям контрольной точки, его надо отменить
или серьезно пересмотреть.
- Заинтересованные стороны согласовали границы проекта, его стоимость и сроки.
- Есть согласие в том, что оценка стоимости и сроков, приоритеты задач, риски и
выбранный процесс разработки приемлемы.
- Есть согласие в том, что первоначальные риски выявлены и предъявлена стратегия
борьбы с каждым из них.
- Есть согласие в том, что зафиксирован верный набор требований и существует общая
точка зрения на эти требования.
- Показано, что проект выполним:
- выявлено хотя бы одно возможное решение (хотя бы одна возможная
архитектура);
- такое решение демонстрируется в виде функционального прототипа
(практически обязательно);
- Показано, что проект является выгодным с экономической точки зрения. Возможно, но
не обязательно, составлено формальное экономическое обоснование (business case).
Контрольная точка архитектуры жизненного цикла (фаза
Проектирование)
Если проект дошел досюда и не удовлетворяет критериям контрольной точки, его надо отменить
или серьезно пересмотреть.
- Является ли Видение (Концепция) и требования проекта стабильными?
- Является ли стабильной архитектура?
- Проверены ли основные подходы, которые будут использоваться при тестировании и
оценке системы?
- Показало ли тестирование и оценка исполняемых прототипов, что борьба с основными
рисками (ненадежности/немасштабируемости/и т.д…) привела к их устранению?
- Являются ли планы итераций на фазу Построение достаточно подробными и точными,
чтобы можно было продолжать работу?
- Согласны ли все заинтересованные лица с тем, что текущее Видение (как оно
определено в соотв. документе) м.б. реализовано, если для разработки всей системы
применяется текущий план фазы Построения и текущая архитектура?
- Приемлема ли разница запланированных и реальных расходов?
Контрольная точка начальной функциональной готовности (бетаверсии) (фаза Построение)
-
Является ли созданный релиз стабильным и зрелым настолько, что его можно
предъявить сообществу пользователей (бета, а не альфа- версия)?
- Готовы ли все заинтересованные лица к передаче продука в сообщество
пользователей?
- Приемлемо ли все еще соотношение реальных и запланированных расходов?
Если проект не смог достигнуть указанных целей, может потребоваться отложить фазу
Внедрение и добавить еще одну итерацию на Построение.
Контрольная точка готового продукта (фаза Внедрение)
-
Удовлетворены ли пользователи?
Приемлемо ли соотношение запланированных и реальных затрат, и если нет, что
можно сделать, чтобы избежать излишних затрат в будущем?
После прохода этой вехи продукт находится в состоянии эксплуатации, обслуживания и
поддержки. Может начаться новый цикл разработки для создания новой его версии.
Деятельность на каждой из фаз
Ахтунг! Ахтунг! Ахтунг! Смотрим картинку и вкуриваем, что на
каждой итерации каждой фазы RUP делается не одно дело, а
несколько, возможно параллельно!
(Начало) (Проектирование)
(Построение)
Рис., который прочищает мозги
Download