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