具有两个不同前端的用例图

Use case diagram with two different front ends

我正在尝试使用两个不同的前端应用程序对用例图进行建模。我有一个基于 Web 的前端,其用例与平板电脑应用程序的前端不同。某些用例可能具有相同的名称但场景不同。

我的问题是,在图中为每个前端使用两个系统块是否是一种好方法,或者我应该将所有用例组合在一个系统块中吗?我怎样才能以正确清晰的 UML 方式对其建模?

不,那不好。用例旨在显示正在考虑的系统为其参与者提供的附加值。您正在查看实施细节。这就是界面的样子。但对于附加值而言,这完全无关紧要。您可以为用例创建不同的实现,以便您的协作将显示一个或另一个前端。这将是 class 设计的一部分,由需求 User may interact with frontend A and B.

控制

UML 用例及其边界

设置正确的边界是成功用例建模的关键。根据 UML 2.5.1 规范:

A UseCase is a kind of BehavioredClassifier that represents a declaration of a set of offered Behaviors. Each UseCase specifies some behavior that a subject can perform in collaboration with one or more Actors. UseCases define the offered Behaviors of the subject without reference to its internal structure.

重要的是系统(即用例中的“主体”)、参与者以及主体为其参与者提供的行为(正如 提醒我们的那样,应该为用户提供价值,即帮助实现用户的目标)。

用例关注用户

从用户的角度来看,预期的功能独立于前端。根据您的评论,今天:

the web frontend is targeting the actor admin with a use case: create a product. On the other side, the tablet front end is targeting the user to buy a product but is not made for the admin.

但是明天,您的管理员可能希望使用 PC 或智能手机来处理紧急任务。也许一些普通用户会期待语音界面而不是平板电脑。用例将帮助我们专注于这些需求,而不是我们解决它们的方式。

因此,原则上,您应该独立于前端对用例进行建模。你不应该显示前端和后端之间的分离。

如何分解系统

用例并不意味着进行功能分解或结构分解。这种区分最好在将系统分解为组件的组件图中以及在将组件映射到服务器和设备的部署图中执行。

如果您已经考虑到组件分解,并且您的组件是独立的,您可以考虑对子系统或组件的用例进行建模。这是有效的,因为 UML 规范告诉我们:

A subject of a UseCase could be a system or any other element that may have behavior, such as a Component or Class. Each UseCase specifies a unit of useful functionality that the subject provides to its users You can even model use-cases for a component, the actors being then the external actors and the other

但这会有帮助吗?您可以有一个用于管理应用程序的用例图,其中包含管理角色和一个用于后端的系统角色。但我不建议朝那个方向发展,除非该应用程序是一个具有自身附加值的丰富应用程序。如果该应用程序只是一个前端,那么您最终会得到非常冗余的用例图(即前端 UC 和后端 UC 将显示相同的用例)并丢失端到端与真实演员的关系(即后端 UC 将与对应于前端应用程序的系统演员相关联,但您会将直接 link 松散给真实演员)。

最终您可能会失去 UC 的主要优势,即对用户及其目标的关注。作为交换,您将有保持所有冗余模型同步的负担,但我不太清楚这里的优势。如果你想对每个选项有更多的争论,你也可以看看 here.