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