一、軟件質量的重要性
當前,人類步入了信息時代,從交通、能源、電信到金融、教育、軍事……等等大多數行業(yè)都需要計算機的輔助。軟件是計算機系統的靈魂,是許多復雜系統的神經中樞,而質量則是軟件的命脈。
軟件失效造成系統癱瘓、人員傷亡以及重大經濟損失的例子時有所聞。特別是一些安全關鍵軟件,一旦發(fā)生失效就可能危及人的生命、財產和生態(tài)環(huán)境。
歐洲航天局Ariane 5號火箭發(fā)射失敗是因為Ada語言在編譯過程的檢查失敗導致的。將大的浮點數轉換成整數是一種常見的程序錯誤來源。1996年6月4日,對于Ariane 5火箭的初次航行來說,這樣一個錯誤產生了災難性的后果。發(fā)射后僅僅37秒,火箭偏離它的飛行路徑,解體并爆炸了。火箭上載有價值5億美元的通信衛(wèi)星,還使耗資達80億美元的開發(fā)計劃推遲近3年。后來的調查顯示,控制慣性導航系統的計算機向控制引擎噴嘴的計算機發(fā)送了一個無效數據。這件事可以說是歷史上損失最慘重的軟件故障事件。
20世紀末,“千年蟲”問題震驚世界,各國投入大量的人力和物力,耗資數千億美元,蟲災才基本上得到控制。千年蟲縮寫為“Y2K”,又叫做“計算機2000年問題”,“2000年病毒”或“千年病毒”,是指在某些使用了計算機程序的智能系統(包括計算機系統、自動控制芯片等)中,由于其中的年份只使用兩位十進制數來表示,因此當系統進行(或涉及到)跨世紀的日期處理運算時(如多個日期之間的計算或比較等),就會出現錯誤的結果,進而引發(fā)各種各樣的系統功能紊亂甚至崩潰。
2003年8月14日,美國及加拿大部分地區(qū)發(fā)生了的史上最大停電事故,這是由位于美國俄亥俄州的第一能源(FirstEnergy)公司下屬的電力監(jiān)測與控制管理系統“XA/21”出現軟件錯誤導致的。……這樣的例子不勝枚舉,諸如此類由于軟件問題引發(fā)的事故基本上是由于軟件自身質量造成的。
1979年,Fisher和Light將軟件質量定義為:表征計算機系統卓越程度的所有屬性的集合。1982年,Fisher和Baker將軟件質量定義為:軟件產品滿足明確需求一組屬性的集合。20世紀90年代,Norman、Robin等將軟件質量定義為:表征軟件產品滿足明確的和隱含的需求的能力的特性或特征的集合。
根據計算機軟件質量保證計劃規(guī)范GB/T12504-1990中的定義,軟件質量是指軟件產品中能滿足給定需求的各種特性的總和。這些特性稱做質量特性,它包括功能性、可靠性、易使用性、時間經濟性、資源經濟性、可維護性和可移植性等。
ISO9126質量度量模型將質量特性劃分為6個方面:
(1)功能性:適合性、準確性、互操作性、依從性和安全性;
(2)可靠性:成熟性、容錯性和易恢復性;
(3)易使用性:易理解性、易學習性和易操作性;
(4)效率:時間特性和資源特性;
(5)可維護性:易分析性、易更改性、穩(wěn)定性和易測試性;
(6)可移植性:適應性、易安裝性、一致性和易替換性。
早在1976年,由Boehm等提出軟件質量模型的分層方案。1979年McCall等人改進Boehm質量模型又提出了一種軟件質量模型。McCall等認為,特性是軟件質量的反映,軟件屬性可用做評價準則,定量化地度量軟件屬性可知軟件質量的優(yōu)劣。McCall認為軟件質量應由11個要素構成,即正確性、可靠性、效率、完整性、可使用性、可維護性、可測試性、靈活性、可移植性、可復用性和互連性,具體介紹參見表1。又可分為面向產品運行、面向產品修改、面向產品轉移三種類型,其相互關系如圖1所示。
表1McCall等人的軟件質量特性定義
圖1軟件質量要素與產品狀態(tài)
二、軟件可靠性的不確定性
對于可靠性的研究最早可以追溯到20世紀20、30年代關于機器維修的問題,50年代開始對于可靠性的研究進入黃金時代,但是這些研究仍然都是基于硬件的。
直到70年代由于軟件危機的存在使得人們開始重視和研究軟件可靠性問題。以Jelinski, Shooman, Musa等為代表的一批著名軟件工程專家,援引可靠性工程學的觀點,對軟件可靠性作出定義。他們的措辭雖不盡相同,但基調是一致的。另一批軟件工程專家認為軟件具有與硬件不同的性質,因而持反對態(tài)度。在這場爭論中,JeIinski等人的見解得到了系統工程師們的贊同,也逐漸得到了軟件工程界多數人的支持。而且從目前的情況來看,這個定義在目前所有的定義中最恰當地反映了軟件的可靠性特性,并對解決實際問題發(fā)揮了作用。關于軟件可靠性的確切含義,學術界曾經有過長期的爭論。1983年美國IEEE(Institute for Electrical and Electronic Engineers)計算機學會對“軟件可靠性”一詞正式給出了具有定量和定性雙重含義的定義:
(1)在規(guī)定的條件下,在規(guī)定的時間內,軟件不引起系統失效的概率,該概率是系統輸入和系統使用的函數,也是軟件中存在錯誤的函數;系統輸入將確定是否會遇到已存在的錯誤(如果錯誤存在的話)。
(2)在規(guī)定的時間周期內,在所述條件下,程序執(zhí)行所要求的功能的能力。
在這個定義中,第一部分對軟件可靠性進行了定量的描述,第二部分則對軟件可靠性進行了定性的描述。因而軟件可靠性具有定性的和定量的兩層含義。在強調其定量的含義時,工程上常用軟件的可靠度函數來說明軟件的可靠性。可以看出,在這個定義中,軟件和程序兩個詞匯被明顯地混用了。這這個定義經美國標準化研究所批準作為美國的國家標準。1989年,我國國標GB/T-11157采用了這個定義。
在該定義中,“規(guī)定條件”是指計算機的軟、硬件環(huán)境,軟件環(huán)境包括運行的操作系統、應用程序、編譯系統、數據庫系統等;硬件環(huán)境包括計算機的CPU、CACHE、MEMORY、I/O等。“規(guī)定時間”指軟件的工作周期,有三種時間度量:日歷時間(日、周、月、年)、時鐘時間(程序運行從開始到結束時間的秒、分、時,它包括等待時間和其他輔助時間,但不包括計算機停機占用時間)和執(zhí)行時間(指計算機執(zhí)行程序實際占用的中央處理器時間,故又稱CPU時間)?!皥?zhí)行所要求的功能”通常指軟件不出現失效。如果一個系統不能完成其功能,就說明它發(fā)生了失效。為了識別一個失效,必須明確要求它完成的功能是什么。規(guī)定的功能通常在軟件需求規(guī)格說明書中定義。
傳統的軟件可靠性理論基于以下兩個基本假設:
(1)概率假設:系統可靠性行為可以完全用概率方式予以刻畫。
(2)雙態(tài)假設:系統只具有兩個極端狀態(tài),完全正常狀態(tài)和完全失效狀態(tài),系統在任意時刻必處于上述兩種狀態(tài)之一。
下面,我們將主要論述軟件可靠性的兩個基本的不確定性:隨機性和模糊性。
1.軟件可靠性的隨機性
隨機性是指有明確定義但不一定出現的事件中所包含的不確定性,它是由事物的因果關系不確定所造成的。概率論和數理統計就是研究和揭示隨機現象的統計規(guī)律性的一門學科,它至今已有幾百年的研究歷史。
具有隨機性的事件有以下一些特點:
(1)事件可以在基本相同的條件下重復進行,比如擲骰子。只有單一的偶然過程而無法判定它的可重復性則不稱為隨機事件。
(2)在基本相同條件下某事件可能以多種方式表現出來,事先不能確定它以何種特定方式發(fā)生,如不論怎樣控制炮的射擊條件,在射擊前都不能毫無誤差地預測彈著點的位置。只有唯一可能性的過程不是隨機事件。
(3)事先可以預見該事件以各種方式出現的所有可能性,預見它以某種特定方式出現的概率,即在重復過程中出現的頻率,如大量射擊時炮彈的彈著點呈正態(tài)分布,每個彈著點在一定范圍內有確定的概率。在重復發(fā)生時沒有確定概率的現象不是同一過程的隨機事件。
宏觀世界中必然發(fā)生的、確定性的事件在其細節(jié)上會帶有隨機性的偏離。微觀世界中個別客體的運動狀態(tài)都是隨機的。對于一個隨機事件可以探討其可能出現的概率,反映該事件發(fā)生的可能性的大小。大量重復出現的隨機事件則表現出統計的規(guī)律性。統計規(guī)律是大量隨機現象的整體性規(guī)律,它支配著隨機性系統的狀態(tài)。
造成軟件可靠性的隨機性,有如下幾個方面的原因:
(1)軟件操作剖面(Operational Profile)的隨機性
由于軟件操作剖面的不確定性,即使一個軟件通過測試并最終投放市場,它的可靠性也可能會隨著環(huán)境因素的變化而發(fā)生變化。軟件可靠性的定義表明,軟件可靠性是面向用戶的而不是面向開發(fā)人員的。軟件可靠性與用戶操作有關,而不是與程序的設計有關。操作剖面是指軟件測試數據輸入域,以及各種輸入數據的組合使用概率。歐空局(ESA)標準PSS-01-21(1991)“ESA空間系統軟件產品保證要求”,定義操作剖面為:“對系統使用條件的定義。系統的輸入值都用其按時間的分布或按它們在可能輸入范圍內的出現概率的分布來定義”。
假設軟件的總輸入域劃分為若干個輸入子域,那么這若干個子域都分別對應一個操作剖面。輸入數據落入相應子域的可能性稱為操作剖面值,顯然操作剖面值會因為軟件使用環(huán)境不同而發(fā)生變化。因為軟件使用環(huán)境的不同,使得軟件在不同環(huán)境下輸入的數據也有所不同,造成了在不同環(huán)境下具有不同的剖面值,這樣就形成了軟件在不同環(huán)境下產生不同可靠性的現象。一般來說,操作剖面與發(fā)生概率之間的關系是軟件輸入空間越大,相應的操作剖面值則會越小。
操作剖面在可靠性評估過程中有著重要的作用,準確的操作剖面能使我們得到準確、可信度高的評估結果,否則,結果的可信度就會降低。事實上,由于在使用軟件之前測試員不可能完全知道軟件的使用情況,特別是對于大眾性的軟件來說更是如此,因此就無法準確地定義操作剖面。在實際檢測過程中,檢測人員通常是用一個固定剖面代替實際剖面進行測試,利用所得到的近似結果來判斷軟件可靠性的優(yōu)劣。顯然這種方法是不合適的,既然我們無法知道軟件的實際運行剖面,那么在使用近似剖面替代時,就應該討論結果的可信度,以及分析近似剖面發(fā)生變化對評估結果的影響。
(2)軟件測試的隨機性
由于軟件錯誤具有離散性,從而對于樣本空間中某輸入數據的輸出很難用來代表相鄰輸入數據的輸出。軟件測試的結果常常會隨樣本空間選擇的不同而發(fā)生較大的變化。影響樣本空間選擇的隨機因素,諸如測試工具、測試員的素質、計算機環(huán)境、失效數據收集的時間標準等,通過樣本空間間接影響軟件的測試結果。這些測試結果直接決定了軟件可靠性模型參數,然而現有的軟件可靠性模型往往沒有考慮這種隨機性。
(3)軟件可靠性模型的隨機性
軟件可靠性的研究始于20世紀70年代,至今已有30多年的歷史,建立的軟件可靠性模型超過百種。這些模型中的一部分在特定的領域內得到了較為充分的應用,然而迄今為止,還不存在具有普適性的軟件可靠性模型。由于受一些主、客觀不確定因素的制約,軟件可靠性模型不能完全準確地描述軟件的失效行為,從而造成評估結果中存在大量誤差。工程應用中常常憑經驗對這種誤差進行評估。Shooman曾提出,“概率軟件可靠性模型的平均相對誤差一般為37%”。
不同的軟件可靠性模型對同一組失效數據的評估結果可能呈現很大的不一致性;應用同一可靠性模型對同一組數據的不同階段,或者將同一模型用于不同的失效數據組,其評估質量都可能呈現不一致性。
為了數學處理上的方便或是由于人們對軟件失效的內在機理的不完全認識,研究人員在建模之初都做出了一系列的假設,其中不乏失實情況。這類假設有:①失效間隔時間具有獨立性;②軟件失效相互獨立;③軟件所有錯誤檢測率相同;④一旦發(fā)現軟件錯誤就立即被清除掉,而且清除過程中不會引起新的軟件錯誤;等等。顯然這些假設與現實相悖,這就造成了軟件可靠性理論值與實際值存在一定的偏差。
目前需要考慮軟件可靠性的領域大多是關系國計民生的關鍵系統,正是由于上述問題,使得基于可靠性模型的測評結果在可信度上大打折扣。劉宏偉基于多組軟件失效數據集對G-O模型進行了分析,指出該模型參數的穩(wěn)定性較差。Littlewood, Podgurski等人指出:由于精度和穩(wěn)定性差,軟件可靠性增長模型不適合于對軟件可靠性評價結果精確度和可信度要求比較高的領域。
2.軟件可靠性的模糊性
軟件可靠性的模糊性主要表現在以下三個方面:
(1)由于軟件具有唯一性,軟件可靠性行為本質上是模糊的
軟件的唯一性主要表現在軟件復制無差別和調試過程不會重復。由于可能性反映樣本的特殊性,所以在樣本之間不存在重復性以及小樣本的情形下,可能性更適合于刻畫軟件系統的可靠性行為。在軟件系統可靠性評價問題上,概率假設面臨著定量數據短缺的挑戰(zhàn)。應用概率方法處理實際問題必須滿足四個前提:①事件定義明確;②大量樣本存在;③樣本具有概率重復性并具有較好的分布規(guī)律;④不受人為因素影響。但在實際工程問題中,這四個條件往往并不滿足。有些全新開發(fā)的高可靠性軟件,由于無使用先例,要么失效數據極少,要么根本無法獲得失效數據。許多軟件系統即使有大樣本數據,也不一定能找到統計規(guī)律,即使有了統計規(guī)律也不一定是典型的,而非典型的過程是難以處理的。
目前,大多數軟件可靠性模型都是基于概率統計的觀點建模的,由于軟件可靠性評估方法還遠遠沒有硬件發(fā)展那樣成熟,現有方法同硬件相比其適用的局限性要大得多,沒有一種方法得到普遍的承認。Harris指出,“評定軟件可靠性時是否適用可靠性概率的概念,這個問題還是懸而未決的。盡管軟件企業(yè)界清楚地了解可靠性問題,也知道需要評定可靠性,使他們自己相信確已滿足可靠性要求,卻很少有人認為可靠性的概率定義是適用的。這種情況并不是由于對有關軟件的問題了解不夠,而是由于所了解的只是情況己經發(fā)生。軟件企業(yè)界的大多數人寧愿把可靠性看作是正確性的表示,但是像概率一樣,正確性也是一個直覺的觀念,只有在正式的數學框架之內才能做到準確、客觀和嚴謹”。因此不論將軟件可靠性視為概率的定義,還是將軟件可靠性視為正確性,軟件可靠性都是一種直覺的觀念。
(2)失效數據可能帶有模糊性
工程實踐中,往往很難收集到大量的第一手數據,通常失效概率或其他參數只能通過其相關領域的參考數據,根據專家的主觀判斷和不精確的經驗來估計。大量存在的來自于生產者、使用者的經驗、專家判斷等定性信息,工作環(huán)境信息及各種任務要求等,一般都是以自然語言等非定量形式表達,如“這個子系統(或模塊)的可靠性較高”、“這是系統可靠性的薄弱環(huán)節(jié)”等等。這些用自然語言表達的信息,基于大樣本數據概率模型和以統計為基礎的傳統可靠性理論卻無法應用,難以給出高置信度的評價結論。為解決數據短缺問題,對定性知識的定量轉換至關重要。
(3)軟件狀態(tài)的模糊性
由于可靠性是一個本身沒有明確外延的定性概念,根據實際系統的模糊或不精確信息,基于二值邏輯(或多值邏輯)嚴格分明的判斷系統狀態(tài)“正常”、“失效”(或“正?!?、“小失效”、“大失效”、“完全失效”等),這是不合理的,不符合人們的通常的思維特點和對客觀事物的一般認識。實際上,軟件也會老化(Software Aging),從而系統中很多狀態(tài)會呈現出既不是正常也不是失效的中間狀態(tài),軟件出現性能退化的主要原因是操作系統資源的耗損,數據損壞和錯誤累積。顯然,這種劃分在有些情況下嚴重脫離工程實際,它不能區(qū)別同一部分內不同指標間的差異,而不同部分交界處的相鄰指標點間并無性能上的本質差異,卻被硬性劃分到不同的狀態(tài)。即使將系統指標的取值范圍劃分成許多部分,從而使對系統性能的描述變得較為細致,但在本質上所采用的失效判斷依然是嚴格分明的。
三、軟件可靠性定性評估的意義
通常,人們更多關注的是軟件系統能在多大程度上保持其規(guī)定功能的能力。從定性的角度而言,軟件系統完成規(guī)定功能的能力是有程度差別的,工程經驗中常用很多種定性語言值來描述這種程度。在軟件可靠性工程項目中,目前大多專家評分方法中,專家需綜合許多不確定因素對系統的可靠性進行評價,但是專家往往存在這樣的疑惑,是給“0.7”還是“0.8”,似乎均可。這時,專家通過比較分析,往往傾向于用“很高”、“極低”……等語氣化詞或者“大約是0.7”、“好像是0.8”、“近似于0.9”……等模糊化數量詞對其可靠性進行評價。此外,不同專家的評價又具有隨機性。由于系統的復雜性,這種不確定性語言值方法常常比精確數值方法甚至更確切、更本質、更高效。
由于軟件的復雜性和不確定性,系統的失效很難避免,但準確的可靠性評價,可使我們理解系統的失效原因、制定合理的應對策略,進而采取恰當的措施減少系統失效,提高系統的可靠性。在軟件可靠性工程中,會遇到大量的不確定因素,只有充分考慮這些不確定因素的存在和影響,得出的結果才是合理的。
為了處理現實中廣泛存在的模糊現象,1965年美國控制論專家扎德(Zadeh, L.A.)教授首次提出了模糊集、隸屬度等概念,用以刻畫模糊事物的亦此亦彼性,從而開創(chuàng)了模糊數學分支。他認為,模糊性是絕對的,而清晰性或精確性是相對的。所謂精確性或清晰性是人們對不確定性實行了一種分離,是一種簡單化和理想化。他同時總結出一條互克性原則:隨著系統復雜性的增長,對其特性作出精確而有意義的描述能力相應降低,直到達到一個閾值,一旦超過它,精確性和有意義性(或貼近性)幾乎成為兩個相互排斥的特征。這個原則說明模糊性來源于復雜性,復雜程度越高,模糊性越強,精確化程度也就越低。自從創(chuàng)立“模糊數學”以來,模糊數學己被廣泛應用于自動控制、人工智能、系統分析等諸多領域,并取得了驚人的成果。引入模糊數學方法不是為了把問題模糊化,而是把實際中的模糊事件用精確的數學表達式表示,使問題精確化。隨著可靠性研究的不斷深入,人們已經逐漸認識到了常規(guī)可靠性的種種不合理性,因此人們對可靠性中存在的不確定性的研究開始引入了模糊數學方法。
然而,一旦人為假定一個精確的隸屬函數來描述模糊概念,“硬化”成精確數值后,模糊概念就被強行納入到精確數學的王國,不符合人們對自然語言中概念的理解。這樣,在后繼相關概念的定義、定理的敘述及證明等經典數學式的演繹中,就不再有絲毫的模糊性了。這正是傳統模糊理論的不徹底性。
針對這些問題,20世紀90年代初期,李德毅在傳統模糊數學和概率統計的基礎上提出了定性定量不確定性互換模型——云模型,它把自然語言中定性概念的模糊性和隨機性有機地綜合在一起,實現了定性語言值與定量數值之間的有效轉換。
長按二維碼識別關注我們
免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯系我們,謝謝!