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