如何确定状态图中的状态?

How to determine the state in state diagram?

我的系统比图表中显示的功能更多,但我正在尝试根据场景进行操作。

我现在的场景是librarian/admin试图从数据库中删除一条图书记录,普通用户可以访问数据库,但是不能访问“删除图书记录”功能。

流程应该是这样的,用户登录系统,如果he/she输入的登录信息正确,将检查帐户的访问级别,并根据帐户类型授予不同级别的访问权限。在对账户及其访问级别进行身份验证后,将有几个功能模块可供选择,例如交易、搜索、数据库和报表模块。在用户 select 数据库模块之后,他们然后选择他们想要 see/modify 的记录,例如会员记录和书籍记录。然后在表格记录的所有图书记录中select要删除的图书记录,点击“删除”删除该图书记录,系统会提示确认信息,确保用户没有意外删除他们无意删除的记录。删除后,他们可以选择执行其他操作,但我试图结束该场景,所以我在它之后立即注销。

我其实很困惑什么可以被认为是“状态”。我知道这是某种条件或情况,但我在网上找到的大多数例子给我的感觉是它是一个动作。

下面的状态图传递正确吗?

叙述是关于动作的顺序流程。我用占位符替换了一些文本来证明这一点:

the user {action}, if {conditions} (...). After {another action} there will be (...). After {choice} {action} then {another choice} . Then {action} then {another action}, the system will {action}. After (...), {choice} but I trying to end the scenario so I put {action} right after it.

这种流程可以很容易地用 activity 图建模。

你的困惑和问题来自于你试图根据动作对状态图建模,试图描述与要执行的动作(例如Login account)或执行的动作对应的状态(例如Account authenticated) 并且只是在状态转换箭头上从一个到另一个的动作。你的做法是可以理解的。不幸的是,它会导致非常复杂的状态图,正如 qwerty_so 在评论中解释的那样,甚至不是有效的图。

如果你想继续那样做,你需要表达明确的状态,不要与动作混淆(例如,用户身份不明,用户身份验证,...),并保留状态标签过渡极短。但更好的方法是独立于 activity 图来识别更细粒度的状态。问问自己系统在进入一种状态时应该做什么,系统处于这种状态时应该做什么,以及当它离开这种状态时应该做什么。如果不清楚,请重新考虑这是否真的是一个好的州候选人。此外,更多地根据发生的事件而不是执行的操作来考虑状态转换。

首先,你必须知道你想要达到什么。在我看来,您想概述应用程序的功能。然后,您决定哪种图表最适合此 objective。用例图通常用于提供功能概述。 Activity 图表通常用于描述单个用例中的流程。

如果您想使用状态机图来概述应用程序的功能,您可以考虑为每个 'screen'(对话框、window、网页、不管你怎么称呼它)。然后,状态 X 表示屏幕 X 具有焦点的应用程序状态,即用户当前与屏幕 X 交互。从状态 X 到状态 Y 的转换表示导致屏幕 Y 出现的用户操作,而屏幕 X 消失或失去焦点。

例如,初始状态为“登录”。第二个状态是“主菜单”。从“登录”到“主菜单”的转换有动作“按确定[用户名和密码正确]”,这意味着用户按下确定按钮,系统验证用户名和密码。

对于非平凡的应用程序,这可能会导致非常复杂的状态转换图。在这种情况下,您可以将图拆分为多个图,或者改用用例图。