测试改进方法总述
一、提升测试的稳定性
(一)高频
1. 持续打包
解决这个问题:只在部署测试环境前才打包,经常因为打包问题导致部署花费很多时间,影响后面的测试进度。
2. 发布
这样做的目的:高频发布来暴露问题,倒逼发布过程中各环节的优化
(sangfor版本发布都是有规划的,不会采取这种方式)
3. 证书和密钥的更新
4. 容灾演练
高频演练来充分暴露问题
(二)隔离
// 这个没有理解要怎么操作???
(三)用完即抛
“测试环境是短暂的”
测试环境用完即抛的好处:
- 解决环境问题,减少脏数据。
- 提高可重复性,确保每次运行的环境都是一致的。
- 倒逼各种优化和自动化能力的建设(测试环境的准备、造数据等)
- 提高资源使用的流动性。在实际的物理资源不变的前提下,增加流动性就能增加实际的容量。
这样就意味着:
- 测试环境搭建能力强:快速、可重复、成功率高
- 测试策略和测试自动化不能依赖于一个长期存在的环境
- 日志要打印好:输出要详细清楚,“日志是你唯一的问题排查手段”
(四)不自动重跑
防止概率性pass的用例掩盖了bug
二、提升测试的有效性
存在的问题
- 测试用例注水严重:校验做得不好、该写的assert没写
- 谁来测试测试代码
方法
1. 变异测试和bug注入
变异测试:向应用代码中注入一个bug(我们把此处的bug叫作变异),看看测试代码能否发现这个变异,以此来验证代码发现bug的能力
基于变异测试,测试用例的有效性=发现的变异的数量 / 注入的变异总数
常用的变异类型:算数运算符的替换,条件运算符的替换等等
2. 线下质量红蓝攻防
3. 报文注入
三、提升测试的充分性
充分性:解决测试遗漏的问题
出现测试遗漏的一个重要原因:不知道自己不知道
方法:
- 用例的自动生成:用技术手段减少测试人员的个人能力差异的影响,减少对个人经验的依赖。
- 业务覆盖率度量:用技术手段发现测试遗漏,为补充测试用例、提升测试的充分性指明方向。
(一)用例的自动生成
- 录制回放
- 基于符号执行(怎么做???)
- 基于模型(怎么做???)
- 基于搜索(怎么做???)
- 测试数据的自动生成
- 测试预言的自动生成
(二)业务覆盖率度量
除了度量测试的代码覆盖率,还必须关注业务场景的覆盖率。
四、从测到不测
- 防错设计:在架构、代码、交互等层面优化和加固设计,减少人为错误发生的可能性,或者降低人为错误可能导致的影响。
- 代码扫描:不写任何测试用例、不执行任何测试,直接对代码进行分析,找到代码中的问题,甚至自动修复bug。
(一)防错设计
行为塑造约束
人总是会犯错的,防错设计的目的就是减少人犯错的可能或者减少人犯错的严重后果。
- 防错设计:关注人的错误。
- 容错设计:关注系统的错误,如网络问题、硬件问题等。
支付系统防错设计的6类常见问题:
第一类:没有第一时间检验输入值
//防错设计的关键点见书中描述
第二类:线上线下权限隔离没做好
第三类:视觉识别度不佳
第四类:代码容易写错
- 增强静态代码扫描,从入参变量名和函数定义的变量名之间的相似性判断是否有可能传错了
- 加强代码健壮性,增加入参校验
- 测试增加更多的校验点
- 少用String类型,多用强类型(例如Date类型)
第五类:事情忘记做了
- 要有提醒能力,且提醒能力有双保险
- 最坏的情况发生了,要有兜底方案
第六类:事情没有按照正确的方式做
- 没有按照正确的顺序做,事情就不能进行下去
- 输入值要第一时间做校验
(二)代码扫描
1. 静态代码扫描
2. bug自动识别
// 这个有技术手段的,怎么做???