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