UML包含用例的行为是否必然随包含用例执行的技术疑问
UML 2.5.1中«include»关系的执行确定性分析
首先回顾UML 2.5.1规范对«include»关系的核心定义:
Include是两个UseCase之间的有向关系,表示被包含UseCase(新增部分)的行为会插入到包含UseCase(includingCase)的行为中。
(...)
被包含UseCase的全部行为会在包含UseCase恢复执行之前,在包含UseCase的某个单一位置被执行。
针对你的两个疑问,解答如下:
第一个问题:每当执行UC1时,UC2和UC3的行为必然会被执行吗?
是的,根据规范的明确表述,只要UC1被执行,其包含的UC2和UC3的全部行为就一定会在UC1流程的指定位置被执行,必然产生参与者或利益相关方预期的可观测结果。规范里用的是完全肯定的措辞(“被插入”“被执行”),没有任何条件性的例外说明,这正是«include»关系的核心特征——它是强制性、无条件的行为复用,和«extend»的“可选、带条件”形成明确区分。第二个问题:被包含用例可能不总是被执行吗?这种理解符合规范吗?
这种理解不符合UML 2.5.1的规范定义。规范对«include»的描述中没有任何非强制性的表述(比如«extend»定义里的“可被插入”“可能带有条件”),不存在“部分场景下跳过被包含用例”的语义空间。如果你的业务逻辑需要某个用例的执行是可选的,应该使用«extend»关系(配合触发条件),或者将条件判断逻辑放在包含用例UC1的流程内部,而非用«include»来表达这种可选性——混淆两者的语义会导致用例模型的歧义。
内容的提问来源于stack exchange,提问作者Christophe
相关产品推荐
相关产品推荐

