[图解]用例规约之扩展路径
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…...

6. 数据结构—串的匹配算法
1.BF算法(暴力算法) //模式匹配(暴力算法) int Index(SString S,SString T){int i1,j1;while(i<S.length&&j<T.length){if(S[i]T[i]){i;j;}else{ii-j2; //最开始匹配的位置的后一个j1; //从头匹配 }}if(j>T.length)return i-T.length;return return 0…...

九大服务架构性能优化方式
来源:九大服务架构性能优化方式 目录 性能优化九大方式: 缓存 使用什么样的缓存 缓存常见问题 缓存淘汰 缓存数据一致性 并行化处理 批量化处理 数据压缩合并 无锁化 顺序写 分片化 避免请求 池化 异步处理 总结 最近做了一些服务性能优…...

【RabbitMQ】 相关概念 + 工作模式
本文将介绍一些MQ中常见的概念,同时也会简单实现一下RabbitMQ的工作流程。 MQ概念 Message Queue消息队列。是用来存储消息的队列,多用于分布式系统之间的通信。 系统间调用通常有:同步通信和异步通信。MQ就是在异步通信的时候使用的。 同…...

嵌入式学习 ——(Linux高级编程——进程)
目录 一、进程的含义 二、进程和程序的区别 三、进程的作用 四、进程的状态 五、进程的调度与上下文切换 六、查询进程相关命令 七、fork()函数 八、getpid()和getppid()函数 九、面试题解析: 十、应用场合及测试 一、进程的含义 进程指正在运行的程序&a…...

C++练习备忘录
1. 保留两位小数输出格式 #include <iostream> #include <iomanip> using namespace std; int main() {double S 0;S (15 25) * 20 / 2;cout << fixed << setprecision(2) << S;return 0; }2. 设置输出宽度 #include <iostream> #inclu…...

改善工作流
快捷键管理器 打开Editor->Shortcuts查看和编辑Unity中的快捷键 示例 ShiftSpace 窗口最大化 P 选择预制体 进入预制体编辑模式 单一检视窗口 选择组件,选择Properties打开一个窗口,显示组件信息;切换对象,窗口信息不会改变…...

迭代器失效
一、什么是迭代器失效 迭代器的主要作用就是让算法能够不用关心底层数据结构,其底层实际就是一个指针,或者是对指针进行了封装,比如:vector的迭代器就是原生态指针T* 。因此迭代器失效,实际就是迭代器底层对应指针所指…...

@RequestParam @RequestBody @PathVariable 这三个注解对应的前端使用vue的http请求时不同的调用方式
1. RequestParam 用途:用于提取请求参数,常见于GET请求或表单提交。 Vue HTTP 请求示例: // 使用axios发送GET请求 axios.get(/api/users, { params: { id: 1, name: John } }); 2. RequestBody 用途:用于提取请求体…...

SQL - 索引
索引本质上是数据库引擎用来快速查找数据的数据结构,可以显著提高查询的性能,为了加快运行较慢的查询。创建索引 默认索引 create index 索引名 on 表名 (列名); 通过对列名进行创建索引,在查询的时候,数据库就能通过索引找到匹配…...

Oracle23ai新特性FOR LOOP循环控制结构增强
在Oracle数据库中,FOR LOOP是一种常用的循环控制结构,它允许你重复执行一系列语句固定次数或直到满足特定条件为止。然而,标准的Oracle PL/SQL中的FOR LOOP主要用于遍历集合(如数组或游标的结果集),而不是像…...