测试始终是一个具有风险的工作,比如,现在越来越多地用“风险”概念来定义测试,测试被认为是
“理解并评估与发布的软件系统有关的利益和风险状况的过程”,测试的作用则是管理或转移系统失败的风险,以及如何尽大程度地消除给用户带来的不良影响。
测试工作为什么总存在风险呢?因为当我们测试某个应用系统或一个软件产品时,不可能把所有可能的情况都测试一遍。例如,即使对一个计算器程序,要测试的数字可以从0开始到一个很大的数,就算8位数字(99999999),仅仅测试其加法运算的可能情况就是1016,要完成这些测试,即使借助计算机,每秒完成10万个测试用例,一个测试人员穷其一生也完成不了,因为需要3100多年。如果再加上负数、减法、乘法、除法、括号以及它们的各种组合,所有全部可能的情况将是一个巨大的天文数字,所以完成全部可能的情况是不可想象的。
所以,我们必须不得不借助一些测试用例的设计方法,如边界值分析方法、等价类划分方法等来解决这个问题,选择样本数据,用极有限的、代表性的测试数据来代替实际的、巨大的测试数据。这些方法的应用是基于一个假设:如果程序在这些样本数据情况下运行正确,那么该程序也满足所有类似的数据。这种假设的存在,也就意味着一定的风险存在。对于简单的程序,这种风险很小,但是对越来越复杂的应用程序或软件系统,这种风险就越来越大。
即使完成了全部功能的测试,也很难完成所有用户的环境下的测试。测试的环境是有限的,而软件系统的实际运行环境是复杂的、千变万化的,不仅有不同的硬件(主板、CPU、内存、网卡、显示卡等)型号差异,而且还有操作系统及其版本、驱动程序及其版本、已安装的应用程序等的差异。完成各种用户环境下的软件测试,也是几乎不可能,即使可以实现,其成本也是巨大的,一般软件企业不堪重负。同样,系统的性能测试、有效性测试和可靠性测试等蕴含着较大的风险。例如,可靠性测试是通过模拟方法实现,不能在完全真实的情况下进行,如不可能对真实系统连续进行10或20年的不间断测试。
测试工作,除了始终所存在的风险之外,还会受到其他多方面的挑战,主要有:
l 测试不能提高质量,但软件产品发布后,缺陷较多,往往被认为是测试人员的错。在许多人的心目中,测试人员是防止缺陷的盾牌或最后一堵墙。实际上,所有的软件缺陷都是在需求分析、设计和编程时被注入进去的,注入的缺陷越多,被漏掉的缺陷可能性就越大。
l 测试人员的素质和待遇。国内还存在对测试理解的误区,如测试不需要技术或不需要过高的技术。在选用测试人才时,往往降低要求,所给的待遇也偏低,从而造成测试队伍的整体能力比较弱、工作热情比较低,对测试质量有较大的负面影响。
l 测试时间往往被压缩。虽然一旦软件项目启动,测试工作就开始,包括产品需求文档审查、产品规格说明书审查、测试计划/用例的设计等,但是软件测试的主要执行时间是在代码完成后。由于软件的日程估计往往不够准确,代码完成时间延迟经常会发生,但管理层又不想推迟整个产品的发布日期,结果测试时间首当其冲,测试周期被缩短,造成测试不够充分或已计划好的测试项目不能保质保量的完成。
总之,测试工作所面临的挑战比较大,有时可以说是严峻的,但是,只要我们敢于面对现实,坚持测试原则,就能克服困难,运用正确的、更有效的测试方法和工具,保证足够的测试和测试的质量。
预知后事如何,请读下回分解:第6回 软件测试的十大原则
版权所有,软件测试演义® ——系列讨论的目录,见: 软件测试演义——中高级系列(序)