# 详解 UML 用例图画法 & 用例说明方式
一、概述
用例图是编写需求说明时经常用到的需求表达方式,用于向开发、测试同事说明需求中用户与系统功能单元之间的关系。但是很多刚接触用例的新人,在准备用例说明时并不清楚参与者与用例之间应该如何表达,网上教程五花八门,但感觉部分用例图不够规范,因此对用例图及用例说明梳理总结。
二、用例图
用例图的结构主要分为三个部分:**参与者**、**用例**、参与者与用例之间的**关系**,具体说明如下:
2.1 参与者
顾名思义,代表系统外部与系统发生交互的人或事物;需要注意,人指的是参与者与系统发生交互时的角色,不代指具体的人。
事物指的是某一个应用程序或者特殊进程;例如微信登录,通过跳转微信确认登录信息,微信对系统产生输入时,可以把微信作为参与者;而设定时间,强制退出账号时,时间这一特殊进程对系统产生输入,因此时间也可以作为参与者。
2.2 用例
2.2.1 用例的说明
用例是系统外部可见的一个功能单元,是某一个参与者在系统中做某件事从开始到结束的一系列活动的集合,以及结束时应该返回的可观测、有意义的结果,其中还包含可能的各种分支情况;具体用例在用例属性中说明。
2.2.2 用例的特征
用例都是动宾结构;例如:登录账号用例是相互独立的用例由参与者启动有可观测的执行结果
2.3 关系说明
角色与用例之间的关系主要包括**关联**、**归纳(泛化)**、**包含**、**拓展**和**依赖**。
2.3.1 关联关系
关系说明:表示参与者与用例之间的关系展示形式:以一条直线相连举例说明:用户登录系统图1 参与者与用例之间的关联关系
2.3.2 归纳(泛化)关系
关系说明:表示参与者与参与者之间、用例与用例之间的关系展示形式:用箭头表示,箭头从子参与者(子用例)指向父参与者(基础用例),一般父参与者(基础用例)相对子参与者(子用例)更为抽象举例说明:VIP会员和普通用户,归纳为用户;账号登录与微信登录,也可归纳为登录系统。
![](https://img.kancloud.cn/57/29/5729eb45ea5bd7feaef30b427dfee5fc_619x267.png)
图2 用户之间、用例之间的归纳关系
2.3.3 包含关系
关系说明:表示用例与用例之间的关系展示形式:用带有“包含”的箭头表示,箭头从基础用例指向包含用例举例说明:用户在账号登录过程中,包括输入账号、输入密码、确认登录等操作
![](https://img.kancloud.cn/d0/53/d0533c11449de34f013fa311ce8c595c_640x175.png)
图3 用例与用例之间的包含关系
2.3.4 拓展关系
关系说明:表示用例与用例之间的关系;用于拓展用例对基础用例的增强;拓展用例是在特定条件出现时,才会被执行的用例展示形式:用带有“拓展”的箭头表示,由拓展用例指向基础用例举例说明:用户在登录过程中忘记了密码
![](https://img.kancloud.cn/24/27/2427f41b045e1160b61eb4e63499e78c_585x164.png)
图4 用例与用例之间的拓展关系
2.3.5 依赖关系
关系说明:表示用例与用例之间的关系;一个用例在活动执行过程中,要依赖另一个用例的执行展现形式:以一条直线相连举例说明:用户要登录系统后,才能查看首页信息补充说明:A用例依赖B用例,A用例或使用B用例执行后的返回结果,或使用B用例执行部分功能。依赖关系类似于包含关系,都是在用例执行过程中,调用其它用例来完成部分任务。图5 用例与用例之间的依赖关系
2.3.6 注释
对于部分有特殊条件支撑的用例,也可以添加注释加以说明,例如VIP用户与普通用户登录系统后,可查看的菜单、数据甚至对系统的操作都是不一样的,此时可以在对应用例上加以注释,以强调此用例的特殊需求。
![](https://img.kancloud.cn/7e/2a/7e2a88db80471244e6037c091d6e7387_502x153.png)
图6 对用例进行注释
2.3.7 子系统
关系说明:用于强调某部分用例的强关联性,例如门户包含系统登录、首页信息展示等。
![](https://img.kancloud.cn/48/0e/480ec750e1629d2fab080267f190b1a4_640x322.png)
图7 子系统与用例之间的关系
2.3.8 各关系的对比
为了对包含、拓展和归纳(泛化)关系更好的区分,以图7为例说明各种关系之间的差别:
1)用例的使用条件
包含用例与归纳(泛化)的子用例,都没有限定的使用条件;例如用户登录系统时,直接选择输入账号密码登录系统,或者通过微信登录系统;而忘记密码是在用户账号登录时遗忘密码才会发生的用例,是有特定条件下才会发生的用例。
2)直接、间接提供服务
归纳(泛化)的子用例与拓展用例为参与者直接提供服务,例如用户登录系统时,会直接选择账号登录或微信登录,而账号登录或微信登录直接为参与者提供登录服务;而包含关系的用例,为参与者提供间接服务,例如账号登录时,需要输入账号、输入密码等,这些用例直接鼓舞于账号登录这个用例,间接为参与者提供登录服务。
3)其余说明
延伸用例与基础用例相互独立,两者之间不包含对方用例的内容。归纳(泛化)的子用例包含基础用例所有内容、基础用例与其他用例的关系以及基础用例与参与者之间的关系;例如账号登录是登录系统的子用例,但账号登录包含了登录系统的内容、登录系统与展示首页的关系以及登录系统与参与者的关系。
三、用例描述
完成了用例图,实际上工作只完成了一半,更重要的是对每个用例进行具体的说明;包括说明用例之间的关系、参与者身份角色以及用例从开始至结束过程中的条件及分支情况等;具体用例说明形式可参考下表:
![](https://img.kancloud.cn/0e/03/0e037ffa5798b52f5296beefcccf7fae_640x646.png)
用例的描述针对不同业务系统,描述的重点可能会存在差异,因此用例描述的重点在于清晰表达用例需求,不必拘泥于表达形式。
- 在线课程
- AI在线学习
- CSS3+H5在线学习
- JAVA基础课程
- SpringBoot要点学习视频课程
- 黑马在线课
- 前端技术
- CSS弹性布局Flex
- CSS网格布局
- CSS定位技术
- H5行内元素和块元素
- CSS3网页动态效果
- 前端动画(transition,animate)
- 网页动画Wow.js
- CSS3实现动态图效果
- JS绑定事件
- 常用JS脚本
- JS跳转页面常用的几种方法
- Js的封装与面向对象
- JS判断为空
- JS调试
- JQ给单选与多选框赋值
- JQuery事件
- Jquery
- 微信开发
- 前端框架
- 开发工具Hbuilder
- VUE
- VUE教程
- UniApp
- LayUI弹出层
- LayUI树
- 模态化封装-Zbra-前端框架
- 小程序开发
- 常用JS库
- web技术JQ懒加载
- 前端JS使用=》箭头的用法
- Linux
- YUM源配置
- PHP
- PHP五种为空
- PHP会话Session共享与还原会话
- PHP的Session机制
- 带你彻底搞懂Cookie、Session和Token
- TP5.0_Model操作
- Model的定义
- Model初始化
- Model新增
- Model更新
- Model分层
- Model数组访问
- 链式操作
- Join
- Laravel5.2说明手册
- ThinkPHP5手册
- TP面向对象继承
- PHP强制转换类型
- PHP解决高并发超发优惠券
- ThinkPHP实现Redis队列的订阅与消费
- 智慧工地
- 网络音柱
- 3.新建广播任务
- 2.获取文件和添加推流说明
- 01广播任务说明-音柱对接
- 海康威视
- 海康(设备端)创建人脸库
- 海康人脸比对布防
- 海康人脸比对SDK开发
- 海康萤石云API开放平台
- 人脸比对模块流程
- 人脸返回集调试
- 人脸抓拍代码示例
- NET_DVR_UploadFile_V40
- 海康人脸比对事件代码对比表
- 海康SDK网络错误代码对照表
- 注册回调函数接收设备报警
- 人脸参数NET_DVR_GetSTDConfig
- 人脸返回NET_VCA_FACESNAP_RESULT
- 上传人脸库NET_DVR_SEND_PARAM_IN
- 海康人脸比对模式配置
- NET_DVR_FACELIB_COND
- 海康威视SDK开发包
- bim开发
- 建筑专业领域知识
- 微软Project的MPP文件解析成甘特图
- Bim轻量化
- 甘特图进度纠偏
- BIM显示怎么看?如何在浏览器中显示BIM三维模型
- BIM5D怎么关联模型?BIM5D模型关联分析
- 行业软件数据库设计
- BIM5D功能说明- 流水段定义
- BIM5D功能说明-高级工程量查询
- BIM5D功能说明-清单工程量查询
- Revit相关操作
- 葛兰代尔操作手册
- 其它SDK
- 宇泛物联网操作系统 Ucon-SDK
- ffmpeg简单实现视频文件转推流
- 施工交底是什么
- 人机料法环全面解析
- 现场签证是什么
- 流水施工
- 物联网协议-Modbus、MQTT、WebSocket、Socket
- 物联网协议-传输通道
- Java
- API开发常用工具集
- 部分专有名词
- UML里边界类控制类和实体类
- extends和implements区别
- JAVA实体类的理解
- 若依
- Springboot调用外部RestFul接口
- Mybatis中主从表联查,collection和association的使用区别
- RabbitMQ
- CentOS 下 rpm包与 yum 安装与卸载
- Navicat全局调试执行Mysql的SQL日志
- Marpper中日期条件
- Java中日期笔记
- 报错调试
- 泛型List<T>
- EXCEL批量导入
- java字符串使用方法.split(“.“)不能正常分割
- 读取配置文件yml
- 若依ruoyi
- Idea打开若依项目
- SpringBoot快速上手
- SpringMVC向页面传递参数的5种方式
- shiro注解@RequiresPermissions多权限任选一参数用法
- JAVA要点
- SpringBoot内置了tomcat
- Spring @RequestMapping 注解使用技巧
- 若依拓展系统
- SpringBoot基础技术
- 反向API-什么是 Webhook?
- SDK 和 API 的区别是什么?
- yaml
- 微服务架构
- SpringCloud启动
- Jfinal框架热部署环境
- Tomcat搭建
- tomcate部署多个war包
- Nginx反向代理配置示例
- Linux查看端口号
- Nginx负载均衡
- JAVA环境配置
- Jar与War包区别
- JFinal实现文件上传以及解析
- Jfinal知识商城部署
- JAVA文件路径Linux和Win的写法
- 获取和设置HTML5视频当前播放时间的方法
- Spring Boot 整合 Spring Data Jpa
- Docker
- JAVA设计模式
- JAVA反射举例
- 什么是Bean
- Jar war打包部署
- intelij idea 和 eclipse 使用上的区别
- IntelliJ IDEA 升级Maven版本
- 单点登录应用技术 JWT
- JAVA基础中toString()的讲解
- JAVA发送http get/post请求,调用http接口、方法
- JAVA搞定API接口描述、日志记录
- Mybatis传多个参数如int 和String该怎么传
- JAVA收到字符串ids
- Lambda表达
- Sentinel介绍与使用(熔断降级、系统负载保护)
- Activiti7的基本原理和使用
- Feign原理 (图解)
- Java 8 Stream—List流高阶用法
- JAVA循环迭代器
- SpringBoot上传文件
- 从面向服务架构(SOA)学习:微服务时代应该借鉴的5条经验教训
- IDEA高频快捷键盘
- JAVA面试
- 面向接口编程new与newInstance实例化的区别
- Mybatis调试
- Maven查看最新依赖库的版本
- JAVA@Valid数据较验
- 日志写法
- RUOYI多模块部署
- ruoyi改造的商用项目
- Tomcat三种运行模式(BIO, NIO, APR)的比较和场景分析
- JAVA之HTTP请求
- 验证器
- 修饰符protected,public,private详解(Java)
- Java 反射(Reflect)详解
- 深入解析Java中反射中的invoke()方法
- 开发框架
- DAO层、Service层、Controller层、View层
- java三层架构持久层、业务层、表现层的理解
- spring常用注解及用法总结
- Maven入门总结
- 三大框架的运行流程、原理、核心技术详解
- Mybatis入门总结
- Swagger专题
- SpringBoot入门
- 从0开始创建Springboot项目
- Python
- JAVA实现webdrive自动化测试
- UI自动化测试
- Python自动化控制测试
- Python使用 Pywinauto自动发送微信消息
- Python最新抓取朋友圈
- Pywinauto测试Win程序
- 浅谈UI自动化测试
- pynput监听、操作键盘鼠标库
- PyAutoGUI——图形用户界面自动化
- Python 通过截图匹配原图中的位置(opencv)
- Python大图找小图的位置和信息
- App爬虫神器mitmproxy和mitmdump的使用
- Python爬取抖音音视频
- 如何爬取抖音小视频
- python微信三方库
- Itchat再见了
- 用Itchat库每日发送一句话
- WechatPCAPI库微信电脑端实现自动化回复
- 微信电脑端登陆_Python操作微信
- appium自动化
- appium手机自动化环境搭建
- appium自动化测试QQ发信息
- python采集多网站视频
- APPiUM朋友圈
- 在Linux上运行py程序
- dotNet
- 反射、委托、事件的概念区分
- Git操作
- fork
- 版本控制
- Ideal的Git操作
- IP打造营销
- 私域营销
- 广告创意
- 日常广告形式记录
- 直播号运营SOP
- SaaS市场
- 推广运营
- 网站诊断SEO院长
- 好的文章内容长啥样
- 谷歌SEO
- 谷歌搜索营销分析
- 谷歌异常阀值
- 谷歌名词
- 如何设置谷歌询盘转化
- 谷歌设置事件转换
- 谷歌GTM管理
- 谷歌分析事件设定
- 谷歌转换次数
- H1标签的布局使用
- 行业动向分析平台
- 设计UI
- 免费商用字体
- 免费商用设计字体
- PS设计和通道原理
- AI与PS如何选
- KANO模型与PSM模型
- 产品经理设计
- 如何快速树立项目需求
- 需求分析调研心态
- 项目需求分析步骤
- 如何通过需求清单梳理业务场景
- 实例分享产品需求文档
- 二清结算规则
- Axure9操作快捷键
- 文化沉淀与提升
- 职业明灯
- 职场能级三角逻辑学
- 霍金斯情绪能量图
- 一即一切,一切即一
- 幽默金句
- 人文锦句
- 刘礼涛生活教练对白
- 2022
- 生活喜剧
- 考研英语
- 大语文
- Linux系统运维
- Kubernetes+Promethues+Cloud Alert实践分享
- Mysql调试与SQL日志跟踪
- Nginx添加虚拟目录
- 为什么代码审查非常重要?
- 企业建立成功 DevOps 模式所需应对的5个挑战
- 什么是Prometheus
- 代码审查怎么做?
- K8S(Kubernetes)
- Win给指定盘扩容存储空间
- Llinux系统(Centos/Ubuntu/Debian)弹性云系统盘扩容方法
- Nginx模块OpenResty实现流量负载
- VPN服务
- Linux命令行
- Nginx反向代理配置
- K8S安装与docker
- Mysql常用操作
- 安全渗透
- 网络安全渗透
- 逆向解密网页-爬虫-Webpack逆向实战
- CTF-识别常用密文加密方式
- ERP
- 生产ERP
- 生产ERP调研究
- 如何理解敏捷需求管理的四个关键词
- 优秀可视化表单、流程开源设计器
- 质量检测
- 问题分析
- 采购流程
- ERP低代码平台
- 基于时间序列分析的趋势预测算法
- 架构师
- 数据库技术
- Mysql优化方法
- 主从分离技术
- 基于容器docker主从同步配置
- Mysql主从分离数据库配置技术
- 索引存储B树 B+树
- 数据库分区技术
- ORACLE物化视图
- 主从数据库热备份
- Win计划任务实现MYsql备份
- 分布式数据库落地应用
- Ngnix负载均衡
- ESB与微服务区别
- SOA、ESB、微服务的关系梳理
- 预示敏捷方法走偏的15个标志——第2部分
- JAVA中多线程的PV操作
- 软件集统集成学术论文
- .Net core ,EFCore
- donet6 技术栈
- 常用编码-base64到底是什么
- CDN
- CDN常用问题
- CDN诊断
- 2021年软件测试工具大全(自动化、接口、性能、安全、测试管理)
- 微服务测试
- BPMN三种视图
- 内网穿透调试本地web
- 什么是云原生
- 25大DevOps工具
- 云原生的12因素
- 哈夫曼编码
- 大数据
- 主流企业架构有哪些?Zachman、TOGAF、DoD AF有啥区别
- 架构师知识点列表
- 经典设计模式案例学习
- 模拟鸭子
- 什么是EDI
- 通信加密技术
- 物化视图
- AES加密
- ZooKeepe选举机制
- 数据库与数据仓库的区别
- 什么是工作流,flowable 与 Activiti对比
- Activiti工作流教程
- 十四五规划和2035计划
- 大数据专栏
- 测试专题
- Redis专题
- 内存数据库Redis
- 干货|搞懂「异地多活」,看这篇就够了
- 如何画架构图
- 系统分析师
- 为什么要用UML建模
- 需求工程
- 结构化分析方法
- 冒烟测试
- 软件测试
- UML工具-EA解模
- 去哪儿核心领域DEVOPS
- 用例图
- 如何从用例图过渡到类图
- UML
- 软件工程
- 人与机
- EnterpriseA 从用例到甘特图项目管理
- UML建模全过程目标对照表
- 抽象类和抽象接口有啥区别
- 易错题
- RD和NOSQL、NewSQL的数据同步
- 乐观锁悲观锁
- k8S搭建无状态服务PRod
- Ngnix+Keeplive实现负载均衡
- MQ消息队列的关键用法
- SpringCloud实现集群
- Redission基于Redis的分布式锁实现
- 函数与方法的区别
- OS进程的五态模型
- 网络核心概念
- 数据流图DFD
- 软考查询入口
- Eriksson建模
- 需求分析师的项目能力管理
- Https通信过程原理
- 工作流引擎
- 获取请求端真实IP和远程主机IP详解Remote Address
- 系统分析师常用表
- 开发方法
- 敏捷开发
- 互联网医院
- 互联网医院服务提供
- 什么是HIS、PACS、LIS、RIS
- 算法与数据结构
- 为什么要用红黑树
- 抖音电商开发
- ABP框架
- APR机器人自动化
- CMS技术点归档
- CMS补丁
- SwfUpload上传导致Session丢失问题
- 伪静态
- divCMS常用标签
- DEDECMS 标签
- 百度UE编辑器
- 博达组件
- 常用网站售后
- robots写法
- 网站Flash组件被拦截处理办法
- 阿里云解析类型
- GIT同步网站
- cms操作手册
- PHP-DIVCMS后台
- 同时使用国内cdn与cloudflare CDN服务
- CMS内容保存长文本不完整-之text有长度
- DIVCMS上传组件升级
- 知识商城
- Jfinal框架数据获取
- 部署说明
- 局域网本地透传(调用公众号)
- JAVA手写代码笔记
- EXCEL导入工具
- 微信网页授权
- 实现一手机多平台推流直播
- Logs
- 扬州博物馆
- 算法
- 内容推荐算法
- 数据结构基础指针的使用