微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 UML 图中显示可重复的活动

如何解决如何在 UML 图中显示可重复的活动

我正在处理一个项目并试图在 UML 活动图中展示一个用例。

我想用它来表明满足了这个特定用例的要求。

我还想用它来开发需要为此用例编写的测试用例。

我已经订购了“UML 2.0 In A Nutshell”一书,但在那之前,我会尽力从文章和 youtube 剪辑中获取,因此图表可能不符合适当的标准。

问题 1:

我试图证明 ExecuteInThread 函数作为一个整体有一个 try catch 块来阻止任何异常冒泡和应用程序崩溃,但我不确定我是否正确显示了?

问题 2:

我还想说明的是,将任务状态更新为 Failed / In Progress / Completed 是在数据库上完成的,如果数据库不可用,它会在失败之前重试 10 次以连接。

是否有可能在每个更新活动的一侧有一个可重复的块来显示这一点?

问题 3:

我已经读到,在用例级别,我不应该显示任何实现细节。

我猜这意味着完全避免显示涉及数据库,并且不显示任何尝试/捕获逻辑,除非它影响用户的操作。我在这里做的完全错误吗?

重试逻辑是这个用例的要求,所以我的第一次尝试是包含它,因为它有助于编写测试用例并显示应用程序弹性。

图表:

enter image description here

解决方法

问题 1:

任何动作都可以被异常处理程序保护。这是图中的锯齿形线。另一端的操作是处理程序主体。我不能有传入或传出的控制或对象流。当异常处理程序完成时,受保护的操作会在其传出流上生成令牌,就好像它已正常结束一样。处理程序主体还应该有一个由异常输入的输入引脚。这样它就可以区分不同的异常,并且受保护的动作可以传递有关问题的信息。

结构化活动节点也是动作,可以由异常处理程序保护。在你的图中,我猜 Execute Task in Thread 就是这样一个动作。官方符号使用虚线边框和关键字«结构化»。

编辑:与@bruno 讨论后。 如果您想使用异常,您可能应该重新考虑如何对操作进行分组。如果其异常处理程序主体没有引发新的异常,则受保护的操作将始终成功完成。这意味着主体必须尝试从异常中恢复并可能重试受保护操作的行为(没有用于重试的 UML 元素,您必须步行进行)。如果这不起作用,处理程序主体必须重新引发异常(在确保一切正常之后,即类不变量仍然保持)。

这可能看起来有点过于复杂。为什么不简单地在动作 execute task 之后使用决策节点和守卫 [successfull]。我只会在用例流中使用 ReceiveSignalActions 来模拟来自系统外部的交互,这会影响用例流。

问题 2:

您可以创建一个活动 update task status 并从所有更新操作中调用它。状态本身可能是此调用操作的值引脚。在更新活动中,您可以显示一个循环,其中包含计算试验次数的决策和合并节点。但是,在描述中写下它可以重复 10 次可能会更容易。

这是对一组可重复的操作进行建模的方式。在同一张图中不可能做到这一点。然而,我将被允许扩展其中一个调用操作,以便在那里显示被调用的活动。您必须尝试一下,您的工具是否确实提供了这种可能性。有些工具只提供显示嵌入在另一个图表中的任何图表。这不是标准的,并且不能在工具之间互换。

问题 3:

我同意数据库和重试次数是技术细节,不是用例分析的重点。

不过,如果系统不仅显示错误消息,而且需要提供替代方法来实现预期结果,那可能会很有趣。例如,如果系统将提供将更新保存到 U 盘中。由于这需要与用户进行额外的交互并为系统带来新的功能需求,因此在用例中对其进行分析是有意义的。如果只是偶尔的技术问题,我不会涵盖它。

如果您需要一种在模型中捕获此需求的方法,我只需为文本需求添加一个用户定义的扩展。并非所有需求都来自用例。许多工具已经为此提供了自己的扩展。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?