一谈到软件测试,通常大家想到的就是找bug。其实这样理解软件测试也是可以的,因为Glenford Myers在《软件测试的艺术》一书中有这样的定义:“测试是了发现错误而执行程序的过程”。其中,“错误”就是我们通常所说的bug,那么发现错误,也就可以理解为找bug了。该定义简洁,明确的描述了软件测试人员的重要工作内容。
另外,软件专家温伯格与Cem Kaner都提出了自己对软件测试的理解:
在温伯格的《完美软件》中提到:“测试是一个获取信息的过程,用来降低决策风险。”
Cem Kaner教授提出:“软件测试是一种技术调查,其目的是向关系人提供有关产品(软件,系统或服务)质量的实验信息。”
除此之外,IEEE和ISO都为软件测试下过定义:
1983年IEEE曾这样定义软件测试:“软件测试是使用人工或者自动化手段来运行或者测试定某个系统的过程,检验它是否满足规定的需求或是弄清楚预期结果与实际结果之间的差别”。从这个定义中我们可以看出,软件测试不仅为了发现错误,而且需要验证软件是否满足了规定的需求。对于某些有一定经验的测试人员,可以会进入一个状态,就是极度热衷于发现bug,花费了大量的时间陷入了一个小的验证点去找bug,从而没有在规定的时间完成检验高优先级的业务需求。现在的软件复杂度远超个人的理解能力,软件测试从理论上而言也是没有尽头的,可以说,在实际的项目中软件测试是无论给多久bug都是找不完的。因此,我们的测试人员在有了一定的测试经验后,要把握住测试中的优先级,虽然找bug是测试人员的重要工作,但是应该优先完成在核心的业务上核心路径的检验。
近些年ISO 29119标准尝试标准化软件测试,其中提到“Software testing should focus on providing information about a software product and finding as many defects as possible, as early as possible in development process, under given constraints of costs and schedule.” 里面提到了两个重要的点:一个是尽可能的早(early),一个是成本(cost)受限。测试发现bug应尽可能的早,这样造成的影响越小,修复成本越低。而测试活动往往是在时间和人力成本受限的情况下进行,在有限的资源下,测试人员应该有的放矢,对测试对象的进行选择排序,测试技术进行选择组合使用,这也是测试策略方面的东西。
然而,有趣的是,对于IEEE和ISO尝试标准化测试相关内容的行为确遭到了测试领域多位专家,如Cem Kaner, Jame Bach等的反对。
因此,对于软件测试本身而言,并没有真正意义上的精确定义。也许对软件测试下定义,就如同对大海下定义一样,大海如此广袤,每到一处,都存在着与众不同的特色,软件测试就是一片海,你拼命遨游,所见的却永远是它的一片波澜,而无法纵览它的全貌。也是这样的原因,吸引着大家纵身跃入软件测试的大海。
参考:
《软测试实战》
《软件测试的艺术》
《软件测试》
http://kaner.com/pdfs/ETatQAI.pdf
http://softwaretestingstandard.org/