【UML】第7篇 用例图(2/3)

目录

一、什么是用例(Use Case)

二、用例的识别

2.1 识别用例的思考方法

2.2 识别用例的注意事项

三、用例的命名

四、用例规约

五、用例的粒度处理

错误1:粒度过细

错误2:把步骤当用例

错误3:把活动当用例

错误4:从系统角度命名用例


(续上篇)

【UML】第6篇 用例图(1/2)-CSDN博客

一、什么是用例(Use Case)

用例是参与者可以感受到的系统服务或功能单元。它定义了系统要实现的一个目标。用例只定义系统的一个行为,而不显示系统的内部结构。

用例最大的优点是站在用户的角度描述系统功能。

在图形上,用例使用实线椭圆来表示,并在椭圆内部或下部标注用例的名称。

用例是一种通过用户的使用场景来获取需求的技术,每个用例提供了一个或多个场景,该场景说明了系统是如何同最终用户或其它系统交互的,从而为用户带来可测量的、有价值的结果。从本质上来讲,用例是用户与计算机之间的一次典型交互作用。

 用例的主要目的包括:

  1. 捕获需求:通过用例,可以捕获功能性需求并明确系统的范围。
  2. 沟通:用例为项目团队、客户和其他干系人提供了一种共同的语言,用于讨论和理解系统行为。
  3. 驱动开发:用例可以作为设计和实现的基础,确保系统的开发满足用户需求。

在用例的描述中,通常包括以下内容:

  1. 用例名称:简短、明确地描述用例的目的或动作。
  2. 参与者:与用例交互的角色或系统。
  3. 前置条件:执行用例之前必须满足的条件。
  4. 后置条件:用例执行后系统的状态。
  5. 基本路径:描述用例的主要成功场景。
  6. 扩展路径:描述可能的异常或替代场景。

二、用例的识别

2.1 识别用例的思考方法

在软件开发过程中,有效地识别和定义用例是至关重要的,因为它确保了系统的功能性和用户需求得到满足。以下是六种识别用例的方法:

  1. 业务过程分析:深入了解相关的业务领域,通过业务流程图、活动图等,分析业务的流程、任务和交互,从中提取出与业务目标直接相关的用例。
  2. 用户角色分析:识别系统中的不同用户角色,理解每个角色的职责和目标。针对每个角色,思考他们与系统交互的目的和方式,从而确定用例。
  3. 场景分析:设想用户在使用系统时可能遇到的各种场景,包括正常流程、异常情况和紧急事件。每个场景都可以对应一个或多个用例。
  4. 功能分解:从高层次的系统功能开始,逐步分解为更具体的子功能,直到每个功能都可以明确地对应到一个或多个用例。
  5. 事件驱动分析:识别系统中可能触发动作或状态变化的事件。每个这样的事件都可能是一个用例的起点或终点。
  6. 现有系统/竞品分析:如果有现有的系统或竞品,可以通过分析其功能和用户交互来识别用例。这不仅可以节省时间,还可以确保不遗漏重要的功能点。

在识别用例时,需要注意避免过于技术化或细节化,保持用例的独立性和完整性,确保每个用例都能为用户带来明确的价值。此外,持续与用户和相关干系人沟通也是确保用例准确性的关键。

注意:识别中,记住首先要识别准确参与者,再沿着参与者的方向,去识别用例。

2.2 识别用例的注意事项

  • 要目标不要过程。识别出的用例应该反应出系统的目标,即“要做什么”,而非“怎么做”,就是说用例不是系统实现的细节;
  • 要关注用户,不要关注系统。从参与者的角度出发定义用例,而非系统的角度。
  • 要结果不要动作。用例应为参与者提供有价值的结果,而非动作的集合;
  • 要独立不要分解。避免陷入功能分解,步骤分解;
  • 每个参与者都应该有可执行的用例,每个用例都应关联至少一个参与者。
  • 要确定系统的边界和范围是关键。这有助于区分哪些功能属于系统内部,哪些功能属于外部环境。清晰的边界有助于避免用例的混淆和重叠。
  • 要简洁不要冗长。
  • 要考虑异常和错误情况。除了正常的操作流程外,还需要考虑异常和错误情况。这些场景可能包括系统故障、用户错误或外部事件。确保这些场景也被纳入用例考虑范围,有助于提高系统的健壮性和用户满意度。

三、用例的命名

用例的命名,要站在参与者的角度,描述要达到的目标,简单讲,就是:

(状语)动词+(定语)宾语

也就是动宾结构。例如上面的“借阅图书”。

四、用例规约

用例规约(Use Case Specification)是对用例的详细描述,它提供了关于用例如何运作的详细信息。一个完整的用例规约应该包括以下内容:

1.用例的标识与名称

  • 标识:每个用例都应该有一个唯一的标识符,以便于在项目中引用和追踪。
  • 名称:用例的名称应该简洁、明确,能够清晰地反映用例的主要功能或目的。

2.用例涉及到的参与者

  • 主要参与者:执行用例的主要角色或系统。
  • 次要参与者:与用例执行有关的其他角色或系统,但不直接执行用例。

3.用例的简要说明

  • 对用例的简短概述,描述用例的主要目的和功能。

4.前置条件

  • 执行用例之前必须满足的条件或约束。

5.后置条件

  • 用例执行完成后系统的状态或变化。

6.基本路径(主成功场景):

  • 描述用例在正常情况下如何执行的主要步骤序列。

7.扩展路径(备选和异常场景):

  • 描述用例可能遇到的其他场景,如备选流程、异常或错误情况。

8.特殊需求

  • 用例可能涉及的非功能性需求,如性能、安全性或合规性要求。

9.相关用例和依赖

  • 列出与此用例相关的其他用例,以及它们之间的关系(如包含、扩展或泛化)。

10.业务规则

  • 与用例相关的业务规则和政策,这些规则可能会影响用例的执行。

11.设计约束

  • 任何可能影响用例实现的设计约束或限制。

12.用户界面和交互设计(如果适用):

  • 描述用户界面的元素和交互方式,以及用户如何与系统进行交互。

13.验收标准

  • 定义如何确定用例是否已正确实现的标准或准则。

14.其他信息

  • 包括任何对理解或实现用例有用的附加信息,如参考文档、图表、草图等。

一个详细且完整的用例规约可以确保所有项目干系人对用例有清晰、一致的理解,并为开发人员提供实现用例所需的所有必要信息。

注:用例规约同时也是需求采集的有效思考方式,可以帮助我们避免遗漏重要的信息。

五、用例的粒度处理

 我们已经知道,用例的识别中,要避免同一个维度的用例,产生相互的包含关系,也就是“一致性”原则。说起来容易,做起来还是需要一些实践经验和技巧的。这里,就需要考虑用例的颗粒度划分。

用例粒度过细,则用例包含的系统功能就越多,反之越少。用例粒度过粗,不便于理解系统,粒度过细会使用例模型过于庞大,给设计带来困难。

下面总结几个用例识别过程中,常犯的几个错误。

错误1:粒度过细

比如把增删改查,这样的通用操作,作为4个用例来描述。会导致用例图晦涩冗余,覆盖重要的信息。直接归纳为一个用例“管理用户”即可。

错误2:把步骤当用例

比如下图:

这是4个注册用户的步骤,这就是上面我们说的,不要去分解实现功能。这里其实就只有一个用例,就是“注册用户”。

错误3:把活动当用例

 如下图:

这就是典型的把活动当用例,用户其实无法感知这些背后的过程,这也不是用例。

错误4:从系统角度命名用例

如下图:

左边就是从系统的角度去描述了,让人云里雾里,或者感觉对,但就是可读性差,别扭。

右侧的,明显就是从参与者(用户) 的角度出发,很清晰简洁。

(未完待续,关注我呦!)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/261566.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于RAP和ZIP之间的区别、关系和转换,看这篇就差不多了

RAR和ZIP文件都是流行的文件格式,允许你以压缩的方式存储文件。因此,文件占用的空间较小,并且可以在需要时快速传输。 当你有一些RAR文件已经被压缩时,由于各种原因,你可能仍然想将它们转换为ZIP文件。阅读本文了解如…

Axure RP 8 for Mac/win中文版:打造完美交互式原型设计体验

Axure RP 8,一款引领潮流的交互式原型设计工具,为设计师提供了无限的可能性,让他们能够创造出逼真的原型,从而更好地展示和测试他们的设计。 Axure RP 8拥有丰富的功能和工具,让设计师可以轻松地创建出复杂的交互式原…

hadoop集群的开启与关闭

背景 很久没完hadoopl,连怎么开启关闭都不会了qwq 1.进入安装hadoop的目录 我这里是已经进入了 2.开启集群 sbin/start-dfs.sh 3.关闭集群 sbin/stop-dfs.sh

尚硅谷 java 2023(基础语法)笔记

一、变量与运算符 1、HelloWorld的编写和执行 class HelloChina{public static void main(String[] args){System.out.println("hello,world!!你好,中国!");} } 总结: 1. Java程序编写和执行的过程: 步骤1&#xff1…

【java】java学习笔记

1. 快速入门 // Hello类 public class Hello {// main方法public static void main(String[] args) {System.out.println("hello world!");} } 在控制台输入以下命令,对.java文件(源文件)进行编译操作,生成Hello.clas…

提前预判和确认再做 现货白银投资的两种思路

在现货白银投资中,对于交易的步骤长期有两种看法。一种是提前预判行情并提前布局。另外一种是等待行情启动再做布局。这种两种方法要怎么选呢?笔者将从自己的角度出发,对这个问题进行讨论。 我们来看一下前一种的投资者,他们喜欢提…

个人或企业为啥要搭建及自己的知识付费平台才有前景?

在知识经济的时代,知识的传播和变现显得愈发重要。许多个人或企业选择将自己的知识、技能和经验通过课程的形式进行传播,以实现知识的价值。然而,在使用其他平台进行课程销售的过程中,他们常常面临着一些问题和挑战。 首先&#…

基于FPGA的简易BPSK和QPSK

1、框图 2、顶层 3、m_generator M序列的生成,输出速率为500Kbps 4、S2P是串并转换模块 将1bit的m序列转换到50M时钟下的2bit M序列数据(就有4个象限); 5、my_pll是生成256M的时钟作为载波,因为sin和cos信号的…

linux 性能优化-内存优化

CPU 管理一样,内存管理也是操作系统最核心的功能之一。内存主要用来存储系统和应 用程序的指令、数据、缓存等。 1.内存原理 1.1.内存映射 1.1.1.日常生活常说的内存是什么? 我的笔记本电脑内存就是 8GB 的这个内存其实是物理内存物理内存也称为主存&#xff0…

【分享】Word技巧之锁定部分区域

在编辑Word文档过程中,如果部分内容已经确定好,但又担心不小心做了改动,我们可以将这部分内容锁定起来,使之无法编辑更改,不清楚的小伙伴一起来看看如何设置吧。 首先,打开Word文档后,用鼠标选…

Opencv 入门三(视频滑动条窗口)

视频滑动条窗口源码如下&#xff1a; #include "opencv2\highgui\highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> #include <fstream> using namespace std; int g_slider_position 0; // 滑动条的位置 …

Vue3-24-组件-异步组件的介绍

什么是异步组件 个人理解 &#xff1a;异步组件 就是在用到这个组件的时候再进行加载&#xff0c;而不是 一上来就全部加载完成。即用即取的一个思想。异步组件中使用到的方法 &#xff1a; defineAsyncComponent () 方法 &#xff1a; 返回一个Promise 对象; 我们在开发过程中…

Java 线程管理中的锁

Monitor 概念 Java 对象头 Mark Word: Monitor (锁) Monitor 被翻译为监视器或管程 每个 Java 对象都可以关联一个 Monitor 对象&#xff0c;如果使用 synchronized 给对象上锁&#xff08;重量级&#xff09;之后&#xff0c;该对象头的Mark Word 中就被设置指向 Monitor 对…

uniapp整合echarts(目前性能最优、渲染最快方案)

本文echarts示例如上图,可扫码体验渲染速度及loading效果,下文附带本小程序uniapp相关代码 实现代码 <template><view class="source

python flask+vue实现前后端图片上传

python flaskvue实现前后端图片上传 vue代码如下&#xff1a; <template><div><input type"file" change"handleFileChange"/><button click"uploadFile">上传</button><br><img :src"imageUrl&…

深度相机—TOF、RGB双目、结构光原理及优势对比

烟台致瑞图像视觉技术2021-03-18 15:14 目前的深度相机根据其工作原理可以分为三种&#xff1a;TOF、RGB双目、结构光。 一、TOF TOF是Time of flight的简写&#xff0c;直译为飞行时间的意思。所谓飞行时间法3D成像&#xff0c;是通过给目标连续发送光脉冲&#xff0c;然后…

sourcetree 无效的源路径 细节提示:系统找不到指定的文件

工具–>选项–>git 直接下拉到底 点击红框&#xff0c;重新下载一个内嵌git就可以了 我感觉是因为改变了原有git安装路径的问题

2023 英特尔On技术创新大会直播 |探索视觉AI的无限可能

2023 英特尔On技术创新大会直播 | 探索视觉AI的无限可能 前言一未来的 AI&#xff1a;释放视觉 AI 真正潜力二AI技术突破、视觉Al挑战及前沿研究创新三全尺度视觉学习全尺度视觉学习示例1.GridConv 实现三维人体姿态估计更高准确率2.KW 预训练及迁移模型性能3.无数据增强稠密对…

大数据时代,如何基于机密虚拟化技术构建数据安全的“基石”

云布道师 2023 年 10 月 31 日-11 月 2 日&#xff0c;2023 云栖大会在中国杭州云栖小镇举行&#xff0c;阿里云弹性计算产品专家唐湘华、阿里云高级安全专家刘煜堃、蚂蚁集团高级技术专家肖俊贤三位嘉宾在【云服务器 & 计算服务】专场中共同带来题为《大数据时代&#xf…

使用MybatisPlus置空某些指定字段

当前的MybatisPlus默认会对空实体内的字段不置空&#xff0c;所以才引出了此种方法&#xff0c;很方便简单&#xff1a; 使用 Wrappers.lambdaUpdate方法就可以解决&#xff0c;方法的源码如下&#xff1a;条件为entity内的值&#xff0c;使用lambdaUpdate去set空的值 举个例子…