极客视点
极客时间编辑部
极客时间编辑部
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/03:56
登录|注册

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

讲述:初明明大小:3.59M时长:03:56
你好,欢迎收听极客视点。
在软件测试中会遇到非常多的问题。近日,阿里研究员郑子颖在公众号“阿里技术”分享了他总结出的测试难题,供软件测试人员参考。在上一篇文章中,我们列出了其中 9 个问题,本文继续分享其余的问题。

10. 异常测试

一个分布式系统,它的内部、内部各部分之间以及它和外部的交互都会出现各种异常,如访问超时、网络连接和耗时的抖动、连接断开、DNS 无法解析、磁盘 /CPU/ 内存 / 连接池等资源耗尽等等。如何确保系统的行为在所有情况下都是符合预期的?如何把更多的问题提前到线下来发现?对于一个复杂的分布式系统来说,要遍历所有可能出现异常的地方和所有可能出现的异常,异常用例的数量是非常大的。此外,某些异常情况下,系统对外表现出来的行为应该没有变化,而另一些异常情况下,系统行为是会有变化的。对于后一类,如何给出每一个异常用例的预期结果(即 test oracle),也是比较有难度的。

11. 并发测试(Concurrency Test)

并发(concurrency)可能出现在各个层级,比如数据库层面,对同一张表、同一条记录的并发读写,再比如单系统层面,同一个进程内的多个线程之间的并发,单服务器上的多个进程之间的并发,以及单个服务的多个实例之间的并发,等等。传统的并发测试是基于性能测试来做的,有点靠撞大运,而且经常是即便跑出问题来也会被忽视或者无法复制。

12. 回滚的测试

回滚测试的难度在于:需要覆盖的可能性非常多,一个发布可能在任何一个点上回滚。回滚可能还会引发兼容性问题,新代码生成的数据,在新代码被回滚后,老代码是否还能正确处理这些数据。

13. 兼容性测试

代码和数据的兼容性问题有很多形式。例如,如何确保新代码能够正确处理所有的老数据?有时候,老数据是几个月前的老代码产生的,有时候,老数据可能就是几分钟前产生的。验证这些场景兼容性的难度在于:需要验证的可能性太多了。
异常测试、并发测试、回滚测试、兼容性测试,这些问题的共同点是:我们知道这些问题是可能存在的,但需要测试时,可能性又太多。

14. Mock

测试的有效性也依赖于 Mock 的正确性。既然是 Mock,它和被 mock 的服务(包括内部的、二方的和三方的)的行为就多多少少会有差异。这种差异就有可能导致 Bug 被漏掉。

15. 静态代码分析

有一些类型的问题,要用通常意义上的软件测试来发现,难度和成本很高,而通过静态代码分析来发现反而比较容易。例如,ThreadLocal 变量忘记清除,会导致内存溢出,以及关键信息在不同的上游请求之间串错。静态代码分析就可以及早发现这些问题。

16. 形式化验证(Formal Verificaition)

除了在协议、芯片、关键算法等上面的运用以外,形式化方法在更偏业务的层面是否有运用的价值和可能?

17. 防错设计(Mistake Proof)

严格来说,防错设计并不是 software testing 范畴内的。但做测试久了就会发现,有很多 Bug,如果在设计时做得更好一点,就不会发生。

18. 可测性(Testability)

很多开发或 QA 同学认为可测性就是开接口、加 test hook,或者还没有理解将可测性落到自己的领域(例如支付系统、公有云、ERP)意味着什么。在需求和系统设计分析阶段还不能做到从可测性角度提出要求,往往要求比较滞后。这也是一个问题。
以上就是今天的内容,希望能给你带来新的思考。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
大纲
固定大纲
10. 异常测试
11. 并发测试(Concurrency Test)
12. 回滚的测试
13. 兼容性测试
14. Mock
15. 静态代码分析
16. 形式化验证(Formal Verificaition)
17. 防错设计(Mistake Proof)
18. 可测性(Testability)
显示
设置
留言
收藏
42
沉浸
阅读
分享
手机端
快捷键
回顶部