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