軟件可靠性工程是指為了滿足軟件的可靠性要求而進行的一系列設計、分析、測試等工作。其中確定軟件可靠性要求是軟件可靠性工程中要解決的首要問題。軟件可靠性要求可以包括定性定及量要求。
軟件可靠性測試是在軟件生存周期的系統測試階段提高軟件可靠性水平的有效途徑。各種測試方法、測試技術都能發現導致軟件失效的軟件中殘存的缺陷,排除這些缺陷后,一般來講一定會實現軟件可靠性的增長,但是排除這些缺陷對可靠性的提高的作用卻是不一樣的。其中,軟件可靠性測試能最有效地發現對可靠性影響大的缺陷,因此可以有效地提高軟件的可靠性水平。
軟件可靠性測試也是評估軟件可靠性水平,驗證軟件產品是否達到軟件可靠性要求的重要且有效的途徑。
1 軟件可靠性測試概念
“測試”一般是指“為了發現程序中的錯誤而執行程序的過程”。但是在不同的開發階段、對于不同的人員,測試的意義、目的及其采用的方法是有差別的。在軟件開發的測試階段,測試的主要目的是開發人員通過運行程序來發現程序中存在的缺陷、錯誤。而在產品交付、驗收階段,測試主要用來驗證軟件產品是否達到用戶的要求。或者說,對于開發人員,測試是發現缺陷的一種途徑、手段,而對于用戶,測試則是驗收產品的一種手段。根據測試用例選取原則的不同,測試可分為黑盒測試方法和白盒測試方法兩大類。黑盒測試方法是指按照軟件需求生成測試用例對軟件進行測試的方法,黑盒測試不關心程序是如何實現的;而白盒測試方法則是指根據程序的結構生成測試用例對軟件進行測試的方法。
軟件可靠性測試是指為了保證和驗證軟件的可靠性要求而對軟件進行的測試。其采用的是按照軟件運行剖面(對軟件實際使用情況的統計規律的描述)對軟件進行隨機測試的測試方法。通過軟件可靠性測試可以達到以下目的:
(1) 有效地發現程序中影響軟件可靠性的缺陷,從而實現可靠性增長:軟件可靠性是指“在規定的時間內,規定的條件下,軟件不引起系統失效的能力,其概率度量稱為軟件可靠度。”軟件的“規定的條件”主要包括相對不變的條件和相對變化的條件,相對不變的條件如計算機及其操作系統;相對變化的條件是指輸入的分布,用軟件的運行剖面來描述。按照軟件的運行剖面對軟件進行測試一般先暴露在使用中發生概率高的缺陷,然后是發生概率低的缺陷。而高發生概率的缺陷是影響產品可靠性的主要缺陷,通過排除這些缺陷可以有效地實現軟件可靠性的增長。
(2) 驗證軟件可靠性滿足一定的要求:通過對軟件可靠性測試中觀測到的失效情況進行分析,可以驗證軟件可靠性的定量要求是否得到滿足。
(3) 估計、預計軟件可靠性水平:通過對軟件可靠性測試中觀測到的失效數據進行分析,可以評估當前軟件可靠性的水平,預測未來可能達到的水平,從而為開發管理提供決策依據。軟件可靠性測試中暴露的缺陷既可以是影響功能需求的缺陷也可以是影響性能需求的缺陷。軟件可靠性測試方法從概念上講是一種黑盒測試方法,因為它是面向需求、面向使用的測試,它不需要了解程序的結構以及如何實現等問題。
軟件可靠性測試通常是在系統測試、驗收、交付階段進行,它主要是在實驗室內仿真環境下進行,也可以根據需要和可能在用戶現場進行。
2 軟件可靠性測試過程
2.1 軟件可靠性測試活動
軟件可靠性測試的一般過程如圖1所示。主要活動包括:測試數據、測試環境的準備,測試運行,可靠性數據收集,可靠性數據分析和失效糾正。
(1) 構造運行剖面:軟件的運行剖面“是指對系統使用條件的定義。即系統的輸入值用其按時間的分布或按它們在可能輸入范圍內的出現概率的分布來定義”。粗略地說,運行剖面是用來描述軟件的實際使用情況的。運行剖面是否能代表、刻畫軟件的實際使用取決于可靠性工程人員對軟件的系統模式、功能、任務需求及相應的輸入激勵的分析,取決于他們對用戶使用這些系統模式、功能、任務的概率的了解。運行剖面構造的質量將對測試、分析的結果是否可信產生最直接的影響。
(2) 選取測試用例:軟件可靠性測試采用的是按照運行剖面對軟件進行可靠性測試的方法。因此,可靠性測試所用的測試用例是根據運行剖面隨機選取得到的。