《软件测试的艺术》读书笔记——软件测试的心理学与经济学

 我们把软件简单的看做一个输入输出的系统,软件使用者输入某种操作,系统能够输出某种响应。那么软件测试就是需要检验不同输入操作情况下,系统给出正确的输出响应,并且没有给出错误的输出响应

 如果需要完全校验系统做到了这两点,需要穷尽所有的输入情况,才能确保没有失误。但是所有输入情况的数量是无穷尽的,我们无法做到穷尽测试,这就引申出了一些列软件测试的技巧与原则,来帮助软件测试人员尽可能多地发现系统不足之处,同时尽可能少地走弯路。

 无法做到穷尽测试,是大家都能很容易明白的道理,但是在实践中,大家往往非常容易忘记这一点,导致做了很多无用功。所以在学习软件测试相关知识之前,所有测试人员都需要先明白一些软件测试的心理学和经济学问题。

 心理学主要解决软件测试的一个正确目标问题,摆正对软件测试的目标的态度,才能在测试过程中朝着一个唯一且正确的方向发力。

 经济学问题主要提供一种使用低成本获取高效益的思路,来避免一些无用功,从而提高在不能穷尽测试的情况下,测试人员能够带来的最大价值。

一、软件测试的心理学

 首先我们来认识软件的缺陷。软件的缺陷主要可以归结为两个方面:

1.软件做了其不应该做的
2.软件没有做其应该做的

 然后我们来探讨一下,什么样的测试是成功的。

测试1. 输入转账金额:100,结果:转账成功,转出账户余额减少100,目标账户余额增加100。
测试2. 输入转账金额:-100,结果:转账成功,转出账户余额增加100,目标账户余额减少100。

 以上两个测试中,我们明显能看出,测试1是表现了软件的正确行为,测试2表现了软件的错误行为。按照通过情况来看,测试1是测试通过,因为它体现出软件做了其应该做的;测试2是测试不通过,因为它体现出软件做了其不应该做的。
 那么哪个测试是成功的呢?按照《软件测试的艺术》书中的观点,测试2是成功的,测试1不能说是成功的,也不能说是失败的。

 我们讲成功的测试有两个方面:

1.发现缺陷,并且此缺陷可以被修复
2.能够最终确定软件再无其他可查出缺陷

 而讲不成功的测试主要有一个方面:

1.看到程序输出正确的结果,而没有发现任何缺陷

 因为软件程序没有任何缺陷是不现实的,所以在定义什么样的测试是成功的这方面,都是以发现缺陷的角度来衡量的,因此就引出关于“软件测试过程”是什么的讨论。

 有很多人给软件测试赋予的定义或者对软件测试的看法是“软件测试是证明软件不存在错误的过程”、“软件测试的目标在于证明软件能够完成需求的功能”、“软件测试就是建立一个‘软件能够完成预期的价值交付’的信心的过程”……这些都不是从缺陷的角度去定义软件测试,而且弱化了软件测试的意义,属于本末倒置。

 我们在保证软件做了其应该做的的同时,并不能保证它未做其不应该做的做了其不应该做的,所以只将软件测试定义为证明软件做了正确的事情时,就可能发现不了隐藏的错误,而这些隐藏的错误,很可能带来致命的损失。

 尽量找出尽可能多的错误,才是软件测试存在的最大意义,而证明软件做了正确的事情,只是软件测试的一部分目标,并且这个目标在很多时候是非常难以完全实现的。在心理学上,往往目标看起来更容易实现的时候,事情做起来才会更有前进的动力。如果我们把软件测试定义为“证明软件没有错误的过程”,可能穷尽所有情况才可能完成。而将软件测试定义为“发现错误的过程”,操作起来往往能够令人更加愉快。

 因此,我们应该给软件测试赋予的正确的定义是:测试是为发现错误而执行程序的过程

二、软件测试的经济学

 既然软件测试的是为了发现错误,那么问题又来了:软件测试能够发现所有的错误吗?答案是:不能

 经济学总是通过总结一系列的规律找到一种策略,使付出与收获形成最大的对比,使收益最大化。在我们不能穷尽所有测试用例去找出所有的错误的情况下,测试策略是使我们尽量接近目标的途径。

 两种最普遍的测试策略是黑盒测试白盒测试

 黑盒测试将软件视为一个黑盒子,测试人员不关心它的内部构造,只进行不同用例的输入来验证软件的输出结果。黑盒测试需要尽量地列举尽可能多的用例,来覆盖更多的情况。但尽管如此,由于穷举测试的不可能性,黑盒测试很可能漏掉一些问题。做黑盒测试的测试人员不需要太多专业的技能,但是需要有一种sense,就是通过有限的测试用例,尽可能多地发现软件存在的问题,以取得最好的测试效果

 白盒测试与黑盒测试相对,就是允许测试人员了解软件内部构造,针对程序的逻辑来对软件进行测试。白盒测试可以通过使每条语句都至少执行一次来获得尽量高的测试覆盖率,即穷举路径测试。然而即使这样,白盒测试还是有失误,它发现不了软件未完成功能的缺陷,只能尽量找出已完成代码的缺陷,就是说程序可能会因为缺少某些路径出现问题,但白盒测试无法发现。

 还有各种各样的测试策略,都有各自的优缺点。在很多软件测试实践中,都是多种测试策略同时采用,才能互相弥补,尽量维护软件质量。

三、软件测试的十条重要原则

 软件测试的问题大多可以归结为心理学问题和经济学问题,我们也可以总结出一些测试原则。一些团队往往会在实践中慢慢改进,并形成一些团队公认遵守的原则。《软件测试的艺术》中总结了10条,可以用作参考:

1.测试用例中的一个必需部分是对预期输出或结果进行定义
2.程序员应当避免测试自己写的程序
3.编写软件的组织不应当测试自己编写的软件
4.应当彻底检查每个测试的执行结果
5.测试用例的编写不仅应当根据有效和预料到的输入情况,而且也应当根据无效和未预料到的输入情况
6.检查程序是否“未做其应该做的”仅是测试的一半,测试的另一半是检查程序是否“做了其不应该做的”
7.应避免测试用例用后即弃,除非软件本身就是一个一次性的软件
8.计划测试工作是不应默许假定不会发现错误
9.程序某部分存在更多错误的可能性,与该部分已发现的错误成正比
10.软件测试是一项极富创造性、极具智力挑战性的工作

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容