產生軟體產品可靠性問題的主要因素與解決方法論文

學識都 人氣:1.63W

摘要:進行軟體產品的可靠性分析與評估,在提高可靠性的同時,確定合適的可靠性目標就顯得尤為重要,本文從影響軟體可靠性的因素、軟體失效的原因等方面對軟體產品的可靠性進行了分析,最後提出瞭解決軟體可靠性問題的方法。

產生軟體產品可靠性問題的主要因素與解決方法論文

關鍵詞:軟體可靠性;影響因素;解決方法

1、軟體可靠性的定義

軟體可靠性表明了一個程式按照使用者的要求和設計的目標,執行其功能的正確程度。這要求一個可靠的程式應是正確的、完整的、一致的和健壯的。但在現實中,一個程式要達到安全可靠是不實際的,要精確地度量它也不現實。

在一般情形下只能通過程式的測試,去度量程式的可靠性。基於這點,軟體的可靠性定義為:“軟體可靠性是軟體在給定時間間隔及給定的環境條件下,按設計要求,成功地執行程式的概率。”在此定義中,明確地包含了以下幾個因素。

1.1環境條件

在定義中,環境條件指的是軟體的使用環境。它涉及該軟體執行時需要的支援系統及有關的因素。規定軟體的使用環境,是判定失效的責任在使用者還是在軟體的關鍵,也是給出準確可靠性度量的依據。

所以,嚴格地說,描述軟體可靠性所要求的使用環境,主要是描述對輸入資料的要求及計算機當時的配置狀態(即軟體環境),同時假定其他一切支援系統及因素對該軟體來說都是理想的,不會影響軟體的執行。

1.2規定的時間

軟體的可靠性體現於軟體的執行階段,因此,在軟體的可靠性的定義中,一般採用“執行時間”t作為時間的測量。在這裡,定義執行時間t為軟體系統一旦投入執行後的計算機掛起(開啟但空閒)與工作的積累時間。但計算機的停機時間不包括在執行時間t內。

1.3規定的功能

在考慮軟體的可靠性時,首先應明確軟體的功能是什麼,哪些功能是主要的,哪些功能是次要的。一般從軟體的需求說明書和設計說明書中可以瞭解這些情況。

1.4“成功地執行程式”的定義

這裡的成功地執行是指不僅程式能正確地執行滿足使用者對它的要求,而且當程式一旦受到意外的傷害,或系統錯誤時,能儘快恢復,仍能正常的執行。

2、軟體生命週期與壽命的關係

一切有生命的東西都有一個“壽命”,即它們從出生到死亡為止所經歷的時間。

“壽命”這個概念也可以延伸到對非生命產品的質量評價上來。

例如一個電子產品的壽命就是指該產品從出廠到喪失使用價值的持續時間。但是,軟體是一種資訊產品,它不同於機械、電子等產品,不存在物理上的磨損報廢,因此,軟體產品的“壽命”,與硬體產品不同。

軟體產品的壽命是指軟體的整個生命週期。這個生命週期主要包括軟體規劃、需求分析、設計、編碼及單元除錯、測試,以及執行、維護階段。

從軟體使用者的角度來看,更關心的是軟體在交付使用後的情況如何,也就是需要一個從可靠性角度來理解的“壽命”。即希望有一個類似於硬體中平均失效間隔時間MTBF(Mean Time Between Failure)這樣的指標來表明,在規定的要求和條件下,能在多大的程度上依賴這個軟體來完成任務。

我們把在使用其間能夠正常工作的持續時間叫做軟體的使用壽命。

軟體的使用壽命與輸入環境有關。例如,有一個存在缺陷的編譯程式,當用於學生做簡單練習時,MTBF可能很長,而做一個大課題時,由於程式連續出錯,MTBF就會變得很短。所以,MTBF可以看做是對軟體可靠性做估計的樣本資料,但不能看做是依據。

軟體生存期與軟體使用壽命的關係如下:2.1軟體生命週期主要包括三個階段,即軟體定義階段、軟體開發階段和軟體執行維護階段。而軟體的使用壽命是描述軟體在使用期內執行規定任務的一個可供參考的可靠性指標。

在使用期間,允許軟體執行結果出錯(稱之為軟體失效),但只要軟體的平均失效間隔時間MTBF大於某個預先規定的值,就不認為軟體死亡。如果在費用允許的情況下將軟體修正,是該軟體的可靠性可比以前有所提高。

2.2軟體生命週期是軟體工程中的術語,軟體使用壽命是軟體可靠性工程中的術語。軟體生命週期中靠軟體開發質量來提高軟體的可靠性,著重在開發過程,而軟體可靠性工程則偏重於可靠性的實際提高和可靠性指標的評估。

2.3軟體產品的可靠性如何,直接影響軟體的使用壽命。而軟體可靠性的優劣是由軟體生命週期各個階段的工作質量決定的。然而生命週期各個階段對軟體質量和可靠性的影響是不一樣的。

如圖1所示,在軟體各個階段產生的錯誤中,設計階段產生的錯誤佔大多數。進一步從圖2可知,修正一個軟體錯誤所需的費用將隨著軟體生命週期的進展而上升。錯誤發現的越早,修正它所需的費用越少,反之,錯誤發現的越晚,修正它的費用就越高,而且是呈指數增長。

圖1軟體生命週期中的錯誤來源

圖2修改錯誤的費用呈指數增長由於生命週期各個階段的問題不是孤立的`,而是相互影響、相互依存的,每一個階段的工作成果將成為下一個階段工作的基礎。後一階段發現的問題也應追溯到前一階段去找原因。

這種前後相承的關係也會帶來錯誤的傳遞。這種傳遞使前面犯下的錯誤隱藏到後面的階段。錯誤隱藏的越久,查詢和修改就越困難,花費的代價就越大,甚至錯誤影響太大,或需要花費的代價太大,導致“不能修改”,使得所做的努力付之東流,浪費了大量的人力和財力。總之,軟體生命週期的各個階段都可能產生錯誤。而軟體需求分析、設計和實現階段是軟體的主要錯誤來源。

而且即使各個階段都採取了提高可靠性的措施,對於複雜軟體來說,錯誤仍然不可避免。因此,應當把主要注意力放在分析、設計和實現階段。通過採用正確的方法、技術和工具,以得到一個錯誤少、可靠性高的軟體,而把檢檢視做是對軟體可靠性的一個證實。不應存在僥倖的心理,急於求成。如果把保證質量的希望完全寄託在測試階段,由於測試的侷限性,要保證軟體的可靠性就困難了。

3、軟體可靠性的主要指標

軟體可靠性的定量指標,是指能夠以數字概念來描述可靠性的數學表示式中所使用的量。人們常借用可靠性的定量度量方法來度量軟體的可靠性。下面主要討論常用的指標平均失效等待時間MTTF與平均實效間隔時間MTBF。

假如我們對N個相同的系統(硬體或者軟體)進行測試,他們的失效時間分別是T1、T2……,TN,則平均失效等待時間MTTF(Mean Time To Failure)定義為:對於軟體系統來說,這相當於同一系統在N各不同的環境(即使用不同的測試用例)下進行測試。因此,MTTF是一個描述失效模型或一組失效特性的指純量。這個指標的目標值應由使用者給出,在需求分析階段納入可靠性需求,作為軟體規格說明提交給開發部門。在執行階段,可把失效率函式λ(T)視為常數λ,則平均失效等待時間MTTF是失效率λ的倒數:MTTF=1/λ。與MTTF相關的一個量是MTBF,即平均失效間隔時間(MeanTime Between Failures),它是指兩次相繼失效之間的平均時間。

MTBF在實際使用中通常是指當N很大時,系統內第N次失效與第N+1次失效之間的平均時間。對於失效率λ(T)為常數和修復時間很短的情況,MTTF與MTBF幾乎相等。

4、產生軟體產品可靠性問題的主要因素

軟體的開發屬於高智商的勞動。同時,軟體的開發又是非常個性化的勞動。軟體的設計者因其文化背景、受教育程度、對模型或系統的理解以及愛好、習慣等因素,在程式設計過程中自覺或不自覺地形成自己的特點。

他們在程式結構、儲存器標記、資訊處理、命令語句使用、通用模組選取、迴圈順序、語言互動、嵌入模組、命令集註釋等方面都有自己的理解和習慣,形成自己獨特的風格。這種個性的體現往往為程式設計者引以為自豪,但卻難以被其他程式設計者所採納。

現在的軟體在檢驗中,大多數人只要求上機執行程式,在執行程式的過程中發現故障現象,以此作為主要的檢驗手段,而這樣就給管理上帶來了漏洞。有些問題的存在雖然不是什麼大問題,但在程式的執行過程中的某個時段或線路有可能發生資料溢位、堆疊錯誤、資訊丟失等問題,甚至發生宕機現象。

這些問題由於不明顯,設計者自己很難意識到,而在程式的一般除錯中又不容易暴露出來,因為它們的出現只是小概率事件,有時在成千上萬次的迴圈中才出現一次或幾次。而這時,軟體設計者和質量管理者往往將其作為偶然事件處理。但它們確確實實是程式中的缺陷,只不過由於一般運算和處理途徑的相容性、容易出錯時段(路段)的短暫性、軟體和硬體的冗餘設計等將其掩蓋了。這些影響軟體可靠性的問題應該可以被發現出來並通過程式的優化設計加以解決。

5、解決軟體可靠性問題的技術措施

軟體開發的個性化不應妨礙軟體可靠性的提高。要發現和解決軟體中存在的隱患問題,必須加強軟體的設計管理和質量管理。

5.1構建質量系統

在軟體的研製階段應建立質量系統,其人員應該是對軟體開發比較熟悉的技術人員。

5.2構建軟體的質量管理制度

應包括故障報告制度和會診制度、會議制度、抽查制度、檢驗制度等等,並且要制定軟體的可靠性保證大綱。

5.3強化軟體的文件管理

軟體的文件必須在程式的編制過程中不斷地完善,作為軟體的一個不可分割的組成部分。對於一段程式、一個功能塊、一組語句,都應有相應的文件記錄。在修改程式時,也要同時修改文件。

5.4在程式中應使用註釋語句

各種計算機語言提供給設計者以註釋工具,方便他們在源程式中直接寫明各種注意事項。這種註釋與文件所起的作用一樣,也是要說明軟體的各個部分所具有的功能。它的不同在於設計者可以將註釋語句隨程式的語句逐條逐段編寫,直接方便他人讀懂程式。

5.5在軟體的設計系統和質量系統中,應該強調軟體的設計思想和程式的編制方法要透明源程式的編寫應象硬體設計中的圖紙一樣,標示清楚,方便他人的閱讀和理解。在軟體設計系統內部應該相互交流設計思路,互相檢查程式。這是為了在互查的過程中相互瞭解對方的風格和特點,指出懷疑的語句,必要的時候可以相互替代或延續開發工作。

5.6確定關鍵程式段

在軟體的程式中,完成基本功能的程式段和容易出錯的程式段應劃分出來,進行重點指示。在檢查中,要重點檢驗這些關鍵程式段。

6、結語

綜上所述,提高軟體的可靠性與管理有很大關係。只要把握軟體設計的特點和規律,嚴格按照軟體開發規範去要求,不斷探索,就一定能提高軟體的質量和可靠性。