[图解]用例规约之扩展路径

1
00:00:01,710 --> 00:00:03,670
基本路径写完之后
2
00:00:04,690 --> 00:00:07,270
接下来就是扩展路径
3
00:00:08,620 --> 00:00:14,000
扩展路径就是系统要处理的意外和分支
4
00:00:14,010 --> 00:00:19,710
系统要处理的
5
00:00:20,970 --> 00:00:22,370
不处理的不算的
6
00:00:23,100 --> 00:00:28,700
也就是说,扩展路径也是系统的需求之一
7
00:00:29,860 --> 00:00:31,980
它是系统不得不这样做的
8
00:00:35,890 --> 00:00:37,500
那么扩展路径
9
00:00:38,860 --> 00:00:43,060
经常在什么地方出现,这么几个地方
1
00:00:02,200 --> 00:00:04,160
第一个是执行者的选择
2
00:00:05,680 --> 00:00:07,310
当执行者作出判断
3
00:00:07,320 --> 00:00:09,190
说有几条路要走
4
00:00:09,560 --> 00:00:11,440
那么这个判断由他来做的时候
5
00:00:12,450 --> 00:00:16,560
那么这个时候他到底选哪条路
6
00:00:17,280 --> 00:00:18,680
系统是没法判断的
7
00:00:19,340 --> 00:00:21,490
完全由执行者主动来选择
8
00:00:22,820 --> 00:00:23,700
这是第一种
9
00:00:25,440 --> 00:00:26,490
但这种要慎用
10
00:00:28,690 --> 00:00:30,080
因为很容易变成什么
11
00:00:31,090 --> 00:00:32,730
所有的可选项都是扩展了
12
00:00:32,940 --> 00:00:34,960
我们后面书上有讲
13
00:00:34,970 --> 00:00:36,760
后面幻灯片也会提到
14
00:00:37,070 --> 00:00:38,910
不过一会时间不够的话
15
00:00:38,920 --> 00:00:40,630
可能未必有时间讲
16
00:00:42,880 --> 00:00:43,990
大家可以自己看书
17
00:00:45,310 --> 00:00:49,880
很容易犯 把选项当成扩展点 的这种情况
18
00:00:51,890 --> 00:00:55,650
第二个,系统验证,这个一般都会有了
19
00:00:56,180 --> 00:00:59,240
因为你验证的目的是干嘛
20
00:00:59,250 --> 00:01:01,070
你验证肯定有结果
21
00:01:01,080 --> 00:01:03,190
结果必然有成功有失败
22
00:01:04,700 --> 00:01:05,820
那失败了怎么办呢
23
00:01:07,770 --> 00:01:10,010
你肯定得做一些不一样的事情
24
00:01:10,140 --> 00:01:10,570
25
00:01:10,970 --> 00:01:13,680
如果失败跟成功是一样的
26
00:01:15,640 --> 00:01:19,360
你验证它干什么,白搞嘛
27
00:01:21,170 --> 00:01:23,640
这是第二种
28
00:01:24,590 --> 00:01:28,420
第三种,就是步骤的失败
29
00:01:31,360 --> 00:01:32,970
而且是系统要处理的
30
00:01:35,990 --> 00:01:37,860
那么这里面我们要注意了
31
00:01:39,390 --> 00:01:41,620
系统能感知而且要处理的
32
00:01:44,380 --> 00:01:47,580
什么叫要处理的失败,就是系统能处理
33
00:01:48,690 --> 00:01:51,260
而且乐意处理的
34
00:01:52,370 --> 00:01:53,560
感兴趣去处理的
35
00:01:54,710 --> 00:01:58,750
比如说,我们做一个电子商务系统
36
00:02:00,770 --> 00:02:04,010
然后,正在下单过程中
37
00:02:07,600 --> 00:02:09,440
系统要保存订单
38
00:02:09,450 --> 00:02:11,240
有一句,系统保存订单
39
00:02:14,540 --> 00:02:15,810
保存订单失败
40
00:02:17,010 --> 00:02:18,010
算不算扩展
41
00:02:20,670 --> 00:02:21,880
保存订单会失败吗
42
00:02:23,070 --> 00:02:23,550
会的
43
00:02:25,090 --> 00:02:25,650
怎么失败
44
00:02:27,420 --> 00:02:28,680
数据库坏了
45
00:02:29,340 --> 00:02:31,330
网络断了,等等
46
00:02:31,620 --> 00:02:32,650
代码写错了
47
00:02:34,540 --> 00:02:35,780
但是这个算不算扩展
48
00:02:36,270 --> 00:02:37,320
不算,为什么
49
00:02:39,150 --> 00:02:41,150
因为这个跟需求没有关系
50
00:02:45,320 --> 00:02:48,270
我们在讲愿景的时候
51
00:02:48,280 --> 00:02:51,980
我们说过,我们做需求的时候
52
00:02:53,340 --> 00:02:54,890
要把我们的系统看作是什么
53
00:02:56,700 --> 00:02:58,020
由外星人来做的
54
00:02:59,760 --> 00:03:02,020
外星人的网络会不会出问题
55
00:03:02,810 --> 00:03:06,380
外星人的硬盘会不会出问题
56
00:03:07,070 --> 00:03:08,510
外星人的代码会不会写错
57
00:03:09,390 --> 00:03:10,050
不会的
58
00:03:13,380 --> 00:03:18,590
所以这种由于程序员的能力不足
59
00:03:19,410 --> 00:03:20,600
带来的这种错误
60
00:03:21,620 --> 00:03:22,660
它不是扩展
61
00:03:24,260 --> 00:03:25,040
扩展是什么
62
00:03:25,590 --> 00:03:29,700
即使这个系统的代码是外星人写的
63
00:03:31,390 --> 00:03:33,540
而且这个系统是外星人部署的
64
00:03:36,270 --> 00:03:39,160
依然逃脱不了这种意外
65
00:03:42,010 --> 00:03:44,460
就拿我们前面讲取款机这个来说
66
00:03:46,480 --> 00:03:48,240
取款机,你插卡输密码
67
00:03:49,380 --> 00:03:50,130
密码不对
68
00:03:51,540 --> 00:03:53,190
那就要拒绝
69
00:03:54,440 --> 00:03:55,660
这可以看做一个扩展
70
00:03:58,050 --> 00:04:01,090
假设取款机的代码是外星人写的
71
00:04:01,880 --> 00:04:04,590
按照我们需求规约去写代码
72
00:04:07,580 --> 00:04:09,390
那么这个意外能避免吗
73
00:04:09,630 --> 00:04:10,010
不能
74
00:04:12,100 --> 00:04:12,510
75
00:04:12,970 --> 00:04:14,260
因为你根本不知道
76
00:04:14,270 --> 00:04:18,080
我外面那个储户要输什么密码
77
00:04:20,410 --> 00:04:23,100
外星人写的只是取款机的代码
78
00:04:23,110 --> 00:04:25,460
他并没有写储户的代码
79
00:04:28,620 --> 00:04:30,090
他管不着外面的储户
80
00:04:31,740 --> 00:04:35,130
这属于他控制的边界范围之外
81
00:04:36,410 --> 00:04:37,830
那么这个就是扩展
82
00:04:40,010 --> 00:04:41,110
因为这属于什么
83
00:04:43,080 --> 00:04:44,640
就算你代码一点错都没有
84
00:04:44,650 --> 00:04:46,240
什么网络什么都通畅的
85
00:04:46,610 --> 00:04:49,380
这样的意外依然不能避免
86
00:04:49,860 --> 00:04:52,720
而且这个意外,系统要处理的
87
00:04:54,110 --> 00:04:54,990
其他都不是的
88
00:04:57,070 --> 00:04:59,130
刚才我们说那种什么网络断了
89
00:05:00,110 --> 00:05:02,150
数据库设计出问题了
90
00:05:03,280 --> 00:05:04,940
程序员编码编错了
91
00:05:06,560 --> 00:05:07,670
像这种问题怎么样
92
00:05:08,670 --> 00:05:13,230
它跟特定的系统,跟特定领域是没有关系的
93
00:05:15,020 --> 00:05:17,570
所有的系统,所有的用例
94
00:05:18,040 --> 00:05:20,080
只要你这个程序员能力有问题
95
00:05:20,090 --> 00:05:21,480
都会出这种问题
96
00:05:21,490 --> 00:05:22,500
97
00:05:27,940 --> 00:05:29,250
步骤失败这个,要注意
98
00:05:30,030 --> 00:05:32,070
必须是需求的这种失败
99
00:05:32,080 --> 00:05:37,310
而不是说我们设计人员能力不足带来的
100
00:05:38,430 --> 00:05:41,100
但我们很多人喜欢把这种当成需求
101
00:05:41,110 --> 00:05:41,620
为什么
102
00:05:42,700 --> 00:05:44,560
这样的话,需求规约就丰满了
103
00:05:45,370 --> 00:05:46,450
他每个用例都写
104
00:05:46,460 --> 00:05:47,770
每一步都写失败
105
00:05:48,640 --> 00:05:49,390
保存,保存失败
106
00:05:50,310 --> 00:05:53,070
显示什么,也显示失败,为什么
107
00:05:54,060 --> 00:05:54,980
为什么会显示失败
108
00:05:56,560 --> 00:05:58,450
网页切错了
109
00:05:58,460 --> 00:06:00,760
我前端程序员能力不足
110
00:06:01,800 --> 00:06:02,750
网页写错了
111
00:06:03,830 --> 00:06:05,790
但是这跟需求没关系的
112
00:06:06,820 --> 00:06:07,720
这个要注意
相关文章:
[图解]用例规约之扩展路径
1 00:00:01,710 --> 00:00:03,670 基本路径写完之后 2 00:00:04,690 --> 00:00:07,270 接下来就是扩展路径 3 00:00:08,620 --> 00:00:14,000 扩展路径就是系统要处理的意外和分支 4 00:00:14,010 --> 00:00:19,710 系统要处理的 5 00:00:20,970 --> 00:00:…...
学习记录第二十八天
有名管道(FIFO) 在Linux系统中,有名管道是一种特殊类型的文件,它允许不相关的进程之间进行通信。有名管道在文件系统中有一个具体的路径和名称,因此它们可以被多个进程共同访问。有名管道的特点包括持久性、多进程访问…...
SpringBoot的事务/调度/缓存/邮件发送和一些Spring知识点总结
目录 1、SpringBoot的事务管理 2、SpringBoot的异步任务 3、SpringBoot定时任务调度 4、SpringBoot整合Mail发送邮件 5、Spring框架中的Bean的作用域 6、Spring框架中的Bean的线程安全 7、 Spring框架中的Bean生命周期 8、Spring框架如何解决循环依赖? 9、…...
透明加密技术
透明加密技术,也被称为透明数据加密(Transparent Data Encryption, TDE),是一种加密方法,它允许数据在存储时自动加密和解密,而不需要用户进行任何手动操作。透明加密技术主要应用于数据库、文件系统和磁盘…...
深入理解Faiss:高效向量检索的利器
近年来,随着人工智能和机器学习技术的飞速发展,向量检索技术变得越来越重要。无论是在推荐系统、图像搜索还是自然语言处理等领域,向量检索都扮演着至关重要的角色。而在众多向量检索库中,Faiss(Facebook AI Similarit…...
RK3576 芯片介绍
RK3576 芯片介绍 RK3576瑞芯微第二代8nm高性能AIOT平台,它集成了独立的6TOPS(Tera Operations Per Second,每秒万亿次操作)NPU(神经网络处理单元),用于处理人工智能相关的任务。此外࿰…...
Python模块篇(五)
模块 模块与包模块的导入与使用标准库的常用模块第三方库的安装与使用(如:pip工具) 模块与包 模块是一个包含 Python 代码的文件,通常以 .py 作为扩展名。一个模块可以包含函数、类、变量,以及可执行的代码段。模块的…...
西安旅游系统--论文pf
TOC springboot383西安旅游系统--论文pf 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现,改变了几千年以来人们的生活,不仅仅是生活物资的丰富,还有精神层次的丰富。在互联网诞生之前,地域位置往往是人们思想上不可跨域的鸿…...
分享一个思路,使用插桩技术解决慢查询测试问题
前段时间,我负责测试的系统在生产环境运行出现问题。该系统对于响应时间要求较高,问题发生的时候并发很高,出现大量请求超时,超时请求比例随时间推迟越来越高,最后几乎全部请求都失败。滚动重启了所有进程后࿰…...
【STM32项目】在FreeRtos背景下的实战项目的实现过程(二)
个人主页~ 实战项目的实现过程(一)~ 实战项目的实现过程 二、初步了解各个外设硬件1、OLED模块2、GPS模块3、MPU6050模块4、超声测距模块5、温度测控模块6、语音模块7、SIM模块8、按键模块 三、查阅资料1、查看手册2、查找例程 四、研究硬件功能1、OLED…...
javaer快速入门 goweb框架 gin
gin 入门 前置条件 安装环境 配置代理 # 配置 GOPROXY 环境变量,以下三选一# 1. 七牛 CDN go env -w GOPROXYhttps://goproxy.cn,direct# 2. 阿里云 go env -w GOPROXYhttps://mirrors.aliyun.com/goproxy/,direct# 3. 官方 go env -w GOPROXYhttps://goproxy.…...
SQL - 数据类型
字符串类型 char(10),存储固定长度字符串 varchar(255),存储可变长度字符串 mediumtext,中文本,对于存储JSON对象、SCV字符串很好使 longtext,长文本,可以很好地存储教本或许多年地日志文件 tinytext&#…...
进程相关知识
进程和程序的区别 程序 程序是静态的,是存储在硬盘、SSD等存储介质中的一个文件,通常由源代码(如 .c 文件)编译生成的二进制可执行文件(如 a.out)。程序包含了指令和数据,但在未被执行时&#…...
萝卜快跑和端到端的自动驾驶(1)
先看一篇论文 2311.18636 (arxiv.org) 这篇论文里有一个非常好的图 比较了一下模块化任务(级联任务)和端到端自动驾驶的区别 首先什么叫模块化任务(级联) 如上图所示,左边的方块中的子方块,是展示了自动驾驶获取数据的途径,这里包括&…...
通信原理学习笔记
一个手机通话需要经过下面三个网络 类别接入网(Access Network)承载网(Transport Network)核心网(Core Network)定义连接终端用户与电信网络的部分。在接入网和核心网之间传输数据的网络。处理、交换和管理…...
系统编程---day4
1. 链接文件 命令行: ln -s 文件名 softlink 1.1 symlink int symlink(const char *oldpath, const char *newpath); 功能:创建一个链接向oldpath文件的新符号链接文件 参数:oldpath:被链接向的文件的路径 newpath:新符号链接文件 返回值:成功返回0,失败返回…...
01:电容的什么,各类电容的优缺点
1.电容是什么? 电容是由两块不连通的导体,已经中间的不导电材料组成 电容结构: 1.2电容的容量计算公式 C ε s d \displaystyle\frac{εs}{d} dεs 1.3常见电容的种类 1.4各类电容的特点...
Android+Jacoco+code-diff全量、增量覆盖率生成实战
背景 主要是记录下Android项目使用jacoco生成代码覆盖率的实战流程,目前已完成全量覆盖方案,仅使用jacoco就能实现; 由于我们的Android端是使用Java和kotlin语言,目前增量的方案code-diff仅针对Java代码,卡在kotlin文件的分析&am…...
乌龟对对碰在线版
爆肝两天使用vue开发了一个在线版的乌龟对对碰小游戏之幸运对对碰。没有找到合适的乌龟素材,现在使用小兔子代替。 体验地址:幸运对对碰 | 乌龟对对碰小游戏 之前的python版本的乌龟对对碰:写文章-CSDN博客 乌龟对对碰-幸运对对碰...
如何更改select option边框颜色和选中的颜色
<!doctype html> <html> <head> <meta charset"utf-8"> <title>如何更改select option边框颜色和选中的颜色</title> </head><style>ul{border: 1px solid #000000;width: 500px;height: auto;background-color: aq…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
