应该如何在 UML 用例描述中编写分支语句?这是我正在建模的情况 -
员工必须通过读卡器刷卡才能上班。系统发出声音,表示读取成功或失败。如果读取失败 3 次,用户可以选择手动将他们的详细信息输入 PC。
这是我所做的用例描述,所有 if/else 似乎都非常尴尬和不清楚。这是应该编写用例描述的方式还是有更好的方法?
UML 规范没有指定在用例规范中显示分支的任何方式。但是,建模者提出了一些建议,其中之一与您已有的非常相似。在UML 2 and The Unified Process(第 82 页)一书中介绍了一种这样的方法:
“使用关键字 'If' 和 'Else' 来指示流程中的分支。通过仔细使用缩进和编号,您可以清楚地指示 'If' 语句的主体。”
n. If condition
n.1 Do something
n.2 Do something else
...
n+1. Else
n+1.1 Do something
n+1.2 Do something else
...
n+2. ...
请注意,您可能希望删除“end if”短语。本书还介绍了其他关键词,如“For”和“While”。
但是,根据我的个人经验;复杂的用例流在以文本形式表达时不会被任何人阅读。我在业内见过的最好的方法是使用活动图来显示用例的主要流程。这是有一个包含所有其他部分(前置条件、后置条件、名称、描述、主要和次要参与者和......)的用例规范,但将流程部分留空并参考活动图,正如 @ 完全解释的那样哈维尔。但是,我会混合这两个图表,并通过活动分区(泳道)将用户和系统步骤分开。
序列图绝对不是一种选择。
对我来说,最好的办法是创建一个 UML 用例并用序列图描述它......
如果您将用例的行为写成文本,是的。否则,您可以通过活动图对其进行建模,其中包含描述用户和系统之间交互的发送和接收操作。
我不会选择序列图,因为它看起来与自然语言描述一样“尴尬”(由于替代方案和循环的嵌套),但它是另一种选择,正如其他答案中所述。
用例图并非旨在表示您想要的信息。在你的情况下,我会使用序列图(看起来你已经有了泳道;)
用例 UML 不使用 if/then/else 语句。用例使用备用流程:
主流
N 动作
N+1 个结果
N+2 动作 a1
交替流
N 动作
N+1 个结果 b
N+2 动作 a2
这是用例规范
如果动作 a 的结果是结果 a 则执行 a1
否则,如果操作 a 的结果是结果 b,则执行 a2
万一