用例图的基本概念及其使用方式(包含案例)

news2024/9/24 5:32:13

一、引言

        用例(Use Case),是软件工程或系统工程中对系统如何反应外界请求的描述,是一种通过用户的使用场景来获取需求的技术。此概念“用例”的提出者为Ivar Jacobson。每个用例提供了一个或多个场景,该场景说明了系统是如何和最终用户或其它系统互动,也就是谁可以用系统做什么,从而获得一个明确的业务目标。编写用例时要避免使用技术术语,而应该用最终用户或者领域专家的语言。用例一般是由软件开发者和最终用户共同创作的。

        用例图(Use Case Diagram),描述用例的图形。用例图包含一组用例。每一用例用椭圆表示,放置在矩形框中;矩形框表示整个系统。矩形框外画如图所示的小人,表示参与者。参与者不一定是人,可以是其他软件、硬件等等。某一参与者与某一用例用线连起来,表示该参与者和该用例有交互。

        之所以写这一份博客是因为网上有许多人都在博客中总结,但是,总结得并不是十分到位,同时也没有达成统一的标准(例如,参与者与用例之间的关系,一些博客用直线加箭头描述,而另一些箭头用直线描述,其实这是两种规范,前者是Alistair Cockburn风格、在书籍Writing Effective Use Cases中被使用,而后者是原始的风格。所以本篇博客浅浅记录一下基本的概念,以及正确的使用案例,方便自己日后的开发工作更高效、正确地开展。

二、用例图的基本概念及其正确使用方式

图标描述说明
软件系统

用于框选用例,也有些为了方便没画的,因为用例实在太多。比较规范的画法是需要加上。

参与者参与者名称一般写在小人下面。
参与者与用例的关系有些没有箭头,有些有箭头(指向用例),但都是正确的。
用例用例名称可写在椭圆内或椭圆下面。
用例扩展关系虚直线+箭头+<<extend>>
用例包含关系虚直线+箭头+<<include>>
用例泛化关系直线+小等腰三角形

三、用例图案例

        1、普通用例图:酒店管理系统。这里简单地说明一下,参与者一般不只有一个。一个用例可以理解为一个功能需求。这上面的图存在两个参与者,分别是Customer(顾客)和Hotel Counter Staff(酒店柜台员工);存在三个功能,分别是Reserve Room(预订房间)、Check In Customer(办理入住)和Check Out Customer(结账)。

        2、扩展关系。扩展用例可以在原有用例中添加新的行为。用例技术能够简洁地把新的行为描述从基用例中完全独立出来,因而,基用例不会受到新行为细讲的影响。例如,下面给出了一个简单的扩展用例,

        这里对上面的这个用例图进行一下说明。关系关系,一定是某某和某某之间的二者关系。而这里值得注意的是,Handle Waiting List是Reserve Room的扩展(同时注意看箭头,谁箭头指出去,谁就是扩展)。其中,执行的时候会在Reserve Room里面的某个步骤(更细粒度地看)调用Handle Waiting List,然后当Handle Waiting List执行完毕时,整体也就执行完毕了。大概的执行步骤为:

        3、包含关系。包含关系是最好理解的。两个用例A和B,要么是A包含B,或者是B包含A,二者的区别在于谁指向谁。比如下面这个例子,

        这个例子是Reserve Room和Check In Customer这两个用例同时包含Check Room Details。这里请注意一下箭头的方向哈。然后包含关系的执行步骤大概是这样子的,

        大概绕了一个圈。(上面这个图有个小error,就是Details没带s,书本印刷错误)

        4、泛化关系。用例泛化是对用例模型结构化的另一种技术。它与类的泛化含义相同,意味着用例之间存在“is-a-kind-of”的关系(子用例is-a-kind-of父用例)。例如,

四、总结

        在大学读书的时候我们平时画的都是简单、普通的用例图,时常没有理解拓展关系和包含关系之间的联系和区别。现在再重新温习了用例图的知识,有一种温故知新的感觉。扩展关系看上去像一个程序分支,而包含关系看上去像一个函数调用另一个函数。我感觉如果能够将用例图画好,很多软件需求的业务逻辑都可以捋得很顺。希望博客能够帮助到你,不懂的地方咱们评论区见。

        备注:该博客参考了书籍《基于用例的面向方面软件开发》,不懂的同学也可以自行下载、阅读。

五、参考资料

        1、维基百科

        2、百度百科

        3、Ivar Jacobson、Pan-Wei Ng,基于用例的面向方面软件开发(徐锋译)

        4、用例图中include和extend的含义

        5、用例图中的各种关系

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++(8.21)c++初步

1.斐波那契&#xff1a; #include <iostream> #include<iomanip>using namespace std;int main() {cout << "Hello World!" << endl;int a[10];for(int i0;i<10;i){if(0i||1i){a[i]1;}elsea[i]a[i-1]a[i-2];cout <<setw(4) <&l…

微信扫码报修系统哪家好?的修报修管理系统有什么优势?

“的修app”是一款基于互联网和云计算技术的在线报修系统&#xff0c;主要服务于物业管理公司、企业、机关单位、学校、医院等机构和组织。它提供了一系列报修管理服务&#xff0c;包括故障报修、设备管理、巡检管理、耗材管理等功能。用户只需用手机扫一下二维码&#xff0c;即…

Linux 多线程中执行fork的情况

一、普通多线程中执行fork的情况 1.多线程中没有执行fork的情况 代码如下&#xff1a; #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<pthread.h> #include<string.h> #include<semaphore.h>void*fun(void* arg) …

PSP - 基于开源框架 OpenFold Multimer 蛋白质复合物的结构预测与BugFix

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132410296 AlphaFold2-Multimer 是一个基于 AlphaFold2 的神经网络模型&#xff0c;可以预测多链蛋白复合物的结构。该模型在训练和推理时都可以处…

Lnton羚通算法算力云平台如何在OpenCV-Python中使用cvui库创建复选框

CVUI 之 复选框 Python import numpy as np import cv2 import cvuidef checkbox_test():WINDOW_NAME Checkbox-Testchecked [False]# 创建画布frame np.zeros((300, 400, 3), np.uint8)# 初始化窗口cvui.init(WINDOW_NAME)while True:# 画布填色frame[:] (100, 200, 100…

WEB APIs day5

一、window对象 BOM属于window对象 1.BOM&#xff08;浏览器对象模型&#xff09; bom里面包含着dom,只不过bom我们平时用得比较少&#xff0c;我们经常使用的是dom操作&#xff0c;因为我们页面中的这些标签都是在dom中取的&#xff0c;所以我们操作dom多一点。 window对象…

大数据、人工智能、机器学习、深度学习关系联系前言

1.大数据和人工智能关系 2.机器学习、深度学习、人工智能关系 3.监督学习、无监督学习、半监督学习、强化学习、迁移学习关系 4.机器学习具体内容 一、大数据和人工智能之间存在相促进并相互支持&#xff0c;推动了科技发展 1.数据驱动的人工智能&#xff1a;人工智能系统需要…

【是C++,不是C艹】 手把手带你实现Date类(附源码)

&#x1f49e;&#x1f49e;欢迎来到 Claffic 的博客&#x1f49e;&#x1f49e; &#x1f449; 专栏&#xff1a;《是C&#xff0c;不是C艹》&#x1f448; 前言&#xff1a; 恍惚间&#xff0c;已经两个月没更新了 &#xff08;&#xff1b;д&#xff40;&#xff09;ゞ 我忏…

K8s+Docker+KubeSphere+DevOps笔记

K8sDockerKubeSphereDevOps 前言一、阿里云服务器开通二、docker基本概念1.一次构建、到处运行2、docker基础命令操作3、docker进阶操作1.部署redis中间件2.打包docker镜像 三、kubernetes 大规模容器编排系统1、基础概念&#xff1a;1、服务发现和负载均衡2、存储编排3、自动部…

基于springboot+vue的流动人口登记系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

因果推断(五)基于谷歌框架Causal Impact的因果推断

因果推断&#xff08;五&#xff09;基于谷歌框架Causal Impact的因果推断 除了传统的因果推断外&#xff0c;还有一些机器学习框架可以使用&#xff0c;本文介绍来自谷歌框架的Causal Impact。该方法基于合成控制法的原理&#xff0c;利用多个对照组数据来构建贝叶斯结构时间…

javaScript:常用的js字符串方法

目录 一.前言 二.字符串方法 1.charAt(num) 获取字符串指定位置上的字符 解释 示例 注意 2.length属性 获取字符串长度 解释 示例讲解 3.substring()字符串的截取 解释 特点 示例 4.slice()字符串截取 解释 特点 示例 应用 单行文本加省略号 字符串劫…

Dockerfile制作镜像与搭建LAMP环境

1、编写Dockerfile制作Web应用系统nginx镜像&#xff0c;生成镜像nginx:v1.1&#xff0c;并推送其到私有仓库。 具体要求如下&#xff1a; &#xff08;1&#xff09;基于centos基础镜像&#xff1b; &#xff08;2&#xff09;指定作者信息&#xff1b; &#xff08;3&#x…

卷积神经网络——中篇【深度学习】【PyTorch】

文章目录 5、卷积神经网络5.5、经典卷积神经网络&#xff08;LeNet&#xff09;5.5.1、理论部分5.5.2、代码实现 5.6、深度卷积神经网络&#xff08;AlexNet&#xff09;5.6.1、理论部分5.6.2、代码实现 5.7、使用块的网络&#xff08;VGG&#xff09;5.7.1、理论部分5.7.2、代…

从浅到深研究矩阵的特征值、特征向量

本篇特征值、特征向量笔记来源于MIT线性代数课程。 矩阵特征值与特征向量 ✨引言✨什么是特征向量呢&#xff1f;✨表示✨从特例看特征值与特征向量✨如何求解方程▶️ 思路&#xff1a;✨对称矩阵例子&#xff1a;✨对比观察两个矩阵及它们的特征值及特征向量&#xff1a;✨旋…

C语言小白急救 整型与浮点型在内存中的存储(理论知识+代码示例)

文章目录 一、有无符号整型的存储1.整形家族2.整形在内存中的存储3.大小端介绍4.signed 与 unsigned 类型存储例子&#xff1a;1.2.3.4.5. 二、浮点型的存储1.浮点型家族2.浮点型的存储例子&#xff1a; 一、有无符号整型的存储 1.整形家族 字符在内存中存储的是字符的ASCII码…

Django视图-HttpRequest请求对象和HttpResponse响应对象

文章目录 HttpRequestHttpResponse实践request对象的属性和方法响应 def index(request): 这个request其实就是内部已经封装好的Http请求HttpRequest&#xff0c;它是一个请求对象Django中的视图主要用来接受Web请求&#xff0c;并做出响应。 视图的本质就是一个Python中的函数…

解决Windows下的docker desktop无法启动问题

以管理员权限运行cmd 报错&#xff1a; docker: error during connect: Post http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.40/containers/create: open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuration on Windows,…

【image captioning】自用数据集BUTD特征提取流程

自用数据集BUTD特征提取流程 作者:安静到无声 个人主页 目录 自用数据集BUTD特征提取流程源数据生成推荐专栏源数据生成 基于程序bottom-up-attention.pytorch可以提取图片的BUTD特征,具体方法详见:MILVLG/bottom-up-attention.pytorch: A PyTorch reimplementation of bo…

2023年国赛数学建模思路 - 案例:粒子群算法

文章目录 1 什么是粒子群算法&#xff1f;2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法&#xff1f; 粒子群算法&#xff08;Pa…