呂俊廷
【摘 要】軟件的可測(cè)試性表示軟件中的錯(cuò)誤被檢測(cè)出的難易程度,軟件的可信度則表示經(jīng)過測(cè)試之后對(duì)一個(gè)軟件的信任程度,它們都是軟件的重要質(zhì)量特性。本文將極限理論引入到軟件測(cè)試過程中,較好的解決了確定軟件的可信度的方法,建立了基于故障的可測(cè)試性模型,并利用這個(gè)模型給出了軟件可測(cè)試度的計(jì)算方法。最后,給出了基于故障的可測(cè)試性模型在軟件測(cè)試過程中的應(yīng)用。
【關(guān)鍵詞】可測(cè)試性;可信度;故障;失效;基于故障的可測(cè)試性模
軟件的可測(cè)試性指在給定任意輸入集合下對(duì)軟件進(jìn)行隨機(jī)黒盒測(cè)試的過程中,軟件中存在的錯(cuò)誤被發(fā)現(xiàn)的難易程度??蓽y(cè)試度是可測(cè)試性大小的度量,指隨機(jī)黒盒測(cè)試過程中,軟件錯(cuò)誤能夠被揭示出來的概率?,F(xiàn)有的可測(cè)試性模型,如敏感性分析模型[1]、PIE分析模型[2]、靜態(tài)可測(cè)試性度量模型[3]等,都是基于白盒測(cè)試的,它們的理論基礎(chǔ)就是軟件的故障/失效(Fault/Failure)模型[4],這個(gè)模型介紹了軟件故障導(dǎo)致軟件失效的三個(gè)充分必要條件:
1)程序的輸入使這個(gè)軟件錯(cuò)誤得到了執(zhí)行;
2)被執(zhí)行的錯(cuò)誤使該程序位置之后的數(shù)據(jù)狀態(tài)發(fā)生變化(故障);
3)錯(cuò)誤的程序數(shù)據(jù)狀態(tài)被傳播到程序輸出,并使輸出結(jié)果錯(cuò)誤(產(chǎn)生失效)。
各個(gè)不同的模型就是針對(duì)這三個(gè)充分必要條件,采用不同的技術(shù)來獲取它的概率值,如敏感性分析模型和PIE分析模型主要應(yīng)用了插裝變異體的技術(shù),而靜態(tài)可測(cè)試性模型則是利用了各種操作符和操作數(shù)的發(fā)生潛在錯(cuò)誤的概率來計(jì)算可測(cè)試性,基于錯(cuò)誤/故障模型的可測(cè)試性計(jì)算方法要求多次運(yùn)行被測(cè)程序,通過觀測(cè)變異因子對(duì)程序結(jié)果的影響來估計(jì)其執(zhí)行概率、傳染概率和傳播概率,進(jìn)而估量程序可測(cè)試性度量指標(biāo)值。該過程雖然較為貼近實(shí)際結(jié)果,但通常實(shí)現(xiàn)起來效率比較低下;同時(shí)由于該過程需要記錄大量測(cè)試過程信息,因而對(duì)系統(tǒng)的資源要求也很高。本文試圖建立一種基于軟件測(cè)試過程的可測(cè)試性度量模型,可測(cè)試性的值在軟件的測(cè)試過程中,被逐步的修正并隨之應(yīng)用于軟件的測(cè)試,使得可測(cè)試性分析和軟件測(cè)試過程有機(jī)結(jié)合在一起。
軟件的可信度[5]反映了我們對(duì)一個(gè)軟件的信任程度,一般的,R=,其中Lr表示程序中正確的代碼行數(shù),Lt表示代碼總行數(shù)。問題在于一個(gè)軟件經(jīng)過測(cè)試之后,軟件中正確的代碼行數(shù)依然是未知的,那么我們能夠在多大程度上信任它,即它的可信度是多少呢?軟件測(cè)試的結(jié)果是衡量軟件質(zhì)量的依據(jù),本文將從軟件測(cè)試的結(jié)果中給出軟件可信度的計(jì)算方法。
1 軟件測(cè)試過程的極限模型
給定規(guī)格說明書S,滿足S的正確的程序有無數(shù)個(gè),它們構(gòu)成一個(gè)等價(jià)類P。我們假定程序經(jīng)過修改后引入的新故障數(shù)小于修正的故障數(shù),對(duì)于一個(gè)較為成熟的組織,這個(gè)假設(shè)是成立的。設(shè)剛完成的未經(jīng)測(cè)試的程序?yàn)镻0,
公式(1)為我們?cè)诠こ躺系膽?yīng)用奠定了基礎(chǔ),我們無法知道正確的程序到底是什么,但是我們可以很容易的知道程序當(dāng)前的版本和在此之前的版本的差異,后面我們將利用這個(gè)差異來確定軟件的可測(cè)試度和可信度。
軟件測(cè)試過程的極限模型是對(duì)程序進(jìn)行多輪測(cè)試的過程中所表現(xiàn)出來的規(guī)律,這一點(diǎn)決定了它適合于大型的程序,因?yàn)橹挥写笮偷某绦虿庞锌赡苓M(jìn)行多輪的軟件測(cè)試。對(duì)于小型的程序來講,由于它的開發(fā)和測(cè)試過程受到個(gè)人技能因素的影響較大,所以極限模型在小型的程序中的表現(xiàn)并不明顯。
2 基于故障的可測(cè)試性模型及其工程化應(yīng)用
2.1 基于故障的可測(cè)試性模型
可測(cè)試性反映了程序的錯(cuò)誤在測(cè)試過程中暴露的難易程度,可測(cè)試性好的程序,它的錯(cuò)誤容易暴露出來;可測(cè)試性差的程序,它的錯(cuò)誤難于暴露出來。如果錯(cuò)誤容易暴露出來,我們就認(rèn)為它體現(xiàn)了軟件的優(yōu)良的可測(cè)試性方面的信息;如果錯(cuò)誤隱藏的很深,不容易暴露出來,我們就認(rèn)為這些錯(cuò)誤則體現(xiàn)了軟件的可測(cè)試性差的方面的信息。因此,一個(gè)可測(cè)試性好的模塊,它的錯(cuò)誤必然容易發(fā)現(xiàn),不需要執(zhí)行太多的測(cè)試用例,在測(cè)試的初期就能夠揭示出來;相反,可測(cè)試性差的模塊,它的錯(cuò)誤隱藏的很深,需要執(zhí)行大量的測(cè)試用例,到測(cè)試的末期甚至直到軟件交付使用后才能將錯(cuò)誤揭示出來。
根據(jù)上面的分析,我們把軟件的錯(cuò)誤分為兩類:容易暴露的錯(cuò)誤和難于暴露的錯(cuò)誤,那么可測(cè)試度就是容易暴露的錯(cuò)誤的度量占錯(cuò)誤的總度量的比例,下面將以錯(cuò)誤的數(shù)量為度量單位進(jìn)行討論,即容易暴露的錯(cuò)誤數(shù)占軟件中錯(cuò)誤總數(shù)的比例:
2.2 軟件的可信度度量
在隨機(jī)黒盒測(cè)試中,軟件中的錯(cuò)誤只有當(dāng)以故障的形式表現(xiàn)出來時(shí),我們才能夠發(fā)現(xiàn)并修正它,軟件中的錯(cuò)誤到底有多少,即使經(jīng)過了大量的測(cè)試之后,也是不可知的,因?yàn)檐浖y(cè)試只能夠證明軟件中含有錯(cuò)誤,而無法證明軟件是正確的。雖然軟件故障只是軟件錯(cuò)誤的表現(xiàn)形式之一,對(duì)于工程化的應(yīng)用來講,那些永遠(yuǎn)不能以故障的形式表現(xiàn)出來的軟件錯(cuò)誤,可以認(rèn)為是正確的,所以對(duì)于2.1節(jié)的可測(cè)試度公式(2)中的錯(cuò)誤數(shù),可以用故障數(shù)來代替
那么如何判定一個(gè)故障是容易暴露的故障還是難于暴露的故障呢?一個(gè)非常直觀的想法就是容易暴露的錯(cuò)誤必然容易被發(fā)現(xiàn),因此在隨機(jī)黒盒測(cè)試的早期就能夠以軟件故障的形式表現(xiàn)出來;難于暴露的錯(cuò)誤必然隱藏的很深,不容易被發(fā)現(xiàn),因此直到軟件測(cè)試的末期,甚至于軟件交付使用之后才被揭示出來?;谶@種思想,我們把隨機(jī)黒盒測(cè)試按照時(shí)間的順序劃分為若干個(gè)階段,用第一階段、第二階段、…來表示,把初始階段測(cè)試中發(fā)現(xiàn)的故障數(shù)作為容易發(fā)現(xiàn)的故障數(shù),一般的可以取第一階段
3 基于故障的可測(cè)試性模型在軟件測(cè)試過程中的應(yīng)用
基于故障的可測(cè)試性模型提供了兩個(gè)非常有價(jià)值的軟件指標(biāo):可信度和可測(cè)試度,這兩個(gè)指標(biāo)可以指導(dǎo)我們科學(xué)的規(guī)劃軟件測(cè)試的進(jìn)度和合理的分配軟件測(cè)試過程中資源。下面以p=2為例說明基于故障的可測(cè)試性模型在軟件測(cè)試過程中的應(yīng)用。
理論上來說,任何一輪測(cè)試結(jié)束后都可以計(jì)算軟件的可測(cè)試度和可信度,但是假定p=2的前提下,第一輪測(cè)試結(jié)束后根據(jù)公式(4)是無法計(jì)算可信度的,所以p=2就意味著至少進(jìn)行兩輪測(cè)試;同理,如果假定p=3,則至少進(jìn)行3輪測(cè)試,以此類推。那么兩輪測(cè)試結(jié)束之后,可以由公式(4)計(jì)算軟件的可信度R,如果R大于給定的軟件的可信度R′,則停止測(cè)試;否則,根據(jù)公式(3)計(jì)算軟件各個(gè)模塊的可測(cè)試度,根據(jù)各模塊可測(cè)試度的值分配測(cè)試資源,即可測(cè)試度越小,分配的測(cè)試資源越多;可測(cè)試度越大,分配的測(cè)試資源越少,繼續(xù)進(jìn)行下一輪的測(cè)試,直到滿足給定的可信度為止。
可依照如下算法進(jìn)行:
(Ⅰ)選擇p的值,并進(jìn)行p輪測(cè)試,得到程序Pp。
(Ⅱ)根據(jù)公式(4)計(jì)算程序Pp的可信度R,如果R>R′,則停止測(cè)試,程序Pp即可發(fā)布;否則轉(zhuǎn)(3)。其中R′為事先給定的軟件的可信度,是我們對(duì)軟件的要求。
(Ⅲ)根據(jù)公式(Ⅲ)計(jì)算軟件的各個(gè)模塊的可測(cè)試度,根據(jù)可測(cè)試度的大小分配測(cè)試資源,進(jìn)行第p+1輪測(cè)試,得到程序Pp+1,轉(zhuǎn)(Ⅱ)。
在上述測(cè)試流程中,軟件的可信度和可測(cè)試度不斷的進(jìn)行著修正,每進(jìn)行一輪測(cè)試就向真值靠近一步,直到達(dá)到我們的要求才停下來。
4 結(jié)束語
本文將極限理論引入到軟件測(cè)試中,解決了軟件發(fā)布的時(shí)間點(diǎn),即測(cè)試結(jié)束的時(shí)間點(diǎn)的問題,并在此基礎(chǔ)上建立了基于故障的可測(cè)試性模型,給出了基于故障的可測(cè)試度計(jì)算方法,整個(gè)流程如下:
(1)軟件測(cè)試以m天為一個(gè)階段進(jìn)行,各個(gè)階段的測(cè)試天數(shù)m可以不同,一個(gè)版本測(cè)試結(jié)束后,把測(cè)試中發(fā)現(xiàn)的故障進(jìn)行修正得到新的編譯版本,由此得到一個(gè)程序序列:
(3)計(jì)算軟件的可測(cè)試度,T=,其中Fo表示第一階段發(fā)現(xiàn)的故障數(shù),F(xiàn)表示測(cè)試過程中發(fā)現(xiàn)的故障總數(shù)。基于故障的可測(cè)試性模型主要是針對(duì)桌面操作環(huán)境下故障發(fā)生的特點(diǎn)提出的,對(duì)于網(wǎng)絡(luò)環(huán)境并沒有考慮到,尤其是網(wǎng)絡(luò)環(huán)境下的軟件疲勞問題,可能是本模型的一個(gè)盲區(qū),還需要做進(jìn)一步的研究。
【參考文獻(xiàn)】
[1]Jeffrey Voas. Software Testability Measurement for Assertion Placement and Fault Localization[J].Software Quality Journal, 1997,6(5):327-335.
[2]Jeffrey Voas. A Dynamic Failure Model for Predicting the Impact that a Program Location has on the Program[J]. ESEC,1991,550(3):308-331.
[3]Jin-Cherng Lin,Szu-wen Lin&Ian-Ho. An Estimated Method for Software Testability Measurement[J]. Eighth IEEE International Workshop Proceedings on Software Technology and Engineering Practice [Incorporating Computer Aided Software Engineering], 1997,6(6):14-18.
[4]Morell, Larry. A Theory of Fault-based Testing[J]. IEEE Tracsactions on Software Engineering, 1990,16(8):844-857.
[5]宮云戰(zhàn).軟件的測(cè)試性分析與設(shè)計(jì)[J].裝甲兵工程學(xué)院學(xué)報(bào),2000,1(1):1-5.
[責(zé)任編輯:鄧麗麗]