极客视点
极客时间编辑部
极客时间编辑部
113245 人已学习
免费领取
课程目录
已完结/共 3766 讲
2020年09月 (90讲)
时长 05:33
2020年08月 (93讲)
2020年07月 (93讲)
时长 05:51
2020年06月 (90讲)
2020年05月 (93讲)
2020年04月 (90讲)
2020年03月 (92讲)
时长 04:14
2020年02月 (87讲)
2020年01月 (91讲)
时长 00:00
2019年12月 (93讲)
2019年11月 (89讲)
2019年10月 (92讲)
2019年09月 (90讲)
时长 00:00
2019年08月 (91讲)
2019年07月 (92讲)
时长 03:45
2019年06月 (90讲)
2019年05月 (99讲)
2019年04月 (114讲)
2019年03月 (122讲)
2019年02月 (102讲)
2019年01月 (104讲)
2018年12月 (98讲)
2018年11月 (105讲)
时长 01:23
2018年10月 (123讲)
时长 02:06
2018年09月 (119讲)
2018年08月 (123讲)
2018年07月 (124讲)
2018年06月 (119讲)
时长 02:11
2018年05月 (124讲)
时长 03:16
2018年04月 (120讲)
2018年03月 (124讲)
2018年02月 (112讲)
2018年01月 (124讲)
时长 02:30
时长 02:34
2017年12月 (124讲)
时长 03:09
2017年11月 (120讲)
2017年10月 (86讲)
时长 03:18
时长 03:31
时长 04:25
极客视点
15
15
1.0x
00:00/04:48
登录|注册

阿里研究员:软件测试中的18个难题(上)

讲述:丁婵大小:6.59M时长:04:48
你好,欢迎收听极客视点。
对于软件测试来说,怎么样才算测够了?如何评价测试的有效性?那么多测试用例,以后怎么删?最近,阿里研究员郑子颖总结了 18 个软件测试难题,发文于公众号“阿里技术(ID:ali_tech)”,供你参考。

1. 测试充分度(Test Sufficiency)

如何回答“测够了吗?”代码覆盖率是衡量测试充分性的起点,但远远不是终点。要回答这个问题,至少还要考虑是否测了所有的场景、所有的状态、所有的状态转移路径、所有的事件序列、所有可能的配置、所有可能的数据等等。即便如此,我们可能还是无法 100% 确信测够了。

2. 测试有效性(Test Effectiveness)

如何评价一组测试用例的有效性?有效性和充分性是两个正交的属性,评价测试用例有效性可以通过正向的分析进行,例如,分析测试用例是否校验了所有在测试过程中 SUT 落库的数据。更具有通用性的做法是变异测试(Mutation Testing),即在被测代码里注入不同的“人造 Bug”,统计测试用例能感知到多少。目前变异测试已经有工程化、规模化的落地,后续可以关注如何防止钝化也就是“杀虫剂效应”,以及关注对配置、数据等进行更全面的注入。

3. 测试用例瘦身

跑测试用例的时候有很多时间是浪费掉的,浪费的形式包括:
冗余步骤:每个用例都要去做一些类似的数据准备,执行一些中间过程(这样才能推进到下一步)。
等价类:一个支付场景,在所有的币种、所有的支付渠道和卡组的排列组合都测一遍。如果不这么做,可能会漏掉某个特定商户在某个特定币种的特定逻辑。
此外,假如你有 N 个用例,删掉其中的 M 用例也不影响 N 的效果,那么如何识别是否存在这样的 M 用例也是个问题。
删除测试用例看似简单,其实非常难。从原理上来说,如果测试充分度和测试有效性的度量都做得非常好、度量成本非常低,那么是可以通过大量的尝试来删用例的。这是一种工程化的思路,也许还有其他的理论推导的思路。

4. 测试分层

很多团队都会纠结到底要不要做全链路回归、做到什么程度。这个问题的核心点就是:有没有一种可能,只要约定好系统间的边界,就可以做到在改动一个系统的代码后,不需要和上下游系统进行集成测试,按照边界约定验证好自己的代码就能确保没有任何回滚了。
很多人相信这是可能的,但是,既无法证明,也不敢在实操中完全不跑集成。

5. 减少分析遗漏

分析遗漏是很多故障的原因。很多时候,分析遗漏属于“我不知道‘我不知道’”。

6. 用例自动生成

用例自动生成中,有时候难点不是生成 test steps,而是怎么生成 test oracle。

7. 问题自动排查

对于比较初级的问题,自动排查方案有两个局限性。一是方案不够通用,二是比较依赖专家经验,主要是通过记录和重复人肉排查的步骤来实现。然而,每个问题都不同,排查步骤很有可能出现不工作的情况、

8. 缺陷自动修复

阿里的 Precfix、Facebook 的 SapFix 等技术是目前缺陷自动修复的知名做法。但总的来说,现有的技术方案,都有这样或那样的局限性和不足,这个领域还在相对早期阶段,后面的路还很长。

9. 测试数据准备

测试用例的一个重要设计原则是:测试用例之间不应该有依赖关系,一个测试用例的执行结果不应该受到其他测试用例执行结果(包括是否执行)的影响。基于这个原则,传统的最佳实践是确保每个测试用例都应该是自给自足的:一个用例需要触发的后台处理流程应该由这个用例自己来触发,一个测试用例需要的测试数据应该自己来准备,等等。但如果每个用例所需要用到的测试数据都是自己来从头准备的,执行效率就比较低。怎么既不违背“测试用例之间不应该有依赖关系”的大原则,又能减少测试数据的准备时间呢?
以上是软件测试中的其中 9 个难题,受篇幅所限,其余 9 个会在下文继续分享,欢迎持续关注。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
大纲
固定大纲
1. 测试充分度(Test Sufficiency)
2. 测试有效性(Test Effectiveness)
3. 测试用例瘦身
4. 测试分层
5. 减少分析遗漏
6. 用例自动生成
7. 问题自动排查
8. 缺陷自动修复
9. 测试数据准备
显示
设置
留言
收藏
61
沉浸
阅读
分享
手机端
快捷键
回顶部