随着軟體的日益普及,系統中的軟體成分不斷增加,使得系統對軟體的依賴越來越強,軟體的可靠性對系統可靠性的影響越來越大。實踐證明保障軟體可靠性最有效、最經濟、最重要的手段是在軟體設計階段采取措施進行可靠性控制,為此提出了軟體可靠性設計的概念。
軟體可靠性設計就是在正常的軟體設計中,應用各種方法和技術使軟體設計在兼顧使用者功能和性能需求的同時,全面滿足軟體的可靠性要求,軟體可靠性設計應用和軟體的正常設計緊密結合,貫穿于軟體設計過程的始終。
可靠性設計需要遵循的原則如下:
1,軟體可靠性設計是軟體設計的一部分,必須在軟體的總體設計架構中進行,并且不能與其他設計原則相沖突。
2,軟體可靠性設計在滿足提高軟體品質要求的前提下,以提高和保障軟體可靠性為最終目标。
3,軟體可靠性設計應該确定軟體的可靠性目标,不能無限擴大,并且在功能、使用者需求、開發費用之後考慮。
常見的可靠性設計技術有容錯設計、檢錯設計、降低複雜度設計等技術。
1,容錯設計技術,對于軟體失效後果特别嚴重的場合,采用容錯設計技術。常見的容錯設計技術有恢複塊設計、N版本程式設計和備援設計。
恢複塊設計,選擇一組軟體操作作為容錯設計單元,把普通的程式塊變成恢複塊。一個恢複塊包含若幹個功能相同、設計差異的程式塊文本。一個運作文本和多個備份文本構成“動态備援”,一旦運作文本出現故障,則備份文本替換,軟體容錯的恢複塊方法就是使軟體包含一系列恢複塊。
N版本程式設計,核心是通過設計多個子產品或不同版本,對于相同初始條件和相同輸入的操作結果,實作多數表決。防止其中某一軟體子產品、版本的故障提供錯誤的服務,以實作軟體容錯。
備援設計,在一套完整軟體系統之外,設計一種不同路徑、不同算法或不同實作方法的子產品或系統作為備份。在出現故障時可以使用備援的部分進行替換。進而位置軟體系統的正常運作,缺點是費用和資源的消耗會有所增加。
2,檢錯技術,在軟體系統中,對無須線上容錯或不能采用備援設計技術的部分,如果對可靠性要求較高,故障有可能導緻嚴重後果,則一般采用檢錯技術。即在軟體出現故障後能及時發現并報警,提醒維護人員進行處理。檢錯技術實作的代價一般低于容錯技術和備援技術,但它是一個明顯的不足就是不能自動解決故障。如果出現故障後不進行人工幹預,将最終導緻軟體系統不能正常運作。采用檢錯設計技術要着重考慮的要素是檢測對象、檢測延時、實作方式和處理方式。
3,,降低複雜度設計,軟體複雜性與軟體可靠性有着密切的關系,是産生軟體缺陷的重要根源。在設計時考慮降低軟體的複雜度,是提供軟體可靠性的有效方法。降低複雜度設計的思想是在保證實作軟體功能的基礎上,簡化軟體結構、縮短程式代碼、優化軟體資料流向及降低軟體複雜度,進而提高軟體可靠性。
在軟體可靠性設計之前和軟體可靠性設計過程中都需要采用軟體可靠性分析赫爾預測方法來确定目前系統中的主要可靠性因素和目标,常見的軟體可靠性分析方法包括故障樹分析方法、失效模型與效用分析方法。
1,故障樹分析方法,一種自頂向下的軟體可靠性分析方法,即從軟體系統不希望發生的事件(頂事件),特别是對人員和裝置的安全及可靠性産生重大影響的事件開始向下逐漸追查導緻頂事件發生的原因,直至基本事件(底事件)。進而确立軟體故障原因的各種可能組合方式和發生機率,基本的步驟是軟體故障樹的建立、确定分析和定量分析。
2,失效模式與效應分析方法,在軟體開發階段的早期,通過識别軟體失效模式分析造成的後果。研究分析各種失效模式産生的原因,尋找消除和減少其有害後果的方法。以便盡早發現潛在的問題,并采取相應措施,進而提高軟體的可靠性和安全性。SFMEA的分析對象可以使開發早期階段的高層次的子系統、部件,也可以是詳細設計階段的單元、子產品。對于不同的分析對象,其軟體失效模式不同,采用的分析方法也不同,前者采用系統級分析方法,後者采用詳細級分析方法,其基本的步驟是系統定義、軟體時下模式分析、軟體失效原因分析、軟體失效影響分析、改進措施分析。