阿里研究员:软件测试中的18个难题(下)
极客时间编辑部
讲述:初明明大小:3.59M时长:03:56
你好,欢迎收听极客视点。
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
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论