何斌,卞付国,孙俊若,汪圣利
(1.中国电子科技集团公司第十四研究所,江苏南京 210039;2.上海机电工程研究所,上海 201109)
随着航空电子技术的发展,雷达软件也集成了诸如实时资源调度、目标数据库识别和目标优先级管理等重要软件功能。这些软件需求的一个共同特点是:输入参数多且耦合关系复杂,输出结果多元且离散。如果将这类软件需求简单地分解成多个子功能进行测试设计,也可以得到符合某种测试覆盖要求的测试用例集,但这实际上人为地割裂了参数之间的有机联系,发现缺陷的能力较低。对于复杂软件需求,采用何种测试方法能够在保证测试效率的前提下提高缺陷发现率,是雷达软件测试中一个值得深入研究的课题[1]。
在软件动态测试过程中,组合测试和基于约束关系的变种组合覆盖测试设计方法被越来越多地应用于软件测试设计中[2]。它们能够较好地解决输入参数之间存在复杂耦合关系的问题,但对于运行结果存在多个平行、离散输出的软件需求,鲜有从输出端回推输入参数影响的组合测试设计方法。
本文在分析改进的组合覆盖测试设计方法的基础上,提出了一种基于I/O关系的组合测试方法,并给出了雷达跟踪波形管理软件需求的具体测试设计实例。
组合测试是一种利用组合设计方法产生能覆盖规定强度要求的测试设计方法。经典的组合测试是基于变量 (输入参数)权值平均且相互之间是隔离的开展的,解决的问题主要是当变量和水平 (参数取值)数目较多时带来的测试成本高和测试效率低的问题[3];实际的软件系统中存在输入参数权重不等和参数之间的耦合程度不同的问题,因此非经典组合测试设计方法近年来逐渐地得到了软件测试人员的重视[4-9]。王子元等针对一类特殊的软件系统提出了相邻因素组合测试的概念;曾劲涛等依据参数约束关系,提出了一种改进的IPO算法,新算法较经典的AETG方法高效;汪存燕等提出了利用约束关系对空间树进行裁剪的组合覆盖算法;张卫祥等将故障树分析法应用于因素关系分析过程,针对关系紧密的因素组合设计测试用例;李龙澍等提出了一种基于参数重要性程度不同的权值参数组合覆盖算法,使得测试具有一定的针对性。
上述研究拓展了组合测试的应用范围,特别是文献 [9]基于输入空间的约束关系选择合适的强度组合,改进了变强度组合测试方法,不仅在一定程度上约简了测试用例集规模,还具有很好的测试针对性。对于复杂软件功能,如果同时考虑输出空间对输入空间的影响,将输出与输入的因果关系作为先验信息应用于因素关系分析,减少参与组合的变量个数,则可进一步地优化组合覆盖算法[10]。
基于I/O关系的组合覆盖测试方法如图1所示。
图1 基于I/O关系的组合覆盖测试算法图
依据软件需求规格说明,参考用户输入和详细设计等文档分析测试需求,提取输入输出参数列表。分析过程中,尤其需要挖掘约束条件、异常处理、优先级别和时间特性等需求要素。
复杂软件需求的输出往往具有多元性和离散性,即输出可能是在有限值域范围内的多个平行分布,也可能是多因素多条件综合判决后形成的数组序列。输出对输入的关系一般存在有关和无关两种。遍历每个独立输出,找出与之相关的输入参数进行分组,每个组是该软件需求的一个输入空间子集。这是对覆盖数组的第一次约简。
因素(输入参数)之间的相互关系一般分为3类,如表1所示。
表1 因素关系表
因素关系分析是影响基于I/O关系组合测试成败的关键步骤。雷达软件测试在工程实践中,将因素关系分析作为测试需求分析阶段的一个重要组成部分。以软件开发文档集为基础,采用多种技术,例如:风河软件的WindView、GNU性能分析工具Gprof[11]、任务调度时序分析和数据流图分析等,多角度、多维度获取影响因素交互关系的背景信息,提高因素关系分析的正确性和成功率。一个可行的因素关系分析过程如图2所示。
完成因素关系分析后,遍历每个输入参数,基于约束和覆盖信息,剔除互斥的组内参数取值组合。这是对覆盖数组的第二次约简。
图2 因素关系分析过程图
研究表明70%~80%的软件缺陷可以由强度为2的组合测试捕获,90%以上的软件缺陷可以由强度为3的组合测试捕获[2];而雷达研制工程经验数据表明,绝大部分的雷达软件缺陷都是由单因素和双因素组合引起的。因此,基于I/O关系的组合测试的强度为2。
基于约束关系的组合测试用例生成一般采用改进的AETG算法、改进的IPO算法和基于onetest-at-a-time策略的算法[5,9]等等,而文献 [12-13]提出的正交矩阵构造法也有一定的实践价值。正交矩阵法是一种实现两两参数覆盖的组合测试算法,利用正交表可以方便地完成覆盖数组到测试用例的生成[14],但对覆盖数组有严格的要求,这大大地限制了正交矩阵法的应用,例如:当某个变量存在与其他变量不同的取值时,则正交矩阵法将不可用。通过表2中所示的两种途径可以扩展正交矩阵法的应用范围。
表2 正交矩阵应用扩展途径表
可以根据覆盖数组的结构合理地选择上述组合覆盖算法生成测试用例集。
将所有组的覆盖结果进行直接合并,即可得到最终的测试用例集。
可以看出,与普通组合法后期约简用例的做法不同,基于I/O关系的组合覆盖测试的设计过程实际上就是通过分析软件具体实现逻辑,找到输入与输出以及输入参数之间的关系,并利用此关系在设计过程中不断地约简输入参数组合的过程。
本节以某机载雷达跟踪波形管理测试需求为例,介绍将基于I/O关系的组合覆盖测试方法应用于雷达软件复杂功能的测试设计的过程。
机载雷达需根据目标特性、干扰分布等内外部影响,选择合适的波形,使得目标落在时频域二维清晰区最大且雷达费效比最优。首先,对该功能的输入空间进行分析,得到目标距离、目标速度、目标信噪比、跟踪序列、干扰标识、杂波模型和目标特征7个输入参数,等价类划分后得到参数取值如表3所示;输出为常规波形组、高功率波形组和掩护波形组。
表3 输入参数取值
分析这7个输入参数和3个输出结果之间的包含和关联关系,可以得到跟踪波形选择功能的I/O关系,如图3所示。
图3 I/O关系图
根据图3的分析结果,得到3个组,分别为:第一组, Y1={I1, I2, I3, I4,I5, I6}, 第二组, Y2={I3,I4, I7}; 第三组, Y3={I5,I6, I7}。
分析组内参数之间的相互作用关系,可得到组1中的i23对组内其他参数的取值有覆盖作用 (单独生成1个用例);利用此关系,得到约简后的覆盖数组。其中,第一组为2强度6变量的混合覆盖数组,表示为Y1(6;2,2442);第二组为2强度3变量的混合覆盖数组,表示为Y2(3;2,224);第三组为2强度3变量的混合覆盖数组,表示为 Y3(3;2, 242)。
第一个混合覆盖数组采用改进的AETG算法,可得到总数是16的测试用例子集,如表4所示。
同理,第二组和第三组可分别得到总数是4和6的测试用例子集。
最后将这3个组的测试用例子集相加,即可得到该测试需求的测试用例数为27个。
基于I/O关系的组合覆盖测试方法得到的用例集与利用其他测试方法得到的用例集的比较如表5所示。
表5 不同用例集比较
综上所述,基于I/O关系的组合测试方法是在测试需求分析阶段全面搜集输入和输出参数信息,在测试设计过程中依据输出结果对输入的影响和输入参数之间的制约关系不断地约简覆盖数组,再利用改进的贪心算法或正交矩阵构造法等完成从混合覆盖数组到测试用例集的生成过程。这种方法实际上是一种灰盒测试技术,是将软件内部逻辑作为先验信息应用于软件测试设计过程中,其优点是测试覆盖全面、测试用例集精简且缺陷发现能力强,缺点是与软件设计高度耦合,既考验软件测试人员的系统分析能力,同时当软件内部实现更改频繁时,测试用例集维护工作量也较大。后期在测试实践中考虑将变强度组合测试应用于优先级高的软件需求,可以进一步地提高测试针对性,提高测试缺陷发现率。