林志鵬 (福建林業(yè)職業(yè)技術(shù)學院教務處,福建 南平353000)
在嵌入式軟件開發(fā)過程中,涉及到在編寫軟件維護與測試說明書時,如何定量地描述軟件可靠性的問題,而軟件可靠性[1]是指在將要使用的指定環(huán)境下,軟件能以用戶可以接受的方式正確運行任務所表現(xiàn)出來的能力。從定量角度看,似乎應當是該軟件在約定的環(huán)境條件下和在給定的時間區(qū)間內(nèi),按照軟件規(guī)格說明的要求,成功地運行程序所規(guī)定功能的概率。
到目前為止,國內(nèi)外建立的各種各樣的軟件可靠性分析模型已不下上百種[4]。而其中有一種錯誤隨機植入模型——蒙特卡羅 (Monte Carlo)隨機植入技術(shù),就可很好地用于估算出被測程序模塊中存在的錯誤數(shù)。
圖1 蒙特卡羅技術(shù)求不規(guī)則圖形面積
用蒙特卡羅隨機植入技術(shù)估算程序模塊的錯誤數(shù)有以下幾個優(yōu)點:①工作方式相當直觀,能在一定程度上反映出軟件的質(zhì)量;②雖然在技術(shù)上不完善,但至少產(chǎn)生了與軟件質(zhì)量相關(guān)的定量結(jié)果;③在最壞的情況下,起碼可用來衡量“測試工作的有效性”,在某種程度上作為測試是否結(jié)束的一項標志[3]。
蒙特卡羅隨機統(tǒng)計技術(shù)形象地舉例如下,用它來確定不規(guī)則形狀封閉圖形面積,即采用一個大的矩形,把待測的封閉圖形完全包圍在該大矩形的內(nèi)部,如圖1所示。由計算機大量生成該矩形內(nèi)均勻分布的“點”,然后清點在大矩形內(nèi)“點”的總個數(shù)和在封閉圖形內(nèi)“點”的個數(shù),可近似得到以下表達式:
把上面思路應用在軟件可靠性分析中,可將錯誤隨機植入模型定義如下:
定義1(蒙特卡羅錯誤植入模型) 為估算某種軟件所含有固有錯誤的具體數(shù)目N,可在該軟件中人為隨機植入NS個錯誤數(shù),然后進行軟件測試。如果通過測試發(fā)現(xiàn)M個固有錯誤,則其中發(fā)現(xiàn)的人為隨機植入錯誤數(shù)有MS個。
假設測試過程中未引入新的錯誤,可以進一步假設,人為隨機植入NS個錯誤數(shù)后,在故障的出現(xiàn)概率等同于植入錯誤數(shù)之前故障的出現(xiàn)概率,即將程序模塊單位長度故障率認為是一個常數(shù)。
將“軟件固有錯誤數(shù)N”看成是“封閉圖形的面積”,將“人為植入錯誤數(shù)NS”看成是“已知的大矩形的面積”;將“測試中發(fā)現(xiàn)的固有錯誤數(shù)M”、“測試中發(fā)現(xiàn)的人為植入錯誤數(shù)MS”,分別看成是“在封閉圖形內(nèi)點的個數(shù)”、“大矩形內(nèi)點的個數(shù)”,由此得出蒙特卡羅錯誤植入模型為:
例1 假設某企業(yè)單位在開發(fā)一個嵌入式實時應用軟件寬帶路由器的NanOS程序,其長度(機器指令條數(shù))為105?,F(xiàn)隨機地人為植入10個錯誤,然后由一個測試組進行測試,假設結(jié)果一共發(fā)現(xiàn)有160個錯誤,其中有2個是人為播種植入的錯誤。定義1中的式(1)蒙特卡羅錯誤植入模型估算出被測程序模塊中將會遺留下多少個未被發(fā)現(xiàn)的隱藏錯誤。
整理例1的數(shù)據(jù),得NS=10,M=160,MS=2。于是可估算出程序中錯誤的總數(shù)N:
這時被測程序模塊中將會遺留下未被發(fā)現(xiàn)的隱藏錯誤數(shù)Nt:
蒙特卡羅錯誤隨機植入模型存在以下3個方面的局限性:①由于所有錯誤不可能等概率出現(xiàn),而且錯誤有著連帶性 (一個錯誤可能隱藏另一個錯誤),因此要想使隨機植入的錯誤有助于正確地推算出固有的錯誤數(shù)時,如何有效地在程序模塊中選擇和植入這類錯誤相對很困難[5]。②在檢測錯誤時,錯誤一般不會等概率地被發(fā)現(xiàn),而且在修復錯誤時也經(jīng)常會引出一些新的錯誤,可見很難用簡單的公式獲得很理想的估計值。③隨機植入的錯誤本身會增加檢測發(fā)現(xiàn)錯誤和修改錯誤的工作量。為此,特提出Hyman分別測試法作為“錯誤隨機植入”測試方法的補充。
由A和B兩組測試人員同時相互獨立地測試例1中的NanOS程序某個模塊的2個拷貝,進行如下符號假設:將A、B兩個測試小組發(fā)現(xiàn)的錯誤數(shù)分別看成是2個“獨立”事件,記N為寬帶路由器NanOS程序中被測程序模塊存在的故障總數(shù);NA為A組檢測到的錯誤數(shù);P(A)為A組檢測到的錯誤數(shù)在被測程序模塊故障總數(shù)中發(fā)生的概率;NB為B組檢測到的錯誤數(shù);P(B)為B組檢測到的錯誤數(shù)在被測程序模塊故障總數(shù)中發(fā)生的概率;NAB為A、B兩組發(fā)現(xiàn)的相同錯誤數(shù);P(A∩B)為A、B兩組發(fā)現(xiàn)的相同錯誤數(shù)發(fā)生的概率。
根據(jù)事件A、B相互獨立的充分必要條件P(A∩B)=P(A)P(B),得:
即:
假設經(jīng)過2周測試后,A組發(fā)現(xiàn)錯誤總數(shù)NA為350個,B組發(fā)現(xiàn)錯誤總數(shù)NB為320個,其中2組發(fā)現(xiàn)的相同錯誤數(shù)目NAB為132個。利用式(2)計算:
即估算出測試前該程序原有錯誤數(shù)為849個,比蒙特卡羅錯誤隨機植入模型的估算結(jié)果更為接近實際值。需注意運用Hyman分別測試法方案的前提:①2組發(fā)現(xiàn)的不同錯誤數(shù)所占比例相對較低;②2周來發(fā)現(xiàn)的錯誤在全部錯誤中有著代表性。另外,由于目前所進行的僅僅是模塊測試,即部件級測試,還沒有考慮到集成測試和系統(tǒng)測試中將必然會出現(xiàn)的NanOS程序錯誤數(shù)量,因此,可預知總的NanOS程序錯誤數(shù)必然大于849個。
在軟件可靠性定量分析[6]中,可以借用硬件的MTBF(平均無故障時間)或者MTTF(失效的平均等待時間)作為軟件可靠性的主要指標。平均無故障時間 (MTBF)與單位長度的剩余故障個數(shù)εr成反比,即:
式中,K的典型值取為200。
通過測試一段時間后,在NanOS程序中發(fā)現(xiàn)795個固有錯誤,且及時改正測試中發(fā)現(xiàn)的錯誤。就可利用式 (3)計算出NanOS程序的平均無故障時間。
由例1,設已知被測程序長度L=105,已檢測到且修正過錯誤數(shù)EC=795,根據(jù)公式應用蒙特卡羅錯誤隨機植入模型,得N=800個,所以由式(3)可得寬帶路由器NanOS程序的平均無故障時間MTBF值:
由此看出軟件可靠性MTBF是用戶可預測性和軟件中存在各類錯誤的一個復雜函數(shù)。即使2個軟件用來提供同樣功能并有著相同錯誤數(shù)目,在不同用戶使用情況下也會有不同的MTBF(與用戶的可預測性有關(guān));功能上大體相同的2個軟件,在相同用戶條件下,由于軟件有不同錯誤數(shù),因此也會得到不同的MTBF值 (此時錯誤數(shù)起主要作用)。
如要將該軟件可靠性再提高4倍,即MTBF=500h,則由式 (4)變型得:
由于已檢測到且修正過的錯誤數(shù)目為795個,因此再需要改正的錯誤個數(shù)是799-795=4個,就將該軟件可靠性再提高4倍。
如何提高軟件質(zhì)量是軟件工程的一個重要研究課題,而軟件可靠性定量分析工作是保證軟件質(zhì)量的一個重要措施[6]。筆者示范了一種應用蒙特卡羅錯誤隨機統(tǒng)計模型方法,并給出了應用此方法的寬帶路由器NanOS程序可靠性定量分析具體實例。并基于Hyman分別測試方案對蒙特卡羅方法進行補充[7],該測試估算方法,對軟件可靠性定量分析提供了有力保障。通過該可靠性定量分析方法,強有力地支撐軟件質(zhì)量提升。
[1]王立福.軟件工程 [M].北京:北京大學出版社,2002.
[2]張海藩 .軟件工程 [M].北京:人民郵電出版社,2002.
[3]尹增謙 .蒙特卡羅方法及應用 [J].物理與工程,2002,12 (3):45-49.
[4]馬海云,黨建武 .一種加速軟件可靠性測試的技術(shù)研究 [J].工業(yè)儀表與自動化裝置,2011(3):6-9.
[5]徐鐘濟 .蒙特卡羅方法 [M].北京:高等教育出版社,1985.
[6]朱少民 .軟件測試方法和技術(shù) [M].北京:高等教育出版社,2005.
[7]馬海云 .基于蒙特卡羅的軟件可靠性測試技術(shù)的研究與實現(xiàn) [J].鄭州大學學報 (工學版),2007(4):28-29.