如何在UML活动图中可视化协作活动?

3
我目前在建模一个由多个用户协作完成的工作流程的活动图上遇到了困难。这与多个用户同时编辑和验证同一Confluence页面有些类似,因此我决定以此为例子,这样更容易理解。
单个用户的工作流程如下:
用户编辑页面(在我的情况下是复杂的活动),发布后对已发布的页面进行某种形式的验证(另一个复杂的活动)。如果不满意,则返回编辑页面并重复此循环,直到满意为止。

Activity Diagram

现在想象一下它的协作版本,就像这样(当然,这是一个可怕的工作流程,但是想象一下你必须进行建模):
多个用户共同编辑同一页,并且在任何时候,其中一个用户可以发布当前内容并开始验证迄今为止已经编辑的内容。其他用户将保持在编辑步骤中,并可能在第一个用户验证时继续编辑其他内容。各个用户的“状态”是相互独立的,因此用户1可以开始验证,然后用户2和3可以发布更改并开始验证,而用户1则回到编辑状态,在此期间,用户4发布更改等等。只有当所有用户决定不再进行进一步更改时,工作流才会结束。
这引出了一个问题:我该如何更改图表以表达我在此处描述的协作工作流程?整个活动图是<>扩展区域吗?我在结尾处添加同步点吗?它是否是一个<>区域?或者内部活动是并行的,但整个工作流程不是?

你不能在一个图表中展示所有的东西。将其拆分为几个重要的场景,并分别展示每个场景,这是唯一的方法。以上是“晴天”,然后再添加一个并发编辑的场景,其中一个编辑器覆盖另一个编辑器的更改等。 - qwerty_so
此外,您可能会使用状态机来处理文档,以便展示并发编辑是如何实现的(这可能会很困难)。 - qwerty_so
虽然我最初点赞了这个问题,但现在我意识到它并不简单。协作工作本身就是复杂的,你无法给出简洁的答案,这就是为什么我现在投票支持关闭这个问题,因为它太广泛了。 - qwerty_so
2个回答

1
如果所有的“示例”编辑/验证周期都是独立的,即用户单独编辑页面并独立验证更改,则您当前的表示方式就可以了,因为工作流程会针对每个用户独立地开始和结束。
如果您想要明确记录多个用户可以同时开始这些活动,您需要一个“包含”活动图,显示多用户环境而不破坏各个循环。此活动将具有调用“示例”编辑/验证周期活动的CallBehavioraction。为了展示并发情况,您确实需要使用扩展区域或更好的简写符号。

enter image description here

小星星看起来像是一种类型,但实际上它意味着活动有多个并发执行的实例:

(UML 2.5.1 规范,第483页):(...) 代替使用模式关键字,符号的右上角放置一个“*”(这旨在表示“多次执行”。该符号映射到包含 CallBehaviorAction 的扩展区域(如图16.50),其中 mode=parallel。

(注意:引文中缺少的右括号是规范中的一个笔误)。

如果编辑/验证周期不是那么独立,例如如果验证不仅验证本地更改,还验证其他人所做的更改,则会更加复杂:

首先,您需要以某种方式明确协作编辑或与其他人合并更改的方式。
然后,如果此修订模型允许每个用户独立考虑每个“组合周期”,最好使用与上述相同的方法。但是,如果不是这样,您需要将其包含在扩展区域中。我必须承认,对我来说不清楚它的模式应该是“parallel”还是“stream”。
您还需要澄清是否在验证后由另一个用户进行更改需要已经验证的用户重新验证而没有进行任何更改。这可能需要进一步增强您的初始周期。

我确实考虑到最终用户同意整个内容,所以例如每个用户写一个章节,但也会验证其他章节,我可能没有表达清楚。将单个组合周期建模并在其上一级作为并行活动使用,或者在并行活动中使用这个周期的想法听起来很有前途,我会尝试看看能否使用它。 - Tim Meyer

0

这并不是一个真正的答案,但对于评论来说太长了。问题在于你的问题本身。


假设您有一些内容,两个人并行编辑以纠正两个不同位置的错别字。这可以轻松处理。但现在假设内容存在需要修复的矛盾。比如说,您有一个陈述句A在开头,而结论是not A。现在您有两个编辑者。第一个将修复它以具有总体A的含义,而第二个将更改它以成为总体not A。这里就会产生冲突。
有很多方法来处理这种情况。这就是重点。您必须定义这些方法。就像您可以按顺序逐个构建汽车一样,也有一种并行构建的方法。但只能按照严格的规则进行。否则,您最终会得到一团糟。
那么结论是什么?明确您想要做什么和您的目标是什么。只有这样才开始处理细节。反之则不行。

当你考虑制造过程时,可以想一下像Confluence(或任何其他Wiki)这样的东西:实际上他们并没有定义协作方式;他们只是允许多个用户编辑同一页,看到其他人正在输入什么,并添加了一个发布按钮,任何人都可以在任何时候按下。如果一个用户这样做了,那么内容的状态就被发布了,但其他人仍然处于编辑模式。这意味着用户自己定义他们想要如何协作。我们的情况实际上是类似的,因为输出的是数据,而不是要销售的产品。 - Tim Meyer
如果他们允许这样做,那只会导致一团糟。两个编辑器相互竞争不会产生有意义的结果。他们需要沟通并就必须完成的事情达成一致。我只是在 Confluence 上工作了很短的时间(而且我不喜欢它)。幸运的是,我没有遇到这样的竞争,可能因为当时我是唯一的编辑者。无论如何,如果允许这样做,它应该被放弃,因为这是最糟糕的设计。 - qwerty_so
我已经成功地与最多六个人一起使用了Confluence的协作编辑功能:想象一下,就像有六个人站在白板前,每个人都拿着笔。当然,你需要主持这样的会议,但有方法可以做到这一点,并且取决于主持人,它可以是高效的。 - Tim Meyer
你需要一个管理员。模仿他的角色,你就完成了。 - qwerty_so

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