Модель процессов msf
Предложение Microsoft Solutions Framework, касающееся жизненного цикла [44], исходит из идеи механического «скрещивания» каскадной модели MSF (мы ее подробно обсуждали в лекции 7) и самой примитивной спиралевидной модели (подобной спирали охвата предметной области — см. лекцию 8). По мнению авторов, модель процессов MSF (см. рис 11.2) «объединяет в себе лучшие принципы каскадной и спиральной моделей. Она сохраняет преимущества упорядоченности каскадной модели, не теряя при этом гибкости и творческой ориентации модели спиральной, учитывает необходимость постоянного пересмотра, уточнения и оценки проектных требований, стимулирует активное взаимодействие между проектной группой и заказчиком, который оценивает ход и результаты работы на протяжении всего проекта».
К сожалению, авторы предложения MSF не совсем точны в своих оценках модели. Как и в случае с RUP, в этой модели очевидно стремление к универсальности, которое неизбежно приводит к огрублению ситуации в конкретных случаях и к необходимости словесного дополнения схемы. Недостатки моделей, основанных на раскручивающейся
спирали (см. лекцию 10), присущи ей в полной мере: невозможность отслеживания временных соотношений между сроками выполнения работ, трудности дополнения специфичных этапов. К тому же ориентация на всеобщность лишает модель и тех преимуществ, которые демонстрирует, например, модель Боэма, снабженная конкретным механизмом интерпретации.
Если обратиться к процессам, которые отражают модель MSF, т.е. к их отдельному описанию, то становится заметным стремление авторов сделать методологию гибкой. К примеру, вот что они пишут о сотрудничестве с заказчиком: «Вовлечение заказчика в проект является необходимым условием успешности проектов. Модель процессов MSF предоставляет заказчику широкий спектр возможностей для уточнения и модификации проектных требований и установки контрольных точек (вех) для мониторинга работы над проектом. В свою очередь, это требует затрат времени со стороны заказчика и взятия им на себя определенных обязательств». Однако далее говорится о том, что «MSF признает первостепенную важность договорных и юридических отношений между заказчиком, его поставщиками и проектной командой и необходимость управления этими отношениями». (Стоит сопоставить эти высказывания с соответствующим принципом Agile Manifesto [31] — см. лекцию 5.) Только из схемы ни первое, ни второе утверждение извлечь нельзя. И это пример словесного дополнения, к которому приходится прибегать при неудовлетворительном схематическом представлении модели.
Изучение методологии, провозглашаемой MSF, позволяет сделать вывод о том, что ее авторы достаточно тщательно проработали процессы менеджмента, когда основой организации коллектива разработчиков считается проектная группа с рассредоточенными ролями (мы об этом уже говорили в лекции 2). Но опять-таки в модели жизненного цикла это обстоятельство никак не отражено, что вполне объяснимо стремлением к всеобщности. Отсюда следует, что обсуждаемое предложение всегда в конкретных проектах должно адаптироваться. Сделать это проще, чем, к примеру, в случае RUP или жестких схем, которые только и допускает стандарт СММ [18]. Однако до уровня стратегии быстрого развития предложения MSF не доходят и занимают промежуточное положение между жесткими и гибкими методологиями.
Жизненный цикл в методологиях быстрого развития проектов
Как утверждают сторонники быстрого развития, их методологии не нуждаются в том, чтобы четко фиксировать этапы развития разработки программного проекта (см., например, [3]). Однако они понимают, что само понятие жизненного цикла полезно для представления процесса разработки в концептуальном плане. Что же касается деятельности менеджера, то в этом подходе в противовес жестким методологиям провозглашаются самодисциплина и сотрудничество вместо дисциплины и подчинения; планирование, контрольные и другие функции носят здесь такой характер, который позволяет менеджеру в большей мере сосредоточиться на руководстве командой, чем на управлении. В результате отслеживание процесса не требует, к примеру, специальных документов о достигнутых результатах и проблемах, для которых нужна специальная поддержка. По этой причине модели жизненного цикла быстрого развития не претендуют на инструментальность, и в таком ключе их рассматривать не имеет смысла. Тем не менее понятия контрольных точек и контрольных мероприятий, распределения ресурсов, оценки остаются, хотя их содержание становится менее формализованным.
Жизненный цикл любой методологии быстрого развития можно описать следующим образом.
-
Начальная фаза. Она выделена, поскольку приходится выполнять работы, которые не являются характерными для основного процесса.
-
Серия максимально коротких итерации, состоящих из шагов:
-
выбор реализуемых требований (в экстремальном программировании — пользовательских историй);
-
реализация только отобранных требований;
-
передача результата для практического использования;
-
короткий период оценки достигнутого (в зависимости от объема работ периода его можно назвать этапом или контрольным мероприятием).
• Фаза заключительной оценки разработки проекта.
Реальные быстрые методологии конкретизируют эту схему, дополняют ее теми или иными методиками (пример того, как это делается в экстремальном программировании [3], будет рассмотрен ниже).
До последнего времени быстрые процессы было не принято формализовывать настолько, чтобы их можно было предлагать в качестве стандарта. И сегодня не приходится говорить, например, о сертифицировании команды как «правильно» работающей по быстрой методологии, подобном тому, что требует СММ. Тем не менее вопрос о сертификации быстрого процесса приобретает актуальность — складывается своеобразная мода на гибкие методологии, отрицательно сказывающаяся на престиже подхода в целом. Стремление к сертификации сдвигает границу между гибкими и жесткими методологиями в сторону последних, и есть опасения, что в результате быстрые подходы станут формализованными до такой степени, что их нельзя уже будет называть гибкими. Эта проблема отмечалась во многих докладах на недавней конференции сторонников обсуждаемого подхода Extreme Programming and Agile Methods — XP/Agile Universe 2003 [37].
Тем не менее сегодня уже появилась компания, выполняющая проекты по методологии экстремального программирования, которая получила сертификат по одному из общепризнанных стандартов ISO 9001:2000 [39], свидетельствующий об определенных гарантиях качества организации проектной деятельности и получаемых результатов. Это произошло весной 2003 года по прошествии примерно года с момента подачи заявки на сертификацию [51]. Все, что для этого потребовалось сделать, свелось к приведению соответствия между процессами экстремального программирования и поддерживаемыми стандартом. В остальном процедура сертификации не нарушила процессы производства программ в компании. Не потребовалось никакой настройки процесса, доведения его до требований стандарта. Не претерпела изменений база данных, в которой сохранялись пользовательские истории со сведениями о работе с ними. Документация, предназначенная для пользователей, построенная на базе априорного тестирования (см. лекцию 2), признана соответствующей требованиям качества и т.д.*.
В последующих разделах мы конкретизируем общую для быстрых методологий схему на примере двух характерных подходов к разработке программных систем.
Модель жизненного цикла экстремального программирования
В монографии по экстремальному программированию [3] Бек жизненный цикл экстремального программирования описывает, не прибегая к схемам. Словесно описывая деятельности разработчиков, он дает картину процесса, не требующую иллюстраций. Тем не менее построить такую схему несложно, и это полезно сделать хотя бы для сопоставления моделей (Бек говорит не о моделях, а об идеальном проекте). Мы приводим модель жизненного цикла проекта в экстремальном программировании в представлении, которое исходит из гантеровских изобразительных средств (см. рис. 11.3).
Из схемы видно, что начальная фаза развития проекта включает в себя некоторое число итераций без выпуска релиза. Это период, когда просто невозможно предоставить систему пользователям. В качестве его задач
* Уместно отметить, что попытка сертификации по предыдущей версии стандарта, несомненно, провалилась бы, поскольку он, подобно СММ, помимо всего прочего, утверждает необходимость ведения процессов по определенным схемам, которые в экстремальном программировании не работают. В новой версии ограничиваются требованиями к качеству, а не к форме организации работ.
указывается изучение применяемых инструментов, постановка экспериментов с целью определения и последующего построения стартового варианта архитектурного скелета системы, а также, возможно, освоение методик экстремального программирования командой. Бек выделяет первое внедрение системы в эксплуатацию как особое событие, которое стоит отметить праздничными мероприятиями. В экстремальном программировании подобные мероприятия и другие меры поощрительного воздействия на коллектив занимают существенное место среди менеджерских задач.
Серия итераций — это стационарный период развития проекта, в котором появляется деятельность, связанная с обслуживанием и поддержкой. В отличие от жестких методологий, при экстремальном программировании эти задачи не становятся дополнительной нагрузкой для разработчиков, поскольку методика взаимодействия с заказчиком обеспечивает нужное, актуальное для пользователей развитие работ.
Как только в проекте исчерпывается постоянно пополняемый пул заказываемых для реализации пользовательских историй, исчезает стимул для развития проекта. Эту ситуацию Бек называет смертью проекта. Со смертью проекта использование построенной системы не прекращается. Напротив, отсутствие новых требований к ней свидетельствует о том, что пользовательские нужды обеспечены адекватной поддержкой. Но возможны и другие, менее оптимистичные причины для «смерти». Это либо переход пользователей к применению конкурирующей разработки, которая оказалась более подходящей, либо невозможность в разумные сроки реализовать необходимые возможности системы (по сути дела, обе причины означают одно и то же). Во всех случаях смерть проекта надо достойно встретить. Соответствующие работы указаны на схеме.
В модели отмечены контрольные точки, связанные с событиями проекта. Смысл их вполне понятен, а конкретизация соответствующих мероприятий привела бы к пересказу подхода в своей интерпретации. По этой же причине мы не станем обсуждать производственные функции и систему деятельностей, которую можно восстановить из описания методологии экстремального программирования.
Отметим, что с точностью до 12 методик, которые объявляются Беком как суть подхода, [3] при изучении этой методологии вполне применимы общие понятия, рассмотренные раньше. Так, деятельность менеджера экстремального проекта в полной мере иллюстрирует следование принципу выяснения отклонений и корректировки траектории (см. лекцию 5).
Методология экстремального программирования является характерным примером использования стратегии сужения задачи проекта за счет итеративного наращивания возможностей. Обратившись к представленной ранее схеме итеративного наращивания (см. рис. 5,4), можно заметить, что в данном подходе конкретизировано движение требований таким образом, чтобы получить ясные и точные критерии их отбора для реализации с помощью апелляции к заказчику. Из этого следуют и границы применимости подхода: когда заказчик плохо представляет, что фактически нужно для поддержки деятельности пользователя, а для аналитического исследования проблем автоматизируемой деятельности возможности нет, экстремальное программирование будет давать сбои. Если воспользоваться метафорой вождения автомобиля, то можно сказать, что этот подход хорошо работает в условиях шоссе, но не на бездорожье.
Адаптивная разработка (ASD) по Хайсмиту
Следующая иллюстрация относится к области быстрых методологий, в которой заостряется внимание на необходимости адаптивной разработки (см. лекцию 7). Хайсмит, автор этого подхода, в течение многих лет работал с предсказуемыми методологиями. Он занимался их разработкой, внедрял их, учил ими пользоваться и в конце концов пришел к выводу, что они глубоко ошибочны в условиях современного бизнеса. В вышедшей недавно книге [41] он указывает на адаптивную природу новых методологий, обращая особое внимание на использование идей из области сложных адаптивных систем (обычно их называют теорией хаоса). В книге нет подробного описания методик, подобных тем, что провозглашаются в экстремальном программировании и делают этот подход законченной методологией, однако в ней закладывается фундаментальная теоретическая основа адаптивных разработок. Хайсмит показывает, почему эти методологии так важны и к каким последствиям приводит их использование на более глубоком организационном и руководящем уровне.
Основу ASD составляют три нелинейные, перекрывающие друг друга фазы: обдумывание, сотрудничество и обучение, относящиеся к каждому периоду разработки, который завершается выпуском релиза (см. рис. 11.4). Подчеркивается, что планирование в окружении, которое требует адаптивности, является парадоксом, поскольку результаты в этом случае всегда непредсказуемы. При обычном планировании отклонения от плана являются ошибками, которые нужно исправлять. В адаптивных разработках отклонения ведут к решениям, которые объективно обусловлены, а потому их следует считать правильными.
Неопределенность в столь непредсказуемой среде преодолевается за счет активного сотрудничества разработчиков. При этом внимание руководства направлено не столько на объяснения, что именно нужно делать, сколько на обеспечение коммуникации, при которой разработчики сами находят ответы на возникающие вопросы. Отсюда следует повышенное внимание к обучению, значение которого в предсказуемых методологиях часто занижается: все расписывается заранее, так что потом остается только следовать плану. Хайсмит пишет [41], что «... в адаптивном окружении обучения не избежать всем участникам проекта — и разработчикам, и их заказчикам, поскольку и те и другие в процессе работы должны пересматривать собственные обязательства, а также использовать итоги каждого цикла разработки для того, чтобы подготовиться к следующему».
Из этого положения делается вывод, относящийся к жизненному циклу адаптивных разработок [41]: «Основное, наиболее действенное и первостепенное достоинство жизненного цикла ASD заключается в том, что этот процесс заставляет отказаться от интеллектуальных построений, которые являются источником самообмана. Он вынуждает оценивать собственные способности более реалистично».
Из приведенной схемы не ясно, как предлагается организовывать процесс, как компенсировать потенциально «расползающуюся» разработку, когда по мере развития она обрастает все новыми возможностями, обусловленными практическими нуждами, но без общей (в других подходах сказали бы — предсказуемой) архитектурной базы. Оставив все это в стороне, т.е. относя подобные вопросы к конкретной методологии, автор ASD освещает сложные моменты адаптивных разработок, в частности вопросы обеспечения сотрудничества и обучения во время реализации проекта. И в этом ценность работы Хайсмита, поскольку полученные результаты применимы в самых разных случаях.
Таким образом, можно сказать, что ASP — это не готовая методология, а базовая концепция для различных адаптивных разработок. Схема жизненного цикла не является сдерживавшим фактором построения конкретных методологий, которые вполне могут следовать самым разнообразным стратегиям, включать в себя те или иные методики. В этом отношении подход Хайсмита сближается еще с одной «серийной» методологией быстрого развития, предложенной А. Коуберном. Речь идет о семействе методологий Crystal [36]. Коуберн называет это семейством, так как убежден, что разным проектам нужны разные методологии. Он вводит следующую градацию проектов: по одной оси откладывается количество занятых в проекте людей, по другой — критичность ошибок. Каждая из методологий семейства предназначена длЯ определенной ячейки получившейся сетки. Таким образом, проект, в котором занято 40 человек, и на котором компания может позволить себе потерять некоторую сумму, будет работать по другой методологии, нежели проект для шести разработчиков, от которого зависит существование компании.