《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > 基于MC/DC的軟件模塊可靠性估計(jì)
基于MC/DC的軟件模塊可靠性估計(jì)
葉振宇
東南大學(xué) 軟件學(xué)院,江蘇 南京210096
摘要: 介紹了Nelson模型及修改的條件/判定覆蓋的基本概念,提出用Nelson模型來估計(jì)軟件模塊可靠性,依據(jù)修改的條件/判定覆蓋劃分?jǐn)?shù)據(jù)輸入域。最終依據(jù)模塊可靠性算出系統(tǒng)可靠性。
Abstract:
Key words :

摘   要: 介紹了Nelson模型及修改的條件/判定覆蓋的基本概念,提出用Nelson模型來估計(jì)軟件模塊可靠性,依據(jù)修改的條件/判定覆蓋劃分?jǐn)?shù)據(jù)輸入域。最終依據(jù)模塊可靠性算出系統(tǒng)可靠性。
關(guān)鍵詞: Nelson模型  修改的條件/判定覆蓋  軟件可靠性  覆蓋測(cè)試

  隨著軟件開發(fā)由手工作坊型向軟件工廠型轉(zhuǎn)變,軟件系統(tǒng)的規(guī)模和復(fù)雜性大大增加,對(duì)大型復(fù)雜軟件進(jìn)行可靠性分析也越加困難。另外,可靠性模型的基本假設(shè)不能完全成立,從而使可靠性模型的估計(jì)值與實(shí)際統(tǒng)計(jì)值有較大差距。解決此問題的方法之一是將復(fù)雜軟件系統(tǒng)按結(jié)構(gòu)特征分解到模塊層。模塊的規(guī)模有限,結(jié)構(gòu)簡(jiǎn)單,數(shù)據(jù)采集方便,估算各模塊的可靠性相對(duì)要容易得多,然后依據(jù)各模塊可靠性數(shù)據(jù)再對(duì)系統(tǒng)的可靠性進(jìn)行估算。
1  Nelson模型簡(jiǎn)介

  將輸入數(shù)據(jù)域劃分為若干子集,根據(jù)工程經(jīng)驗(yàn)或?qū)<乙庖姽烙?jì)出各個(gè)子集在運(yùn)行中被選用的概率,然后按此概率分布隨機(jī)抽出n個(gè)輸入數(shù)據(jù),運(yùn)行n次程序。如果運(yùn)行失效次數(shù)為nl,則程序可靠度的估計(jì)是R=1-(nl/n)。
2  對(duì)模型輸入數(shù)據(jù)域劃分的分析
  Nelson模型的應(yīng)用必須以程序的結(jié)構(gòu)分析為基礎(chǔ),因此適用于結(jié)構(gòu)性測(cè)試的場(chǎng)合。其輸入數(shù)據(jù)域一般是依據(jù)程序執(zhí)行路徑來劃分的。如圖1所示的程序流程,有三個(gè)輸入變量A、B、X,四條路徑abd、ace、abe、acd,劃分成表1所示的輸入數(shù)據(jù)域。

  在諸Ei中規(guī)定了每個(gè)輸入變量的取值區(qū)間,在取值區(qū)間內(nèi)任意抽取一個(gè)變量的實(shí)際取值。將各個(gè)變量按順序組合起來便生成了測(cè)試用例,即程序運(yùn)行一次的數(shù)據(jù)。
  這種劃分方法實(shí)際上是白盒測(cè)試中的全路徑覆蓋,是一種理想化的情況。其缺點(diǎn)為:路徑是以分支的指數(shù)級(jí)別增加的。例如:一個(gè)函數(shù)嵌套10個(gè)if語句,就有1 024條路徑;程序中有循環(huán)體時(shí),路徑數(shù)更是一個(gè)龐大的數(shù)字,何況還要從諸路徑的輸入數(shù)據(jù)域Ei中抽取若干樣本來運(yùn)行程序,因此花費(fèi)的時(shí)間和成本相當(dāng)高。
3  修改的條件/判定覆蓋
  修改的條件/判定覆蓋(Modified Condition/Decision Coverage,MC/DC)是白盒測(cè)試中邏輯覆蓋的一種。它繼承了多重條件覆蓋的優(yōu)點(diǎn),線性地增加了測(cè)試用例的數(shù)量,對(duì)操作數(shù)及非等式變化反應(yīng)敏感,具有更高的目標(biāo)覆蓋率。其相關(guān)概念定義如下。
  (1)條件(Condition):不包含邏輯表達(dá)式,僅包含由關(guān)系操作符(如≥≤=等)構(gòu)成的布爾表達(dá)式。
  (2)判定(Decision):至少包含一個(gè)邏輯表達(dá)式(AND、OR、XOR等)的布爾表達(dá)式。
  修改的條件/判定覆蓋:判定中每個(gè)條件的可能結(jié)果至少出現(xiàn)一次,每個(gè)判定本身的可能結(jié)果至少出現(xiàn)一次,每個(gè)入口點(diǎn)和出口點(diǎn)至少要喚醒一次,并且每個(gè)條件都顯示能單獨(dú)影響判定結(jié)果。
  如果一個(gè)條件能單獨(dú)地確定判定的輸出值(判定中的其他條件保持不變),則稱該條件獨(dú)立地影響判定結(jié)果。表明條件獨(dú)立影響結(jié)果的二組測(cè)試用例稱為獨(dú)立影響對(duì)。
  

  從表2可以看出,(1)、(2)、(3)構(gòu)成了判定D1滿足修改的條件/判定覆蓋的最小測(cè)試用例集。從數(shù)據(jù)域E1和E2中各取一個(gè)測(cè)試用例構(gòu)成的獨(dú)立影響對(duì),表明了條件C1的獨(dú)立性影響。同樣,(2)、(3)、(4)構(gòu)成了判定D2滿足修改的條件/判定覆蓋的最小測(cè)試用例集。

4  基于MC/DC的模塊可靠性估計(jì)
  Nelson模型中程序的輸入數(shù)據(jù)域Ei(i=1,2,……,N)的劃分是一個(gè)關(guān)鍵性步驟。理想狀況下,N是一個(gè)很大的數(shù)甚至是無窮大的數(shù),在實(shí)際工程應(yīng)用中,N只能取有限值。若依據(jù)全路徑覆蓋策略劃分Ei,則N將隨程序復(fù)雜度的增長(zhǎng)而呈指數(shù)增長(zhǎng)。所以提議依據(jù)修改的條件/判定覆蓋的最小測(cè)試用例集來劃分輸入空間。例如,綜合表2中的二個(gè)判定,可以取如表3所示的輸入數(shù)據(jù)域。

  這種覆蓋策略能覆蓋全部的條件取值和判定分支,保證每一個(gè)語句都能至少執(zhí)行一次,有很高的代碼覆蓋率。而當(dāng)程序復(fù)雜度增加時(shí),N的增長(zhǎng)是線性的。文獻(xiàn)[1]論述了求MC/DC最小測(cè)試用例集的方法。
劃分完輸入域后,根據(jù)工程經(jīng)驗(yàn)和專家意見估計(jì)出各個(gè)子集在運(yùn)行中被選用的概率pi;按此概率進(jìn)行隨機(jī)抽樣,得到m組測(cè)試用例;運(yùn)行程序,最后根據(jù)公式得到模塊的可靠性。
  Thayer 給出了程序經(jīng)過結(jié)構(gòu)測(cè)試后用Nelson模型估計(jì)可靠性的經(jīng)驗(yàn)公式。用ri表示程序第i條通路成功運(yùn)行的概率ri=ai pi,其中ai是經(jīng)驗(yàn)系數(shù)。
  如果屬于Ei的測(cè)試用例數(shù)大于1,則ai的經(jīng)驗(yàn)值是0.99。
  如果屬于Ei的測(cè)試用例數(shù)為1,則ai的經(jīng)驗(yàn)值是0.95。
如果沒有屬于Ei的測(cè)試用例,但由Ei決定的通路中所有的程序單元和由程序單元構(gòu)成的順序?qū)υ跍y(cè)試中已經(jīng)全部被執(zhí)行,則ai的經(jīng)驗(yàn)值是0.9。
  如果沒有屬于Ei的測(cè)試用例,但由Ei決定的通路中所有的程序單元已全部執(zhí)行,但是程序單元的順序?qū)χ挥幸徊糠謭?zhí)行,則ai的經(jīng)驗(yàn)值是0.8。
  如果在測(cè)試中有m個(gè)程序單元(1≤m≤4)沒有執(zhí)行,則ai的經(jīng)驗(yàn)值為0.8~0.2m。
  如果有四個(gè)以上的程序單元在測(cè)試中沒有執(zhí)行,則ai的經(jīng)驗(yàn)值為0。
5  結(jié)  論
  軟件模塊的成型往往處于軟件開發(fā)的早期階段。在這個(gè)階段,整個(gè)系統(tǒng)尚未集成和整合,QA部門正在針對(duì)軟件設(shè)計(jì)的最小單位——程序模塊,進(jìn)行正確性檢驗(yàn)的單元測(cè)試。
  以測(cè)試數(shù)據(jù)為基礎(chǔ)的預(yù)計(jì)模型因測(cè)試生命周期剛剛開始而無法使用。而覆蓋測(cè)試一般應(yīng)用在軟件測(cè)試的早期,即單元測(cè)試階段,用它來估計(jì)模塊可靠性是適宜的。
  得到軟件各模塊的可靠性之后,便可通過程序軟件邏輯流程來評(píng)估整個(gè)軟件系統(tǒng)的可靠性。Soistman和Regsdalo在文獻(xiàn)[3]中給出了一種硬/軟件復(fù)合系統(tǒng)結(jié)構(gòu)預(yù)計(jì)方法。該方法在獲得各模塊的可靠性數(shù)據(jù)后,通過識(shí)別運(yùn)行剖面,分析任務(wù)功能,用馬爾可夫過程表示程序邏輯流程在模塊間的轉(zhuǎn)移,最后計(jì)算出系統(tǒng)可靠性。
  估計(jì)模塊可靠性的意義在于估計(jì)過程中所需的資料和數(shù)據(jù)都可在軟件開發(fā)的早期獲得。通過一定的預(yù)計(jì)方法,人們?cè)谲浖_發(fā)的早期就可以對(duì)整個(gè)系統(tǒng)進(jìn)行可靠性分析和預(yù)計(jì)。
參考文獻(xiàn)
1   張義德,王國(guó)慶,湯幼寧.更改的判定條件覆蓋測(cè)試技術(shù)研究.計(jì)算機(jī)工程與設(shè)計(jì),2003;24(5)
2   黃錫滋.軟件可靠性、安全性與質(zhì)量保證.北京:電子工業(yè)出版社,2002
3   Soistman E C,Regsdalo K B.Impact of Hardware/Software  Faults On System Reliability.Government Report AD A165231.USA,1986
4   朱鴻.軟件可靠性估計(jì)與計(jì)算復(fù)雜性的關(guān)系淺析.軟件學(xué)報(bào),1998;9(9)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。