我一生中学到的最重要的东西是一种以原则为基础的生活方式,是它帮助我发现真相是什么,并据此如何行动。
-- Ray Dalio《原则》
原则,是每个人在行事中所遵循的准则。每个人都有自己的原则,或成文或尚处襁褓。软件测试也有一套原则让每位软件测试从业人员去遵循,这些原则是前辈们前仆后继在无数的坑坑洼洼中总结出来的。
原则一:测试显示软件存在缺陷
Testing shows presence of defects
即使今日,依然有不少人容易犯错:没有发现错误的测试说明软件没有缺陷。
测试只能证明软件是存在缺陷的(证伪),却不能证明软件是没有缺陷的(证实)。测试是为了降低缺陷存在的可能性而开展的活动,即便多次测试都没有发现任何缺陷,也不能证明软件是完美的。
历史著名的泰坦尼克号,开始也被认为是完美的,有着“永不沉没”的美誉。然而,在她漂洋过海来看你的处女航中,估计是旅途上受不了Jack和Rose一直在撒狗粮,突然就跟冰山好上了,成了睡美人。
原则二:穷尽测试是不可能的
Exhaustive testing is impossible
假设我们不了解该原则,在开展软件测试工作时,我们的工作将会发生什么?
(1)简单的日历功能,我们会在每个日期上填满事件进行测试。
(2)简单的计算器功能,无穷无尽的组合需要进行计算(先完成1位数相加,然后是2位数相加,再是3位数,接着是4位数,如此反复)。
随着系统承载业务多,代码规模也越庞大,算法逻辑复杂度也越高。要让测试完全覆盖是不可能的。那难道不测?非也!我们可以采取以下策略:
1、精准测试:改什么测什么;
2、二八原则:只测重点;
3、等价划分;
上述测试策略将会在后续文章中详细介绍。
原则三:尽早介入测试
Testing Early
我们从小就被教育:早起的鸟儿有虫吃。早,是我们解决问题的有效办法。
研发流程中,研发活动抽象为 需求分析、开发管理、 测试管理、发布运维四个阶段。在传统的开发模型里,测试只关注测试管理活动,而严重缺乏对对需求、开发的测试。
据调查,缺陷的修复成本与其发现时间成反比,且越晚修复其修复成本将会成指数级增长。
显然,降低缺陷的修复成本,提前暴露缺陷所在,是我们提升产品质量的一大突破。这个原则与 测试左移、测试前移 具有异曲同工之妙。
原则四:缺陷具有集群性
Defect Clustering
每当看到福布斯或胡润发布财富榜单的时候,总会让人产生一种错觉:我和马化腾的平均财富达到 1500 个小目标。然而,细思极恐,0.3%的人手里掌握着24%的财富,财富的集群性十分显著。
据统计,一家公司的利润的80%是由20%的客户/项目创造出来的,对企业而言, 如果把精力平均分配给每一个客户/项目是不科学的,将有限的精力和资源投放在大客户/项目身上,才能取得更显著的成效。
在软件测试活动中,80%的缺陷发生在20%的模块中。特别是在回归测试时,如何选择测试用例集,全部选择还是选择20% ?这部分内容我们后续会有专题详细分析。
原则五:杀虫剂悖论
Pesticide Paradox
当我们反复使用相同的杀虫剂的时候,会有少量害虫产生免疫而存活下来,使得杀虫剂失去药效。
软件测试也是类似的, 当我们一直使用相同的方法或手段去寻找bug的话,可能很难发现bug甚至无法发现bug。
如果我们一直使用相同的测试用例反复执行,这部分测试用例发现缺陷的效果就会越来越差。
如果我们一直使用相同的测试策略来制定计划,这个测试计划会越来越不适应项目进度,导致测试有效性降低。
如果我们一直使用相同的测试工具来执行用例,这个工具发现缺陷的效果也会越来越差。
如果我们一直使用相同的测试思路设计用例,生成出来的用例也越来越雷同,效果也会越来越差。
如果我们一直使用相同的测试人员执行用例,执行的效果也会越来越差。
原则六:测试是上下文相关的
Testing is context dependent
当我在互联网公司待上一段时间后,我的脑子装满了互联网知识:
当我即将踏入智能机器人行业的时候,我的脑子是这样的:
古人说得好,一招鲜吃遍天。于是,我带上了虚构的《互联网测试人员生存宝典》上路了。这一路走来,虽然软件测试所服务的行业具有多样性,有金融、游戏、电商、智能机器人等等,但是,各公司内部几乎遵循一样的测试法则(测试设计、测试开发、测试流程、测试工具等),在了解业务知识后,很快便能开展测试活动。
原则七:“没有错误就是好” 是谬误
Absence of error - Fallacy
在 原则一:测试显示软件存在缺陷 中说明,测试是为了降低缺陷存在的可能性而开展的活动,即便多次测试都没有发现任何缺陷,也不能证明软件是完美的。
软件测试不仅仅是找出缺陷,还是确认软件是否满足需求,如果产品不能满足用户的需求,即使没有出现任何缺陷,这个产品也是失败的。
在功能机时代,手机一哥诺基亚风光无限,质量也是出奇的好,怎么用都不坏,还可以砸核桃。但是随着智能机的到来,没有满足用户更多的需求(如果当时能开发出切西瓜、开榴莲的功能,也许能再坚持一段时间),最终也无法逃脱没落。
“没有错误” 并不是我们的追求,在互联网时代,始终快速给用户创造最大的价值才是我们孜孜不倦的追求。
小结
通过上述原则的学习,让我们站上了前人的巨浪之上,仿佛没有什么变化。但是谨记以下原则,潜移默化中对我们的抉择产生着影响。
遵守:
(1)证伪测试
(2)尽早测试
(3)聚焦测试
(4)关联测试
谬论:
(1)穷尽测试
(2)杀虫剂
(3)没有错误就是好