在活动图中表达并发和时间

3
我不确定如何使用活动图表达我的场景:
一个消息被接收 两个独立和并发的操作同时进行:消息记录和消息处理 记录始终比处理花费更少的时间
该图中第一个活动是正确的,因为这些操作是独立的,但它没有传达记录一定会比处理花费更少的事实。
该图中第二个活动不正确,因为即使记录在处理之前完成,看起来似乎处理依赖于记录的先完成,而这并不代表现实。
以下是非与计算机相关的例子:
你是一名鸟类观察新手,试图在笔记本上做出你的第一个记录 一群鸟飞近,你试图尽可能多地识别细节 你想把细节写下来,但等等,你开始意识到你的理论背景在实践中行不通,应该是一个快速涂鸦实际上变成了毫无结果,因为你没有认出任何东西 与此同时,鸟儿们高贵地飞走了,没有等待你,活动结束了 或者你确实写下来了,只花了一会儿,而鸟儿仍然在附近缓慢飞走,一段时间后再次结束活动 或者你非常惊奇,只是一直看着它们,没有做任何笔记 - 它们飞走了,消失在地平线上,活动结束了 几个小时后,你有足够的笔记,回家非常高兴 - 也许你没有捕捉到所有东西,但这已经足以让你微笑了
我可以总是添加注释来表达它,但我想知道是否有更结构化的方式来用活动图表达我所描述的内容?如果不是活动图,那么在你的意见中哪种图比较适合?谢谢。

或者,我们也可以假设这不是一个计算机系统,而是模拟两个人达成协议的活动,其中第一个人记录某些内容到一本书中,而另一个人处理一些信息,并且保证第一个人会更早地完成。在这种情况下,我也不确定如何将其表达为活动图。 - user15107910
如果我没理解错的话,只需注明日志时间短即可。如果我理解正确,您不需要它更短。我认为使用连接器将两个操作连接起来,然后从中转换到最终节点,图表会更清晰。 - bruno
无论日志记录成功与否,它都会完成,是吧?否则就意味着它不能完成,所以它可能比进程更长,如果它不完成,你的活动也不会完成。而日志记录失败并不影响处理,而 join 的 joinSpec 是“and”。 - bruno
1
好的,谢谢,我理解你的观点。 - user15107910
1
谢谢您的提示 - 这不是我的情况,但我仍然感激。 - user15107910
显示剩余4条评论
1个回答

2
您的第一个图表假设记录持续时间始终短于处理时间:
如果此假设正确,则上部流程将到达流程最终节点,其余流程将继续进行,直到第一个到达活动最终节点。在此处,处理继续进行,并且当处理结束时,活动也随之结束。这正是您想要的。
但是,如果执行与此假设偏离并且由于任何原因导致记录延迟,那么处理的结束将到达活动最终节点,从而立即中断所有其他正在进行的活动。因此,记录可能无法完成。也许这对您来说不是问题,但在大多数情况下,审计需要完整的日志记录。
您可能会对一种更安全的方法感兴趣,即添加连接节点。

enter image description here

优点是该活动不依赖于任何假设。它总是有效的:
  • 无论日志记录速度如何,该流程上的令牌都将在合并节点等待,一旦进程(安全地)完成活动,合并就可以发生,输出令牌到达终点。这正是您当前期望的。
  • 如果日志记录异常缓慢,也没有问题:处理将结束,但活动将等待日志记录完成。

这种强大的符号表示使日志记录就像蒸汽朗之猫在盒子里一样:我们不必知道哪个活动更长或更短。在活动结束时,两个操作都已完成。

活动图中的时间?

活动图实际上并不意味着表达时间和持续时间。它关于控制流和同步。

然而,如果时间对您很重要,您可以:

  • 将一个活动在视觉上缩短,使其比另一个活动短。从正式的 UML 视点来看,这是非常模糊和毫无意义的。但当读者看到并行流程时,它是直观的(一种潜意识的沟通)。
  • 添加注释说明以用简单的英语表达您的假设。这样做的优点是非常清晰和明确。
  • 使用 UML 持续时间约束。这通常用于定时图中,有时用于序列图中,但通常不用于活动图中(个人从未见过,但 UML 规范也没有排除它)。

时间在 UML 规范中是非常普遍的,并且独立于图表定义。例如:

8.4.4.2:持续时间是以实现特定的文本格式给出的相对时间值。通常,持续时间是表示在此期间内可能经过的“时间刻度”数量的非负整数表达式。

8.5.1:区间是两个值之间的范围,主要用于断言某些其他元素具有给定范围内的值的约束条件。区间可以为任何类型的值定义,但作为相应的时间约束和持续时间约束的一部分,它们特别适用于时间和持续时间值。

在您的情况下,您对处理过程进行了持续时间观察(例如d),并对日志记录设置了持续时间约束(例如0..d)。

8.5.4.2:IntervalConstraint显示为其受约束元素的注释。可以使用约束的一般符号表示IntervalConstraint,其中规定间隔以文本形式表示(...)。

不幸的是,没有更多的说明。唯一的图形示例是序列图中的消息(图8.5和17.5)和时间图中的示例(图17.28至17.30)。尽管如此,该符号可以推广到活动图中,但这样做会很不寻常,因此我更建议使用注释说明。

感谢@Christophe,但第一个图表在其核心上是正确的。处理活动在任何情况下都不应等待日志记录。此外,如果日志记录失败或在处理之前或之后完成(虽然不太可能),它不会对处理产生任何影响。日志记录和处理完全独立,结束活动的唯一条件是处理完成,而不是日志记录。 - user15107910
@MarkWolfram 我增加了有关符号表示的一些信息。我理解您的观点。尽管如此,我可以问一下:如果第二个活动的完成会终止第一个活动,那么您真的会说这两个活动是独立的吗?而且,如果系统真的中断记录,日志的用途是什么呢?如果无法确保它们准确无误,又有什么意义呢? - Christophe
嗨@Christophe - 看起来不会有其他答案了。如果您能删除您的第一部分,即说我的第一个图表无效的那一部分,我将很乐意接受您的其余回答。谢谢。 - user15107910
@MarkWolfram 我并没有说它是无效的,我只是说在某些情况下存在问题。但好吧,既然对你来说不是问题,我重新措辞使其中立。 - Christophe
谢谢,这不仅不是问题 - 实际上这是图表的核心思想,这也促使我在这里询问它,就像我在最初的消息中描述的那样。我现在要接受你的答案,谢谢。 - user15107910
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接