Страница 2 из 6
Структурирование вариантов использования на основе целей пользователяНесложно понять, что вариант использования представляет собой текстовое описание шагов, которые выполняет действующее лицо (actor). "Что же объединяет все эти шаги? Что в них общего?" В начале 90-х никто не мог однозначно ответить на этот вопрос. Внимательно слушая объяснения Айвара Якобсона и размышляя над примерами, которые он приводил, я обнаружил две подсказки. Первая, самая важная, заключалась в том, что вариант использования описывает то, как действующее лицо пытается достичь некой цели, используя систему. Таким образом, если мы назовем одно из действующих лиц основным, то все действия можно будет рассматривать в контексте тех целей, которые он (или она) пытаются достичь. При описании вариантов использования очень важно связать их с целями, которые ставят перед собой действующие лица системы. Это не даст свести варианты использования к описанию функциональности системы, о которой в первую очередь пекутся программисты. Нет, подходить надо с другой стороны: что именно хочет от системы пользователь? Это и есть причина, по которой он взаимодействует с программой. Если программа дает пользователю возможность достичь поставленной цели, то она тем самым приносит ему максимальную пользу. А вот вторая подсказка, которую я нашел у Якобсона: иногда цель оказывается недостижимой. Любое желание, будь то получить выгодный контракт, вставить карточку в банкомат, заполнить еще одно поле в онлайновой форме и т.д., может по тем или иным причинам оказаться невыполнимым. Если задуматься о подобных ситуациях заранее и описать, как система должна вести себя в таких случаях, можно сэкономить массу времени и денег. Получается, что вариант использования должен представлять собой структуру из двух частей: описание последовательности действий, когда все идет, как надо, и небольшие описания того, как ведет себя система, когда происходит какой-то сбой. Однако тут перед нами встает еще одна проблема - цели могут иметь различные масштабы. Например, я могу считать своей основной целью желание получить хороший контракт. Более близкая цель (временной промежуток сужается) - пригласить клиента вместе пообедать. Еще более близкая цель (временной промежуток еще уже) - раздобыть наличность, чтобы заплатить за обед. Эта цель подводит меня к необходимости снять деньги с карточки в ближайшем банкомате. В это же время моей самой насущной и самой краткой по времени целью является засунуть карточку в банкомат и начать транзакцию. Все эти цели сосуществуют одновременно. Достижение или недостижение каждой из них можно описать при помощи вариантов использования. Главное - понимать, что если мы не будем указывать, насколько масштабную цель описывает вариант использования, у читателя возникнет искаженная картина происходящего. Варианты использования пишет множество различных людей. Если каждый из них будет прямо в тексте обозначать, каков масштаб цели, которую он описывает, то читатель сразу поймет, что имелось в виду, и избежит всевозможных недоразумений и недопонимания. При всем уважении к банкоматам, нельзя не отметить, что в нашем примере самой важной и высокоуровневой является цель получить контракт на работу. Получить деньги из банкомата - это так сказать, цель среднего уровня. А вот вставить карточку в банкомат - это очень низкоуровневая цель, фактически, деталь поведения. При этом каждая цель является совершенно полноценной и заслуживает отдельного варианта использования. Если в начале варианта использования сразу указать, какого уровня цель он описывает, то у читателя сразу же сложится правильное представление о поведении системы и пользователя. В описании варианта использования мы совмещаем идею о многоуровневости целей и понятие успешности/неуспешности их достижения. Каждый шаг сценария представляет собой цель меньшего масштаба, которую уже удалось достичь. Мы пишем: "Клиент вставляет карточку в банкомат", имея в виду самую низкоуровневую цель и подразумевая, что клиент ее выполнит. Продолжая описание этого варианта использования в разделе "Альтернативные варианты" или "Дополнения", мы должны будем написать, что случится, если эта низкоуровневая цель все же не будет достигнута: "Карточка застревает в банкомате; банкомат автоматически выключается и ставит в известность ремонтную службу". |