劉俊輝,李 娜
(鄭州牧業工程高等專科學校 信息工程系,河南 鄭州450011)
可靠性作為衡量軟件質量的重要特性,其定量評估和預測早已成為人們關注和研究的焦點[1]。針對可靠性模型及其應用所展開的研究主要集中在兩個方面:關于軟件可靠性早期預測模型的研究和關于軟件可靠性預測模型的研究[2]。在目前的研究成果中,主要集中在關于軟件可靠性預測模型的研究方面,而對于早期預測模型成果很少,同時,大多數模型沒有考慮軟件過程特性,模型的應用范圍一般只能局限在一定的子空間中,通用性比較差。
現代軟件工程認為,軟件質量形成于軟件過程。過程因素是影響軟件可靠性的主要因素。但遺憾的是,直到今天,難以甚至無法確定哪些過程因素對軟件可靠性有影響,過程因素與軟件可靠性之間定性關系是什么都不是很清楚,就更別提利用其度量去預測軟件可靠性了。筆者檢索并研讀了大量文獻,利用文獻比較分析法,從軟件過程的視角出發去分析討論影響軟件可靠性的因素問題,進而為建立軟件可靠性早期預測模型提供分析基礎。
為了確定影響軟件可靠性的因素,文章首先進行廣泛的文獻檢索。檢索的范圍包括:書籍、期刊、會議論文、學位論文以及技術報告。檢索的介質以電子圖書館為主,主要包括IEEE、ACM、ScienceDirect,CiteSeer、ISI web ofknowledge、Springer、Netlibrary、CNKI、書生之家、超星圖書、方正電子圖書等。同時,互聯網也是檢索范圍之一。互聯網上的檢索主要限定在以 .org、.edu、.gov命名的站點搜索,如:http://csse.usc.edu/csse/TECHRPTS/PhD_Dissertations/,是美國南加州大學(USC)系統和軟件工程中心(CSSE)多年來的博士論文集。
檢索的關鍵字是能夠準確檢索的關鍵。對影響因素的幾個文獻進行掃描,以尋找合適的檢索條件[3-4]。并據此推斷,檢索條件可分為3類:一般應用領域、特定應用領域以及特定關鍵字。文中“一般應用領域”是指直接面向本文的研究領域的檢索,如:軟件可靠性、軟件質量等;文中第二類“特定應用領域”是幫助縮小檢索范圍的術語,例如:缺陷注入、缺陷引入、缺陷預防、成本預測等。通過這一類檢索條件,無論什么樣的影響因素都會被檢索出來;文中第三類“特定關鍵字”是進一步縮小檢索范圍的檢索條件。特定關鍵字由一組同義詞、可替換的術語或者相關聯的概念組成,例如:factors、drivers、variables、causes、contributors、reasons 等。
將這 3類檢索條件進行組合(布爾運算,如:and、or),可檢索到相關的文獻。至此,可以做進一步的檢索:通過文獻中的參考文獻,直接檢索相關的書籍、論文以及技術報告等。
軟件不可靠的根本原因是軟件中存在著錯誤或缺陷。有研究者認為軟件特性、人的因素和軟件工程管理是影響軟件可靠性的主要因素。這些因素又可具體分為軟件的可理解性、軟件定義的嚴密性、軟件的復雜性以及軟件工程管理、軟件測試與排錯、人為因素、環境因素以及軟件可靠性工程技術的研究水平與應用能力。也有專家認為:錯誤的引入、錯誤的清除以及環境是影響軟件可靠性的主要因素。錯誤的引入主要取決于產品特性和開發過程。其中,最重要的產品特性就是程序的規模。開發過程特性包括所使用的軟件工程技術和使用的工具、人員的經驗水平、需求的變更以及其他的因素。錯誤的清除依賴于失效的發現和修復活動的質量,而失效的發現又依賴于軟件被執行的程度以及操作剖面。下面詳細討論部分研究者們對于影響軟件可靠性的因素的觀點。
1)孫志安等在其著述[6]中指出:影響軟件可靠性的因素包括運行剖面、軟件規模、軟件結構、軟件可靠性設計、軟件測試、軟件工程化管理與軟件可靠性工程管理、軟件開發技術、方法和工具以及人員等因素。
2)中國軟件測評中心認為,影響軟件可靠性的因素主要有:①軟件規模②軟件對實際需求的表述上的符合度,③軟件的運行剖面,④軟件的內部結構,即軟件復雜度,⑤軟件的開發方法,⑥軟件開發人員的能力和經驗,⑦軟件開發的支持環境,⑧軟件可靠性設計技術,⑨軟件的測試與投放方式[7]。
3)Zhang在其文獻[4]中對13個公司的調查結果分析后,提出了基于經驗數據的影響軟件可靠性的32個因素,并分析了這些因素對軟件可靠性影響的相對權重以及相互關系。這32個因素貫穿了軟件開發的各個階段。其中最重要的是軟件復雜度、程序員的技能、測試工作量、測試覆蓋率、測試環境和程序規格說明書的改動頻率6個因素。
4)謝瑞生在其文獻[8]中指出引起軟件缺陷的原因有內在原因、外在原因以及主觀原因。內在的原因包括:①軟件生命周期各階段可能產生的錯誤,包括需求差錯、設計差錯、編碼差錯、測試差錯以及文檔差錯;②軟件開發工具對可靠性的影響。外在原因包括安裝培訓、運行環境、軟件使用以及軟件維護管理等。主觀原因主要是指軟件開發過程、使用過程以及維護過程中人員的原因所引起的失效,包括在軟件生命周期中,涉及到的需求人員、設計人員、編程人員、測試人員、維護人員以及使用人員等。文獻[8]同時認為還有一些客觀原因會引起軟件的失效,比如時間進度問題、開發費用問題,而軟件本身的復雜度也是引起軟件失效的一個很重要的原因。
5)Jacobs在其文獻[3]指出影響軟件可靠性的因素可分為兩大類:缺陷引入和缺陷檢測。缺陷引入又由16個因素決定,而缺陷檢測由17個因素決定。這些因素中,和過程有關的因素包括開發人員的能力、領域知識、團隊協作、團隊結構、管理能力、程序復雜度、溝通能力、項目管理、過程管理、變更控制、文檔質量、需求質量、開發環境、計劃偏移度、開發過程成熟度、產品調研等。
6)Nikora[9]指出影響缺陷引入的因素很多,主要有開發環境(比如使用的開發方法、開發語言以及CASE工具等)、產品特征(比如軟件復雜度)以及系統中已經存在的缺陷數。
還有很多文獻從不同角度綜合討論了影響軟件可靠性的因素[10]。站在不同的角度去分析,得到的影響軟件可靠性的原因也是多方面的。從軟件開發的角度而言,影響軟件可靠性的主要因素包括:軟件規模、運行剖面、軟件內部結構、軟件可靠性管理、軟件可靠性測試與投入、軟件可靠性設計技術、軟件開發方法和軟件開發環境等。就軟件規模而言,規模越大,其可靠性問題就越多。簡單軟件,可靠性問題很容易通過較為全面的測試而解決,所以軟件可靠性主要是針對于中型以上的軟件而言。
文獻研究的過程首先應對文獻內容進行定性研究。本文將影響因素分為了兩類:正向(積極)的影響、反向(消極)的影響。所謂正向的影響是指,隨著影響因素的影響增大,軟件可靠性也隨之改善。反向影響是指:隨著影響因素的影響增大,軟件可靠性降低。正向的影響,其定義中,會有肯定性的詞匯,如:“有效”、“use of”、“availability of” 以及“mature”。 而對于反向的影響,其定義中,會有諸如:“缺乏”、“lack of”、“missing”或者“availability”等否定意義的詞匯存在。其定性分析,可由影響因素的定義并結合專家的意見來確定。由于本文的研究目的是為提出可用于軟件測試之前的早期可靠性預測模型,故:對于軟件測試階段中存在的影響軟件可靠性的因素也不予考慮。分析依如下過程進行:
1)摒棄和測試有關的因素。如:Zhang在其文獻[4]中提出的:測試環境、測試努力程度、測試資源的配置、測試工具、測試方法、測試覆蓋率、測試文檔化7個與測試過程有關的因素。Schulmeyer提到的:測試覆蓋率、缺陷檢測率等和測試有關的因素。
2)剔除非過程因素。如謝瑞生提出的開發費用。Musa指出的軟件的運行剖面等因素。
3)合并相同因素。如 Evanco、LLNL、Nikora以及徐仁佐等都認為軟件復雜度是影響軟件可靠性的一個很重要的因素。Li Ming、Boehm、Schneberger等都認為開發團隊的經驗、度量和模型的使用等都會影響軟件可靠性。
4)重新定義相近因素。例如表1為相關機構和學者定義的軟件開發環境中對軟件可靠性建模的影響因素,這些因素是相近的。

表1 軟件開發環境中的影響因素Tab.1 Influencing factors in software development environment
對這些相近的影響因素進行重新定義,具體見表2所示:

表2 重新定義的軟件開發環境中的影響因素Tab.2 Redefined influencing factors in software development environment
利用對軟件過程的度量,可以預測軟件產品的質量,進而預測軟件可靠性。在1.2的基礎上,以軟件過程為線索,摒棄非過程因素,預測實驗得到軟件可靠性影響因素。由于篇幅有限,下面僅列出部分比較重要的影響因素,如表3所示。
從表3所標明的部分影響因素來看,所獲結果能夠對早期軟件質量進行有效地預測。

表3 軟件可靠性部分影響因素Tab.3 Part of influencing factors of software reliability
本研究是軟件可靠性早期預測模型研究的基礎研究部分。對軟件可靠性早期預測模型的研究,首先必須考慮影響軟件可靠性的主要因素。而軟件過程是人們用來開發和維護軟件意見相關產品的一組活動、方法、實踐以及轉換。過程的因素是影響軟件可靠性的主要因素。文中分析總結了影響軟件可靠性的過程因素,以期改進軟件可靠性早期預測模型的中鮮有模型考慮軟件過程特性的現狀,并建立基于過程特性的軟件可靠性早期模型。
[1]Fenton,N.E.and S.L.Pfleeger.Software metrics:a rigorous and practical approach [M].USA:PWS Publishing Co.Boston, MA,1998.
[2]Ming,L.On the nature of relationships between measures and reliability[D].University of Maryland College Park,2002.
[3]Jacobs, J.J.van Moll, R.Kusters, J.Trienekens, and A.Brombacher.Identification of factors that influence defect injection and detection in development of software intensive products[J].Information and Software Technology,2007,49(7):774-789.
[4]Zhang,X.and H.Pham.An analysis of factors affecting software reliability[J].The Journal of Systems&Software,2000,50(1):43-56.
[5]孫志安,裴曉黎,宋昕,等.軟件可靠性工程[M].北京:北京航空航天大學出版社,2009.
[6]中國軟件評測中心.軟件可靠性工程述評 [EB/OL].http://www.uml.org.cn/test/200712142.asp.
[7]謝瑞生.軟件失效原因分析[J].電子產品可靠性與環境試驗,2009,27(3):127-132.XIE Rui-sheng.Analysis of software failure cause[J].Electronic Product Reliability and Environmental Testing,2009,27(3):127-132.
[8]Ming L,Smidts C S.A ranking of software engineering measures based on expert opinion.Software Engineering[J].IEEE Transactions on,2003,29(9):811-824.
[9]Nikora,A P.Software system defect content predition from development process and product characteristic[D].University of Southern California,1998.
[10]張力.軟件公司經營效率—組織特性與市場價值之研究[D].大連:東北財經大學,2006.
[11]Mendling J.Metrics for process models-empirical foundations of verification,error prediction and guidelines for correctnes[M].Artech House Publishers,2009.