Особый стиль наращивания возможностей системы и ее развития.
Распределение реализуемых требований по итерациям.
Совокупность сценариев, реализуемых на очередной итерации, и набор ранее реализованных сценариев всегда образуют законченную, хотя и неполную версию системы, предлагаемую пользователям. По разным причинам, в том числе для исключения двусмысленностей в понимании, необходимо представление планируемых для реализации средств в виде моделей, согласующих взгляд на систему со стороны пользователей (а также заказчиков и других заинтересованных лиц) с точкой зрения разработчиков. Эти модели появляются в ходе этапа анализа, что отражается в их названии: модели уровня анализа.
Представление системы как набора связанных различными отношениями классов — основа декомпозиции проекта при объектно-ориентированном подходе. Каждая новая итерация расширяет этот набор путем добавления новых классов, вступающих в определенные отношения с ранее построенной системой классов. Выполнить такое расширение корректно без абстрагирования от деталей реализации существующего, а если учитывать перспективу, то и без такого же абстрактного представления добавляемых классов практически невозможно. Иными словами, требуется построение моделей уровня конструирования, которые задают реализационное представление проектируемой системы.
В приведенном выше перечне этапов жизненного цикла итерации при объектно-ориентированном подходе явно выделено моделирование уровня анализа, которое сводится к построению модельного представления сценариев. Но это только один аспект проектного моделирования. Как было только что показано, другой, не менее существенный аспект моделирования, проявляется при конструировании. Наконец, есть еще третий аспект моделирования, связанный с предъявлением каждой версии программного изделия пользователю, представление которого о системе, разумеется, не имеет отношения к моделям уровня конструирования и лишь косвенно связано с моделями уровня анализа. Таким образом, если следовать гантеровскому стилю описания жизненного цикла, то правильнее будет выделять не этап моделирования: (как это, следуя уже сложившейся традиции, чаще всего и делают), а организационно-техническую (производственную) функцию моделирования, пронизывающую весь процесс разработки проекта.
В новой схеме жизненного цикла появляется строго регламентированное расщепление, единственное для всей последовательности работ (см. рис. 9.1). Но этот маршрут отражает не корректировку ошибочно
принимаемых решений, а вполне запланированный акт, фиксирующий, что в ходе выполнения итераций происходит наращивание возможностей изделия.
Следует отметить еще одну модификацию схемы Гантера, отраженную на рисунке. В рамках этапа оценки выделен специальный вложенный этап — пополнение базового окружения проекта. Смысл его сводится к планированию и реализации пере использования программного обеспечения. Любой объектно-ориентированный проект развивается исходя из некоторой уже существующей среды классов и других компонентов. Это базовое окружение проекта интенсивно используется и, в свою очередь, пополняется средствами, возникающими в результате итеративного наращивания. Полезность сохранения таких средств для текущего проекта и для последующих разработок очевидна. В связи с этим целесообразно в рамках выполнения этапа оценки производить дополнительную работу, направленную на сохранение полезного в депозитарии проектов.
По вполне понятным причинам в объектно-ориентированном проектировании несколько изменяется содержание ряда этапов, что нашло отражение в количестве и наименованиях событий на рис. 9.1.
0. Необходимость разработки признана.
Эта точка означает начало работ над проектом, которые еще не утверждены как официальный проект. Официальным он становится, когда доказана его осуществимость, задачи проекта в целом обозначены, в том числе определены те задачи, которые предстоит решать в первую очередь (контрольная точка 2). В этот период можно говорить лишь о предпроектной деятельности менеджера. Если схема развития проекта допускает распределение менеджерских обязанностей в команде исполнителей и есть команда, которая принимает решение о целесообразности работ над проектом, предпроектная деятельность менеджера становится сферой ответственности команды целиком. Но и при таких схемах эта деятельность может быть персонифицирована, когда предполагаемый менеджер готов взять на себя обязательства, имея в виду свои планы по использованию некоторого сложившегося коллектива, по формированию команды и др. Собственно говоря, один из главных менеджерских вопросов, который нуждается в решении в обсуждаемой контрольной точке, — стратегия и тактика формирования проектной команды.
1. Ресурсы распределены.
Для начала работ над проектом необходимо знать, какими ресурсами можно располагать. В данной точке фиксируется, что предполагает планировщик предоставить менеджеру, оцениваются средства, которые разумно ожидать от заказчика и от инвесторов. Эти сведения есть результат соответствующей деятельности менеджера. В частности, он определяет основы концепции развития проекта, мотивирующие потребность.
Эта контрольная точка обозначает начало стационарного цикла развития проекта, когда исходя из имеющейся информации планируется ход
текущей итерации. Для первой итерации эта информация собирается на начальной фазе проекта, которая в данный момент завершается. Исходная информация для последующих итераций извлекается из всей предшествующей истории проекта, она формируется в доступном для работы виде в ходе этапа оценочных работ предыдущей итерации к моменту расщепления жизненного цикла.
Отсутствие опыта работы над проектом при выполнении первой итерации проявляется в ее следующей особенности: у менеджера нет оснований для выработки надежных планов и достоверных критериев. Вместо этого он вынужден пользоваться оценками и применять стратегии, настраиваемые по ходу дела. Для новой команды в это время закладывается основа ролевой специализации и разделения труда исполнителей. Все это указывает на целесообразность выделения начального периода проекта, включающего в себя предпроектную деятельность, начальную фазу проекта, работы над первой итерацией и подведение итогов. Для этого периода характерны специальные методики, важной стороной которых является обучение и настройка на стационарный режим. Существенно, что в начальный период складывающаяся проектная команда должна доказать свою работоспособность и продемонстрировать продуктивность принятых стратегий.
Как для первой, так и для всех последующих итераций в контрольной точке 2 должны быть определены:
• общие требования— что требуется от проекта в целом в данный момент;
• общий план— как предполагается достигать поставленных целей;
• ближайшая задача(должна быть четко определена) — задача теку
щей итерации, решаемая в проекте с целью предложения пользователю полученных результатов в качестве продукта, которая задана
как набор конкретных реализуемых требований и сценариев.
Для отбора того, что предполагается реализовать на итерации, есть несколько критериев предпочтения, В реальной ситуации их сравнительная важность зависит как от специфики проекта, так и от того, как далеко на данный момент продвинулись работы над проектом. Вот перечень наиболее типичных критериев:
1. Актуальность для пользователя.С точки зрения бизнеса важно,
чтобы в первую очередь в рабочем продукте предоставлялась
функциональность, которая позволила бы устранить узкие места
автоматизируемой деятельности. Этот критерий практически всегда рассматривается как наиболее существенный.
Полнота и функциональная замкнутость предлагаемых средств.
Связан с предыдущим критерием. С его точки зрения, отбирается
для реализации такой комплект средств системы, который автоматизирует какой-либо вид пользовательской деятельности в полной мере, не требуя чего-то еще. Важность критерия растет по мере увеличения объемов уже выполненных в проекте работ (обсуждение критерия см. ниже).
3. Системная значимость.Этот критерий отражает внутренние для
проекта предпочтения. В первую очередь целесообразно реализовывать функциональность, которая полезна для развития: заготовки широкого применения, базовые и инструментальные компоненты для других предоставляемых средств системы. С точки
зрения развития проекта решение ближайшей задачи должно
обеспечить осуществимость последующего итеративного наращивания возможностей системы (об этом разговор еще предстоит).
Данный критерий конкурирует с актуальностью для пользователя.
Он является более значимым для начальных итераций проекта.
4. Демонстрационная значимость.С точки зрения этого критерия первоочередными считаются те средства, которые в состоянии продемонстрировать работоспособность и лучшие, выгодные для пока
за качества системы. Наибольший удельный вес данный критерий
имеет для начального периода развития проекта, причем не толь
ко для заказчика, но и для разработчиков, которые при соответствующей трактовке демонстрационное™ будут в состоянии убедиться в правильности выбранной стратегии и методов. Критерий
может противоречить и пользовательской актуальности, и функциональной полноте, и системной значимости.
5. Скорость реализации. Поэтому критерию выделяются те виды работ, которые можно реализовать за самое короткое время. Если же
время итерации фиксировано, то для выполнения отбирается пул
работ, которые в состоянии завершить команда в заданные сроки.
Что касается затратных характеристик и объемов финансирования, то чаще всего они выступают в качестве ограничений, в которые необходимо уложиться. В ряде случаев выделяемое время также целесообразно рассматривать не как основу критерия, а как ограничение.
Критерий полноты следует прокомментировать особо. Различают три аспекта полноты, которые отражают три составляющие качества программной системы [21]:
• функциональная полнота— соответствие предлагаемых средств на
бору пользовательских функций, которые могут быть активизированы в рамках автоматизируемой деятельности;
• реализационная полнота— возможность обеспечения функциональной полноты путем комбинации базовых средств системы, ее
реализационных механизмов, а также используемых средств окружения;
• интерфейсная полнота— задание языка управления поведением системы, адекватного восприятию системы пользователем.
В обсуждаемом критерии речь идет о функциональной полноте. Функциональная замкнутость означает, что автоматизация деятельности, осуществляемая релизом данной итерации, достигается таким путем, который не требует от пользователя ничего, что выходит за рамки средств, предлагаемых релизом системы. Эти качества обеспечиваются реализационной полнотой, а на уровне управления поведением системы — интерфейсной полнотой. Таким образом, дополнительные критерии не требуются: и реализационная, и интерфейсная полнота определяются как производные от функциональной полноты.
Иногда говорят о минимальности того, что должно быть реализовано на итерации для достижения полноты и функциональной замкнутости. Это подчеркивается, например, в подходе экстремального программирования [3].Однако реализационная минимальностьесть качество, которое характеризует конкретную методологическую стратегию ведения проекта, а потому на уровень общих для любых методологий критериев ее выносить не стоит.
Для ближайшей задачи первой итерации критерии упорядочиваются следующим образом: демонстрационная значимость, пользовательская актуальность, скорость реализации, системная значимость и функциональная полнота. Искусство менеджера состоит в том, чтобы в заданных ограничениях соблюсти необходимый баланс предпочтений и обеспечить возможность проверки и корректировки априорных методик, метрик, стратегий и прогнозов.
Для ближайшей задачи должны быть определены:
• планы реализации— разбиение решения на этапы, сроки их выполнения и ресурсные потребности, определяемые для реализации
конкретных требований ближайшей задачи;
• критерии оценки результатов— методики, с помощью которых определяется, что конкретные требования ближайшей задачи реализованы в срок с необходимым качеством;
• перспективные задачи,формулировка которых в проектах жесткой
отчетности является обязательным результатом, проверяемым в
контрольной точке 2. Их предполагается решить на последующих
итерациях (степень проработки требований к перспективным задачам и даже их идентификация могут быть различны).
Последнее не требуется, например, в схемах экстремального программирования, однако и для подхода быстрого развития полезно выработать гипотезы о перспективах проекта, которые нужно будет иметь в виду на следующих этапах (итерациях).
В контрольной точке 2 определяется фронт работ проектировщиков подсистем.