两种黑盒测试方法的比较分析

2018-02-25 02:39张新焦豪
电子技术与软件工程 2018年7期
关键词:软件测试

张新 焦豪

摘要 软件应用于几乎所有的科学技术领域。一款特定软件的用户类别取决于他们的认可以及软件的质量。软件开发人员有责任确保软件没有缺陷,并且可以执行所需要的功能。软件测试是软件开发生命周期阶段的一项重要工作。各种研究分析表明软件测试占了整个软件开发工作的30%。所以测试对于提高软件质量有至关重要的作用。软件测试主要包括单元测试、集成测试和系统测试。单元测试基本有两种测试方法:黑盒测试和白盒测试。本文分析了黑盒测试方法和相关问题。

【关键词】软件测试 黑盒测试 等价类划分边界值分析

1 引言

软件测试是一项涉及到人类心理学和经济学的技术性工作。一些测试人员对测试的误解是这样的:“软件测试就是证明软件不存在错误的过程”或者:“测试是确保开发的软件能够满足其所有功能和非功能需求的过程”。虽然这两个观点理论上看起来是完美的,但是对于测试,更为合适的定义应该是:“测试是为发现错误而执行程序的过程”。这个定义包含以下两点:

(1)这并不是要证明这个软件是错误的;

(2)测试人员在测试之前应该假设程序存在错误。

软件测试也可以被描述为确认和验证软件或应用程序是否符合指导其设计和开发的业务和技术功能需求的过程。确认和验证是确保软件满足软件需求规范文档中提及的要求并且满足其预期功能的过程。它可以被认为是确保软件质量的一种方法。

为了分析各种测试方法,首先我们必须知道软件测试中使用的基本术语。

测试用例(Test case):测试用例是为了特定的测试场景设计的一组测试输入、执行条件以及预期结果,以确保是否符某个特定的功能需求。以在两个输入的整数中找出最大的程序来示例,然后可以设计出以下测试用例:

Integer l=2 and Integer 2=4

Integer l=4 and Integer 2=2

Integer l=-3 and Integer 2=-2

Integer l=-2 and Integer 2=0

Integer l=1 and Integer 2=1

测试套件( Test suit):在数学上是由所有的测试用例作为元素组成的集合。通过测试套件,将服务于同一个测试目的或同一运行环境下的一系列测试用例有机的组合起来。测试套件可能有无数个测试用例。一个好的测试套件涵盖了大多数错误,包含最少的测试用例。对于上面提到的计算两个整数中最大值的程序,测试套件可以有如下定义:

{(2,4), (4,2), (.3,.2), (.2,0), (1,1))

误差(Error):误差是实际结果和预期结果不匹配的程度,它代表了代码开发人员所犯的错误。错误是测试人员发现的,当开发人员接收这个错误时,它就被称为bug。

故障(Fault):故障是在计算机程序中使程序产生意想不到结果的不正确的指令、函数或数据解释。故障会导致错误。

程序错误(Bug):Bug是代码块中产生意外结果的错误。这通常是开发人员接受的错误。

失败( Failure):失败是软件系统无法执行其预期的功能和非功能要求。

缺陷( Defect):缺陷是程序员在编码或者逻辑中犯的错误,它会导致程序产生错误或偏差。通常在发生故障时检测到缺陷。

2 软件测试方法

软件测试工作包括四个阶段:

(1)设计一个适当的测试套件来执行所有的代码行。

(2)执行每个测试用例来查找代码块中的错误。

(3)通过检查测试结果来确定错误的来源。

(4)修改程序来修复Bug。

软件产品通常要经过三个层次的测试:单元测试、集成测试和系统测试。单元测试是指依据详细的设计描述,对每一个功能相对独立的程序模块进行测试。单独的单元测试模块被组合或集成在一起形成软件。在此级别的集成模块上执行的测试成为集成测试。集成模块可以是自下而上、自上而下或者混合的。集成后的软件应具备所有所需求的功能,这可以通过执行系统测试来保证。

3 单元测试

我们使用合适的示例程序代码来分析各种单元测试测试方法。考虑具有以下字段的特定网站的设置页面:

姓名:char [50]

性别:char

系统时间:DD/MM/YYYY

可以认为这个设置页面是软件的一个单元模块。因此,在开发这个模块之后,我们必须通过执行其预期的功能来确保该单元成功执行。首先应用单元测试,其中包括黑盒测试和白盒测试。黑盒测试检查软件系统的功能方面,而白盒测试验证软件系统的逻辑方面。

黑盒测试人员不需要知道内部逻辑或程序结构,因为内部逻辑方面是不被测试人员所熟知的。就像测试人员用黑盒子遮挡了内部结构,不知道系统组建是如何在盒子内部构成。在黑盒测试中,测试人员关注的是软件的功能而不是软件怎么开发出来的。表1列出了黑盒测试和白盒测试策略之间的对比。

我们通过应用两种黑盒测试方法来分析我们的测试模块:等价类划分法和边界值分析法。

等价类划分法就是把输入划为若干部分,从每个部分中选取少量的代表性数据,来对被测应用进行测试的黑盒测试方法。测试人员面临的挑战是设计一个最小的测试套件。在这個方法中,整个输入集被划分成不同的子集或类。每个类代表一组具有相似特征和规格的测试输入。根据输入约束条件,每个子集或者多个类可能是有效的也可能是无效的。在等价类划分技术中,我们假设一个类中的所有条件都将以相同的方式处理,所以只需要从每个子集或者分区类中测试一个条件。如果分区类中的一个条件有效,我们假设该分区中的所有条件都可以工作,如果分区类中的某个条件不起作用,那么我们假设该分区中的任何条件都不起作用。

对于一个只接受两位整数的应用程序,有效类等价是从10到99的整数。在这种情况下的无效分区是十进制数、小于10的整数、大于99的整数、非数字字符等。

可以对注册页面字段分析如下。

3.1 姓名

字符集表示一组字母和空格。让字符集C={A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,e g,h,I,j,k,1,m,n,.,p,q,r,s,t,u,v,w,x,y,z,‘)。那么将会有一个有效的等价类接受集合C的所有元素,而補集C是一个无效的等价类别。所以我们可以从两个分区中选择任意一个随机元素来设计测试套件。

Test suite={C,4}

其中C是来自有效分区的元素,而4是来自无效分区的元素。

3.2 系统时间

系统时间字段的月份可以从1到12取值,但也会有一个有效的分区和两个无效的分区。用“m”表示月份值:

有效类:l

无效类1:m

无效类2:m>12(值大于12)

所以代表每个分区的3个测试用例组成了最小的测试套件Test suite={-4,6,15)。在基于月份的各种组合中,可以应用于相同的日期字段。

3.3 性别

性别有三种可能的输入。男(M),女(F)或其他(o)。设G={M,F,0)表示有效类,则G表示无效等价类。

大多数程序开发人员在编写条件语句时会在边界值上犯错。边界值分析基于在各子类或分区之间的边界处的测试。在这里我们既有有效的边界,也有无效的边界。在输入域边界出现的错误数量比“中间”多。它在每个子类的边缘选择测试用例。测试人员在进行边界值分析的时候应该注意两点准则:

(1)如果输入条件指定了m和n之间的值范围,则测试用例应设计为值m和n以及刚好在m和n之外的值。测试套件={m,n,m-l,n+l}

(2)如果输入条件指定了若干值,则测试用例应设计为最低和最高的数字。刚刚超过最低和最高的值也应该要测试。

以输入字段在哪个月作为输入数据,有效的输入应该是从1到12的任何整数,因为一年只有12个月。如果用户输入数据为“20”,那么系统就不应该接受。因此这个输入用例的各个分区是:

有效分区:从l到12的数字集合

第一个无效分区:小于1的数字集合

第二个无效分区:大于12的数字集合

在上述情况下,在边界值分析中的边界值是1和12。我们必须选择刚好小于最小边界值的值和刚好大于最大边界值的值。因此,我们应该选择刚好在l以下、刚好在12以上的数字以及l和12。

测试套件={0,1,5,12,13)

4 测试分析

如图l所示,我们可以用下面的C语言程序分析这个单元测试方法,来验证系统时间的月份字段。

在上面的案例中,如果我们采用等价划分测试套件的方法,将会得到以下的测试结果。见表2。

因此,上述程序代码完美使用于等价划分测试套件。现在我们使用边界值分析测试套件来分析相同的代码,测试报告如表3所示。

边界值分析法可以识别出等价类划分法中无法直接识别的错误。

性别字段表示为一组有效的输入“M”和“F”,在这种情况下,输入变量代表了一个集合而不是一个取值范围。在这里边界值划分法无法使用,但是可以进行等价类划分。

一个好的测试人员对一个模块进行单元测试应该同时遵循等价类划分和边界值分析来确保它的可靠性,这两种黑盒测试方法确保系统满足其特定功能。

5 结果

从分析中可以推导出输入值与测试用例数量之间的以下关系。在边界值分析中,如果软件有“N”个输入变量,那么最小测试套件中将会有4N+1个测试用例。这可以通过一个变量的测试输入示例来证明。那么测试套件可能如下:

Test suit={最小值,最小值-1,最大值,最大值+1}

对于单个的变量输入,将会有上述四个测试用例。为了设计一个最小的测试套件,我们应该在中等范围内包含一个值,所以最小的测试套件中将会有5个测试用例。如下所示:

最小测试套件={最小值,最小值-1,正常值,最大值,最大值+1}

在等价类划分中,如果输入集有“N”个分区,那么在最小测试机中将会有“N”个测试用例。

因此,黑盒测试策略的分析研究表明,边界值分析比等价类划分得到的测试用例相对较多。

我们用标准测试指标分析了我们的系统时间模块。

(1)测试用例通过的百分比:该值表示执行测试的通过率。

在边界值分析中,测试用例通过%=(3/3)100=100%

在等价类划分中,测试用例通过%=(4/5)100=80%

(2)缺陷泄漏:缺陷泄漏是在测试进入下一阶段之后未发现的缺陷数量。

等价类划分法的缺陷泄漏=1;

边界值分析法的缺陷泄漏=o。

(3)最小测试套件大小:测试套件中测试用例的数量。

对于我们的系统时间模块:

等价类划分法的最小测试套件大小=3;

边界值分析大的最小测试套件大小=5。

(4)测试的时间:测试时间是根据测试套件的大小和覆盖区域来估计的。

边界值分析法的测试用例更多,所用的测试时间也更长。因此边界值分析法的测试工作相对于等价类划分法的测试工作更多。

(5)测试中发现缺陷的成本。

全部工作量=总功能点×每个功能点的权重

设定执行每个测试用例的工作量为1,

在边界值分析中:缺陷发现成本=5/1=5:

在等价类划分中:缺陷发现成本=3/0=0。

尽管图2中的大多数参数都在彰显边界值分析法的优点,但是在有些情况下等效类划分法比边界值分析法更为适用。分析研究表明,bug数量在边界值分析中有所增加。边界值分析法中增加的测试用例提高了bug识别率,但是对输入值的范围有所限制。因此如果输入变量是布尔值或者特定值,则采用等价类划分法。与边界值分析法相比,等价类划分法具有更多的缺陷泄漏。结果如表4所示。

6 结论

在模块化编程方法中,黑盒测试起着至关重要的作用。边界值分析法所设计的测试用例只能从其特定的等价类分区中生成,边界值分析法是对等价类划分法进行补充的测试用例设计方法,每种方法都有其优点和缺点。虽然边界值分析法比较费时,但是它的bug识别率也相对较高。两种测试方法的应用提高了软件的可靠性,同时也提升了软件质量从而使客户更加的满意。

参考文献

[1]B. Beizer, “Software TestingTechniques”.London: InternationalThompson Computer Press,1990.

[2] Glenford J.Myers.软件测试艺术(原书第2版)[M].机械工业出版社,2005.

[3]徐芳,软件测试技术[M].北京:机械工业出版社,2006.

[4]郑人杰.软件工程[M].北京:清华大学出版社,1999.

[5] Ron Patton.软件测试[M].机械工业出版社.2006.

猜你喜欢
软件测试
基于OBE的软件测试课程教学改革探索
基于MBD模型自动生成测试用例的软件测试方法
计算机软件测试方法的研究
EXCEL和VBA实现软件测试记录管理
关于软件测试技术应用与发展趋势研究
一种航空机载软件测试项目的进度改进模型
军用软件测试文档生成设计与实现
软件测试工程化模型及应用研究
智能电能表软件测试技术概述
《软件测试》课程教学策略研究