曹 源,劉 杰+,肖安洪,吳志強(qiáng),陳 智,曾 輝
(1.南華大學(xué) 計(jì)算機(jī)學(xué)院,湖南 衡陽 421001;2.中國核動力研究設(shè)計(jì)院 核反應(yīng)堆系統(tǒng)設(shè)計(jì)技術(shù)重點(diǎn)實(shí)驗(yàn)室,四川 成都 610041)
為保障核電DCS軟件系統(tǒng)可靠性[1],降低人力成本,提升系統(tǒng)研發(fā)效率,研究測試用例自動生成方法。核電DCS軟件系統(tǒng)在高安全性應(yīng)用開發(fā)環(huán)境SCADE(safety-critical application development environment)平臺上,基于基礎(chǔ)組件開發(fā),由SCADE平臺自動生成系統(tǒng)的源代碼。源代碼將被燒錄到芯片中,在軟件系統(tǒng)使用、維護(hù)過程中,未按照標(biāo)準(zhǔn)操作,會使模型與代碼之間偏離[2]。導(dǎo)致軟件系統(tǒng)未能實(shí)現(xiàn)模型預(yù)期功能。為此需要對源代碼生成的軟件系統(tǒng)進(jìn)行測試。常用的方法是根據(jù)反映整個系統(tǒng)行為特征的系統(tǒng)合約模型的求解[3,4],生成系統(tǒng)的測試用例。但合約模型應(yīng)用到工程軟件系統(tǒng)時,存在求解難度大、耗時多的問題。
針對此類問題,本文提出通過分析組件間依賴關(guān)系,得到組件處理順序,從而逐級計(jì)算組件合約的方法。具有如下優(yōu)勢:①軟件系統(tǒng)模型基于具備可靠性的基礎(chǔ)組件組裝,結(jié)合合約模型可以實(shí)現(xiàn)在無源碼的情況下生成測試用例集,方法適用范圍廣。②方法采用逐級計(jì)算基礎(chǔ)組件合約的方法,依照組件計(jì)算順序逐級求解,規(guī)避了系統(tǒng)合約求解NP難問題。③方法應(yīng)用于核電廠DCS軟件的系統(tǒng)級的測試用例生成,降低當(dāng)前人工設(shè)計(jì)測試用例由于個人因素制約產(chǎn)生的測試充分性影響,降低測試人員負(fù)擔(dān),且增加了自動化測試程度。將方法應(yīng)用于核電反應(yīng)堆堆芯測量系統(tǒng),驗(yàn)證方法的可行性。
核電DCS軟件系統(tǒng)在SCADE平臺上,采用基于組件的開發(fā)方法進(jìn)行開發(fā)。SCADE的基礎(chǔ)組件是實(shí)現(xiàn)數(shù)據(jù)和信號處理的基本單位,如量程轉(zhuǎn)換組件MRC,就完成了對滿足界定上限和下限的輸入信號進(jìn)行線性轉(zhuǎn)換,并按參數(shù)要求限值輸出的工作。這些組件包括輸入信號、輸出信號以及模塊設(shè)定參數(shù)等輸入輸出接口,例如MRC的輸入信號確定了實(shí)際信號輸入并進(jìn)行故障設(shè)定,輸出信號確定了實(shí)際信號輸出并監(jiān)測信號值域等,參數(shù)確定了量程轉(zhuǎn)換組件的工作模式。
組件被正確執(zhí)行的特征可通過組件的前置條件、后置條件及不變式予以限定[5]。調(diào)用方按照前置條件生成合法輸入。執(zhí)行方依照后置條件保證輸出數(shù)據(jù)符合預(yù)期要求。不變式是系統(tǒng)生命周期中應(yīng)始終滿足的條件。這些前置條件、后置條件及不變式與組件合約存在對應(yīng)關(guān)系。組件合約即為反應(yīng)組件正確執(zhí)行時輸入信號、輸出信號及參數(shù)接口的邏輯關(guān)系。邏輯關(guān)系采用的是命題邏輯公式進(jìn)行描述。根據(jù)軟件系統(tǒng)模型生成組件合約,通過對命題邏輯公式的求解,從而得到正確的輸入樣例和期望輸出值,即測試用例。根據(jù)測試用例驗(yàn)證源代碼生成后的軟件系統(tǒng)是否存在錯誤。在前期的研究過程中分析軟件系統(tǒng)模型生成了基礎(chǔ)組件的合約模型[6]。
完整的DCS軟件系統(tǒng)模型是由這些基礎(chǔ)組件通過連接組件間的輸入、輸出等信號線搭建而成。通過基礎(chǔ)組件間連接信號變量的映射轉(zhuǎn)換,可由基礎(chǔ)組件合約構(gòu)建出完整的系統(tǒng)合約。當(dāng)組件間存在依賴關(guān)系時,則合約關(guān)系更為復(fù)雜,命題邏輯公式求解難度增大[7]。如果系統(tǒng)由成百上千個基礎(chǔ)組件構(gòu)成,則系統(tǒng)合約公式巨大,求解是一個NP完全問題。因此一個有效的方法就是依據(jù)信號處理過程,逐級分析基礎(chǔ)組件合約,計(jì)算單個組件的期望輸入輸出,最后得到系統(tǒng)的輸入輸出。逐級分析組件的基本要求就是要不違背組件的依賴關(guān)系。DCS軟件系統(tǒng)的組件依賴就是對組件信號處理的先后次序。如在第3章的反應(yīng)堆堆芯測量系統(tǒng)中的計(jì)算“溫差值”的SUM組件執(zhí)行,需要求最大值組件MAX和求最小值組件MIN。這說明SUM組件依賴組件MAX和組件MIN。
因此組件測試用例生成需要確認(rèn)組件的測試順序。對于復(fù)雜系統(tǒng)的測試順序確認(rèn)已經(jīng)有許多的研究方案,張艷梅等[8]提出基于圖論和基于搜索兩大類別的測試順序確認(rèn)方法?;趫D論的方法是通過分析依賴關(guān)系生成有向結(jié)構(gòu)圖,再對圖中的節(jié)點(diǎn)進(jìn)行排序,進(jìn)而生成測試順序的過程。其中一個重要的研究方向就是針對有向結(jié)構(gòu)圖中存在的閉環(huán)問題,進(jìn)行破除環(huán)路的處理,再進(jìn)一步進(jìn)行測試順序確認(rèn)[9]。Zhang等[10]提出,刪除弱依賴關(guān)系破除環(huán)路的處理方案。其中基于搜索的方法是制定期望測試順序標(biāo)準(zhǔn),通過智能優(yōu)化算法,不斷進(jìn)化初始種群,進(jìn)而得到測試順序的過程。這兩類測試順序確認(rèn)方法被廣泛的應(yīng)用于各個領(lǐng)域。現(xiàn)今大多數(shù)研究方向是針對于復(fù)雜的軟件系統(tǒng),通過減少測試樁數(shù)目及降低測試樁復(fù)雜度來降低測試成本。而開發(fā)測試樁本身耗費(fèi)大量成本,且開發(fā)過程中樁模塊可能會產(chǎn)生新的錯誤。
核電DCS軟件系統(tǒng)的組件模型具有線性化、無環(huán)性、參數(shù)控制等特點(diǎn)。對于測試順序確認(rèn)問題,設(shè)計(jì)出一種本身具備簡潔、高效、省時特點(diǎn),并能夠保證測試順序準(zhǔn)確無誤的基于拓?fù)涞慕M件計(jì)算順序算法。
因此針對核電廠DCS系統(tǒng),提出了一種基于組件合約的自動化測試用例生成方法。主要內(nèi)容包括組件間的依賴關(guān)系分析及組件計(jì)算順序確認(rèn)算法,逐級結(jié)合基礎(chǔ)組件合約要求,生成部分符合前置條件的測試用例輸入、及正確的參數(shù),按照組件計(jì)算順序執(zhí)行生成符合方法后置條件的期望輸出,通過判定是否滿足不變式,約簡測試用例,從而自動化生成符合所有合約的測試用例集。
DCS軟件系統(tǒng)的設(shè)計(jì)圖通過組件定義系統(tǒng)功能實(shí)現(xiàn)。組件是一些獨(dú)立、可重用的功能的模塊[11]。設(shè)計(jì)圖可以得到由組件定義的DCS軟件系統(tǒng)的結(jié)構(gòu)模型。
DCS軟件系統(tǒng)的設(shè)計(jì)圖描述了系統(tǒng)功能通過基礎(chǔ)組件實(shí)現(xiàn)的基本結(jié)構(gòu)。由此可以分析出,組件之間的依賴關(guān)系。這些依賴關(guān)系決定了,測試用例生成的順序關(guān)系。組件計(jì)算順序結(jié)合單個組件的基礎(chǔ)合約,使用組合測試工具(PICT)生成初始數(shù)據(jù),逐步計(jì)算出系統(tǒng)的測試用例。測試用例生成流程如圖1所示。
圖1 測試用例生成流程
定義1 結(jié)構(gòu)模型由<組件集合,組件依賴圖>構(gòu)成。組件集合構(gòu)造系統(tǒng)的基本功能模塊集合,組件依賴圖說明組件調(diào)用依賴關(guān)系。
定義2 組件是一個<組件接口集,組件參數(shù)集,組件合約集>三元組。
(1)組件接口集::<輸入接口集,輸出接口集>,每個組件存在一個組件接口集,組件接口集中存在若干個輸入接口和輸出接口。
輸入/輸出參數(shù)::
(2)組件參數(shù)集:每個組件存在一個組件參數(shù)集,參數(shù)集內(nèi)的不同參數(shù)值協(xié)助劃分組件不同的工作模式。如在第3章給出的報警信號跳變閾值SVAL,取值 {190,40,50,300}, 當(dāng)組件THC接收組件SUM輸出值value后,可根據(jù)value與SVAL值進(jìn)行比較,確認(rèn)溫差是否超越閾值,能否產(chǎn)生報警信號。
(3)組件合約集::<參數(shù)合約,值合約,狀態(tài)合約>,每個組件具備一個組件合約集,組件合約集中有參數(shù)合約、值合約、狀態(tài)合約3種合約。
參數(shù)合約是組件參數(shù)值(value)及組件參數(shù)間的約束條件;值合約是組件接口輸入數(shù)據(jù)、輸出數(shù)據(jù)值(value)的約束條件;狀態(tài)合約是組件接口輸入數(shù)據(jù)、輸出數(shù)據(jù)狀態(tài)(state)的約束條件。
本文采用合約化理驗(yàn)證組件執(zhí)行的正確性。通過求解合約的命題邏輯公式得到期望測試用例集。組件合約集與前置條件、后置條件及不變式存在對應(yīng)關(guān)系。其中前置條件對應(yīng)輸入值合約及輸入狀態(tài)合約及參數(shù)合約中的參數(shù)值合約部分,輸入值合約通常將數(shù)據(jù)同參數(shù)值比較、或數(shù)值相互比較決定當(dāng)前數(shù)據(jù)滿足何種工作模式;后置條件對應(yīng)輸出值合約及輸出狀態(tài);不變式條件通常對應(yīng)參數(shù)合約中的參數(shù)值及參數(shù)間合約部分,組件合約對應(yīng)關(guān)系如圖2所示。
圖2 組件合約對應(yīng)關(guān)系
軟件系統(tǒng)中各組件成員間存在關(guān)系,當(dāng)組件需要借助另一個組件提供服務(wù)時,稱組件間存在依賴關(guān)系[12]。組件之間的依賴關(guān)系導(dǎo)致信號變化產(chǎn)生連鎖反應(yīng),系統(tǒng)穩(wěn)定性受到組件間依賴關(guān)系的制約[13]。
定義3 組件依賴:設(shè)CA、CB分別是DCS軟件系統(tǒng)中的兩個組件,CB依賴于CA,組件CA必須在組件CB前執(zhí)行,稱為存在組件依賴關(guān)系,則組件CA存在輸出接口OA,組件CB存在輸入接口IB。接口IB會接收到由接口OA中傳遞的信號,并對信號進(jìn)行處理。前后組件主要傳遞兩種類型的信號:
(1)組件轉(zhuǎn)換狀態(tài):接口IB接收到接口OA中傳遞的信號后,僅發(fā)生狀態(tài)傳遞,由組件CA運(yùn)行至組件CB,則稱發(fā)生組件轉(zhuǎn)換狀態(tài)。
(2)數(shù)據(jù)傳遞狀態(tài):組件CB中存在方法P,接口IB接收到接口OA中傳遞的信號,其中包含方法P所需要使用的數(shù)據(jù),則稱發(fā)生數(shù)據(jù)傳遞狀態(tài)。
根據(jù)這種依賴關(guān)系中的兩種狀態(tài),結(jié)合系統(tǒng)設(shè)計(jì)圖進(jìn)行靜態(tài)分析,構(gòu)建組件依賴圖。根據(jù)組件依賴圖使用基于拓?fù)涞慕M件計(jì)算順序算法,來進(jìn)行組件計(jì)算順序確認(rèn)。
根據(jù)軟件系統(tǒng)模型的靜態(tài)分析生成基礎(chǔ)組件合約模型?;A(chǔ)組件合約模型提供了系統(tǒng)需要滿足的合約。依照組件合約對應(yīng)關(guān)系,給出包括組件輸入接口需要滿足的前置條件,組件輸出接口需要滿足的后置條件,以及在整個系統(tǒng)測試過程中需要滿足的不變式條件。
通過確認(rèn)的組件計(jì)算順序來依次判定測試用例是否符合接口合約。使用PICT工具依照合約需求中的前置條件生成部分測試用例輸入及組件參數(shù)值。針對每個組件,依次根據(jù)滿足不同輸入接口前置條件的輸入數(shù)據(jù),選擇不同工作模式,對應(yīng)不同輸出接口后置條件計(jì)算輸出值。再對測試用例進(jìn)行不變式條件判定,不滿足不變式條件則約簡測試用例,即從表中刪除該組測試用例,均滿足則保留測試用例,并執(zhí)行至測試順序中下一個組件,直至執(zhí)行至最后一個組件。最終獲得滿足所有合約的測試用例集。
測試覆蓋準(zhǔn)則是對軟件測試充分性的度量[14]。由于基于合約化理論生成測試用例集,因此采用合約覆蓋率作為測試充分性的度量標(biāo)準(zhǔn)。組件的工作模式由前置條件的輸入值合約部分,結(jié)合組件參數(shù)進(jìn)行劃分,工作模式與后置條件存在一一對應(yīng)關(guān)系,因此將后置條件的覆蓋情況作為測試用例覆蓋標(biāo)準(zhǔn)能夠很好反映出軟件系統(tǒng)工作模式的覆蓋情況,給出合約覆蓋率作為測試用例覆蓋準(zhǔn)則:
定義4 合約覆蓋率CC
(1)
合約逐級求解技術(shù)可分為兩大部分工作。第一部分是組件計(jì)算順序生成算法,根據(jù)分析得到的組件依賴圖,使用組件計(jì)算順序算法對組件進(jìn)行排序處理,最終得到組件計(jì)算順序;第二部分是合約逐級求解測試用例生成算法,分為組件初始數(shù)據(jù)生成算法和組件處理算法,組件初始數(shù)據(jù)生成算法依照合約需求中的前置條件生成具有非數(shù)據(jù)傳遞狀態(tài)的輸入值、輸入狀態(tài)及組件參數(shù)值;組件處理算法則通過前置條件、后置條件和不變式條件按照組件計(jì)算順序,對組件逐級處理,求解輸出值,約簡測試用例,最終生成滿足所有合約的測試用例集。
為了確保SCADE系統(tǒng)組件間生成的測試數(shù)據(jù)的準(zhǔn)確性,需要對組件的測試順序進(jìn)行確認(rèn)。根據(jù)所構(gòu)建的組件依賴圖,來對組件計(jì)算順序進(jìn)行排序。針對組件依賴圖為有向無環(huán)圖的情況下進(jìn)行討論。拓?fù)渑判蚰軌蛴杉现械钠虻玫饺?。而有向無環(huán)圖能夠表示具有依賴關(guān)系的頂點(diǎn)集。有向無環(huán)圖通過拓?fù)渑判蚰軌蛏梢唤M序列。我們僅保證具有依賴關(guān)系的組件,被依賴的組件需在依賴組件前執(zhí)行,由此提出一種基于拓?fù)涞慕M件計(jì)算順序算法。
設(shè)G(C,E) 為某有向無環(huán)圖,圖中一個頂點(diǎn)代表一個組件, C={C1,C2,…Cn},E={e1,e2,…em}, 某個頂點(diǎn)的出度表示該組件的輸入接口共連接了多少個組件(組件數(shù)≥0)的輸出接口,表明這個組件所依賴的組件數(shù)量。某個頂點(diǎn)的入度表示該組件的輸出接口共連接了多少個組件(組件數(shù)≥0)的輸入接口,表明這個組件被依賴數(shù)量。頂點(diǎn)CA,CB∈C, 若存在有向邊ek=
具體流程如下:
(1)輸入所有組件對象及組件依賴圖G;
(2)建立數(shù)組deg記錄圖中每個組件節(jié)點(diǎn)出度數(shù);
(3)建立隊(duì)列que添加出度數(shù)為0的組件節(jié)點(diǎn);
(4)建立空序列order,在隊(duì)列不為空時從隊(duì)列中取出頭節(jié)點(diǎn)放入序列末尾,并將此組件節(jié)點(diǎn)的后繼節(jié)點(diǎn)出度數(shù)均減1;
(5)后繼節(jié)點(diǎn)出度數(shù)為0時,排入隊(duì)列末尾,等待序列召喚,直至將所有組件計(jì)算順序排列完畢,輸出組件計(jì)算順序。算法偽代碼如下:
算法1:組件計(jì)算順序算法
輸入:組件依賴圖G
輸出:組件計(jì)算順序
(1)建立新圖G
(2)建立數(shù)組初始化
(3)for依賴圖中組件對象間存在信號輸入do
(4) CA:=被依賴組件
(5) CB:=當(dāng)前組件
(6) If組件CA、CB存在有向邊ekthen:
(7) 組件CB的出度數(shù)+1
(8) end if
(9)end for
(10)建立隊(duì)列
(11)建立空序列
(12)while隊(duì)列不為空do
(13) 從隊(duì)列中取出頭結(jié)點(diǎn)(出度為0的節(jié)點(diǎn))CA添加至序列末尾
(14) for CA存在后繼節(jié)點(diǎn)CBdo
(15) 數(shù)組中后繼結(jié)點(diǎn)CB出度-1
(16) if 后繼結(jié)點(diǎn)CB出度為0 then
(17) 隊(duì)列隊(duì)尾添加CB
(18) end if
(19) end for
(20)end while
(21)return 輸出組件計(jì)算順序 end
根據(jù)得到的組件計(jì)算順序,進(jìn)行合約逐級求解工作,具體流程如下:
(1)根據(jù)系統(tǒng)設(shè)計(jì)圖的分析確認(rèn)需要測試的內(nèi)容及基礎(chǔ)組件合約模型,通過基礎(chǔ)組件合約模型得到需要滿足的合約;
(2)根據(jù)前置條件預(yù)先生成部分組件的輸入數(shù)據(jù)及組件參數(shù),根據(jù)數(shù)據(jù)名稱和值建立映射表;
(3)按照確認(rèn)的組件計(jì)算順序依次處理組件,每次從表中取出組件的輸入數(shù)據(jù),或獲取被依賴組件(上一個組件)的輸出值,作為當(dāng)前組件的輸入?yún)?shù)名與值添加進(jìn)映射表并進(jìn)行前置條件判定,符合前置條件,根據(jù)結(jié)果內(nèi)容及映射表計(jì)算對應(yīng)輸出值,并根據(jù)后置條件確定輸出狀態(tài);
(4)最后進(jìn)行一次不變式條件判定,拋棄不符合條件的測試用例,將符合條件的輸出值及狀態(tài)存入合法數(shù)據(jù)表中,得到最終滿足所有合約的測試用例集。組件處理偽代碼如下:
算法2:組件初始數(shù)據(jù)生成算法
輸入:組件序列,組件參數(shù)組合,組件合約
輸出:組件初始輸入數(shù)據(jù)
(1)For 前置條件 do:
(2) If 條件滿足 then:
(3) 生成部分組件的輸入數(shù)據(jù)及組件參數(shù),根據(jù)數(shù)據(jù)名稱和值建立映射表
(4) End if
(5)End for
算法3:組件處理算法
輸入:組件計(jì)算順序,組件合約,組件初始輸入數(shù)據(jù)
輸出:合法測試用例
(1)For 每組參數(shù)組合輸入數(shù)據(jù) do:
(2) For 組件 in 組件序列:
(3) For 引用輸入 do:
(4) 獲取被依賴組件(上一個組件)的輸出值,將它作為輸入?yún)?shù)名與值添加進(jìn)映射表
(5) End for
(6) For 前置條件 do:
(7) If 條件滿足 then:
(8) 根據(jù)對應(yīng)后置條件結(jié)合結(jié)果內(nèi)容及映射表計(jì)算得到輸出值和狀態(tài)
(9) End if
(10) End for
(11) For 該組件不變式條件 do:
(12) If條件不滿足 then:
(13) Goto 1
(14) End if
(15) End for
(16) 將輸出值與狀態(tài)寫入合法數(shù)據(jù)表
(17) End for
(18) 輸出合法測試用例
針對使用合約化理論的基于基礎(chǔ)組件組裝的系統(tǒng),構(gòu)建了一個自動化生成測試用例的工具。工具開發(fā)平臺為PyCharm,采用Python語言編譯,并使用開發(fā)框架QT進(jìn)行設(shè)計(jì),運(yùn)行界面如圖3所示。
圖3 測試用例生成工具運(yùn)行界面
反應(yīng)堆堆芯測量系統(tǒng)是對堆芯溫度進(jìn)行檢測,保證防止由于堆內(nèi)溫度熱分布不平衡產(chǎn)生的安全性事故。反應(yīng)堆堆芯測量系統(tǒng)將堆芯分為4個區(qū)域,每個區(qū)域都設(shè)置了不同數(shù)量的溫度傳感器。反應(yīng)堆堆芯測量系統(tǒng)的報警功能實(shí)現(xiàn)過程是由每個區(qū)域的溫度測量信號到報警信號的轉(zhuǎn)換過程。區(qū)域內(nèi)通過對采樣信號進(jìn)行去噪處理后對最大最小溫度值求差,再通過對溫度信號與報警信號閾值的比較,從而產(chǎn)生報警信息,分為溫度信號去噪、溫度值求差、閾值檢測三階段工作,以區(qū)域P1內(nèi)溫度值求差及閾值檢測階段工作過程為例說明基于合約的組件集成自動化測試用例集生成過程。
溫度值求差:通過溫度信號去噪階段傳遞而來的溫度數(shù)值信號,使用組件MAX、MIN分別求出5個溫度傳感器的最大、最小溫度值,再使用MUL組件分別對最大、最小溫度值進(jìn)行符號設(shè)定及數(shù)值補(bǔ)償,再通過SUM組件求溫度差,此過程共使用5個組件。
閾值檢測:通過溫度值求差子系統(tǒng)傳遞而來的溫差信號,使用THC組件檢查閾值以產(chǎn)生報警信號。此過程中共使用1個組件。
暫時忽略溫度信號去噪階段VSB組件與溫度值求差階段MAX、MIN組件之間存在的數(shù)據(jù)傳遞狀態(tài),僅考慮MAX、MIN組件與MUL組件、MUL組件與SUM組件、SUM組件與THC組件之間存在數(shù)據(jù)傳遞狀態(tài)。靜態(tài)分析組件間的依賴關(guān)系,生成組件依賴如圖4所示。
根據(jù)組件依賴圖,使用算法1中組件計(jì)算順序算法進(jìn)行排序,生成組件計(jì)算順序。
使用微軟公司開發(fā)的組合測試工具(PICT),結(jié)合二維組合覆蓋準(zhǔn)則,根據(jù)合約模型的前置條件使用算法2中組件初始數(shù)據(jù)生成算法,生成滿足邏輯公式的MAX、MIN組件的測試用例輸入、狀態(tài)及MUL_1-2、THC的參數(shù)值,即進(jìn)行布爾表達(dá)式判別,生成滿足布爾表達(dá)式為“真”時的數(shù)據(jù),并根據(jù)數(shù)據(jù)名稱和值建立映射表。
根據(jù)組件計(jì)算順序,使用算法3中組件處理算法來對組件進(jìn)行處理,依次取出映射表中存儲的組件初始輸入數(shù)據(jù),及接收的被依賴組件傳遞而來的數(shù)據(jù),對組件逐級計(jì)算求解。
圖4 溫度值求差階段及閾值檢測階段組件依賴
首先獲取MAX組件映射表中的測試用例輸入及狀態(tài),輸入數(shù)據(jù)見表1。
根據(jù)不同的前置條件劃分不同工作模式,即進(jìn)行布爾表達(dá)式的判別,獲取布爾表達(dá)式為“真”時對應(yīng)的工作模式。此處判別5個接口,接收到溫度信號去噪階段,5個組件傳遞而來的數(shù)據(jù)中(此處使用PICT模擬生成),哪個接口接收到的數(shù)據(jù),是狀態(tài)為無故障前提條件下的最大溫度,MAX組件前置條件見表2。
MIN組件結(jié)構(gòu)類于MAX組件,得到輸出O2(最小溫度),此處不再贅述。
MUL_1組件接口見表3,具備參數(shù)G1(模擬信號、最大溫度增幅),輸入接口I1獲取被依賴組件MAX的輸出值及狀態(tài),并作為自己的輸入數(shù)據(jù),即最大溫度添加進(jìn)映射表。根據(jù)不同工作模式,對應(yīng)后置條件輸出增幅后的最大溫度,MUL_1組件前置及后置條件見表4。
MUL_2組件結(jié)構(gòu)類似于MUL_1組件,具備參數(shù)G2(模擬信號、最小溫度增幅)得到輸出O2_min(增幅后的最小溫度),此處不再贅述。
SUM組件在接收MUL_1、2組件傳遞的數(shù)據(jù)及狀態(tài)后,作為輸入添加進(jìn)映射表,并計(jì)算溫差,其中SUM輸入數(shù)據(jù)見表5。
THC組件接口見表6,具備參數(shù)SVAL(模擬信號、報警信號跳變閾值)、參數(shù)HYST(模擬信號、遲滯參數(shù)),組件參數(shù)見表7。輸入接口I1獲取被依賴組件SUM組件傳遞來的溫差值及狀態(tài),作為輸入添加進(jìn)映射表,并從映射表中取出PICT生成的SVAL及HYST的參數(shù)值。根據(jù)當(dāng)前不同工作模式,選擇輸出不同信號。例,當(dāng)輸入數(shù)據(jù)值大于SVAL,則超出閾值上限,信號從“0”跳變至“1”,輸出報警信號。并根據(jù)不變式條件,約簡布爾表達(dá)式為“假”時的測試用例,最終得到滿足所有合約的測試用例集,THC組件條件見表8。
表2 MAX組件前置條件
表3 MUL_1組件接口
表4 MUL_1組件前置條件及后置條件
表5 SUM組件輸入數(shù)據(jù)
表6 THC組件接口
表7 THC組件參數(shù)
表8 THC組件條件
根據(jù)測試用例生成方法生成測試用例實(shí)例,見表9。
在滿足組件合約的情況下使用生成了15組測試數(shù)據(jù),測試用例覆蓋率見表10。
測試用例平均覆蓋率達(dá)到97.27%。在解決了問題的同時保證了較高的合約覆蓋率。
核電廠DCS軟件的系統(tǒng)級的測試用例生成,與系統(tǒng)的性質(zhì)特征密切相關(guān)。目前還沒有通用的自動化測試用例生成方法,通常根據(jù)有經(jīng)驗(yàn)的測試人員來進(jìn)行人工設(shè)計(jì)測試用例,并結(jié)合自動化測試工具進(jìn)行測試,效率較低。受到人員經(jīng)驗(yàn)、習(xí)慣等人為因素的制約,測試充分度會產(chǎn)生一定的影響,導(dǎo)致生成的測試用例不具備足夠的客觀性與通用性;且復(fù)雜的DCS軟件系統(tǒng)求解系統(tǒng)合約是一個NP難問題,在進(jìn)行測試用例分析設(shè)計(jì)時成本高、難度大。因此提出一種基于合約的組件逐級測試用例生成方法。這種自動化測試用例生成方法可以使用組合測試策略生成充分多的符合組件合約的測試用例集。根據(jù)實(shí)驗(yàn)結(jié)果表明,生成的測試用例的合約覆蓋度達(dá)到97.27%。后續(xù)工作應(yīng)加強(qiáng)算法對難覆蓋節(jié)點(diǎn)的處理,實(shí)現(xiàn)工作模式的全覆蓋。
表9 測試用例實(shí)例
表10 測試用例覆蓋率