К ПРОГРАММНОМУ ОБЕСПЕЧЕНИЮ
Спецификация требований к ПО является составной частью процесса управления требованиями (см. подразд. 1.5). В качестве повторения отметим, что все требования к ПО делятся на функциональные и нефункциональные. Функциональные требования определяют действия, которые должна выполнять система, без учета ограничений, связанных с ее реализацией. Нефункциональные требования описывают атрибуты системы (технические характеристики) и ее окружения.
Для выявления требований используются (в различных сочетаниях) следующие методы:
· собеседование (интервьюирование);
· анкетирование;
· моделирование и анализ бизнес-процессов (далее будет рассмотрена методика перехода от объектной бизнес-модели к системным требованиям);
· сессии по выявлению требований (мозговой штурм);
· создание и демонстрация пользователям работающих прототипов приложений (для выявления замечаний и дополнительных требований).
Собеседование — наиболее часто используемый и обычно наиболее полезный метод выявления требований. При использовании интервью может быть поставлено несколько целей, таких, как выяснение, проверка и толкование фактов, формирование заинтересованности, привлечение пользователей к работе, сбор предложений и мнений. Но метод собеседования требует для эффективного контакта хороших навыков общения с людьми, имеющими различные ценности, приоритеты, мнения, побуждения и индивидуальные особенности. Преимущества метода собеседования заключаются в следующем:
· опрашиваемое лицо может свободно и открыто отвечать на вопросы и почувствовать себя участником проекта;
· лицо, проводящее собеседование, может наблюдать за поведением опрашиваемого лица, изменять ход опроса, переформулировать или иначе строить вопросы во время собеседования.
Недостатки метода собеседования:
· метод трудоемкий и дорогой, поэтому может оказаться непрактичным;
· успех собеседования зависит от навыков общения лица, проводящего собеседование, и от желания опрашиваемых лиц участвовать в интервью.
Существуют два типа интервью: неструктурированное и структурированное. Неструктурированные интервью проводят с одной общей целью, которая явно не высказывается, и с помощью нескольких общих вопросов. Лицо, проводящее собеседование, рассчитывает на то, что опрашиваемое лицо должно само определять рамки и направление интервью. В таких интервью часто теряется нить рассуждений, и по этой причине они редко используются при проектировании систем.
В структурированных интервью лицо, проводящее собеседование, заранее подготавливает конкретный ряд вопросов к опрашиваемому лицу. В зависимости от ответов в процессе собеседования могут быть заданы дополнительные вопросы для уточнения или разъяснения некоторых тем. Вопросы без подразумеваемых ответов позволяют опрашиваемому лицу выбрать ответ, наиболее подходящий с его точки зрения. Вопросы, допускающие единственный ответ, ограничивают выбор возможного ответа или требуют коротких, прямых ответов.
Анкетирование позволяет с помощью анкет получать сведения от большого количества людей, контролируя правильность их ответов. При работе с большой аудиторией этот метод наиболее эффективен. Преимущества метода анкетирования заключаются в следующем:
· люди могут заполнять и возвращать анкеты в удобное для них время;
· люди склонны сообщать в ответах действительные факты, если анкетирование анонимное;
· это относительно недорогой способ сбора данных с участием большого количества людей.
Недостатки метода анкетирования:
· не все могут согласиться ответить на вопросы, анкеты могут возвращаться незаполненными;
· нет возможности пояснить или переформулировать неправильно понятые вопросы, наблюдать и анализировать реакцию респондента на отдельные вопросы;
· подготовка анкет может потребовать много времени.
Мозговой штурм особенно полезен в ситуациях, когда обсуждаются новые, нестандартные решения незнакомой проблемы. Большинство новаторских идей очень часто бывают результатом комбинации нескольких, на первый взгляд, не связанных друг с другом идей. Мозговой штурм включает в себя генерацию идей и расстановку приоритетов. Процесс генерации идей обычно подчиняется правилам, соблюдение которых преследует одну цель — выработку как можно большего числа идей. Критика и споры в этот период не поощряются; существующие пределы и ограничения снимаются, можно изменять и комбинировать идеи.
Основная идея создания прототипа состоит в быстрой постройке модели системы, которая, как предполагается, нужна пользователю. Обычно в прототипах многие детали опускаются, в том числе процедуры контроля входных данных, обработки ошибок, резервного копирования и восстановления данных. Не учитываются также производительность и масштабируемость. Создание прототипа никак не противоречит и не препятствует применению других методов получения требований от пользователя. Однако иногда только с помощью прототипа удается заставить клиента начать обсуждение требований, которые при другом подходе кажутся слишком абстрактными. Кроме того, работа с прототипом часто помогает получить требования, которые в противном случае так и остались бы неизвестными. Прототип хорош еще и тем, что он является неким осязаемым доказательством (или иллюзией) прогресса в разработке системы. А в некоторых случаях он может даже поддерживать какие-то ограниченные рабочие возможности системы. К сожалению, как отмечалось в главе 1, реальный опыт работы с прототипами свидетельствует, что их создание обычно препятствует любому официальному документированию требований, следовательно, требования формулируются только в виде кода. Детали работы системы, игнорируемые прототипом (обработка ошибок, резервное копирование и др.), могут так и не появиться в виде требований.
Выявленные в результате применения перечисленных методов требования к ПО оформляются в виде ряда документов и моделей. К основным документам, регламентируемым технологией Rational Unified Process, относятся:
· Концепция — определяет глобальные цели проекта и основные особенности разрабатываемой системы. Существенной частью концепции является постановка задачи разработки, определяющая требования к выполняемым системой функциям.
· Словарь предметной области (глоссарий) — определяет общую терминологию для всех моделей и описаний требований к системе. Глоссарий предназначен для описания терминологии предметной области и может быть использован как словарь данных системы.
· Дополнительные спецификации (технические требования) - содержит описание нефункциональных требований к системе, таких, как надежность, удобство использования, производительность, сопровождаемость и др.
Примеры документов приведены в подразд. 3.4.2.
Функциональные требования к системе моделируются и документируются с помощью вариантов использования (use case), которые в контексте процесса управления требованиями трактуются следующим образом:
· вариант использования фиксирует соглашение между участниками проекта относительно поведения системы;
· вариант использования описывает поведение системы при различных условиях, когда система отвечает на запрос одного из участников, называемого основным действующим лицом;
· основное действующее лицо инициирует взаимодействие с системой, чтобы добиться некоторой цели. Система отвечает, соблюдая интересы всех участников.
Варианты использования — это вид документации, применяемый, когда требуется сконцентрировать усилия на обсуждении принципиальных требований к разрабатываемой системе, а не на подробном их описании. Стиль их написания зависит от масштаба, количества участников и критичности проекта. Существуют четыре уровня точности[24] при описании вариантов использования (расположенные по степени повышения точности):
· Действующие лица и цели (перечисляются действующие лица и все их цели, которые будет обеспечивать система).
· Краткое изложение варианта использования (в один абзац) или основной поток событий (без анализа возможных ошибок).
· Условия отказа (анализ мест возникновения возможных ошибок в основном потоке событий).
· Обработка отказа (написание альтернативных потоков событий).
Введение перечисленных уровней преследует своей целью грамотное планирование и экономию времени разработки. В итерационном цикле создания системы не следует пытаться за один прием подробно описать все требования, их нужно постепенно уточнять, повышая уровень точности. Выбор первоочередных вариантов использования для уточнения определяется их приоритетами (см. подразд. 1.5).
Методика моделирования вариантов использования в технологии Rational Unified Process предусматривает специальное соглашение, связанное с группировкой структурных элементов и диаграмм модели. Это соглашение включает следующие правила:
· Все действующие лица, варианты использования и диаграммы вариантов использования помещаются в пакет с именем Use Case Model.
· Если моделируется сложная многофункциональная система, то совокупность всех действующих лиц и вариантов использования может разделяться на пакеты. В качестве принципов разделения могут использоваться:
структуризации модели в соответствии с типами пользователей (действующих лиц);
функциональная декомпозиция;
разделение модели на пакеты между группами разработчиков (в качестве объектов управления конфигурацией).
Все рекомендации по написанию качественных вариантов использования, включая перечисленные в подразд. 2.5.1, можно изложить в виде набора образцов, которые перечислены в табл. 3.3.
Таблица 3.3
Образцы написания вариантов использования
Наименование образца | Проблема | Предлагаемое решение |
Формирование команды разработчиков | ||
Небольшая команда разработчиков | Участие слишком многих людей в написании варианта использования неэффективно; компромисс между многими различными точками зрения может привести к неудовлетворительным результатам при создании системы | Ограничьте число разработчиков, отрабатывающих детали варианта использования, двумя или тремя людьми. Для подключения дополнительных участников используйте образец Двухуровневое рецензирование |
Состав сторонних участников | Невозможно удовлетворить потребности всех заинтересованных лиц, не обмениваясь информацией с ними | Активно привлекайте заказчиков и заинтересованных лиц в вашей организации к разработке вариантов использования |
Сбалансированная команда | Команда из близких по роду деятельности, одинаково мыслящих людей может создать небольшой набор ограниченных вариантов использования, не удовлетворяющий общим потребностям | Формируйте команду из людей с различными специализациями, представляющими интересы различных заинтересованных лиц. Команда должна включать как разработчиков, так и пользователей |
Организация процесса разработки | ||
Глубина после общего представления | Невозможно продвигаться вперед и создавать набор согласованных вариантов использования, если тратить впустую время на последовательное написание подробных вариантов использования | Разрабатывайте сначала общее представление вариантов использования, затем постепенно добавляйте детали, работая с группой взаимосвязанных вариантов использования |
Итерационная разработка | Разработка вариантов использования за один проход затруднительна, усложняет внесение дополнительной информации и затрудняет выявление факторов риска | Разрабатывайте варианты использования итерационно, повышая на каждой итерации их точность и корректность |
Множество форм | Различные проекты требуют различную степень формальности и различные шаблоны. Использовать один и тот же шаблон вариантов использования непродуктивно | Выбирайте формат вариантов использования, основываясь на проектных рисках и предпочтениях участников |
Двухуровневое рецензирование | Многие заинтересованные лица могут пожелать принять участие в рецензировании вариантов использования. Это слишком долгое и дорогостоящее занятие | Используйте два вида рецензирования: первое, проводимое небольшой группой внутренних участников, может выполняться многократно; второе, проводимое полной группой, выполняется, как правило, один раз |
Своевременное завершение | Разработка модели вариантов использования сверх потребностей заинтересованных лиц и разработчиков приводит к напрасным тратам ресурсов и затягивает проект | Прекращайте разработку вариантов использования, как только они достигают необходимой полноты и удовлетворяют потребности участников проекта |
Свобода творчества | Чрезмерное внимание к стилю написания вариантов использования тормозит работу | Небольшие различия в стиле написания вариантов использования несущественны. Если вариант использования достиг необходимой полноты, его автор имеет право на стилистические отступления |
Организация набора вариантов использования | ||
Общепринятая четкая концепция | Недостаточно четкое представление о системе может привести к неуверенности и противоположным мнениям среди заинтересованных лиц и быстро парализовать проект | Необходимо подготовить и утвердить концепцию системы, в которой четко определены ее цели и роль в деятельности организации. Распространите концепцию среди всех участников проекта |
Видимые границы | Если вы не определили границы системы, ее масштаб будет расти неконтролируемым образом | Установите четкую и видимую границу между системой и внешней средой, перечислив людей и оборудование, взаимодействующих с данной системой |
Ясный состав действующих лиц | Если выявлять только пользователей системы, игнорируя роли, которые они играют по отношению к системе, можно упустить существенную часть поведения системы или ввести избыточное поведение | Идентифицируйте действующих лиц, с которыми должна взаимодействовать система, и роли, которые они играют по отношению к системе. Четко опишите каждую роль |
Транзакции, значимые для пользователей | Система несовершенна, если она не может предоставить пользователям необходимые услуги и не выполняет цели и задачи,, определяемые ее концепцией | Идентифицируйте важные, значимые услуги, которые система предоставляет действующим лицам для удовлетворения их потребностей |
Разворачивающееся представление | Количество шагов в описании поведения системы превышает возможности охвата и интересы различных типов читателей вариантов использования | Создайте иерархическую организацию набора вариантов использования, которую можно развернуть для большей детализации, или свернуть, чтобы скрыть детали и показать контекст |
Отдельный вариант использования | ||
Законченная единственная цель | Неправильно заданные цели не дают разработчикам четко определить, где заканчивается один вариант использования и начинается другой | Каждый вариант использования должен иметь законченную и четко определенную цель, которая может находиться на любом уровне образца Разворачивающееся представление |
Имя в виде глагольной фразы | Бессмысленные, слишком общие имена вариантов использования не дают читателям правильного представления, на них сложно ссылаться | Именуйте каждый вариант использования активной глагольной фразой, отражающей цель основного действующего лица |
Сценарий и фрагменты | Читатели должны иметь возможность легкого следования по интересующему их сценарию, в противном случае они могут утратить интерес или потерять важную информацию | Основной сценарий должен быть предельно простым, без анализа возможных ошибочных ситуаций. Фрагменты сценария, отражающие альтернативы, должны располагаться под ним |
Исчерпывающие альтернативы | Вариант использования может иметь много альтернатив. Отсутствие некоторых из них означает, что разработчики неправильно понимают поведение системы, и система может получиться несовершенной | Описывайте все альтернативы и ошибочные ситуации, которые могут иметь место в варианте использования |
Перегрузка информацией | Включение нефункциональных требований в вариант использования может быстро привести его в неопределенное и беспорядочное состояние | Включите дополнительные позиции в шаблон варианта использования за пределами текста сценария, чтобы отразить полезную дополнительную информацию |
Точность и читаемость | Варианты использования,, слишком сложные для нетехнических специалистов или слишком неточные для разработчиков, несовершенны и могут привести к созданию неадекватной системы | Сделайте вариант использования достаточно читаемым, чтобы заинтересованные лица могли в нем разобраться и оценить его, и достаточно точным, чтобы разработчики понимали, что им делать |
Сценарии и шаги | ||
Обнаруживаемые условия | Разработчики вариантов использования всегда решают проблему, сколько и какие условия включить в их описание | Включайте только реально обнаруживаемые условия. Объединяйте условия, которые оказывают на систему одинаковое воздействие |
Уровни шагов | Чрезмерно крупные или мелкие шаги сценария варианта использования делают вариант использования трудным для восприятия и понимания | Оставляйте в сценарии от трех до девяти шагов. В идеальном случае все шаги должны быть на близких уровнях и на уровне абстракции, следующем за целью варианта использования |
Выполнение цели действующего лица | У читателей и разработчиков возникают проблемы в понимании поведения системы, если неясно, какое действующее лицо отвечает за выполнение шага сценария, и что оно делает для его завершения | При описании каждого четко указывайте, какое действующее лицо выполняет действие, и что оно получает по его завершении |
Продвижение вперед | Разработчики должны решить, как много поведения включить в каждый шаг. Слишком много деталей делает вариант использования длинным и трудным для чтения | Исключайте или объединяйте шаги, которые не означают никакого движения вперед для действующего лица. Упрощайте фрагменты, которые отвлекают внимание читателя от Движения вперед |
Нейтральность к технологии | Включение технологических ограничений и деталей реализации в описание варианта использования увеличивает сложность и затрудняет понимание его цели | Описание варианта использования должно быть нейтральным по отношению к технологии |
Связи между вариантами использования | ||
Общее поведение | Описание одинаковых шагов в различных вариантах использования занимает лишнее время и затрудняет понимание общих процессов в модели вариантов использования | Выражайте общие действия в виде «включаемых» вариантов использования |
Перемещение альтернатив | Длинные или сложные описания альтернатив могут занять доминирующее положение и показаться более важными, чем они заслуживают | Рассмотрите возможность выделения сложных альтернатив в отдельный вариант использования |
Абстракция | Попытка описать в одном варианте использования две или более различных альтернатив, ни одна из которых не является доминирующей, приводит к проблемам | Создайте обобщенный абстрактный вариант использования. Поместите каждый отдельный вариант сценария, уточняющий абстракцию, в специализированный вариант использования |
Модификация существующих вариантов использования | ||
Удаление излишеств | Чрезмерно длинный вариант использования громоздок и труден для работы, уводит в сторону внимание пользователей | Переместите длинный, громоздкий фрагмент или слишком сложное расширение в отдельный вариант использования |
Объединение фрагментов | Варианты использования, описывающие очень маленькие или изолированные фрагменты поведения, не выражают достаточной для понимания информации относительно услуг, предоставляемых системой (Транзакции, значимые для пользователей) | Объединяйте небольшие взаимосвязанные варианты использования или фрагменты вариантов использования в варианты использования, связанные общей целью |
Удаление лишних вариантов использования | Варианты использования, результаты которых незначительны, отвлекают внимание и затрудняют понимание системы | Удалите варианты использования, которые не дают ничего существенного для системы или выпали из текущего активного списка вариантов использования |
Варианты использования, безусловно, не единственный способ выражения функциональных требований. Это объясняется следующими причинами:
· их описания слишком подробны. Заинтересованные лица зачастую желают видеть лишь краткий перечень основных функций;
· некоторые важные функции системы легче выразить в краткой форме без привязки к именам вариантов использования.
Следовательно, помимо вариантов использования, функции системы можно выразить через ее свойства (system features), представляющие собой высокоуровневые, краткие утверждения. Более строго в контексте Rational Unified Process системное свойство определяется как «наблюдаемая извне и обеспечиваемая системой функция, которая непосредственно удовлетворяет потребности заинтересованного лица». Свойство можно облечь в следующую лингвистическую форму: система будет выполнять «свойство X».
Спецификация требований в технологии Rational Unified Process не требует обязательного моделирования бизнес-процессов организации, для которых создается ПО, однако наличие бизнес-моделей существенно упрощает построение системной модели вариантов использования. При переходе от бизнес-модели к начальной версии модели вариантов использования применяются следующие правила.
· Для каждого исполнителя в модели бизнес-анализа, который в перспективе станет пользователем новой системы, в модели вариантов использования создается действующее лицо с таким же наименованием. В состав действующих лиц включаются также внешние системы, играющие в бизнес-процессах пассивную роль источников информации.
· Варианты использования для данного действующего лица создаются на основе анализа обязанностей соответствующего исполнителя (в простейшем случае для каждой операции исполнителя создается вариант использования, реализующий данную операцию в системе).
Такая начальная версия модели описывает минимальный вариант системы, пользователями которой являются только исполнители бизнес-процессов. Если в дальнейшем в процессе развития системы ее непосредственными пользователями будут становиться действующие лица бизнес-процессов, то модель вариантов использования будет соответствующим образом модифицироваться.
Применение данных правил будет проиллюстрировано в следующем примере.
3.4.2.