
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.1.2 软件测试的辩证观点
G.J.Myers的第2个观点是:测试是为了证明程序有错,而不是证明程序无错误,引出了软件测试的另外一个争论。
软件测试究竟是证明所有软件的功能特性是正确的,还是相反——对软件系统进行各种试探和攻击,找出软件系统中不正常或不工作的地方?
编者认为,两者都有一定道理:前者(证明或验证所有软件的功能特性是正确的)从质量保证的角度思考软件测试;后者(证明程序有错)从软件测试的直接目标和测试效率来思考。两者应该相辅相成。在后者的思想背景下,可以认为测试不是为了证明所有的功能都能正常工作,恰恰相反,测试就是为了找出那些不能正常工作、不一致性的地方,也就是说,测试的工作就是发现缺陷(Detect Bug),即在软件开发过程中,分析、设计与编码等工作都是建设性的,唯独测试带有“破坏性”,它想方设法发现软件所存在的问题。软件测试就是在这两者之间获得平衡,但对于不同的应用领域,两者的比重是不一样的。例如,国防、航天、银行等软件系统承受不了系统的任何一次失效,因为任何失效都完全有可能导致灾难性的损失,所以这些领域强调前者,以保证非常高的软件质量。而一般的软件应用或服务,则可以强调后者,质量目标设置为“用户可接受水平”,以降低软件开发成本,加快软件发布速度,有利于市场的扩张。
1.验证软件是“工作的”
以正向思维方式,针对软件系统的所有功能点,逐项验证正确性。
2.证明软件是“不工作的”
以反向思维方式,不断思考开发人员的理解的误区、不良的习惯、程序代码的边界、无效数据的输入及系统的弱点,试图破坏系统、摧毁系统,目标就是发现系统中各种各样的问题。该观点的代表人物就是上面多次提到的G.J.Myers。他强调,一个成功的测试必须是发现缺陷的测试,不然就没有价值。