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