《软件测试的艺术》原书第三版 - 第二章 - 软件测试的心理学和经济学

第二章 软件测试的心理学和经济学

即使一个看起来非常简单的程序,其可能的输入与输出组合可达到数百种甚至数千种,对所有的可能情况都设计测试用例是不切合实际的。

软件测试的心理学

“软件测试就是证明软件不存在错误的过程。”

“软件测试的目的在于证明软件能够正确完成其预定的功能。”

“软件测试就是建立一个‘软件做了其应该做的’信心的过程。”

上述定义是本末倒置的。

测试一个程序时,是通过测试来增加程序的价值,是指测试提高了程序的可靠性或质量。提高了程序的可靠性,是指找出并最终修改了程序的错误。

更为合适的定义是:

“测试是为发现错误而执行程序的过程”。

成功的不成功的

能发现新错误的测试用例不太可能被认为是“不成功的”,也就是说,能发现错误就证明它是值得设计的。“不成功的”测试用例,会看到程序输出正确的结果而没发现任何错误。

总结一下,软件测试更适宜被视为试图发现程序中错误(假设其存在)的破坏性的过程。一个成功的测试用例,通过诱发程序发生错误,可以在这个方向上促进软件质量的改进。当然,最终我们还是要通过软件测试来建立某种程度的信心:软件做了其应该做的,未做其不应该做的。但是通过对错误的不断研究是实现这个目的的最佳途径。

软件测试的经济学

为了应对测试经济学的挑战,应该在开始测试之前建立某些策略。黑盒测试和白盒测试是两种最普遍的策略

黑盒测试

黑盒测试是一种重要的测试策略,又称为数据驱动的测试或输入/输出驱动的测试。使用这种测试方法时,将程序视为一个黑盒子。测试目标与程序的内部机制和结构完全无关,而是将重点集中放在发现程序不按其规范正确运行的环境条件。

穷举输入测试是无法实现的。这有两方面的含义,一是我们无法测试一个程序以确保它是无错的,二是软件测试中需要考虑的一个基本问题是软件测试的经济学。也就是说,由于穷举测试是不可能的,测试投入的目标在于通过有限的测试用例,最大限度地提高发现的问题的数量,以取得最好的测试效果。

白盒测试

白盒测试或称逻辑驱动的测试,允许我们检查程序的内部结构。这种测试策略对程序的逻辑结构进行检查,从中获取测试数据(遗憾的是,常常忽略了程序的规范)。

“穷举路径测试即完全的测试”论断存在的第二个问题是,虽然我们可以测试到程序中的所有路径,但是程序可能仍然存在着错误。这有三个原因。

  • 即使是穷举路径测试也决不能保证程序符合其设计规范。举例来说,如果要编写一个升序排序程序,但却错误地编成了一个降序排序程序,那么穷举路径测试就没多大价值了;程序仍然存在着一个缺陷:它是个错误的程序,因为不符合设计的规范。

  • 程序可能会因为缺少某些路径而存在问题。穷举路径测试当然不能发现缺少了哪些必需路径。

  • 穷举路径测试可能不会暴露数据敏感错误。比如下述代码:

    //假设在某个程序中要比较两个数值是否收敛,也就是检查两个数值之间的差异是否小于某个既定的值。
    if ( a - b < c){
        System.out.println(" a - b < c");
    }
    

    当然,这条语句明显错了,因为程序原意是将c与a-b的绝对值进行比较。然而,要找出这样的错误,取决于a和b所取的值,而仅仅执行程序中的每条路径并不一定能找出错误来。

软件测试的原则

img
img

  • 软件测试是为发现错误而执行程序的过程。
  • 尽量避免编码人员测试自己的程序。
  • 好的测试用例能够对未发现的错误高度敏感。
  • 成功的测试用例能够发现未知的错误。
  • 成功的测试需要仔细定义输入输出的期望值。
  • 成功的测试需要仔细研究分析测试结果。
posted @   ^=  阅读(59)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示