劉 博,李運(yùn)堅(jiān),張 磊
(北京廣利核系統(tǒng)工程有限公司,北京 100094)
單元測(cè)試(Component Testing)是在軟件開(kāi)發(fā)過(guò)程中必要的基礎(chǔ)測(cè)試活動(dòng)之一,為實(shí)現(xiàn)軟件預(yù)期的質(zhì)量和性能提供了有力保障。特別是在核電數(shù)字化安全級(jí)系統(tǒng)中,單元測(cè)試是提前發(fā)現(xiàn)軟件缺陷和保證安全系統(tǒng)平臺(tái)正常運(yùn)行的有效措施,在V&V(Verification and Validation)標(biāo)準(zhǔn) IEEE 1012 Software Verification and Validation[1]與美國(guó)核管會(huì)審查導(dǎo)則RG1.171[2]中分別強(qiáng)調(diào)了單元測(cè)試的必要性。
在核電安全級(jí)應(yīng)用軟件中,軟件單元(Software Component)的邊界劃分并無(wú)明確規(guī)定[3]。單元既可以指一個(gè)函數(shù)(工程組態(tài)中封裝的模塊),如“與門(mén)”、“二取一表決器”運(yùn)算,也可以代表一個(gè)基本的軟件功能,如“超溫超壓停堆保護(hù)”。通常情況下,為了保證測(cè)試的全面性,軟件單元的界定往往更傾向于后者,函數(shù)功能則在平臺(tái)測(cè)試中完成。因此,安全級(jí)應(yīng)用軟件的一個(gè)單元會(huì)包含大量的輸入信號(hào)和控制邏輯運(yùn)算,輸入信號(hào)值域的組合代表不同的工況。如果將每個(gè)單元的工況都測(cè)試一遍,意味著要窮舉輸入變量的取值組合,測(cè)試用例數(shù)量將以對(duì)數(shù)形式增長(zhǎng)[4],但組合測(cè)試方法則可以有效減少測(cè)試用例數(shù)量。
Mandl首先將組合測(cè)試運(yùn)用于軟件測(cè)試中,對(duì)Ada編譯器進(jìn)行了兩兩組合測(cè)試和配對(duì)組合測(cè)試。在之后的大量研究當(dāng)中表明,組合測(cè)試具有檢測(cè)軟件缺陷的能力[5]。根據(jù)Kuhn和Reilly對(duì)Mozila瀏覽器做的一項(xiàng)測(cè)試報(bào)告表明,70%的錯(cuò)誤是由于相關(guān)的兩個(gè)參數(shù)導(dǎo)致的,超過(guò)90%的錯(cuò)誤是由3個(gè)以?xún)?nèi)的參數(shù)相互作用而引起的,要發(fā)現(xiàn)所有缺陷,覆蓋強(qiáng)度僅需要達(dá)到6-way[6-7]。同時(shí),美國(guó)國(guó)家標(biāo)準(zhǔn)和技術(shù)協(xié)會(huì)(NIST)的Kuhn等人通過(guò)4個(gè)軟件系統(tǒng)研究組合測(cè)試的錯(cuò)誤檢出率,結(jié)果表明3組合覆蓋(3-way covering)的錯(cuò)誤檢出率超過(guò)80%[8]。目前組合測(cè)試已廣泛應(yīng)用于兼容性測(cè)試和高度可配置的系統(tǒng)測(cè)試等[9]。
本文提出分級(jí)組合測(cè)試的概念,并以工程實(shí)例展示了這種方法生成測(cè)試用例的具體過(guò)程。
組合測(cè)試方法是一種將系統(tǒng)中相互作用的因素值域組合,用盡可能少的測(cè)試用例,覆蓋這些因素對(duì)系統(tǒng)的影響狀況。例如,數(shù)字邏輯圖1,若要發(fā)現(xiàn)其中“與門(mén)”的缺陷(輸入條件B與輸出短接),一般情況下窮舉需要8(23)個(gè)測(cè)試用例才能發(fā)現(xiàn)錯(cuò)誤,如表1所示。然而,組合測(cè)試只需要運(yùn)用兩兩覆蓋(pairwise covering)4個(gè)測(cè)試用例即可,如表2所示。
圖1 數(shù)字邏輯圖Fig.1 Digital logic diagram
表1 常規(guī)測(cè)試方法Tab.1 General testing method
表2 兩兩覆蓋組合測(cè)試Tab.2 Pairwise covering test
表1中第二個(gè)測(cè)試用例可以檢測(cè)出邏輯錯(cuò)誤,表2中第一個(gè)測(cè)試用例可以檢測(cè)出邏輯錯(cuò)誤。
根據(jù)變量的取值范圍、采用的覆蓋標(biāo)準(zhǔn)和測(cè)試強(qiáng)度,可以將組合測(cè)試用例分為4類(lèi)[9]:正交矩陣(Orthogonal Array)、覆蓋矩陣(Covering Array)、混合水平覆蓋矩陣(Mixed Level Covering Array)和可變強(qiáng)度覆蓋矩陣(Variable Strength Covering Array)。
正交測(cè)試法是基于數(shù)理統(tǒng)計(jì)和概率論的一種經(jīng)驗(yàn)設(shè)計(jì)技術(shù),利用已有的標(biāo)準(zhǔn)正交表處理多因素實(shí)驗(yàn)問(wèn)題[10]。正交表實(shí)際是一個(gè)二維矩陣(又稱(chēng)正交矩陣),可以實(shí)現(xiàn)兩兩參數(shù)覆蓋的測(cè)試要求。針對(duì)不同的參數(shù)數(shù)量和值域范圍,選擇適當(dāng)?shù)恼槐?,即可得到?yōu)化的測(cè)試用例。
根據(jù)大量理論和實(shí)踐證明,正交測(cè)試的優(yōu)勢(shì)主要有[11]:(1)保證所有參數(shù)變量成對(duì)組合;(2)生成的測(cè)試集在組合全集中是均勻分布的;(3)與人工生成測(cè)試集相比,不會(huì)遺漏某些變量組合,可靠性高,實(shí)現(xiàn)過(guò)程簡(jiǎn)單。
正交表構(gòu)造過(guò)程雖然簡(jiǎn)單,但是常用的標(biāo)準(zhǔn)正交表不能涵蓋所有因素與水平的情況,因此在選擇正交表的過(guò)程中往往需要測(cè)試設(shè)計(jì)人員調(diào)整因素與水平的數(shù)量,以滿(mǎn)足現(xiàn)有的正交表。特別是對(duì)于核電應(yīng)用軟件,系統(tǒng)中同時(shí)包括數(shù)字與模擬變量,由于取值范圍不同,構(gòu)成混合水平正交表,很難從標(biāo)準(zhǔn)正交表中直接查到。例如:L4(23×45),則無(wú)法查到完全符合的正交表。
一個(gè)值域大小為v的N×k覆蓋矩陣,任意的N×t子矩陣包含了在v值域上所有大小為t的排列,可表示為 CA(N;t,k,v),其中 N 為測(cè)試用例數(shù),t為測(cè)試強(qiáng)度(strength),k為階數(shù)(degree),v稱(chēng)為序(order)[12]。當(dāng)一個(gè)覆蓋矩陣有最小的行數(shù)時(shí),這個(gè)最小行數(shù)稱(chēng)為覆蓋數(shù)(covering array number),表示為CAN(t,k,v)。
通常情況下,測(cè)試強(qiáng)度為2的覆蓋矩陣稱(chēng)為兩兩覆蓋矩陣(pairwise covering array),即任意兩列變量的取值組合全覆蓋,前提條件要求矩陣的每列參數(shù)具有相同的值域。例如表2,是一個(gè)標(biāo)準(zhǔn)的覆蓋矩陣,共4個(gè)測(cè)試用例,測(cè)試強(qiáng)度為2,階數(shù)是3,序?yàn)?,矩陣表示為 CA(4;2,3,2)。
一個(gè)值域大小為v的N×k混合水平覆蓋矩陣,任意的N×t子矩陣包含了在相應(yīng)值域上的所有 t元組,可表示為 MCA(N;t,k,v1,v2…vk)。與正交矩陣和覆蓋矩陣不同的是每列參數(shù)的值域可以不同,即,vi代表第 i列參數(shù)的取值個(gè)數(shù)。
混合水平覆蓋矩陣用于不同值域的參數(shù)變量進(jìn)行組合測(cè)試。例如,假設(shè)表2中輸入變量C的取值范圍為{0,1,2},則可得到混合水平覆蓋矩陣MCA(6;2,3,2,2,3),經(jīng)過(guò)簡(jiǎn)化得 MCA(6;2,3,223)。
可變強(qiáng)度覆蓋矩陣 VCA(N;K,(n1,n2,…nk),())是 N ×k的矩陣,N 為矩陣行數(shù),k為輸入?yún)?shù)個(gè)數(shù),ni代表第i個(gè)參數(shù)的值域?yàn)閰?shù)集合P的某個(gè)子集,但子集不構(gòu)成對(duì)集合P的劃分,ti是子集的測(cè)試強(qiáng)度。
一般地,強(qiáng)度為t的覆蓋矩陣被稱(chēng)為t覆蓋矩陣(t-covering array),要求在值域范圍內(nèi),任意t個(gè)因素之間的取值組合全覆蓋。
分級(jí)組合測(cè)試是將一個(gè)系統(tǒng)劃分成若干次級(jí)系統(tǒng),各次級(jí)系統(tǒng)采用不同的測(cè)試強(qiáng)度生成測(cè)試用例子集后,在次級(jí)系統(tǒng)之間再次使用組合測(cè)試算法,最終生成單元測(cè)試用例。算法架構(gòu)見(jiàn)圖2.
圖2 分級(jí)組合測(cè)試架構(gòu)Fig.2 Structure of multi-level combinatorial test
核電安全級(jí)應(yīng)用軟件邏輯結(jié)構(gòu)較復(fù)雜,使用分級(jí)組合測(cè)試前,必須找到系統(tǒng)的主干邏輯,在此基礎(chǔ)上再劃分次級(jí)系統(tǒng)。雖然核電安全級(jí)系統(tǒng)輸入信號(hào)眾多,但這些信號(hào)往往控制一個(gè)或幾個(gè)執(zhí)行機(jī)構(gòu),邏輯結(jié)構(gòu)逐漸收斂,所以大部分系統(tǒng)能夠找到其主干邏輯。
例如,以目前國(guó)內(nèi)某二代改進(jìn)型壓水堆停堆保護(hù)的典型邏輯為例,“中間量程中子通量高時(shí),產(chǎn)生停堆信號(hào)”,其主干邏輯是“P10不存在,或沒(méi)有手動(dòng)閉鎖信號(hào)時(shí),二選一表決邏輯產(chǎn)生緊急停堆信號(hào)”。按照功能需求,將P10、手動(dòng)閉鎖信號(hào)、二選一表決邏輯分別劃分為3個(gè)次級(jí)系統(tǒng)。見(jiàn)圖3,圖中3個(gè)數(shù)字分別代表:①實(shí)現(xiàn)帶降級(jí)“二取一”功能;②產(chǎn)生P10信號(hào);③產(chǎn)生手動(dòng)閉鎖信號(hào)(注:允許信號(hào)P—在保護(hù)系統(tǒng)中需要設(shè)置一些允許功能,在一定條件下自動(dòng)允許或抑制(閉鎖)某些保護(hù)功能,或允許操縱員手動(dòng)閉鎖某些保護(hù)信號(hào)或禁止某些保護(hù)通道的動(dòng)作;P10—判斷功率量程中子通量測(cè)量值是否低于定值[13])。
圖3 CPR1000中間量程中子通量高停堆邏輯Fig.3 Trip logic of CPR1000 high neutron flux intermediate range
次級(jí)系統(tǒng)①為“二取一”邏輯,由于帶有降級(jí)功能,不能單純運(yùn)用組合測(cè)試,否則生成的用例不能保證覆蓋所有降級(jí)功能,見(jiàn)表3.為了保證測(cè)試用例完全覆蓋“降級(jí)功能”,采用人工選取與組合測(cè)試相結(jié)合的方法生成次級(jí)系統(tǒng)①的測(cè)試用例。
表3 帶降級(jí)邏輯的“二取一”功能需求Tab.3 Requirement specifications of 1/2with degradation
這里介紹的方法是將旁通信號(hào)(F1、F2)與表決信號(hào)(A、B)分別討論。旁通信號(hào)的所有組合形式見(jiàn)表4.表決信號(hào)采用兩兩組合覆蓋,見(jiàn)表5.完成之后,將每種降級(jí)類(lèi)型分別與表決信號(hào)組合,最終形成次級(jí)系統(tǒng)①的測(cè)試用例子集,見(jiàn)表6.降級(jí)類(lèi)型Ⅱ有兩種旁通信號(hào)組合,用例子集中至少選用其中一種組合形式。
鑒于P10信號(hào)的重要性與邏輯結(jié)構(gòu)的復(fù)雜性,需要單獨(dú)進(jìn)行測(cè)試。然而,P10與“中間量程中子通量高,保護(hù)停堆功能”有重要交互接口,故作為樁函數(shù)出現(xiàn)在單元測(cè)試用例中,值域范圍{0,1}。
表4 旁通信號(hào)組合Tab.4 By-pass signal combination
表5 表決信號(hào)組合(兩兩組合覆蓋)Tab.5 Voting signal combination(pairwise covering)
表6 次級(jí)系統(tǒng)①測(cè)試用例子集Tab.6 Test cases of sub-system ①
次級(jí)系統(tǒng)③的功能是產(chǎn)生手動(dòng)閉鎖信號(hào),邏輯中沒(méi)有涉及典型工藝,不需要再次分級(jí)或采用其他輔助方法生成測(cè)試用例,可直接選擇pairwise covering,或者3-way covering以達(dá)到更高的測(cè)試強(qiáng)度。表7為采用pairwise covering生成的測(cè)試用例子集,達(dá)到任意兩個(gè)輸入變量的值域組合全部覆蓋。
表7 次級(jí)系統(tǒng)③測(cè)試用例子集Tab.7 Test cases of sub-system ③
①、②、③三個(gè)次級(jí)系統(tǒng)的測(cè)試用例子集運(yùn)用組合測(cè)試的方式生成覆蓋矩陣,得到最終的單元測(cè)試用例。當(dāng)測(cè)試強(qiáng)度為pairwise covering,生成混合覆蓋矩陣 MCA(48;2,3,12,2,4),見(jiàn)表 8.如果測(cè)試強(qiáng)度為3-way covering,則生成混合覆蓋矩陣MCA(96;3,3,12,2,4)。
“V&V Smart”工具可一次性完成以上步驟。輸入每個(gè)次級(jí)模塊的輸入變量后,直接輸出最終單元測(cè)試用例。軟件操作界面如圖4.除變強(qiáng)度組合測(cè)試外,此軟件同時(shí)適用于非經(jīng)典組合測(cè)試,如:種子組合[14],參數(shù)之間的限制[15]等。
圖4 V&V Smart工具Fig.4 V&V Smart tool
分級(jí)組合測(cè)試算法的優(yōu)勢(shì)主要有3點(diǎn):
(1)減少測(cè)試用例數(shù)量。如果采用窮舉法,本文中的測(cè)試單元將生成256(28)個(gè)測(cè)試用例。如果使用分級(jí)組合測(cè)試,見(jiàn)表8,只生成了48個(gè)測(cè)試用例,減少用例81.25%。同時(shí),覆蓋了表4中的3種降級(jí)類(lèi)型、表5中表決信號(hào)的4種組合方式與表7中兩兩信號(hào)之間的全部組合,滿(mǎn)足測(cè)試需求。
(2)靈活調(diào)整測(cè)試強(qiáng)度。根據(jù)次級(jí)模塊在被測(cè)單元中的重要性程度,指定不同的測(cè)試強(qiáng)度,合理調(diào)整測(cè)試重點(diǎn)。如,次級(jí)系統(tǒng)①加入人工輔助分析,充分覆蓋測(cè)試需求;或次級(jí)系統(tǒng)③可選擇更高的測(cè)試強(qiáng)度。
(3)算法簡(jiǎn)單,易于軟件實(shí)現(xiàn)。分級(jí)組合測(cè)試算法原理簡(jiǎn)單,可以借助軟件實(shí)現(xiàn)計(jì)算過(guò)程,本文利用自行開(kāi)發(fā)的工具“V&V Smart”自動(dòng)生成單元測(cè)試用例。
針對(duì)核電安全級(jí)應(yīng)用軟件輸入變量較多,設(shè)計(jì)單元測(cè)試用例困難特點(diǎn),研究了被工業(yè)界廣泛應(yīng)用的組合測(cè)試方法[5]后,在實(shí)際項(xiàng)目背景下提出了分級(jí)組合測(cè)試的概念。分級(jí)組合測(cè)試在保證覆蓋測(cè)試需求的前提下,不僅可以減少測(cè)試用例數(shù)量,而且算法簡(jiǎn)單,易于軟件實(shí)現(xiàn),為核電應(yīng)用軟件的單元測(cè)試提供了一種可行的實(shí)現(xiàn)方法。
未來(lái)的研究方向主要包括以下幾個(gè)方面:(1)針對(duì)核電系統(tǒng)的特點(diǎn),選擇適合項(xiàng)目的組合測(cè)試用例生成算法,例如貪心算法[16]、元啟發(fā)式搜索方法[17]、完備搜索算法等[18]。不同算法對(duì)覆蓋率、生成用例速度和數(shù)量的要求各不相同,通過(guò)實(shí)際項(xiàng)目檢驗(yàn)每種算法的適用性。(2)分級(jí)組合測(cè)試面對(duì)某些核電典型邏輯仍需要人工分析,例如:次級(jí)模塊①“帶降級(jí)的二取一邏輯”。如果可以統(tǒng)一算法,不再需要測(cè)試人員分析,將提高測(cè)試效率。(3)組合測(cè)試具有較高的錯(cuò)誤檢出率是通過(guò)實(shí)驗(yàn)得出的結(jié)論[19],如何建立可靠性模型定量的分析組合測(cè)試對(duì)核電應(yīng)用軟件可靠性的影響,是一個(gè)值得研究的方向。
表8 單元測(cè)試用例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,F(xiàn)ANG 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]廣東核電培訓(xùn)中心.900MW壓水堆核電站系統(tǒng)與設(shè)備[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,F(xiàn)REDMAN 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.