目录
一、软件测试
1、测试的目的
软件测试是软件质量保证的主要手段之一,也是在将软件交付给客户之前所必须完成的步骤。
目前,软件的正确性证明尚未得到根本的解决,软件测试仍是发现软件错误和缺陷的主要手段。软件测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件产品(主要是指程序)中的错误和缺陷。
1983年,BillHetzel在"CompleteGuideofSoftwareTesting"一书中指出:"测试是以评价一个程序或者系统属性为目标的任何一种活动。测试是对软件质量的度量".
GrenfordJ.Myers在"TheArtofSoftwareTesting"一书中指出:
- 软件测试是为了发现错误而执行程序的过程。
- 测试是为了证明程序有错,而不是证明程序无错误。
- 一个好的测试用例是在于它能发现至今未发现的错误。
- 一个成功的测试是发现了至今未发现的错误的测试。
这种观点可以提醒人们测试要以查找错误为中心,而不是为了演示软件的正确功能。但是仅凭字面意思理解这一观点可能会产生误导,认为发现错误是软件测试的唯一目的,查找不出错误的测试就是没有价值的,事实并非如此。
首先,测试并不仅仅是为了要找出错误。通过分析错误产生的原因和错误的分布特征,可以帮助项目管理者发现当前所采用的软件过程的缺陷,以便改进。同时,这种分析也能帮助我们设计出有针对性的检测方法,改善测试的有效性。
其次,没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。
因此,软件测试可以验证软件是否满足软件需求规格说明和软件设计所规定的功能、性能及其软件质量特性的要求,为软件质量的评价提供依据。我们要注意的是软件测试只是软件质量保证的手段之一,不能单凭测试来保证软件质量。
2、测试的类型
软件测试方法一般分为两大类,分别为动态测试和静态测试。
(1)动态测试
动态测试指通过运行程序发现错误,分为黑盒测试法、白盒测试法和灰盒测试法。
不管是哪一种测试,都不能做到穷尽测试,只能选取少量最有代表性的输入数据,以期用较少的代价暴露出较多的程序错误。这些被选取出来的数据就是测试用例(一个完整的测
试用例应该包括输入数据和期望的输出结果)。
黑盒法
_______________
把被测试对象看成一个黑盒子,测试人员完全不考虑程序的内部结构和处理过程,只在软件的接口处进行测试,依据需求规格说明书,检查程序是否满足功能要求。
常用的黑盒测试用例的设计方法有等价类划分、边值分析、错误猜测、因果图和功能图等。
等价类划分:将所有可能的输入数据,划分为等价的部分,然后从每个部分中选取少数有代表性的数据作为测试用例。等价类可以分为有效等价类(即合理、有意义的数据集合)、无效等价类(即不合理、无意义的数据集合)两种。而在选取测试用例时,应遵从"设计一个新的测试用例时,应尽可能多地覆盖尚未覆盖的有效等价类;但每次应仅覆盖一个尚未覆盖的无效等价类"的原则。
边界值分析:它是对等价类划分法的一个补充,即选取正好等于、刚刚大于或刚刚小于边界的值作为测试数据。
错误推测法:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例。
因果图:等价类划分、边界值分析都只考虑了输入条件,未考虑输入条件间的联系,而因果图则用来描述多种条件组合的测试用例,其最终生成的结果是判定表。
它首先基于规格说明书分析原因(等价类)和结果(输出条件);然后找出原因与结果之间的关系,画出因果图;在因果图上加上约束或限制条件;将其转换为判定表;根据判
定表得出测试用例。
功能图:它是由状态迁移图和逻辑功能模型构建的,状态迁移图用于表示输入数据序列以及相应的输出数据;逻辑功能模型用于表示在状态中输入条件与输出条件之间的对应关系。测试用例则是由测试中经过的一系列状态和在每个状态中必须依靠输入/输出数据满足的一对条件组成的。
白盒法
_______________
把测试对象看作一个打开的盒子,测试人员须了解程序的内部结构和处理过程,以检查处理过程的细节为基础,对程序中尽可能多的逻辑路径进行测试,检验内部控制结构和数据结构是否有错,实际的运行状态与预期的状态是否一致。
由于白盒测试是结构测试,所以被测对象基本上是源程序,以程序的内部逻辑为基础设计测试用例。
常用的白盒测试用例设计方法有基本路径测试、循环覆盖测试、逻辑覆盖测试。
逻辑覆盖:以程序内部逻辑为基础的测试技术,如常用的语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、点覆盖、边覆盖、路径覆盖。
- 语句覆盖是指选择足够多的测试用例,使得运行这些测试用例时,被测程序的每个语句至少执行一次。很显然,语句覆盖是一种很弱的覆盖标准。
- 判定覆盖又称分支覆盖,它的含义是不仅每个语句至少执行一次,而且每个判定的每种可能的结果(分支)都至少执行一次。判定覆盖比语句覆盖强,但对程序逻辑的覆盖程度仍然不高。</