Связывание вариантов использования

Связывание вариантов использования

10.1. Подчиненные варианты использования.
Шаг действия может быть простым шагом или названием другого варианта использования. Предложение:.
Пользователь сохраняет отчет.
без выделения или аннотации означает простой, элементарный шаг. Любой из шагов:.
Пользователь сохраняет отчет.
Пользователь сохраняет отчет (UC 35 Сохранить отчет).
указывает на вариант использования, называемый Сохранить отчет. Это настолько естественно, что едва ли требуется дополнительное объяснение. Даже случайные читатели вариантов использования понимают, что подчеркнутое (обычно гиперссылка) или выделенное курсивом действие означает, что вызывается другой вариант использования, который расширяет указанное действие.’ Удобно писать варианты использования, при необходимости свертывая или развертывая действие. Научиться этому недолго, а описание получается компактным.
В терминах UML другой вариант использования называется включаемым (included). Я считаю, что начинающим писателям и неопытным читателям будет понятнее, если сказать, что один вариант использования обращается к другому или вызывает другой. Выбор термина — дело ваше.
10.2. Варианты использования расширений.
Иногда необходим другой вид связи между вариантами использования, который хорошо согласуется с механизмом расширения. Рассмотрим следующий пример.
Вы разрабатываете новую программу обработки текста, названную Wapp. Основная деятельность пользователя — набор текста. Однако он может изменить масштаб изображения или размер шрифта, запустить программу проверки орфографии или сделать еще что-нибудь из того, что с набором непосредственно не связано. Вы хотите, чтобы никакие события, происходящие с документом, не касались набора текста.
Вы также хотите, чтобы различные команды разработчиков программного обеспечения придумывали новые услуги, не переделывая основной вариант использования для каждой новой возможности. Вы хотите расширить набор требований, избежав проблем.
Ситуация характеризуется следующим образом:.
* Имеется основная деятельность, которую можно прервать.
* Основная деятельность может быть прервана рядом способов и не управляется прерываниями.
Это не тоже самое, что основное меню, перечисляющее услуги системы пользователю на выбор. Основным меню управляет выбор пользователя, тогда как в нашем примере основная деятельность не контролируется, а только прерывается другими действиями.
Вы не хотите, чтобы основной вариант использования в этом примере явно называл все прерывающие варианты использования. Иначе сопровождение станет настоящей головной болью, поскольку группе разработчиков, добавляющей новый прерывающий вариант использования, придется редактировать основной вариант использования. А это может привести к повреждению последнего или размножению его версий, необходимости просмотра и т.д.
Применяйте тот же механизм, что описан для расширений сценария, но создавайте новый вариант использования, который называется вариантом использования расширения (extension use case) и подобен расширению сценария, за исключением того, что он самостоятелен. Как и расширение сценария, он начинается с условия, которое обращается к ситуации основного варианта использования, где может возникнуть условие. Поместите все это в раздел шаблона Триггер.
Ниже приведено несколько отрывков для текстового процессора Wapp. На рис. 10.1 отображена ситуация с Wapp в виде UML-диаграммы. С помощью особого стиля коннектора, крючка, я показываю, как вариант использования расширяет другой (или цепляется к другому). Подробности см. в приложении А.
Вариант использования Редактировать документ.
Основное действующее лицо: пользователь Область действия: Wapp Уровень: цель пользователя Триггер: пользователь открывает приложение.
Предусловие: отсутствует.
Основной сценарий:.
1.
Пользователь открывает документ для редактирования.
2.
Пользователь вводит и модифицирует текст.
... Пользователь сохраняет документ и выходит из приложения.
Вариант использования Проверить орфографию.
Основное действующее лицо: пользователь Область действия: Wapp Уровень: подфункция!.
Предусловие: документ открыт.
Триггер: любой момент при выполнении варианта использования Редактировать документ, когда документ открыт, и пользователь решает запустить программу проверки орфографии.
Основной сценарий успеха:.
... и т.д. ...
Вариант использования Найти синоним.
Основное действующее лицо: пользователь Область действия: Wapp Уровень: подфункция!.
Предусловие: документ открыт.
Триггер: любой момент при выполнении варианта использования Редактировать документ, когда курсор стоит на слове и пользователь решает запустить тезаурус.
Основной сценарий успеха:.
... и т.д. ...
Вариант использования Изменить шаблон документа.
Основное действующее лицо: пользователь Область действия: Wapp Уровень: подфункция!.
Предусловие: документ открыт.
Триггер: любой момент при выполнении варианта использования Редактировать документ, когда документ открыт и пользователь выбирает эту функцию.
Основной сценарий:.
... и т.д. ...
Когда применять варианты использования расширения.
Создавайте варианты использования расширения, только когда это необходимо, так как их труднее понимать и поддерживать. В двух ситуациях их создание оправдано.
Наиболее распространенная ситуация — когда пользователь может применить много асинхронных или прерывающих выполнение услуг, которые не должны мешать основному варианту использования. Часто эти услуги разрабатываются разными командами и проявляют себя при работе с “коробочным” программным продуктом, таким как текстовый редактор.
Другая ситуация — когда вы пишете дополнения к документу, излагающему зафиксированное описание требований. Сьюзен Лилли из S.R.A. написала мне:.
Вы работаете над проектом с итеративным процессом и множественными проходами. У вас есть базовые требования для одного прохода. В следующем проходе вы расширяете основной вариант использования, добавляя новые функции. Вы не трогаете основной вариант использования.
Если основной вариант использования не зафиксирован, расширение будет работать ненадежно. Изменения в основном варианте использования могут нарушить.
условие расширяющего варианта использования, поэтому остерегайтесь вариантов использования в таких случаях. Упражнение 10.2 дает вам возможность поэкспериментировать с вариантами использования расширения этого рода.
Алан Уильямс изложил правило, помогающее решить, должен ли вариант использования вызывать подчиненный вариант использования или подчиненный вариант использования должен расширять основной:.
Если триггер включает аспекты, за которые отвечает основной вариант использования (т.е. основной вариант использования знает, когда, или где, или почему должен выполняться второй вариант использования), значит основной вариант использования включает (вызывает) другой или обращается к другому.
Если триггер включает аспекты, за которые отвечает подчиненный вариант использования (т.е. подчиненный вариант использования знает когда, или где, или почему он должен последовать), подчиненный вариант использования расширяет основной вариант использования.
Обратите внимание, что когда основной вариант использования вызывает подчиненный вариант использования, основной называет его, говоря, когда и где он выполняется. Вариант использования, к которому происходит обращение, не содержит названия основного варианта использования. Когда подчиненный вариант использования расширяет основной, последний не называет имени или на самом деле ничего не знает о расширяющем (прерывающем) варианте использования. Расширяющий вариант использования называет вариант использования, который он прерывает, и определяет среду, в которой он выполняется.
10.3. Упражнения.
Связывание вариантов использования.
10.1.
Найдите условие в варианте использования уровня цели пользователя для системы PAF (описанной в упражнении 4.4), которое требует выделения подчиненного варианта использования. Напишите этот подчиненный вариант использования и установите с ним связь из варианта использования уровня цели пользователя, уделяя внимание как его успеху, так и неудаче.
10.2.
Рассмотрите ситуацию с ATM, когда вы находитесь не в своем родном банке, а в другом. Напишите подчиненный вариант использования для запроса наличных “банк/банк” и свяжите его с предыдущим вариантом (вариантами) использования, описывающими получением наличных. Сделайте это двумя способами: в виде подчиненного варианта использования, к которому обращается ваш основной вариант использования, и в виде варианта использования расширения.
Обсудите с коллегами, какой способ лучше и почему.