劉思琪,張亞東,楊武東,童 音,饒 暢
(西南交通大學(xué) 信息科學(xué)與技術(shù)學(xué)院,成都 611756)
列車運(yùn)行控制系統(tǒng)保證列車安全、高效的運(yùn)行,是現(xiàn)代鐵路信號(hào)系統(tǒng)中的關(guān)鍵設(shè)備[1].列控系統(tǒng)有許多基于軟件的安全相關(guān)功能,軟件缺陷可能導(dǎo)致安全功能失效,造成嚴(yán)重的行車事故.因此,為提高列控系統(tǒng)的安全性和可靠性,鐵路信號(hào)系統(tǒng)安全關(guān)鍵軟件的測(cè)試尤為重要[2].
基于模型的軟件測(cè)試方法(Model-based Software Testing)采用模型描述軟件需求,以測(cè)試覆蓋準(zhǔn)則為依據(jù),應(yīng)用圖論等算法生成測(cè)試用例,并對(duì)待測(cè)系統(tǒng)進(jìn)行測(cè)試,測(cè)試效率與自動(dòng)化程度高[3],在鐵路信號(hào)安全關(guān)鍵軟件測(cè)試中得到了廣泛的研究和應(yīng)用.軟件測(cè)試中常用的模型有確定性有限狀態(tài)機(jī)(Deterministic Finite State Machine,DFSM)和UML狀態(tài)圖等模型.對(duì)于軟件測(cè)試方法中的不同模型,已有不少的測(cè)試?yán)碚撆c測(cè)試用例生成方法被提出.文獻(xiàn)[4-6]提出了基于模型生成測(cè)試路徑方法,但實(shí)際應(yīng)用時(shí)仍需從測(cè)試路徑自動(dòng)生成可執(zhí)行測(cè)試用例.文獻(xiàn)[7]中基于模型測(cè)試用例自動(dòng)生成方法,對(duì)于不同待測(cè)系統(tǒng)仍需一定的人工參與才能自動(dòng)生成測(cè)試輸入.文獻(xiàn)[8]精確闡述了適用于不同場(chǎng)景下基于規(guī)格說明的邏輯覆蓋測(cè)試準(zhǔn)則,應(yīng)用準(zhǔn)則生成的測(cè)試用例常是抽象的,實(shí)例化后得到實(shí)際測(cè)試輸入.文獻(xiàn)[9]采用輸入域建模提取有限狀態(tài)機(jī)測(cè)試場(chǎng)景的測(cè)試輸入,但面對(duì)更復(fù)雜的有限狀態(tài)機(jī)遷移邏輯時(shí),無法直接得到可執(zhí)行測(cè)試用例.列控系統(tǒng)安全關(guān)鍵軟件功能邏輯復(fù)雜、輸入空間龐大,基于模型的測(cè)試用例生成的結(jié)果主要為抽象的測(cè)試路徑,為自動(dòng)生成直接用于列控系統(tǒng)安全關(guān)鍵軟件的測(cè)試執(zhí)行,仍需要可執(zhí)行的測(cè)試用例的生成方法.
本文選用DFSM描述系統(tǒng)行為,結(jié)合邏輯覆蓋與輸入空間劃分方法,對(duì)模型的測(cè)試路徑上各狀態(tài)間遷移條件生成滿足邏輯覆蓋準(zhǔn)則的測(cè)試用例,并采用輸入空間劃分選取抽象的測(cè)試用例的實(shí)際測(cè)試輸入,自動(dòng)生成待測(cè)系統(tǒng)可執(zhí)行的測(cè)試用例.最后,以CTCS-2級(jí)車載設(shè)備手動(dòng)等級(jí)轉(zhuǎn)換的安全功能為例,展示該方法自動(dòng)生成測(cè)試用例的過程.
DFSM能夠描述軟件在生命周期中的控制行為,表現(xiàn)為軟件所經(jīng)歷的狀態(tài)序列及引起狀態(tài)遷移的事件或條件,具有表現(xiàn)直觀、易于理解的優(yōu)點(diǎn),在基于模型的測(cè)試方法中得到了廣泛應(yīng)用.DFSM由狀態(tài)與狀態(tài)間遷移構(gòu)成,狀態(tài)描述了當(dāng)前等待遷移執(zhí)行的系統(tǒng)狀況,遷移是在條件滿足或事件發(fā)生時(shí)使DFSM從一個(gè)狀態(tài)轉(zhuǎn)至另一狀態(tài)的動(dòng)作,通常代表單個(gè)或多個(gè)變量的值的變化[8].DFSM可用一個(gè)五元組(∑,S,s0,δ,F)表示[10],其中,
·∑ 表示有限的、非空的輸入字符集;
·S表示有限的、非空的狀態(tài)集;
·s0∈S表示一個(gè)初始狀態(tài);
·δ:S×∑→S表示狀態(tài)遷移函數(shù);
·F?S表示終止?fàn)顟B(tài)集合.
基于DFSM的軟件測(cè)試用例自動(dòng)生成方法主要分為DFSM生成測(cè)試路徑、測(cè)試路徑實(shí)例化為測(cè)試用例兩個(gè)階段組成[10].第一階段為根據(jù)軟件結(jié)構(gòu)、規(guī)格說明等建立軟件功能邏輯的DFSM模型,并生成滿足圖覆蓋等準(zhǔn)則的測(cè)試路徑,測(cè)試路徑即抽象測(cè)試用例,記錄了圖覆蓋準(zhǔn)則下從s0狀態(tài)到f∈F狀態(tài)的所有遷移{(s0,si),…,(sj,sk),…,(sn,f)}.第二階段為實(shí)例化測(cè)試路徑為可執(zhí)行的測(cè)試用例.
邏輯覆蓋準(zhǔn)則通過分析謂詞與子句邏輯關(guān)系,產(chǎn)生覆蓋某些子句、謂詞的邏輯取值的測(cè)試用例[11],常應(yīng)用在基于模型的測(cè)試.DFSM的狀態(tài)遷移函數(shù)上通常定義使得遷移發(fā)生的特定變量的取值和引發(fā)遷移發(fā)生的變量值變化的觸發(fā)事件[8], 常表現(xiàn)為遷移條件邏輯表達(dá)式,在實(shí)際中可通過分析待測(cè)系統(tǒng)規(guī)格說明得到.由于邏輯覆蓋沒有標(biāo)準(zhǔn)的術(shù)語與符號(hào),應(yīng)用邏輯覆蓋時(shí)通常將邏輯表達(dá)式形式化為謂詞[8].謂詞,是計(jì)算結(jié)果為布爾值的子句或者復(fù)合謂詞,其結(jié)構(gòu)由邏輯運(yùn)算符(非)、∧(與)、∨(或)、→(蘊(yùn)含)、⊕(異或)和?(等價(jià))等構(gòu)成[8],其中子句是不含任何邏輯運(yùn)算符的謂詞[8],有布爾變量和關(guān)系表達(dá)式兩種常見形式[12],復(fù)合謂詞則是由若干個(gè)子句或其補(bǔ)和二元布爾運(yùn)算符{∧,∨}構(gòu)成[13].子句形式之一的關(guān)系表達(dá)式是形如EopF的表達(dá)式,其中E和F均為由算數(shù)表達(dá)式,關(guān)系運(yùn)算符op∈{≤,≥,<,>,=,≠}[13].僅由布爾變量、布爾運(yùn)算符和括號(hào)構(gòu)成的謂詞稱為布爾表達(dá)式[13],通過抽象語法樹提取布爾變量及關(guān)系表達(dá)式為葉節(jié)點(diǎn),布爾運(yùn)算符{,∧,∨}為內(nèi)部節(jié)點(diǎn),得到其樹形結(jié)構(gòu),用于自動(dòng)化生成測(cè)試用例.在DFSM模型中,狀態(tài)遷移條件表現(xiàn)為邏輯表達(dá)式,并已形式化為謂詞,其中{,∧,∨}是軟件功能的DFSM模型常用的3種邏輯運(yùn)算,本文針對(duì)這3種邏輯運(yùn)算符的DFSM模型應(yīng)用邏輯覆蓋準(zhǔn)則生成測(cè)試用例.常見的邏輯覆蓋準(zhǔn)則有謂詞覆蓋、子句覆蓋和組合覆蓋三種[8].
1)謂詞覆蓋(PC):對(duì)于謂詞集的每個(gè)謂詞,測(cè)試需求是謂詞取得真值,謂詞取得假值.
2)子句覆蓋(CC):對(duì)于謂詞的每個(gè)子句,測(cè)試需求是子句取得真值,子句取得假值.
3)組合覆蓋(CoC):對(duì)于謂詞集的每個(gè)謂詞,測(cè)試需求是謂詞中子句的所有邏輯值組合.
當(dāng)謂詞中有n個(gè)獨(dú)立的子句,共有2n種可能的邏輯值組合.以(a=b)∧C為例,該謂詞包含2個(gè)獨(dú)立子句,有4種可能的邏輯值組合,以T代表True,F(xiàn)代表False,結(jié)果如表1.其中,滿足謂詞覆蓋的測(cè)試集有T1,2={1,2}、T1,3={1,3}、T1,4={1,4},滿足子句覆蓋的有T1,4={1,4}、T2,3={2,3},滿足組合覆蓋的有T1,2,3,4={1,2,3,4}.
表1 謂詞(a=b)∧C邏輯值組合與覆蓋結(jié)果表Table 1 Truth table of (a=b)∧C and results of coverage criteria
輸入空間劃分的過程稱為輸入域建模,它根據(jù)待測(cè)系統(tǒng)的接口變量定義了輸入域,如圖1中輸入域D,再從規(guī)格說明中提取出用以劃分輸入域的特性C,將輸入域D劃分為包含同等作用值的、兩兩分離的b1、b2和b3三個(gè)塊,并從塊中選出有代表性的取值(如圖1中黑點(diǎn))進(jìn)行測(cè)試[8].
圖1 輸入域D劃分示意圖Fig.1 Partition of input domain D
輸入域建模的方法分為基于接口的方法和基于功能的方法.基于接口的方法是單獨(dú)處理每個(gè)被測(cè)函數(shù)的變量xi,識(shí)別的特性僅限于一個(gè)單獨(dú)的變量,易于對(duì)xi進(jìn)行劃分塊取值.基于功能的方法的輸入域模型包含了一些功能語義或者專業(yè)知識(shí),其特性通過分析被測(cè)系統(tǒng)的一個(gè)行為或功能來開發(fā),產(chǎn)生的測(cè)試用例比基于接口的方法可能更接近測(cè)試目標(biāo),但識(shí)別特性經(jīng)常不能夠匹配待測(cè)系統(tǒng)接口的變量,難以生成可執(zhí)行用例[8].軟件需求規(guī)格描述了軟件的各項(xiàng)需求,各項(xiàng)功能的具體含義等內(nèi)容,對(duì)基于規(guī)格說明的DFSM模型進(jìn)行輸入域建模時(shí),被測(cè)函數(shù)是狀態(tài)間的遷移條件,函數(shù)變量是遷移條件中的變量.遷移條件包含了待測(cè)系統(tǒng)的功能語義,從遷移條件開發(fā)出的特性既能從功能上劃分輸入域,又能與遷移條件中的變量匹配,提供了基于功能的方法識(shí)別特性后自動(dòng)化選取變量取值的可能.
根據(jù)邏輯覆蓋準(zhǔn)則,DFSM的遷移條件生成的邏輯測(cè)試集是子句的邏輯值組合,常是抽象的測(cè)試用例.為使其與接口變量匹配,采用輸入空間劃分自動(dòng)生成滿足邏輯值組合的接口變量測(cè)試輸入,并組成可執(zhí)行的測(cè)試用例.生成測(cè)試用例的過程見圖2,從測(cè)試路徑生成測(cè)試用例可分為以下3步:
圖2 測(cè)試用例生成過程圖Fig.2 Process of test cases generation
1)生成邏輯測(cè)試集.識(shí)別遷移條件的邏輯表達(dá)式結(jié)構(gòu),生成滿足特定覆蓋準(zhǔn)則的邏輯測(cè)試集.
2)生成變量取值集.通過變量定義與遷移條件提取特性,采用基于功能的輸入域建模方法對(duì)待測(cè)系統(tǒng)建模,并計(jì)算出接口變量取值集.
3)生成測(cè)試用例.結(jié)合邏輯測(cè)試集與變量取值集,得出與邏輯測(cè)試集中各測(cè)試項(xiàng)子句邏輯值匹配的接口變量測(cè)試輸入.若對(duì)應(yīng)一次測(cè)試的變量輸入組合有多種,則采用全排列方法,生成所有可能組合的可執(zhí)行測(cè)試輸入,最終與其他測(cè)試項(xiàng)的測(cè)試輸入組合成滿足特定邏輯覆蓋的測(cè)試用例.
基于DFSM模型的測(cè)試路徑是一組遷移序列,其中各遷移條件的邏輯表達(dá)式,通常被形式化為謂詞形式.邏輯覆蓋準(zhǔn)則中的謂詞覆蓋準(zhǔn)則的測(cè)試需求是每個(gè)謂詞集合中的謂詞需取得真值和假值[8].下面以該準(zhǔn)則為例說明測(cè)試用例生成過程.表1中謂詞(a=b)∧C,T1,2={((a=b)=true,C=true),((a=b)=true,C=false)} 這兩項(xiàng)的測(cè)試集滿足了謂詞覆蓋準(zhǔn)則.在實(shí)際中,為實(shí)現(xiàn)自動(dòng)生成滿足邏輯覆蓋準(zhǔn)則的邏輯值組合,首先需要構(gòu)建邏輯表達(dá)式的抽象語法樹.為降低構(gòu)建語法樹的難度,選用布爾變量分別替換謂詞中關(guān)系表達(dá)式,轉(zhuǎn)換其為布爾表達(dá)式,再通過識(shí)別布爾運(yùn)算符構(gòu)建語法樹.謂詞(a=b)∧C,由關(guān)系表達(dá)式(a=b)和布爾變量C這2個(gè)子句組成,將其中(a=b)用布爾變量D替換,謂詞將轉(zhuǎn)換為布爾表達(dá)式D∧C,再構(gòu)建其語法樹并生成真值表,再從中取出滿足謂詞覆蓋準(zhǔn)則的邏輯值組合構(gòu)成了邏輯測(cè)試集(logical tests).生成邏輯測(cè)試集的算法1如下:
算法1.generate logical tests
Input:logical expression
Output: logical tests
1.extractclausesfromlogicalexpression
2.forclauseinclausesdo
3.ifclauseis a relation expression
4.thenrenameclausewithbyname
5.endif
6.endfor
7.transformlogicalexpressiontobooleanexpression
8.generateabstractsyntaxtree
9.generatetruthtable
10.select specificlogicaltestitems and store inlogicaltests
基于功能的輸入域建模生成變量取值集時(shí),狀態(tài)間的遷移條件邏輯表達(dá)式(logic expression)視為待測(cè)函數(shù),遷移條件中變量為接口變量,通過從DFSM變量的定義與遷移條件中相應(yīng)子句提取劃分特性,將變量輸入域劃分為塊(blocks).劃分塊是變量可能值的集合,為了從集合自動(dòng)選出變量值,采用取值策略(如有效值、無效值和邊界值等)選取,綜合后將得到子句中變量的取值集合(variable values).其中,邊界值策略認(rèn)為在邊界或邊界附近是程序員進(jìn)行軟件設(shè)計(jì)和開發(fā)時(shí)常出錯(cuò)的地方[8],需要進(jìn)行測(cè)試.生成變量取值集的算法如算法2所示.
算法2.generate input domain values
Input: logic expression
Output: set of variable values
1.extractclausesfromlogicexpression
3. identifycharacteristicsfromclauseandvariable′sdefinition
4. createblocksforcharacteristics
5.forblockinblocks
6. selectvaluesfromblockunder strategy
7. addvaluesintovariablevalues
8.endfor
9. addvariablevaluesintosetofvariablevalues
10.end for
式中:x=(xS1,yS1,xS2,yS2,…,xSN,ySN)表示2N維的決策變量,y表示2維的目標(biāo)向量;f1(x),f2(x)分別是節(jié)點(diǎn)安全連通度目標(biāo)函數(shù)和節(jié)點(diǎn)網(wǎng)絡(luò)覆蓋率目標(biāo)函數(shù);?i∈[1,N],?j∈[1,N],i≠j,滿足d(Si,Sj)≤Rc是節(jié)點(diǎn)的全連通約束,其中d(Si,Sj)表示節(jié)點(diǎn)Si,Sj之間的歐氏距離;為節(jié)點(diǎn)移動(dòng)能耗約束,為節(jié)點(diǎn)優(yōu)化后與節(jié)點(diǎn)最初位置之間的距離,dth是節(jié)點(diǎn)允許移動(dòng)的最大值。
邏輯覆蓋準(zhǔn)則考察的是邏輯運(yùn)算符,生成的邏輯測(cè)試集中一次測(cè)試的邏輯值組合是謂詞中各子句的測(cè)試值,但這些測(cè)試值常常是抽象的,未匹配待測(cè)系統(tǒng)接口變量,要與輸入空間劃分的結(jié)果結(jié)合轉(zhuǎn)為實(shí)際變量的測(cè)試輸入.兩者結(jié)合算法見算法3.
算法首先對(duì)邏輯測(cè)試集中每一條測(cè)試項(xiàng)(logical test)中各元素(element),應(yīng)計(jì)算出滿足當(dāng)前元素邏輯值的變量取值集合(expected values).當(dāng)計(jì)算出當(dāng)前輸入項(xiàng)對(duì)應(yīng)的所有變量取值集合之后,將其視為整體,采用全排列方法或其他組合辦法,以各取值集合為單個(gè)的排列變量,集合中的值視作變量的取值,對(duì)變量進(jìn)行組合,生成多種測(cè)試輸入組合.然后,對(duì)邏輯測(cè)試集中剩余測(cè)試項(xiàng)重復(fù)上述過程,得到各測(cè)試項(xiàng)的測(cè)試輸入集合(set of test input).最后,組合各測(cè)試項(xiàng)的測(cè)試輸入集合,得到滿足邏輯覆蓋準(zhǔn)則的、可執(zhí)行的測(cè)試用例(test cases).
算法3.generate executable test cases
Input: logical tests, set of variable values, logic expression
Output: test cases
1.forlogicaltestinlogicaltestsdo
2.forelementinlogicaltestdo
3. get relativeclausefromlogicexpression
4. getvariablefromclause
5. getvariablevaluesfromsetofvariablevalues
6.forvariablevalueinvariablevaluesdo
7. getresultby substituting thevariablevaluetoclause
8.iftheresultmatches theelement′svalue
9.thenrecord the currentvariablevaluetoexpectedvalues
10.endif
11.endfor
12.endfor
13. combine allexpectedvaluesand store insetoftestinput
14.endfor
15.combine allsetoftestinputand generatetestcases
列控系統(tǒng)領(lǐng)域的DFSM模型圖的狀態(tài)用圓圈表示,終止?fàn)顟B(tài)用雙圈表示,狀態(tài)間遷移用帶箭頭的線表示.系統(tǒng)進(jìn)入初始狀態(tài)后開始工作,并根據(jù)變量的變化遷移至目標(biāo)狀態(tài).狀態(tài)間的遷移條件通常反應(yīng)了接口變量之間的邏輯關(guān)系,主要由關(guān)系表達(dá)式與布爾表達(dá)式組成.本節(jié)以CTCS-2車載設(shè)備等級(jí)轉(zhuǎn)換中手動(dòng)切換功能為例,說明從DFSM模型生成測(cè)試用例的具體過程.
等級(jí)轉(zhuǎn)換發(fā)生在CTCS-2(簡(jiǎn)稱C2)區(qū)段與CTCS-0(簡(jiǎn)稱C0)區(qū)段的邊界.當(dāng)C0級(jí)下車載設(shè)備不能自動(dòng)切換等級(jí)時(shí),若條件允許,司機(jī)可進(jìn)行手動(dòng)切換等級(jí)至C2級(jí)[14].該功能的DFSM模型如圖3所示.
圖3 CTCS-0級(jí)手動(dòng)切換CTCS-2級(jí)的DFSM模型Fig.3 DFSM of CTCS-0/CTCS-2 manual level transition function
如圖3,車載設(shè)備進(jìn)入Start狀態(tài)后初始化為C0等級(jí)狀態(tài),檢測(cè)到司機(jī)手動(dòng)選擇C2等級(jí)后,轉(zhuǎn)入C2手動(dòng)切換狀態(tài);若列車正在輸出制動(dòng)且當(dāng)前等級(jí)為C0級(jí),則C2手動(dòng)狀態(tài)轉(zhuǎn)回C0狀態(tài);若列車未輸出制動(dòng)、列車速度滿足要求、當(dāng)前狀態(tài)等級(jí)為C0且司機(jī)手動(dòng)選擇C2等級(jí)四個(gè)條件同時(shí)滿足,C2手動(dòng)狀態(tài)將轉(zhuǎn)至C2等級(jí)狀態(tài).
從DFSM得出一條測(cè)試路徑P,遷移分別是{(Start,C0),(C0,C2-ManuSwitch),(C2-ManuSwitch,C0),(C0,C2-ManuSwitch),(C2-ManuSwitch,C2-State),(C2-State,End)}.其中(C2-ManuSwitch,C2-State)的遷移條件的子句、變量、子句含義見表2.
表2 樣例遷移條件表達(dá)式元素表Table 2 Elements in sample transition expression
本小節(jié)以 C2-ManuSwitch轉(zhuǎn)C2-State的遷移條件為例,介紹生成測(cè)試用例的具體過程.
1)生成邏輯測(cè)試集.通過解析遷移條件表達(dá)式,獲得所有子句并用布爾變量替換謂詞中關(guān)系表達(dá)式,將謂詞轉(zhuǎn)為布爾表達(dá)式,建立遷移條件的抽象語法樹后求出條件表達(dá)式的所有的邏輯值組合,從中選出滿足謂詞覆蓋準(zhǔn)則的邏輯值組合構(gòu)成了邏輯測(cè)試集.樣例遷移條件包含四個(gè)子句,其中關(guān)系表達(dá)式Speed<250.0替換為布爾變量Speed-250.0 ,遷移條件變?yōu)椴紶柋磉_(dá)式,并構(gòu)建抽象語法樹,得到子句的十六種邏輯值組合.
其中上述4個(gè)子句{LKJBrake, Speed<250.0, CurLevelCTCS0, DrvOperCTCS2}邏輯值組合為{T,T,T,T}時(shí),表達(dá)式值為F,而四個(gè)子句邏輯值為{F,T,T,T}時(shí),表達(dá)式值為T.由謂詞覆蓋準(zhǔn)則定義可知,{T,T,T,T}與{F,T,T,T}這兩條測(cè)試項(xiàng)滿足了謂詞分別為假與真的謂詞覆蓋測(cè)試需求,因此,從由這兩項(xiàng)測(cè)試項(xiàng)組成的邏輯測(cè)試集滿足了謂詞覆蓋準(zhǔn)則.
2)初始化變量取值集合.基于功能的輸入域建模方法通過遷移條件中功能信息提取特性,以float型變量Speed為例,在關(guān)系表達(dá)式Speed<250.0與變量Speed的定義中提取出選取"Speed大于0且小于250km/h"特性,劃分輸入空間為Speed大于0且小于250km/h、 大于等于250km/h兩個(gè)塊,并選取有效取值范圍中間值、以5為步長(zhǎng)選取邊界的附近值和邊界值為測(cè)試值,符合了有效值、無效值、邊界值的取值策略,變量取值集合見表3,而遷移條件中LKJBrake等為布爾型變量,取值集包括其所有可能值.
表3 樣例表達(dá)式各變量取值集Table 3 Set of variables values in sample expression
3)生成測(cè)試用例.以測(cè)試項(xiàng)中{LKJBrake=F,Speed<250.0=T,CurLevelCTCS0=T,DrvOperCTCS2=T}為例,在子句中依次代入對(duì)應(yīng)變量值,通過計(jì)算結(jié)果并判斷其是否與子句邏輯值一致,求出變量取值集中所有滿足子句邏輯值的取值,{F, T, T, T}測(cè)試項(xiàng)的變量輸入子集如表4.以子句Speed<250.0為例,測(cè)試項(xiàng)要求該子句取值為T,因此需要求出Speed變量取值集合中小于250.0的值.
表4 樣例輸入項(xiàng)與變量輸入子集Table 4 Sample test input and subset of variables inputs
由于4個(gè)變量(LKJBrake, Speed, CurLevelCTCS0, DrvOperCTCS2)的取值可能組合不唯一,本次采用全排列生成4條可執(zhí)行的測(cè)試輸入,分別為:
(F,0.0,T,T)、(F,5.0,T,T)、(F,125.0,T,T)、(F,245.0,T,T).
對(duì)于謂詞覆蓋測(cè)試集中的另一條測(cè)試項(xiàng){T, T, T, T},再次進(jìn)行上述過程,也可得到生成4條測(cè)試輸入,分別為:
(T,0.0,T,T)、(T,5.0,T,T)、(T,125.0,T,T)、(T,245.0,T,T).
謂詞覆蓋準(zhǔn)則需對(duì)兩種邏輯值組合進(jìn)行測(cè)試,對(duì)于上述兩項(xiàng)測(cè)試項(xiàng)有多種可能測(cè)試輸入時(shí),為使每種輸入至少執(zhí)行一次,需要至少四個(gè)滿足謂詞覆蓋準(zhǔn)則的可執(zhí)行測(cè)試用例,見表5.以其中可執(zhí)行測(cè)試用例{(F,0.0,T,T),(T,0.0,T,T)}為例,該用例測(cè)試了速度為0、當(dāng)前等級(jí)為CTCS-0且司機(jī)手動(dòng)選擇了CTCS-2時(shí),列車輸出制動(dòng)與未輸出制動(dòng)兩種等級(jí)轉(zhuǎn)換的情況.路徑P中各遷移條件的測(cè)試用例見表5.
表5 路徑P各遷移條件測(cè)試用例表Table 5 Test cases for transitions in path P
由此可見,結(jié)合輸入空間的各種輸入條件所生成的測(cè)試用例覆蓋了更多的測(cè)試情況與實(shí)際的臨界條件,可測(cè)出軟件邊界情況存在的軟件缺陷,實(shí)現(xiàn)了在各種輸入場(chǎng)景下對(duì)鐵路相關(guān)軟件系統(tǒng)的測(cè)試,提高了軟件的可靠安全性.
本文針對(duì)基于DFSM的軟件測(cè)試方法中測(cè)試路徑生成測(cè)試用例的過程,結(jié)合輸入空間劃分和邏輯覆蓋準(zhǔn)則,提出了含連續(xù)型變量的遷移條件自動(dòng)生成測(cè)試用例方法.以CTCS-2級(jí)車載設(shè)備人工等級(jí)轉(zhuǎn)換的安全功能為例,對(duì)其DFSM模型測(cè)試路徑生成了多種測(cè)試情況下的測(cè)試用例,減少了軟件測(cè)試中測(cè)試用例配置的工作量與測(cè)試值選取的盲目性.本文提出的方法已經(jīng)在CTCS-2級(jí)車載設(shè)備軟件測(cè)試中得到應(yīng)用,實(shí)踐表明本方法具備良好的可操作性,能產(chǎn)生可執(zhí)行測(cè)試用例.今后,在輸入空間的劃分及如何取值和邏輯表達(dá)式特殊結(jié)構(gòu)方面將做進(jìn)一步研究,提高方法的適用度.