冯济舟 项利萍 刘梦飞
(中国电子科技集团第三十八研究所,安徽 合肥 230088)
黑盒预处理功能可测试性的研究
冯济舟 项利萍 刘梦飞
(中国电子科技集团第三十八研究所,安徽 合肥 230088)
通过对黑盒预处理功能可测试性的数学建模和理论证明,总结出可测试性黑盒预处理功能的判定步骤和测试方法,并通过一个实例进行详述。
黑盒预处理功能;可测试性;数学建模;理论证明
软件测试作为能力成熟度模型集成(CMMI,Capability Maturity Model Integration)验证(Verification,Ver)和确认(Validation,Val)过程域的重要实现手段,是软件生命周期模型中的重要阶段,是保证软件质量的重要途径。近年来,随着软件规模和复杂程度的不断提高,软件测试的难度也不断提高。
预处理是软件执行流程中最早经历的处理过程,是软件系统重要的组成部分。如果预处理功能出现问题,即使之后的业务功能均实现正确,最后也都会导致软件运行结果的失败。但是当出现测试结果失败时,由于没有定位到问题的来源,软件开发人员往往将排查问题的重心放在核心业务功能的实现上,如此造成了开发时间、开发资源和成本的浪费,进而导致软件项目进度的延误。
如图1所示黑盒软件基本流程图,图中的被测软件通过对输入进行预处理后转入实际功能模块,通过实际功能的输出判定软件是否满足用户的需要。在此情况下,当软件输出出现问题时,我们无法断定究竟是软件预处理功能的错误,还是软件实际功能的错误。然而在实际过程中,预处理功能往往是用户重要的隐性需求,并且预处理功能的正确实现往往是整个系统能否正确实现的前提,在软件结构流程中起到至关重要的作用。那么既然黑盒测试是把软件看成一个不可被打开的盒子,测试人员就不清楚黑盒内部的代码逻辑和处理过程,那么属于黑盒部分的预处理功能,如何才能通过测试来得到验证呢?况且目前的资料、文献中没有关于黑盒预处理功能测试方法的介绍,那么黑盒预处理功能测试果真没有什么方法可以实现吗?
图1 软件基本流程图
1.1 问题建模
根据图1所示的软件结构流程,抽象出由功能A、功能B和功能C为元素表示的黑盒预处理功能可测性判定的数学模型,如图2所示。其中预处理功能以A功能表示,业务功能以B功能表示,C功能是A功能、B功能的顺次集成,即整个软件的黑盒部分。给定输入x,令输入x经过A功能处理后的预期输出为A(x),经过B功能处理后的预期输出结果为B(A(x)),可知输入x对于功能C的预期输出为C(x)=B(A(x))。假设在测试过程中,输入x对于功能C的实际输出C'(x)≠C(x),其原因可能在于:
(1)输入x对于功能A的实际输出A'(x)≠A(x),即软件的预处理过程发生错误;
(2)输入x对于功能A的实际输出A'(x)=A(x),但是经过B功能处理后的实际输出B'(A'(x))≠B(A(x)),即软件业务功能的实现存在问题。
由于黑盒测试中,我们无法获得预处理功能的实际输出A'(x),从而导致对软件故障无法进行准确定位。在下节中,我们提出了一种典型的预处理测试方法,该方法通过对输入数据的设计,对所得测试结果进行逆向反推,从而得到预处理功能实现正确性的判断。
图2 被测软件黑盒部分基本流程建模
1.2 测试方法
在图2中,考虑两组不同的输入x和y,且x和y满足A(x)=A(y),也即输入x和y经过预处理后的预期输出完全相同。又由于A(x)=A(y),可知B(A(x))=B(A(y))。对于输入x和y有以下引理1成立。
引理1:对于两组不同的输入x和y,且x和y满足A(x)=A(y)。在测试过程中,如果输入x和y对于功能C的实际输出B'(A'(x))≠B'(A'(y)),那么x和y对于预处理A的实际输出A'(x)≠A'(y)。
证明:采用反证法进行证明。假设B'(A(x))≠B'(A(y))时,A'(x)=A'(y)。按照命题假设A'(x)=A'(y),则A'(x)、A'(y)对于功能C的实际输出B'(A(x))=B'(A(y)),这与已知条件B(A(x))≠B(A(y))相矛盾,所以假设命题情况不成立。因此对于输入x和y,如果B'(A'(x))≠B'(A'(y)),那么A'(x)≠A'(y)。
根据引理1可知,如果输入x对于功能C的实际输出等于预期输出,也即B'(A'(x))=B(A(x)),则软件的预处理过程发生错误,也即以下定理1成立。
定理1:对于两组不同的输入x和y,且x和y满足A(x)=A(y)。在测试过程中,如果输入x和y对于功能C的实际输出B'(A'(x))≠B'(A'(y))、且B'(A'(x))=B(A(x)),那么可判断软件的预处理功能A存在错误。
证明:由B'(A'(x))=B(A(x)),可知A'(x)= A(x)。根据引理1,B'(A'(x))≠B'(A'(y))时,A'(x)≠A'(y),可知A'(y)≠A(x),也即A'(y)≠A(y)。从而可得输入y对于预处理功能A的实际输出A'(y)与预期输出A(y)不同。也即软件的预处理功能A存在错误。
根据定理1我们给出判定此种黑盒预处理测试典型方法的算法,其具体判定步骤如下:
步骤1,从软件需求中找出可以得到相等预期结果的不同输入;
步骤2,将这些不同输入录入到被测软件得出实际结果;
步骤3,若可以找出两组输入,其中一组不等于预期结果,另一组与预期结果相同,则可判断此软件预处理功能存在问题;若不相等的输入得到的实际输出结果都相同或都不同时,则不可判断此软件预处理功能存在问题。
2.1 问题描述
被测软件按功能处理流程划分可由预处理功能和处理备份件待机、备份件关机、主件待机和主件关机信号量功能组成。各功能处理过程描述如下。
2.1.1 预处理功能描述
备份件待机信号有4个,通过这4个信号来确定一个最终备份件的待机信号fdj。其中qd表示启动;fdji(i=1,2,3,4)表示备份件待机;fgji(i=1,2)表示备份件关机;dj表示主件待机;gj表示主件关机;fgj1表示备份件1、3关机,fgj2表示备份件2、4关机。
2.1.1.1 确定最终的备份件待机信号的计算方法如下。1)置fdj初始值为157 300+qd;2)令N为提供的信号量个数。如果N≥3,将提供的fdji信号按从小到大排序,如果第一个数(也即最小的数)大于等于141 000+qd,则找第三个数作为fdj;3)如果fdj>157 300+qd,则fdj=157 300+qd。备份件关机信号有两个,通过这两个信号来确定一个最终的备份件关机信号fdj。
2.1.1.2 确定最终的备份件关机信号的计算方法如下。1)置fdj初始值为157 300+qd;2)令N为提供的信号量个数。如果N=2,且min{fdj1,fdj2}≥141 000+qd,那么fgj=max{fgj1,fgj2};3)如果fgj>157 300+qd,则fgj=157 300+qd。
2.1.2 处理备份件待机、备份件关机、主件待机和主件关机信号量功能描述。
如果备份件待机信号最先到达(fdj=min{fdj,fgj,gj,dj}),如果备份件待机信号先于备份件关机信号到来(不包括同时),则在fdj时刻转B状态,否则在fgj+1 700时刻转B状态。
被测软件处理流程图如图3所示。
图3 被测软件处理流程图
2.2 可测性分析和判定
根据2.1.1.1的需求描述可知,本例中存在两个不同的黑盒部分输入fdj1=fdj2=fdj3=141 280,fgj1=fgj2=155 500,dj=171 200,gj=172 200,qd=200和fdj1=fdj2=141 280,fdj3=141 200,fgj1=fgj2=155 500,dj=171 200,gj =172 200,
qd=200,可以得出两个相同的黑盒部分预期输出结果。而实际输出的结果中一个与预期结果相同,一个与预期结果不同,满足了黑盒预处理功能可测性判定模型的条件,因此此例的黑盒预处理功能是可测的。被测软件处理流程与软件结构流程的等效关系如图4所示。
图4 被测软件处理流程与软件结构流程的等效关系图
2.3 测试方法及分析
第一组输入数据:fdj1=fdj2=fdj3=141 280,fgj1=fgj2=155 500,dj=171 200,gj=172 200,qd=200。
预期结果:系统在预处理输出值(即fgj=141 280) 时刻转B状态。
实际结果:系统在预处理输出值(即fdj=141 280) 时刻转B状态。
可以证明当A(x)=fdj=141 280时,B(A(x))的结果是141 280时刻转B状态。
第二组输入数据:fdj1=fdj2=141 280,fdj3=141 200,fgj1=fgj2=155 500,dj=171 200,gj =172 200,qd=200。
预期结果:系统在预处理输出值(即fdj=141 280) 时刻转B状态。
实际结果:系统在预处理输出值(即fdj≠141 280) 时刻转B状态。
第二组输入数据等效于B(A(x))的输出结果是未在141 280时刻转B状态,即A(x)的输出结果fdj≠141 280,而根据软件需求规格的描述,此时的fdj应该等于141 280,因此说明等效于A(x)的被测软件预处理功能出现问题。
本文通过建立问题的数学模型、理论证明的方法,论证了黑盒预处理功能的可测试性,提出了一种黑盒预处理功能的测试方法,并通过一个具体实例论述了此方法使用的全过程。本文开创性地提出了关于黑盒预处理功能测试的方法,在一定程度上填补了此类型测试方法的空白。
(编辑:劳边)
TP306
C
1003–6660(2014)04–0046–03
10.13237/j.cnki.asq.2014.04.012
[收修订稿日期] 2014-02-16