软件测试(慕课版)
上QQ阅读APP看书,第一时间看更新

1.1 软件测试的基本概念

1.1.1 软件测试是什么

什么是软件测试,这个概念大家很熟悉,但是不少人确实不一定能够说清楚。许多人或许只能给出一个解释,那就是软件测试就是“发现缺陷/bug”。那么软件测试是否只局限于找bug,这种解释是否过于简单呢?

软件测试绝非简单,不仅资深的测试工程师和测试初学者的理解不一样,而且连资深的测试工程师之间的理解也是不一样的,再甚者不同行业的测试人员也会给出不同的答案。

一般来说,软件测试是伴随着软件的产生而产生的。早期的软件开发中软件规模都很小、复杂程度低,软件开发的过程混乱无序、相当随意,测试的含义比较狭窄,开发人员将测试等同于“调试”,目的是纠正软件中已经知道的故障,常常由开发人员自己完成这部分工作。那时对测试的投入极少,测试介入也晚,常常是等到形成代码,产品已经基本完成时才进行测试。到了20世纪80年代初期,软件和IT行业进入了大发展时期,软件趋向大型化、高复杂度,软件的质量越来越重要。这个时候,一些软件测试的基础理论和实用技术开始形成,并且人们开始为软件开发设计了各种流程和管理方法,软件开发的方式也逐渐由混乱无序的开发过程过渡到结构化的开发过程,以结构化分析与设计、结构化评审、结构化程序设计,以及结构化测试为特征。人们还将“质量”的概念融入其中,软件测试定义发生了改变,测试不单纯是一个发现错误的过程,而且将测试作为软件质量保证的主要职能。

早在1979年,Glenford J.Myers提出了他对软件测试的定义:“测试是为发现错误而执行的一个程序或系统的过程。”他认为软件测试的目的包括以下几点。

(1)测试是程序的执行过程,目的在于发现错误。

(2)测试是为了证明程序有错,而不是证明程序无错误。

(3)一个好的测试用例在于能发现至今未发现的错误。

(4)一个成功的测试是发现了至今未发现的错误的测试。

1983年,Bill Hetzelt在《软件测试完全指南》(Complete Guide of SoftwareTesting)一书中指出:“测试是以评价一个程序或者系统属性为目标的任何一种活动。测试是对软件质量的度量。”,由此表明软件测试的目的不仅仅是为了发现软件缺陷与错误,同时也对软件进行度量和评估,提高软件的质量。

而在通俗意义层面上讲,狭义的软件测试仅仅指动态测试,即测试是执行程序的过程,通过运行程序来发现程序代码或软件系统中的错误。广义的软件测试不仅是指运行程序或系统而进行测试,还包括需求/设计/代码等评审活动。

IEEE给出了两个规范、约束的测试定义:

(1)在特定的条件下运行系统或构件,观察或记录结果,对系统的某个方面做出评价;

(2)分析某个软件项以发现和现存的,以及要求的条件之差别(即错误并评价此软件项的特性)。

有关软件测试的概念其实一直没有定论,人们所看到的有关软件测试的概念多是从软件测试的目的、作用等方面进行客观的描述。对软件测试理解不同,就会决定测试所采取的流程和方法,以及如何开展测试活动。

1.1.2 软件测试的目的

现对软件测试的目的总结为以下3点。

(1)最少的人力、物力、时间找出软件中潜在的各种错误和缺陷,全面评估和提高软件质量,及时揭示质量风险,控制项目风险。

(2)通过分析测试过程中发现的问题帮助发现开发工作所采用的软件过程的缺陷,通过对缺陷分析,获得缺陷模式,有助于缺陷预防,以便进行软件过程改进;同时通过对测试结果的分析整理,可修正软件开发规则,并为软件可靠性分析提供相关的依据。

(3)评价程序或系统的属性,对软件质量进行度量和评估,以验证软件的质量满足用户的需求,为用户选择、接受软件提供有力的依据。

只有在设计阶段就开始测试工作,坚持在各个环节进行技术评审和验证,才能尽早发现错误,以较低的代价修改错误。

测试用例多次重复使用后,其发现缺陷的能力会逐渐降低。为了克服这种现象,测试用例需要进行定期评审和修改,同时需要不断增加新的、不同的测试用例来测试软件或者系统的不同部分,从而发现更多的潜在错误。

1.1.3 软件测试与软件质量保证

软件质量保证是贯穿软件项目整个生命周期的有计划的系统活动,经常针对整个项目质量计划执行情况进行评估、检查和改进,确保项目质量与计划保持一致。

确保软件项目的过程遵循了对应的标准及规范要求,且产生了合适的文档和精确反映项目情况的报告,其目的是通过评价项目质量建立项目达到质量要求的信心。软件质量保证活动主要包括评审项目过程、审计软件产品,就软件项目是否真正遵循已经制定的计划、标准和规程等,给管理者提供可视性项目和产品可视化的管理报告。

评价、度量和测试在技术内容上有着非常重要的关系。软件测试是获取度量值的一种重要手段。软件度量在GJB 5236中的主要规定是:软件质量模型和内部质量度量、外部质量度量,以及使用质量的度量,可用于在确定软件需求时规定软件质量需求或其他用途。

软件质量评价在GJB 2434A中针对开发者、需求方和评价者提出了3种不同的评价过程框架。在执行软件产品评价时,确立评价需求的质量模型就需要采用GJB 5236给出的内部度量、外部度量、使用质量的度量等。

这两个系列标准的关系如图1-1所示,从图中可以看出GJB 2434A和GJB 5236的联系是非常密切的,需要有机结合才能有效完成软件产品的度量和评价工作。其中,度量值的获取主要来自软件测试。可以说,评价依据度量,而度量也依据测试。也可以说,评价指导度量,度量也指导测试。

图1-1 评价、度量和测试的关系

软件质量保证与软件测试是否是一会事?有人认为,软件测试就是软件质量保证,也有人认为软件测试只是软件质量保证的一部分。这两种说法其实并不全面。软件质量保证与软件测试二者之间既存在包含又存有交叉的关系。

软件测试能够找出软件缺陷,确保软件产品满足需求。但是测试不是质量保证,二者并不等同。测试可以查找错误并进行修改,从而提高软件产品的质量。软件质量保证测试避免错误以求高质量,并且还有其他方面的措施以保证质量问题。

从共同点的角度看,软件测试和软件质量保证的目的都是尽力确保软件产品满足需求,从而开发出高质量的软件产品。两个流程都是贯穿在整个软件开发生命周期中。正规的软件测试系统主要包括:制定测试计划、测试设计、实施测试、建立和更新测试文档。而软件质量保证的工作主要为:制定软件质量要求、组织正式度量、软件测试管理、对软件的变更进行控制、对软件质量进行度量、对软件质量情况及时记录和报告。软件质量保证的职能是向管理层提供正确的可行信息,从而促进和辅助设计流程的改进。软件质量保证的职能还包括监督测试流程,这样测试工作就可以被客观地审查和评估,同时也有助于测试流程的改进。