秦 儉
(沈陽理工大學 遼寧 沈陽 110159)
軟件對當今社會的發展具有重要意義,但是影響軟件可靠性的因素眾多,譬如軟件自身特性、人為因素以及軟件工程管理等。這些因素具體可分為客觀因素與主觀因素,客觀因素包括人為或環境的影響,主觀因素則包括軟件嚴密性、復雜性、易理解性、可修改性以及可靠性等。在排查影響軟件可靠性的因素時,務必重視對主客觀的區分。
軟件可靠性是評測軟件多方性能的關鍵依據。具體而言,軟件的可靠性主要是指成品軟件能否在有限的資源范圍內實現規定功能,有限的資源范圍指的是規定條件、指定時間、指定區間等。而規定條件能夠保障軟件的正常運行,在有限的資源范圍內實現了運行效率的提升,直接與軟件運作有關的輸入條件,均可成為規定條件[1]。
另外,指定時間的主要意義在于軟件成品的實際運行,而指定功能指的是為使用者提供的定向服務,實現既定的運行指標。軟件可靠性是成品軟件最為關鍵的功能之一,與軟件本身存在的缺點、使用質量以及運行系統等多個組成之間存在密切關聯。近年來,國內對軟件可靠性測試的研究更加深入,同時為可靠性概率度量設置專門的單位,并稱之為“軟件可靠度”,為軟件的可靠性測試提供便利條件[2]。
隨著開發人員對軟件產品研究的深入,發現其可靠性的影響因素多種多樣,但是從本質上分析,所有的影響因素均可劃分為主觀與客觀兩大類。主觀因素就是受到軟件自身影響,而客觀因素就是受到外界環境影響,開發人員在測試軟件可靠性時務必充分重視對主客觀因素的區分與歸類。軟件可靠性的影響因素有時細小入微,開發人員敲錯一個字符都有可能對軟件可靠性造成負面影響[3]。
開發人員的工作能力與專業水準是影響軟件編程質量的重要因素,因此開發人員在軟件編程的過程中應當積攢大量的實踐經驗,并且不斷糾正錯誤的編程思路,以此形成正確、高效且保質保量的軟件成品。雖然軟件開發單位對編程掌控的效果與質量偏優,但是不能過于依賴開發人員的個人編程能力,如果開發人員的技術水準并未達到標準,那么極有可能影響軟件的開發質量[4]。
近年來,為了響應國家對現代化發展的號召,國內很多軟件開發公司已經著手擴大發展規模。隨著軟件開發的不斷深入,軟件研發越來越復雜,其內容愈發繁重。基于此,及時發現軟件開發過程中的技術問題,尤其是軟件可靠性等問題,愈發重要。由此可見,軟件規模是軟件可靠性的影響因素之一。通過多年的研究發現,軟件的容錯率與軟件規模無關。具體來說,軟件開發環境和編程語言之間的差異,改變了軟件產品的統計和分析結果,促使兩者無法形成正比關系[5]。
從軟件的組織結構來看,其設計邏輯相對復雜,與硬件單一的編程形式不同,軟件在編程過程中無時無刻不在變化,呈現出極強的動態性,軟件組織結構的復雜性對其可靠性的影響較大。結合近年來的開發實例來說,軟件組織結構的復雜性越高,軟件編程過程中出現錯誤或技術失誤的可能性就越大,而軟件的可靠性則隨之不斷降低。綜上所述,可以明顯感知軟件組織結構對其可靠性的影響之深,換言之,其自身的復雜程度才是導致可靠性下降的真正原因[6]。
前文提到,軟件的復雜程度是導致其可靠性下降的真正原因,故而與產品本身的組織結構存在密切關聯,但與軟件規模存在本質差異。組織結構主要是指精細化的系統概念,而軟件規模則是較為廣泛籠統的系統概念。我們可以理解為該軟件成品規模大,但是并不復雜,也就是說,軟件如果只是規模大,那么軟件的組織結構可以是相同的組織無限復制,組織結構之間并無差異,同樣的處理思路,同樣的系統運行,因此軟件規模大并非表明組織結構復雜[7]。
規模大,但不復雜,我們也可以理解為軟件內部各子模塊結構統一,且較易理解,這樣一來,即使軟件規模再大,卻并不復雜。舉例來說,即使軟件成品的規模再小,但它的邏輯復雜,知識牽涉范圍較廣,通過各種途徑方可克服困難,但是促使其編程的過程更加復雜。以下即為實例理解,一個鐵水凝固過程的數值模擬軟件,該過程實際規模很小,僅需計算一個獨立單位的鐵水在特定環境下自然冷卻的時間區間,從外向內或從內向外各單位點的溫度隨著時間的變化曲線,但從需要考慮的因素來看,該過程其實很復雜,例如需要計算時間、位置點、外界環境、構成部分等多種因素。由此可見,軟件組織結構是影響軟件可靠性的重要因素之一。另外,針對不同因素有可能對軟件造成的影響,可有效加深可靠性測試。
一般來說,軟件運行剖面可以界定軟件的運行環境,就像建筑物的橫截面一樣,可以看出其內部構造及環境。軟件運行剖面能夠指出軟件運行所需實際環境,而軟件的初始輸入狀態會影響系統狀態。為了明確軟件可靠性測試的定量與定向依據,開發人員通常會采用軟件運行剖面的形式進行初步測定,以此制作定量的軟件使用方式。
從效用角度分析,軟件運行剖面好比開發人員落實編程與設計的導向,在運行剖面的支持下,開發人員可有效提高軟件的生產效率與生產質量,進一步加快軟件的研發進度,同時確保軟件可靠性。具體而言,軟件運行剖面即為軟件可執行操作或可能發生的概率事件的統稱,或者說是軟件成品的不同使用途徑。在軟件的開發編程過程中,提供的運行剖面數量越多,軟件內部可被發現的遺漏點以及安全隱患數量越多。由此可見,軟件運行剖面也是軟件可靠性的影響因素之一。
從面向角度分析,運行剖面在面向使用者的同時也面向編程過程,因此直接獲取軟件的運行剖面無異于異想天開。在獲取軟件運行剖面的過程中,開發人員通常采用“金字塔”模型實施構建,這里所說的“金字塔”實際上就是自上而下、逐級細化的分析手段,從而獲取較為完善的軟件運行剖面。具體而言,其過程就是:首先,明確用戶剖面,用戶剖面是構建軟件運行剖面建設的基礎;其次,就是按照由上而下的順序將用戶運用軟件的輸入空間細化為系統模式剖面,接著再將系統模式剖面劃分為功能剖面;最后,開發人員通過細致劃分,按照功能剖面的類型進行界定,最終獲取完整的軟件運行剖面。
從環境與可靠性的角度來看,當軟件處于同一個開發環境,并且擁有同一個研發目的時,假設過程中所采用的運行剖面不同,那么該產品對可靠性的表現也將存在多處差異。通常情況下,軟件產品的輸入域包括R和S,實驗中的S區域存在一定的軟件缺陷,而R部分中輸入恒不激活軟件缺陷。如果運行剖面顯示,軟件單方面依靠S區域進行運作,該產品則永久故障,且并不具備容錯方案,久而久之,導致軟件的永久失效,可靠性的測試結果恒為0;換言之,如果在運行剖面中并未顯示出輸入域S,軟件始終正常運行,并未出現故障,則該軟件的可靠性恒為1。
隨著新理念與新技術的介入,軟件的開發手段呈現多元化發展趨勢,例如結構化法、面向對象法、形式化法等。同一軟件可采用多種方法開發,但這樣做的劣勢在于沒有定量或定向的評判標準,因而軟件的質量只能在用戶端獲取,不利于及時反饋與后期修繕,因此該類軟件需要注意運用的場合與環境,或者說應當注意面向對象。
舉例來說,結構化法自身具備簡單、實用的技術優勢,且在國內的應用前景廣闊,但并不適合用于大規模或較復雜的軟件開發項目,無法在短時間內有效解決軟件的重用問題,致使軟件代碼的重復率不斷增高。如此一來,假設軟件在使用過程中,某一處地方需要改動,那么編碼便會出現混亂,增加了軟件維護工作的復雜程度,同時也增加了軟件可靠性的風險。
軟件可靠性測試的主要目的是為了保證與驗證軟件的可靠性。從性質上講,軟件可靠性測試屬于一種隨機測試,可結合用戶對軟件的實際使用情況進行性能及可靠性測試。目前為止,我國科研水準持續提升,對軟件可靠性的評估水平隨之增長,促使軟件的各項性能指標均可達到相應標準。可靠性測試是解決軟件亂碼以及降低軟件使用風險的有效途徑。較之普通的軟件功能測試,可靠性測試更加復雜,需要考慮的綜合性因素更多,包括功能項、輸入集、數據集以及相關概率的早期識別等。結合軟件功能點中的使用概率分布,可靠性測試的多樣性也隨之提高。
綜上所述,軟件可靠性對于信息系統整體的正常運行來說具有重要意義,因此必須明確軟件可靠性的影響因素以及關鍵特性。結合上文,影響軟件可靠性的因素主要包括軟件開發人員水平、軟件規模、軟件的組織結構、軟件運行剖面以及軟件開發辦法等。開發人員在軟件編程的過程中,務必高度重視對以上幾點因素的檢驗與測試,避免軟件可靠性在使用時受到的影響。