基于组合测试的V&V单元测试用例设计研究

2012-10-16 07:38:08李运坚
太原科技大学学报 2012年2期
关键词:测试用例值域子集

刘 博,李运坚,张 磊

(北京广利核系统工程有限公司,北京 100094)

单元测试(Component Testing)是在软件开发过程中必要的基础测试活动之一,为实现软件预期的质量和性能提供了有力保障。特别是在核电数字化安全级系统中,单元测试是提前发现软件缺陷和保证安全系统平台正常运行的有效措施,在V&V(Verification and Validation)标准 IEEE 1012 Software Verification and Validation[1]与美国核管会审查导则RG1.171[2]中分别强调了单元测试的必要性。

在核电安全级应用软件中,软件单元(Software Component)的边界划分并无明确规定[3]。单元既可以指一个函数(工程组态中封装的模块),如“与门”、“二取一表决器”运算,也可以代表一个基本的软件功能,如“超温超压停堆保护”。通常情况下,为了保证测试的全面性,软件单元的界定往往更倾向于后者,函数功能则在平台测试中完成。因此,安全级应用软件的一个单元会包含大量的输入信号和控制逻辑运算,输入信号值域的组合代表不同的工况。如果将每个单元的工况都测试一遍,意味着要穷举输入变量的取值组合,测试用例数量将以对数形式增长[4],但组合测试方法则可以有效减少测试用例数量。

Mandl首先将组合测试运用于软件测试中,对Ada编译器进行了两两组合测试和配对组合测试。在之后的大量研究当中表明,组合测试具有检测软件缺陷的能力[5]。根据Kuhn和Reilly对Mozila浏览器做的一项测试报告表明,70%的错误是由于相关的两个参数导致的,超过90%的错误是由3个以内的参数相互作用而引起的,要发现所有缺陷,覆盖强度仅需要达到6-way[6-7]。同时,美国国家标准和技术协会(NIST)的Kuhn等人通过4个软件系统研究组合测试的错误检出率,结果表明3组合覆盖(3-way covering)的错误检出率超过80%[8]。目前组合测试已广泛应用于兼容性测试和高度可配置的系统测试等[9]。

本文提出分级组合测试的概念,并以工程实例展示了这种方法生成测试用例的具体过程。

1 组合测试基本概念

组合测试方法是一种将系统中相互作用的因素值域组合,用尽可能少的测试用例,覆盖这些因素对系统的影响状况。例如,数字逻辑图1,若要发现其中“与门”的缺陷(输入条件B与输出短接),一般情况下穷举需要8(23)个测试用例才能发现错误,如表1所示。然而,组合测试只需要运用两两覆盖(pairwise covering)4个测试用例即可,如表2所示。

图1 数字逻辑图Fig.1 Digital logic diagram

表1 常规测试方法Tab.1 General testing method

表2 两两覆盖组合测试Tab.2 Pairwise covering test

表1中第二个测试用例可以检测出逻辑错误,表2中第一个测试用例可以检测出逻辑错误。

根据变量的取值范围、采用的覆盖标准和测试强度,可以将组合测试用例分为4类[9]:正交矩阵(Orthogonal Array)、覆盖矩阵(Covering Array)、混合水平覆盖矩阵(Mixed Level Covering Array)和可变强度覆盖矩阵(Variable Strength Covering Array)。

1.1 正交矩阵

正交测试法是基于数理统计和概率论的一种经验设计技术,利用已有的标准正交表处理多因素实验问题[10]。正交表实际是一个二维矩阵(又称正交矩阵),可以实现两两参数覆盖的测试要求。针对不同的参数数量和值域范围,选择适当的正交表,即可得到优化的测试用例。

根据大量理论和实践证明,正交测试的优势主要有[11]:(1)保证所有参数变量成对组合;(2)生成的测试集在组合全集中是均匀分布的;(3)与人工生成测试集相比,不会遗漏某些变量组合,可靠性高,实现过程简单。

正交表构造过程虽然简单,但是常用的标准正交表不能涵盖所有因素与水平的情况,因此在选择正交表的过程中往往需要测试设计人员调整因素与水平的数量,以满足现有的正交表。特别是对于核电应用软件,系统中同时包括数字与模拟变量,由于取值范围不同,构成混合水平正交表,很难从标准正交表中直接查到。例如:L4(23×45),则无法查到完全符合的正交表。

1.2 覆盖矩阵

一个值域大小为v的N×k覆盖矩阵,任意的N×t子矩阵包含了在v值域上所有大小为t的排列,可表示为 CA(N;t,k,v),其中 N 为测试用例数,t为测试强度(strength),k为阶数(degree),v称为序(order)[12]。当一个覆盖矩阵有最小的行数时,这个最小行数称为覆盖数(covering array number),表示为CAN(t,k,v)。

通常情况下,测试强度为2的覆盖矩阵称为两两覆盖矩阵(pairwise covering array),即任意两列变量的取值组合全覆盖,前提条件要求矩阵的每列参数具有相同的值域。例如表2,是一个标准的覆盖矩阵,共4个测试用例,测试强度为2,阶数是3,序为2,矩阵表示为 CA(4;2,3,2)。

1.3 混合水平覆盖矩阵

一个值域大小为v的N×k混合水平覆盖矩阵,任意的N×t子矩阵包含了在相应值域上的所有 t元组,可表示为 MCA(N;t,k,v1,v2…vk)。与正交矩阵和覆盖矩阵不同的是每列参数的值域可以不同,即,vi代表第 i列参数的取值个数。

混合水平覆盖矩阵用于不同值域的参数变量进行组合测试。例如,假设表2中输入变量C的取值范围为{0,1,2},则可得到混合水平覆盖矩阵MCA(6;2,3,2,2,3),经过简化得 MCA(6;2,3,223)。

1.4 可变强度覆盖矩阵

可变强度覆盖矩阵 VCA(N;K,(n1,n2,…nk),())是 N ×k的矩阵,N 为矩阵行数,k为输入参数个数,ni代表第i个参数的值域为参数集合P的某个子集,但子集不构成对集合P的划分,ti是子集的测试强度。

一般地,强度为t的覆盖矩阵被称为t覆盖矩阵(t-covering array),要求在值域范围内,任意t个因素之间的取值组合全覆盖。

2 分级组合测试

分级组合测试是将一个系统划分成若干次级系统,各次级系统采用不同的测试强度生成测试用例子集后,在次级系统之间再次使用组合测试算法,最终生成单元测试用例。算法架构见图2.

图2 分级组合测试架构Fig.2 Structure of multi-level combinatorial test

核电安全级应用软件逻辑结构较复杂,使用分级组合测试前,必须找到系统的主干逻辑,在此基础上再划分次级系统。虽然核电安全级系统输入信号众多,但这些信号往往控制一个或几个执行机构,逻辑结构逐渐收敛,所以大部分系统能够找到其主干逻辑。

例如,以目前国内某二代改进型压水堆停堆保护的典型逻辑为例,“中间量程中子通量高时,产生停堆信号”,其主干逻辑是“P10不存在,或没有手动闭锁信号时,二选一表决逻辑产生紧急停堆信号”。按照功能需求,将P10、手动闭锁信号、二选一表决逻辑分别划分为3个次级系统。见图3,图中3个数字分别代表:①实现带降级“二取一”功能;②产生P10信号;③产生手动闭锁信号(注:允许信号P—在保护系统中需要设置一些允许功能,在一定条件下自动允许或抑制(闭锁)某些保护功能,或允许操纵员手动闭锁某些保护信号或禁止某些保护通道的动作;P10—判断功率量程中子通量测量值是否低于定值[13])。

图3 CPR1000中间量程中子通量高停堆逻辑Fig.3 Trip logic of CPR1000 high neutron flux intermediate range

2.1 次级系统①测试用例子集

次级系统①为“二取一”逻辑,由于带有降级功能,不能单纯运用组合测试,否则生成的用例不能保证覆盖所有降级功能,见表3.为了保证测试用例完全覆盖“降级功能”,采用人工选取与组合测试相结合的方法生成次级系统①的测试用例。

表3 带降级逻辑的“二取一”功能需求Tab.3 Requirement specifications of 1/2with degradation

这里介绍的方法是将旁通信号(F1、F2)与表决信号(A、B)分别讨论。旁通信号的所有组合形式见表4.表决信号采用两两组合覆盖,见表5.完成之后,将每种降级类型分别与表决信号组合,最终形成次级系统①的测试用例子集,见表6.降级类型Ⅱ有两种旁通信号组合,用例子集中至少选用其中一种组合形式。

2.2 次级系统②测试用例子集

鉴于P10信号的重要性与逻辑结构的复杂性,需要单独进行测试。然而,P10与“中间量程中子通量高,保护停堆功能”有重要交互接口,故作为桩函数出现在单元测试用例中,值域范围{0,1}。

表4 旁通信号组合Tab.4 By-pass signal combination

表5 表决信号组合(两两组合覆盖)Tab.5 Voting signal combination(pairwise covering)

表6 次级系统①测试用例子集Tab.6 Test cases of sub-system ①

2.3 次级系统③测试用例子集

次级系统③的功能是产生手动闭锁信号,逻辑中没有涉及典型工艺,不需要再次分级或采用其他辅助方法生成测试用例,可直接选择pairwise covering,或者3-way covering以达到更高的测试强度。表7为采用pairwise covering生成的测试用例子集,达到任意两个输入变量的值域组合全部覆盖。

表7 次级系统③测试用例子集Tab.7 Test cases of sub-system ③

2.4 单元测试用例

①、②、③三个次级系统的测试用例子集运用组合测试的方式生成覆盖矩阵,得到最终的单元测试用例。当测试强度为pairwise covering,生成混合覆盖矩阵 MCA(48;2,3,12,2,4),见表 8.如果测试强度为3-way covering,则生成混合覆盖矩阵MCA(96;3,3,12,2,4)。

“V&V Smart”工具可一次性完成以上步骤。输入每个次级模块的输入变量后,直接输出最终单元测试用例。软件操作界面如图4.除变强度组合测试外,此软件同时适用于非经典组合测试,如:种子组合[14],参数之间的限制[15]等。

图4 V&V Smart工具Fig.4 V&V Smart tool

3 分级组合测试优势

分级组合测试算法的优势主要有3点:

(1)减少测试用例数量。如果采用穷举法,本文中的测试单元将生成256(28)个测试用例。如果使用分级组合测试,见表8,只生成了48个测试用例,减少用例81.25%。同时,覆盖了表4中的3种降级类型、表5中表决信号的4种组合方式与表7中两两信号之间的全部组合,满足测试需求。

(2)灵活调整测试强度。根据次级模块在被测单元中的重要性程度,指定不同的测试强度,合理调整测试重点。如,次级系统①加入人工辅助分析,充分覆盖测试需求;或次级系统③可选择更高的测试强度。

(3)算法简单,易于软件实现。分级组合测试算法原理简单,可以借助软件实现计算过程,本文利用自行开发的工具“V&V Smart”自动生成单元测试用例。

4 总结与展望

针对核电安全级应用软件输入变量较多,设计单元测试用例困难特点,研究了被工业界广泛应用的组合测试方法[5]后,在实际项目背景下提出了分级组合测试的概念。分级组合测试在保证覆盖测试需求的前提下,不仅可以减少测试用例数量,而且算法简单,易于软件实现,为核电应用软件的单元测试提供了一种可行的实现方法。

未来的研究方向主要包括以下几个方面:(1)针对核电系统的特点,选择适合项目的组合测试用例生成算法,例如贪心算法[16]、元启发式搜索方法[17]、完备搜索算法等[18]。不同算法对覆盖率、生成用例速度和数量的要求各不相同,通过实际项目检验每种算法的适用性。(2)分级组合测试面对某些核电典型逻辑仍需要人工分析,例如:次级模块①“带降级的二取一逻辑”。如果可以统一算法,不再需要测试人员分析,将提高测试效率。(3)组合测试具有较高的错误检出率是通过实验得出的结论[19],如何建立可靠性模型定量的分析组合测试对核电应用软件可靠性的影响,是一个值得研究的方向。

表8 单元测试用例Tab.8 Component test cases

[1]Software Engineering Standards Committee of the IEEE Computer Society.IEEE Std 1012-2004,IEEE Standard for Software Verification and Validation[S].

[2]Regulatory Guide 1.171,U.S.Nuclear Regulatory Commission[S].

[3]IEC 60880 Nuclear power plants-instrumentation and control systems important to safety-Software aspects for computer-based systems performing category A functions[S].2006.

[4]GODBOLE A P,SKIPPER D E,SUNLEY R A.t-Covering arrays:Upper bounds and Poisson approximations[J].Combinatorics,Probability and Computing,1996,5:105-117.

[5]YAN J,ZHANG J.Combinatorial Testing:Principles and Methods[J].Journal of Software,2009,20(6):1393-1405.

[6]KUHN D R,WALLACE D R,GALLO A M.Software Fault Interactions and Implications for Software Testing[J].IEEE Transactions on Software Engineering,2004,30(6):418-421.

[7]KUHN R,LEI Y,KACKER R.Practical combinatorial testing:Beyond pairwise[J].IT Professional,2008,10(3):19-23.

[8]CHEN C,WANG F T,ZHAO S C.Orthogonal Test and Its Application in Software Test Case Design[J].Computer Applications and Software,2008,25(7):158-160.

[9]CHEN X,GU Q,WANG X P,CHEN D X.Research Advances in Interaction Testing[J].Computer Science,2010,37(3):1-5.

[10]LEE Copeland.A Practitioner's Guide to Software Test Design[M].London:Artech House,2003.

[11]TANG H X,FANG M Y,LIU M,et al.Test Case Generation for Software Based on Orthogonal Experiment Design[J].Computer Engineering and Design,2008,29(14):3673-3676

[12]NIE C H,XU B W,SHI L.A new pairwise covering test data generation algorithm for the system with many 2-level factors[J].Chinese Journal of Computers,2006,29(6):841-848.

[13]广东核电培训中心.900MW压水堆核电站系统与设备[M].北京:原子能出版社,2005.

[14]DALAL S R,JAIN A,KARUNANITHI N,et al.Model-Based testing in practice[C]//the Int'21 Conf on Software Engineering.New York:ACM Press,1999:285-294.

[15]CZERWONKA J.Pairwise testing in real world:Practical extensions to test case generators[C]//Butt D,Gens C,eds.Proc of the 24th Pacific Northwest Software Quality Conf,2006.

[16]COHEN D M,DALAL S R,FREDMAN M L,et al.The AETG system:An approach to testing based on combinatorial design[J].IEEE Trans.on Software Engineering,1997,23(7):437-443.

[17]CZERWONKA J.Pairwise Testing[EB/OL].[2011-9-14].http://www.pairwise.org/

[18]YAN J,ZHANG J.Backtracking algorithms and search heuristics to generate test suites for combinatorial testing[C]//Wong J,ed.Proc.of the IEEE Annual Int’1 Computer Software and Applications Conf(COMPSAC).Los Alamitos:IEEE Press,2006:385-394.

[19]WANG Z Y,XU B W,NIE C H.Survey of Combinatorial Test Generation[J].Journal of Frontiers of Computer Science and Technology,2008,2(6):571-588.

猜你喜欢
测试用例值域子集
由一道有关集合的子集个数题引发的思考
拓扑空间中紧致子集的性质研究
函数的值域与最值
基于SmartUnit的安全通信系统单元测试用例自动生成
关于奇数阶二元子集的分离序列
多角度求解函数值域
值域求解——一个“少”字了得
基于混合遗传算法的回归测试用例集最小化研究
破解函数值域的十招
每一次爱情都只是爱情的子集
都市丽人(2015年4期)2015-03-20 13:33:22