摘 要: 隨著軟件的廣泛應(yīng)用,特別是軟件在尖端領(lǐng)域的應(yīng)用,,軟件可靠性成為一個(gè)非常重要的問(wèn)題,。形式化規(guī)范在軟件可靠性研究中能夠起到的作用是多方面的。本文針對(duì)非形式化統(tǒng)計(jì)使用測(cè)試的不足,,結(jié)合已有的早期可靠性估計(jì)方法,,設(shè)計(jì)了優(yōu)化算法,并提出了即使在設(shè)計(jì)中采用了形式化規(guī)范仍然需要測(cè)試的結(jié)論,。
關(guān)鍵詞: 形式化規(guī)范,;軟件可靠性;早期估計(jì),;測(cè)試
軟件可靠性研究的主要目的是評(píng)價(jià)和度量軟件的可靠性和預(yù)測(cè)軟件可靠性,。軟件可靠性估計(jì)主要指應(yīng)用數(shù)理統(tǒng)計(jì)分析處理系統(tǒng)測(cè)試和系統(tǒng)運(yùn)行期間得到的失效數(shù)據(jù),對(duì)軟件系統(tǒng)當(dāng)前的可靠性進(jìn)行估計(jì),。主要目的是估計(jì)當(dāng)前可靠性,,并確定可靠性模型水平的依據(jù)。
1 非形式化統(tǒng)計(jì)使用測(cè)試的不足
1.1 傳統(tǒng)使用剖面的不足
軟件使用剖面[1]是關(guān)于如何使用軟件系統(tǒng)的一種量化描述,,一個(gè)剖面就是一組操作及某個(gè)操作發(fā)生概率所組成的集合,。例如:如果A在60%的時(shí)間內(nèi)發(fā)生,B在40%的時(shí)間內(nèi)發(fā)生,,使用剖面就是A:0.6,,B:0.4。
傳統(tǒng)理論認(rèn)為,,剖面是反映軟件不同的客戶,、用戶、系統(tǒng)模式,、功能和操作的發(fā)生概率的一個(gè)量化特征,,其目的是為軟件測(cè)試及其他軟件開(kāi)發(fā)階段進(jìn)行資源分配提供相應(yīng)的參考信息,決定如何在軟件測(cè)試中進(jìn)行測(cè)試實(shí)例的生成,,如何在測(cè)試過(guò)程中分配測(cè)試資源,。
傳統(tǒng)的剖面生成方法已經(jīng)為統(tǒng)計(jì)測(cè)試提供了一個(gè)良好的基礎(chǔ),,然而這并不說(shuō)明傳統(tǒng)的使用剖面的數(shù)據(jù)本身和相應(yīng)的獲得方法沒(méi)有缺陷。事實(shí)上,,以下問(wèn)題在傳統(tǒng)剖面中一直沒(méi)有得到有效解決:(1)剖面獲得方法主觀性較強(qiáng),。(2)統(tǒng)計(jì)所得使用頻率并不能完全代表軟件的實(shí)際應(yīng)用情況[2]。(3)影響可靠性度量[2],。
1.2 非形式化統(tǒng)計(jì)使用測(cè)試的不足
軟件測(cè)試占用了軟件開(kāi)發(fā)過(guò)程中大量的人力物力資源,,然而軟件測(cè)試卻往往缺乏較好的理論基礎(chǔ),測(cè)試數(shù)據(jù)即測(cè)試實(shí)例的選擇通常根據(jù)經(jīng)驗(yàn)作出,,因此具有主觀性,,并依賴于個(gè)人經(jīng)驗(yàn)。
統(tǒng)計(jì)使用測(cè)試則是一種按軟件實(shí)際使用的方法來(lái)測(cè)試軟件的方法,。測(cè)試實(shí)例是按照使用規(guī)范得到的,,而使用規(guī)范是軟件預(yù)期使用的描述。統(tǒng)計(jì)測(cè)試根據(jù)用戶對(duì)軟件可靠性的期望,,最大程度地利用可以支配的資源,。另外,因?yàn)榻y(tǒng)計(jì)使用測(cè)試是以概率統(tǒng)計(jì)為基礎(chǔ)的,,因此利用統(tǒng)計(jì)測(cè)試得到的數(shù)據(jù)也可以利用概率統(tǒng)計(jì)的方法來(lái)預(yù)測(cè)軟件可靠性,,從而為可靠性度量提供數(shù)據(jù),并可以相應(yīng)進(jìn)行軟件的可靠性度量,,另外還可以決定軟件測(cè)試可以停止的標(biāo)準(zhǔn),。這一切都可以使得軟件可靠性處在嚴(yán)密控制之下[4,,6],。
2 早期可靠性估計(jì)方法及其改進(jìn)
2.1 使用SDL進(jìn)行使用實(shí)例建模
在文獻(xiàn)[5]中通過(guò)引入狀態(tài)層次模型,,有可能減少統(tǒng)計(jì)使用測(cè)試中的狀態(tài)爆炸問(wèn)題,,該方法采用馬爾科夫鏈描述技術(shù)描述用戶及其對(duì)系統(tǒng)的使用,。
使用SDL可結(jié)合狀態(tài)層次模型的方法進(jìn)行軟件可靠性早期估計(jì),,就是用SDL的替換形式SHY-SDL(State Hierarchy with SDL)對(duì)使用的層次化描述建模形式化,。
目前已有基于使用剖面的測(cè)試用例選擇算法可以應(yīng)用于系統(tǒng)的使用模型,,算法的結(jié)果產(chǎn)生測(cè)試序列,,測(cè)試序列可以用SDL或其他方法描述。因此,,在進(jìn)行可靠性早期估計(jì)時(shí),,用SDL描述測(cè)試用例很重要,優(yōu)點(diǎn)是:(1)用SDL描述使用,,就容易用SDL自動(dòng)生成測(cè)試用例,。(2)用SDL描述測(cè)試用例,有可能使用SBA,。
2.2 分析和使用實(shí)例建模
SBA應(yīng)根據(jù)對(duì)用戶及系統(tǒng)使用的描述和系統(tǒng)的原始SDL描述,。使用結(jié)合SHY-SDL的SBA有三種方式:
(1)原始SDL系統(tǒng)成為一個(gè)塊,,SHY-SDL模型作為另一個(gè)塊,形成新的系統(tǒng),,如圖1,。這種方案不能直接實(shí)現(xiàn),因?yàn)镾BA工具將對(duì)SDL系統(tǒng)進(jìn)行充分的動(dòng)態(tài)分析,,這與統(tǒng)計(jì)質(zhì)量控制過(guò)程的目標(biāo)相沖突,。該方案的主要好處是檢查系統(tǒng)描述與獲得的真實(shí)環(huán)境的一致性,但一般作為其他方法的補(bǔ)充,。
(2)修改SBA工具,,使之適合于統(tǒng)計(jì)分析,可以按隨機(jī)的步驟采用第一種方案執(zhí)行,,但同時(shí)通過(guò)SHY-SDL模型根據(jù)使用剖面選擇特定的執(zhí)行路徑,。所以在執(zhí)行路徑的決策處理和調(diào)度兩個(gè)方面必須對(duì)SBA加以補(bǔ)充。
(3)根據(jù)SHY-SDL模型生成分析(測(cè)試)序列,,使分析實(shí)例的SDL描述成為新的SDL系統(tǒng)中的塊,,這種方法意味著用SBA分析選擇的使用實(shí)例。
2.3 根據(jù)分析進(jìn)行可靠性估計(jì)
初步的可靠性估計(jì)可用如下兩種方式:(1)失效間隔時(shí)間和相關(guān)模型進(jìn)行比較,;(2)計(jì)算成功執(zhí)行的分析實(shí)例數(shù)與總分析實(shí)例數(shù)的比,。
第一種方法意味著分析是一個(gè)序列,第二種則要求把環(huán)境行為描述分成幾個(gè)分析實(shí)例,。在使用SBA分析時(shí),,將報(bào)告連續(xù)兩次失效間分析的狀態(tài)數(shù),這就對(duì)第一種方法形成了簡(jiǎn)單的支持,。如果失效被糾正,,將看到可靠性增長(zhǎng),并作為測(cè)試和運(yùn)行期間的可靠性增長(zhǎng)的估計(jì),,對(duì)可靠性增長(zhǎng)的早期估計(jì)可以更好地規(guī)劃達(dá)到質(zhì)量目標(biāo)的測(cè)試時(shí)間,。如果不糾正失效,將得到實(shí)際可靠性估計(jì),,這種情況只有當(dāng)分析工具的執(zhí)行是連續(xù),、不糾正失效時(shí)才有可能。
第二種分析方法的主要問(wèn)題在于SBA工具交互性很差,,如果一個(gè)塊中實(shí)現(xiàn)幾個(gè)實(shí)例,,很難分析其中某一個(gè),解決辦法是一次只實(shí)現(xiàn)一個(gè)分析實(shí)例,,但這又使得工具用戶為每個(gè)分析實(shí)例重新生成代碼,。
結(jié)合SBA的方法可獲得第二步軟件可靠性估計(jì),采用剖面的動(dòng)態(tài)分析可以結(jié)合充分分析(SBA的完整形式)如下:
(1)基于使用剖面進(jìn)行部分分析,,獲得可靠性增長(zhǎng)估計(jì),;
(2)進(jìn)行充分動(dòng)態(tài)分析,;
(3)將規(guī)格化的失效時(shí)間與可靠性增長(zhǎng)估計(jì)相比較。
必須規(guī)格化失效時(shí)間,,這樣能夠比較充分分析和按使用剖面進(jìn)行部分分析的結(jié)果,。通過(guò)記錄失效在使用描述中發(fā)生的位置來(lái)規(guī)格化時(shí)間,如果分析根據(jù)剖面進(jìn)行,,可以計(jì)算失效發(fā)生的平均時(shí)間,。這個(gè)時(shí)間被認(rèn)為是實(shí)際的失效時(shí)間。
2.4 導(dǎo)出失效時(shí)間算法及其優(yōu)化
通過(guò)分析可以得到動(dòng)態(tài)失效與實(shí)際操作中失效的關(guān)系,。下面介紹通過(guò)分析檢測(cè)的動(dòng)態(tài)失效是否代表了運(yùn)行中的實(shí)際失效,。
首先給出以下假設(shè):
(1)由SBA動(dòng)態(tài)分析找出的失效集是所有可能失效的子集;
(2)動(dòng)態(tài)分析中找出的失效隨機(jī)分布于所有失效中,,例如在某段時(shí)間內(nèi),,隨機(jī)失效與動(dòng)態(tài)失效的比例因子用c表示;
(3)根據(jù)使用剖面測(cè)試是操作的近似,,這也是統(tǒng)計(jì)使用測(cè)試的基礎(chǔ)和大多可靠性估計(jì)模型的基礎(chǔ),;
(4)而采用SBA根據(jù)使用剖面分析是采用SBA進(jìn)行充分分析的近似,充分動(dòng)態(tài)分析遍歷所有狀態(tài),,采用使用剖面進(jìn)行有選擇的動(dòng)態(tài)分析時(shí),,是根據(jù)所有可能的狀態(tài)集選擇進(jìn)入的狀態(tài),選擇是根據(jù)特定的使用剖面的取樣,,而不是隨機(jī)取樣,。
(5)SBA利用使用剖面進(jìn)行動(dòng)態(tài)分析與統(tǒng)計(jì)使用測(cè)試是可以比較的,從相同的使用剖面選擇用于動(dòng)態(tài)分析的實(shí)例類似于選擇統(tǒng)計(jì)使用測(cè)試實(shí)例,,區(qū)別為后者是隨機(jī)的,。
要使根據(jù)動(dòng)態(tài)分析估計(jì)的可靠性增長(zhǎng)可應(yīng)用于考慮隨機(jī)失效的可靠性增長(zhǎng),必須將動(dòng)態(tài)分析失效數(shù)據(jù)對(duì)應(yīng)代表所有失效,。以某軟件為例,,可采用以下算法[3]:
(1)根據(jù)使用剖面進(jìn)行動(dòng)態(tài)分析,。圖2中,,t1、t2,、t3是失效時(shí)間,。失效數(shù)據(jù)可以用來(lái)估計(jì)SBA分析所得動(dòng)態(tài)失效的MTTF(平均失效時(shí)間),估計(jì)模型可以采用凈室可靠性估計(jì)模型,。
(2)確定c,。如:包括隨機(jī)失效在內(nèi)的實(shí)際總失效數(shù)與SBA找出的動(dòng)態(tài)失效數(shù)之比;c值主要根據(jù)早期開(kāi)發(fā)的項(xiàng)目,,程序特點(diǎn)不同可以采用不同的c值,,而且分析不同階段c值也又可能不同,。
(3)根據(jù)第一步計(jì)算的MTTF,確定每個(gè)時(shí)間間隔發(fā)生的失效數(shù),。如果c不是整數(shù),,間隔內(nèi)的失效數(shù)按trunc(c-1)和trunc(c)之間的兩點(diǎn)分布選擇,則c-1為平均值,,如果是整數(shù),,則每個(gè)間隔失效數(shù)為c-1。
(4)在時(shí)間間隔內(nèi)隨機(jī)選擇失效時(shí)間放入根據(jù)不同c值得到的失效,,如:t1a,、t2a、t2b和t3a,。
(5)根據(jù)分析和計(jì)算的失效數(shù)據(jù)估計(jì)MTTF,,這就是對(duì)所有失效類型MTTF的估計(jì)。
分析的實(shí)際值和可能值應(yīng)該進(jìn)一步根據(jù)理論和實(shí)踐研究,,但可以肯定,,初步估計(jì)考慮的是動(dòng)態(tài)分析軟件規(guī)范期間的動(dòng)態(tài)失效。
3 算法改進(jìn)
(1)改進(jìn)使用剖面
通常隨機(jī)測(cè)試也是一種使用剖面,,例如:系統(tǒng)所有的事件或信號(hào)是等可能出現(xiàn)的,,這樣可以測(cè)試系統(tǒng)將來(lái)的可靠性??紤]軟件可靠性時(shí),,有必要對(duì)關(guān)鍵部分加以特別重視,生成這樣的剖面在某類嚴(yán)重失效不常發(fā)生時(shí)是很有價(jià)值的[4],。
另外,,即使考慮了使用剖面中的重要度和使用頻繁度,仍需改變使用剖面,,尤其是在動(dòng)態(tài)分析期間,,很容易進(jìn)行第二次分析。改變使用剖面的目的是檢查其他使用剖面的可靠性,,因?yàn)橄到y(tǒng)的使用情況不斷變化,,這意味著高可靠的系統(tǒng)由于使用情況的改變有可能變得不可靠了,所以,,改變使用剖面有意義,。
還有一種方法可以獲得在正常使用中較少出現(xiàn)情況的可靠性,即使用充分動(dòng)態(tài)分析考慮軟件中易產(chǎn)生故障的部分,,找出這些部分可以說(shuō)明軟件使用剖面的改變是可以改變了軟件可靠性的,。
(2)該方法中選擇的時(shí)間間隔是兩個(gè)失效間的間隔,但如果把時(shí)間間隔擴(kuò)大為幾個(gè)失效的間隔,則在可靠性估計(jì)時(shí)計(jì)算MTTF時(shí)更準(zhǔn)確,,更接近于項(xiàng)目的真實(shí)情況,。當(dāng)然,這又依賴于對(duì)c值的進(jìn)一步確定,。
(3)該方法在時(shí)間間隔中放入隨機(jī)失效時(shí)采用的是隨機(jī)放置的方法,,但采用什么方式放置對(duì)于統(tǒng)計(jì)最后的MTTF是很關(guān)鍵的。從統(tǒng)計(jì)意義上來(lái)說(shuō),,可以按指數(shù)分布在時(shí)間間隔內(nèi)放置隨機(jī)失效,,因?yàn)榧僭O(shè)X為某系統(tǒng)發(fā)生故障的時(shí)間,它服從指數(shù)分布,,則對(duì)νs,,νt>0,有:
這表明,,在時(shí)段(s,,s+t)內(nèi)無(wú)故障的概率只與時(shí)段的長(zhǎng)度t有關(guān),而與系統(tǒng)過(guò)去無(wú)故障的工作時(shí)間s無(wú)關(guān),。這正好滿足選擇動(dòng)態(tài)失效間隔放置隨機(jī)失效的條件,。
即使在設(shè)計(jì)中采用了形式化方法,仍然需要測(cè)試,。測(cè)試可以檢查出早期檢測(cè)所遺留的或求精過(guò)程中所引起的錯(cuò)誤,,如T800晶片機(jī)的浮點(diǎn)部件在測(cè)試中發(fā)現(xiàn)了一個(gè)對(duì)微代碼改變而產(chǎn)生的錯(cuò)誤,這個(gè)改變是發(fā)生在形式化開(kāi)發(fā)后,??梢哉f(shuō),測(cè)試永遠(yuǎn)是有用的檢查手段,,因此建議:
(1)開(kāi)發(fā)軟件測(cè)試平臺(tái)
研究,、開(kāi)發(fā)軟件測(cè)試平臺(tái)是很有現(xiàn)實(shí)意義,國(guó)內(nèi)外軟件測(cè)試工具很多,,應(yīng)針對(duì)開(kāi)發(fā)軟件所常用的語(yǔ)言,,利用現(xiàn)有的技術(shù),開(kāi)發(fā)軟件測(cè)試平臺(tái),。
(2)建立軟件測(cè)試和評(píng)估中心
軟件的專業(yè)性很強(qiáng),,因此,軟件測(cè)試評(píng)估中心應(yīng)由計(jì)算機(jī)軟件,、可靠性工程,、系統(tǒng)工程等領(lǐng)域的專家組成,負(fù)責(zé)制定軟件可靠性各種標(biāo)準(zhǔn),,并監(jiān)督實(shí)施,做好軟件可靠性管理工作;建立軟件測(cè)試平臺(tái),,做好軟件可靠性技術(shù)保障工作,;由軟件生產(chǎn)單位協(xié)助,建立可靠性測(cè)試實(shí)例庫(kù),,客觀,、公正地驗(yàn)收軟件;做好可靠性數(shù)據(jù)的收集,、整理,、分析工作,開(kāi)展軟件可靠性模型的研究,,建立適用于軟件的可靠性模型,,并進(jìn)行可靠性評(píng)估。
參考文獻(xiàn)
[1] MUSA J D. Operational profiles in software-reliability engineering[J]. IEEE Software,, 1993,,10(2):14-32.
[2] KITCHENHAM B. Validation verification and testing. diversity rules[J]. IEEE Software, 1998,,15(4):46-49.
[3] WOHLIN C,, RUNESON P. A method proposal for early software reliability estimation [C]. Proceedings of 3th International Symposium on Software Reliability Engineering, 1992.
[4] 顏炯,,艦載指控軟件操作剖面研究[D].武漢:海軍工程大學(xué),,2000.
[5] Runeson. Usage modeling: The basis for statistical quality control. Proceedings of SRS’92, Denver,, USA,, June 1992,77-84.
[6] STOCKS P A,, CARRINGTON D A. A framework for specification-based testing [ J]. IEEE SE,, 1996,22(11):777-793.
[7] RUSHBY J,, PARK M. Formal methods and their role in the certification of critical systems[C]. In: Safety and Reliability of Software Based Systems,, 12th Annual CSR Workshop, Springer,, 1997.