孫士文
摘要:自1985年微軟發(fā)布人類歷史上第一個(gè)基于個(gè)人計(jì)算機(jī)視窗操作系統(tǒng)以來,社會(huì)的科技、文明進(jìn)入了迅猛發(fā)展階段。軟件應(yīng)用已滲透到了我們生活中的各個(gè)方面。相應(yīng)的軟件質(zhì)量已經(jīng)成為軟件企業(yè)的核心競(jìng)爭(zhēng)力。本文基于筆者實(shí)際工作經(jīng)驗(yàn),結(jié)合軟件測(cè)試工作實(shí)際情況探討了軟件可靠性分析對(duì)軟件質(zhì)量保證的重要意義。
關(guān)鍵詞:軟件可靠性分析;軟件測(cè)試
隨著軟件業(yè)的飛速發(fā)展,軟件企業(yè)間的競(jìng)爭(zhēng)也更加激烈。一方面軟件產(chǎn)品發(fā)布周期不斷縮短;另一方面,用戶對(duì)軟件的質(zhì)量要求也越來越高。軟件失效導(dǎo)致的隱私數(shù)據(jù)泄露、軟件響應(yīng)速度慢、分析結(jié)果錯(cuò)誤等都會(huì)讓用戶對(duì)軟件喪失信心,使軟件企業(yè)失去競(jìng)爭(zhēng)力。如何通過軟件可靠性研究,提高軟件產(chǎn)品質(zhì)量是軟件質(zhì)量管理從業(yè)者需要考慮和研究的重要方向。
一、軟件可靠性研究介紹
根據(jù)IEEE在1991年的定義,軟件可靠性是指計(jì)算機(jī)程序在特定環(huán)境中的特定時(shí)間段內(nèi)無缺陷運(yùn)行的概率[1]。軟件可靠性工程(SRE)被定義為根據(jù)用戶對(duì)可靠性的要求對(duì)基于軟件系統(tǒng)的操作行為進(jìn)行定量研究[2]。SRE 過程由四個(gè)主要部分組成:可靠性目標(biāo);軟件測(cè)試;可靠性建模、測(cè)量以及可靠性驗(yàn)證??煽啃阅繕?biāo)是從客戶的角度對(duì)產(chǎn)品可靠性目標(biāo)的規(guī)范,可靠性建模是可靠性估計(jì)過程的基本要素。通過對(duì)已有失效數(shù)據(jù)進(jìn)行分析,可以對(duì)產(chǎn)品可靠性進(jìn)行估計(jì)。SRE已被多個(gè)組織在其軟件項(xiàng)目和報(bào)告中采用作為標(biāo)準(zhǔn)或最佳實(shí)踐,包括AT&T、朗訊、IBM、美國(guó)宇航局、微軟以及北美、歐洲、亞洲的許多其他組織。
軟件可靠性增長(zhǎng)模型(SRGM)是描述軟件可靠性的數(shù)學(xué)工具。該模型認(rèn)為在軟件開發(fā)過程中的測(cè)試階段,軟件中的錯(cuò)誤會(huì)被檢測(cè)出來,并且被不斷修復(fù)。隨著測(cè)試的進(jìn)行,軟件系統(tǒng)中剩余錯(cuò)誤(faults)的數(shù)量會(huì)減少。這意味著軟件失效的概率降低,軟件可靠性增加。兩次被檢測(cè)出的軟件失效(failures)時(shí)間間隔隨測(cè)試時(shí)間的延長(zhǎng)而變長(zhǎng)。
從1972年Jelinski 和 Moranda發(fā)表Jelinski-Moranda 模型以來,世界上已經(jīng)公開發(fā)表了上百個(gè)軟件可靠性模型。從建模方法上可以將軟件可靠性增長(zhǎng)模型分為軟件可靠性解析模型和軟件可靠性啟發(fā)模型兩大類[3]。
軟件可靠性解析模型可以分為指數(shù)模型、對(duì)數(shù)模型、Littlewood-Verrall模型、數(shù)據(jù)域模型、基于Markov過程的NHPP模型、隨機(jī)Petri網(wǎng)模型等。經(jīng)典的指數(shù)模型有Jelinski-Moranda軟件可靠性模型,Goel-Okumoto軟件可靠性模型,Musa基本執(zhí)行時(shí)間模型,超指數(shù)增長(zhǎng)模型,S-Shape模型等。經(jīng)典的對(duì)數(shù)模型是Geometric模型和Musa-Okumoto對(duì)數(shù)泊松模型,這兩個(gè)模型都屬于對(duì)數(shù)無限錯(cuò)誤模型。Littlewood-Verrall可靠性模型 (L-V模型)考慮了發(fā)現(xiàn)失效不被完全剔除的情況。數(shù)據(jù)域模型的典型代表是Nelson模型,它是最重要的軟件可靠性模型之一。基于Markov過程的不完美調(diào)試NHPP模型主要用于評(píng)估預(yù)測(cè)基于構(gòu)件的軟件系統(tǒng)。隨機(jī)Petri網(wǎng)模型作為軟件可靠性建模的一種工具能較全面地描述系統(tǒng)的動(dòng)態(tài)變化行為,當(dāng)系統(tǒng)發(fā)生變化時(shí),只要增加相應(yīng)位置中的標(biāo)記數(shù)即可,可以大大減少工作量。
軟件可靠性啟發(fā)模型利用軟件歷史失效數(shù)據(jù)對(duì)自身進(jìn)行訓(xùn)練、更新,最終找到最優(yōu)模型。啟發(fā)模型可分為基于神經(jīng)網(wǎng)絡(luò)的軟件可靠性模型和基于遺傳編程的軟件可靠性模型。Adnan, Yaakob, Anas等人通過實(shí)驗(yàn)證明了增加隱藏層可以有效地提高神經(jīng)網(wǎng)絡(luò)模型的性能。Kiran, Ravi等人使用小波神經(jīng)網(wǎng)絡(luò)對(duì)軟件可靠性進(jìn)行建模,并驗(yàn)證該模型的有效性。Harirforoush, Seyyedi 和Mirzaee等人使用構(gòu)件故障進(jìn)行建模分析,證明該方法可以節(jié)約可靠性評(píng)估/預(yù)測(cè)時(shí)間。Lu Zhao, Jian-pei Zhang, Jing Yang和Yan Chu等人使用模糊小波神經(jīng)網(wǎng)絡(luò)對(duì)軟件可靠性進(jìn)行建模,實(shí)驗(yàn)證明該模型構(gòu)建方法簡(jiǎn)單。在遺傳編程 (genetic programming,GP)軟件可靠性建模方面,Costa, Vergilio和Pozo 等人于2005年提出了基于時(shí)間GP模型和測(cè)試覆蓋率GP模型,并將GP模型與傳統(tǒng)解析性軟件可靠性模型和神經(jīng)網(wǎng)絡(luò)軟件可靠性模型進(jìn)行了比較。
對(duì)解析模型和啟發(fā)模型比較來看,解析模型的應(yīng)用需要基于一定的假設(shè)約束,隨著軟件系統(tǒng)越來越復(fù)雜,軟件企業(yè)對(duì)軟件的管理過程差異化越來越大,這些假設(shè)條件很難得到滿足。軟件可靠性啟發(fā)模型的優(yōu)點(diǎn)在于無需對(duì)軟件系統(tǒng)的失效進(jìn)行假設(shè)約束,具有強(qiáng)大的自適應(yīng)、自學(xué)習(xí)、容錯(cuò)和推廣能力,能夠從背景不清楚和不完全的數(shù)據(jù)中自動(dòng)提取反映事物內(nèi)在規(guī)律和特點(diǎn)的知識(shí),并能夠應(yīng)用通過學(xué)習(xí)所獲取的知識(shí)來進(jìn)行問題求解。
二、當(dāng)前軟件研發(fā)過程中質(zhì)量管理面臨的問題
互聯(lián)網(wǎng)的興起使軟件產(chǎn)品的交付方式、交付周期發(fā)生了巨變。軟件企業(yè)既要不斷改進(jìn)軟件研發(fā)過程,又要合理地分配資源。這就需要用科學(xué)的方法去指導(dǎo)實(shí)踐。
隨著軟件工程的演進(jìn),軟件的組織管理模式從傳統(tǒng)的瀑布式逐漸轉(zhuǎn)變?yōu)槊艚蓍_發(fā)模式。Web應(yīng)用軟件的發(fā)展使持續(xù)集成/持續(xù)部署(CI/CD)思想深入軟件企業(yè)。基于CI/CD,Web應(yīng)用軟件可以實(shí)現(xiàn)每天上百萬次的灰度發(fā)布。自動(dòng)測(cè)試技術(shù)的飛速發(fā)展,使自動(dòng)測(cè)試的覆蓋度大幅提高。軟件測(cè)試有幾個(gè)不變的公理 [4]: ○1完全測(cè)試程序是不可能的?!?軟件測(cè)試是有風(fēng)險(xiǎn)的行為?!?測(cè)試無法發(fā)現(xiàn)潛伏的軟件缺陷?!?找到的軟件缺陷越多,不能說明軟件中存在缺陷越多。○5并非所有軟件缺陷都要修復(fù)?!?什么時(shí)候才叫缺陷難以說清?!? 產(chǎn)品說明書從來沒有最終版。以上問題說明想要通過全面的軟件測(cè)試發(fā)現(xiàn)所有軟件缺陷是不可能的。并且每增加一次的測(cè)試,都意味著投入更多的成本。
在軟件產(chǎn)品的研發(fā)階段,如何科學(xué)合理地分配測(cè)試資源,是軟件企業(yè)面臨的一個(gè)問題。 在大部分的軟件企業(yè)中,分配測(cè)試資源主要是依據(jù)軟件開發(fā)過程的管理規(guī)范以及管理者的經(jīng)驗(yàn)。如果在這一過程中,能結(jié)合已有軟件失效數(shù)據(jù)進(jìn)行定量分析,將使測(cè)試資源的分配更加科學(xué)、合理。
三、應(yīng)用軟件可靠性分析的實(shí)際意義
通過使用軟件可靠性分析模型對(duì)已有數(shù)據(jù)進(jìn)行預(yù)測(cè),能夠解決以下問題:
1. 預(yù)測(cè)軟件中存在軟件失效風(fēng)險(xiǎn)的功能區(qū)域,合理分配測(cè)試資源。
無論采用瀑布式軟件開發(fā)模型還是敏捷軟件開發(fā)模型,我們都可以將軟件測(cè)試劃分為若干階段。通過對(duì)當(dāng)前階段已有失效數(shù)據(jù)進(jìn)行可靠性分析,可以預(yù)測(cè)下一階段中軟件失效風(fēng)險(xiǎn)較大的區(qū)域,并依此分配測(cè)試資源。
2. 分析用戶反饋,對(duì)用戶重點(diǎn)關(guān)注的區(qū)域或問題投入較多測(cè)試資源。
通常,軟件企業(yè)會(huì)收集用戶在使用軟件產(chǎn)品過程中發(fā)現(xiàn)的軟件失效。通過對(duì)用戶反饋的失效進(jìn)行分析,能夠了解對(duì)用戶來說哪些功能區(qū)域最重要。這些功能區(qū)域可能會(huì)隨時(shí)發(fā)生變化。比如,對(duì)于統(tǒng)計(jì)分析軟件來說,從2020年新冠疫情爆發(fā)以來,用于幫助醫(yī)藥企業(yè)進(jìn)行藥品研發(fā)的功能區(qū)域變得更加重要。對(duì)于這些區(qū)域,可以投入相對(duì)較多測(cè)試資源。
實(shí)際上,并非所有軟件中存在的失效都需要被修復(fù)。或者說,并非所有軟件失效都具有相同的優(yōu)先級(jí)。通過對(duì)用戶的失效數(shù)據(jù)進(jìn)行分析,可以對(duì)軟件失效設(shè)置優(yōu)先級(jí),優(yōu)先修復(fù)對(duì)用戶來說最重要的問題。
3. 預(yù)測(cè)軟件產(chǎn)品中潛在風(fēng)險(xiǎn)
當(dāng)軟件的底層代碼發(fā)生更改后,很多功能區(qū)域都會(huì)受到影響。作為軟件研發(fā)人員,有時(shí)候很難說清哪些功能區(qū)域會(huì)受到影響。通過對(duì)已有的軟件失效數(shù)據(jù)進(jìn)行分析,能夠及時(shí)發(fā)現(xiàn)可能出現(xiàn)功能衰退的潛在風(fēng)險(xiǎn)區(qū)域。
4. 預(yù)測(cè)新版本的質(zhì)量
在即將發(fā)布一個(gè)新版本的時(shí)候,通常,我們不知道這個(gè)版本的質(zhì)量如何。相比上一個(gè)版本,是否存在衰退問題。通過對(duì)已有失效數(shù)據(jù)進(jìn)行分析,可以對(duì)即將發(fā)布的新版本質(zhì)量進(jìn)行預(yù)測(cè)。
5. 尋找影響軟件質(zhì)量的其他因素
軟件企業(yè)一直在尋找、嘗試提高軟件質(zhì)量的方法,希望能夠從建立軟件研發(fā)過程中的標(biāo)準(zhǔn)規(guī)范、對(duì)研發(fā)人員進(jìn)行培訓(xùn)、改進(jìn)項(xiàng)目管理方式、嘗試使用更先進(jìn)的軟件開發(fā)模型、建立共享知識(shí)庫(kù)等方面來幫助提高軟件產(chǎn)品質(zhì)量。在軟件可靠性分析中,可以將這些因素作為輸入變量,通過軟件可靠性分析,判斷他們是否有助于提高產(chǎn)品質(zhì)量,從而為企業(yè)的管理方向提供參考。
四、結(jié)論
通過使用軟件可靠性分析對(duì)已有失效數(shù)據(jù)進(jìn)行分析,能夠幫助軟件企業(yè)合理分配測(cè)試資源,找到用戶關(guān)注的重點(diǎn)區(qū)域、重點(diǎn)問題。同時(shí),能夠幫助企業(yè)對(duì)管理方法、流程進(jìn)行檢驗(yàn)與調(diào)整。在做軟件可靠性分析的過程中,要結(jié)合軟件開發(fā)的過程、方法、管理手段等對(duì)軟件失效數(shù)據(jù)進(jìn)行分析,從而找出適合當(dāng)前軟件的可靠性分析模型。
參考文獻(xiàn)
[1] ANSI/IEEE, Standard Glossary of Software Engineering Terminology, STD-729-1991.
[2] M.R. Lyu (ed.), Software Reliability Engineering: A Roadmap.
[3] 耿技,聶鵬,秦志光,軟件可靠性模型現(xiàn)狀與研究, 電子科技大學(xué)學(xué)報(bào),第42卷第4期2013年7月
[4] (美)佩騰(Patton, R.)著,張小松等譯,軟件測(cè)試(原書第2版), ISBN 978-7-111-18526-0.