官术网_书友最值得收藏!

3.3 軟件可靠性測試

3.3.1 軟件可靠性測試概念

軟件可靠性測試是指為了保證和驗證軟件的可靠性而對軟件進行的測試,是在軟件生存周期的系統測試階段提高軟件可靠性水平的有效途徑,是軟件可靠性工程的一項重要工作內容,是評價軟件可靠性水平及驗證軟件產品是否達到可靠性要求的重要途徑。使用各種測試方法、測試技術都能發現導致軟件失效的軟件中殘存的缺陷,排除這些缺陷后,一般來講一定會實現軟件可靠性增長,但是排除這些缺陷對軟件可靠性的提高作用卻是不一樣的。通過軟件可靠性測試能有效地發現對軟件可靠性影響大的缺陷,因此可以有效地提高軟件的可靠性水平。

軟件可靠性測試與傳統意義上的軟件測試不同,因為軟件可靠性不僅和系統的特征有關,還和系統的使用環境有關,即在不同的使用方式下,軟件的質量不同。通過模擬軟件的實際使用情況來指導測試過程的軟件可靠性測試主要有兩類,分別是以J.D.Musa為代表研究的軟件可靠性工程,以及以Harlan Mills等為代表研究的凈室軟件工程。在J.D.Musa的研究中,構造運行剖面是最為關鍵的一項工作,通過運行剖面描述用戶對軟件的使用情況,并在此基礎上通過隨機抽樣生成軟件測試數據,從而指導軟件可靠性測試的進行。J.D.Musa將運行剖面定義為“操作和它們發生概率的簡單集合”,并給出了運行剖面的構造方法。凈室軟件工程中的可靠性測試使用的是系統狀態變遷圖測試模型方法,這種方法中使用了Markov測試模型,該模型是反應式系統典型的統計測試模型。在凈室軟件工程中,使用的模型是伴隨著順序規范過程建立起來的。本書采用的是按照軟件的運行剖面,即對軟件實際使用情況的統計規律的描述,來對軟件進行隨機測試的測試方法。通過軟件可靠性測試可以達到以下目的。

第一,有效發現程序中影響軟件可靠性的缺陷,從而實現可靠性增長。軟件可靠性是指在規定的時間內,在規定的條件下,軟件不引起系統失效的能力,其概率度量稱為軟件可靠度。軟件的“規定的條件”主要包括相對不變的條件和相對變化的條件,相對不變的條件包括計算機及其操作系統;相對變化的條件是指輸入的分布,用軟件的運行剖面來描述。按照軟件的運行剖面對軟件進行測試一般先暴露在使用中發生概率高的缺陷,然后暴露發生概率低的缺陷。發生概率高的缺陷是影響產品可靠性的主要缺陷,通過排除這些缺陷可以有效地實現軟件可靠性的增長。

第二,驗證軟件可靠性滿足一定的要求。通過對軟件可靠性測試中觀測到的失效情況進行分析,可以驗證軟件可靠性的定量要求是否得到滿足。

第三,估計、預計軟件可靠性水平。通過對軟件可靠性測試中觀測到的失效數據進行分析,可以評估當前軟件可靠性的水平,預測未來軟件可靠性可能達到的水平,從而為開發管理提供決策依據。軟件可靠性測試中暴露的缺陷既可以是影響功能需求的缺陷,也可以是影響性能需求的缺陷。軟件可靠性測試是面向需求、面向使用的測試方法,不需要了解程序的結構及如何實現等問題,從概念上講是一種黑盒測試方法。

軟件可靠性測試通常在系統測試、驗收、交付階段進行,主要在實驗室內的仿真環境下進行,也可以根據需要或在條件允許的情況下在用戶現場進行。

3.3.2 軟件可靠性測試過程

3.3.2.1 軟件可靠性測試活動

軟件可靠性測試的一般過程如圖3.5所示,主要活動包括構造運行部面、生成測試用例、準備測試環境、測試運行、收集數據、數據分析和失效修正。

圖3.5 軟件可靠性測試的一般過程

1.構造運行剖面

軟件的運行剖面是對系統使用條件的定義,即系統的輸入值按時間的分布或按它們在可能輸入范圍內出現概率的分布來定義。粗略地說,運行剖面是用來描述軟件的實際使用情況的。運行剖面是否能代表、刻畫軟件的實際使用情況取決于可靠性工程人員對軟件的系統模式、功能、任務需求及相應的輸入激勵的分析,取決于他們對用戶使用這些系統模式、功能、任務的概率的了解。構造的運行剖面的質量將對測試、分析的結果是否可信產生最直接的影響。

2.生成測試用例

軟件可靠性測試采用的是按照運行剖面對軟件進行可靠性測試的方法。因此,可靠性測試所用測試用例是根據運行剖面隨機選取得到的。

3.準備測試環境

為了得到盡可能真實的可靠性測試結果,可靠性測試應盡量在真實的環境下進行,但是在許多情況下,在真實的環境下進行軟件可靠性測試很不實際,因此需要開發軟件可靠性仿真測試環境。例如,對于多數嵌入式軟件而言,由于與之交聯的環境的開發與軟件的開發常常是同步甚至是滯后的,因此無法及時進行軟件可靠性測試;在有些系統中,由于與之交聯的環境非常昂貴,因此無法用于需要進行大量運行的可靠性測試。

4.測試運行

在真實的測試環境或可靠性仿真測試環境中,用按照運行剖面生成的測試用例對軟件進行測試。

5.收集數據

收集的數據包括:軟件的輸入數據、輸出結果,用于進行失效分析和回歸測試;軟件運行時間數據,可以是CPU執行時間、日歷時間、時鐘時間等;失效數據,包括每次失效發生的時間或一段時間內發生失效的次數,失效數據可以通過實時分析得到,也可以通過事后分析得到。收集的數據質量對于最終的可靠性分析結果有很大的影響,應盡可能采用自動化手段進行數據的收集,以提高效率、準確性和完整性。

6.數據分析

數據分析主要包括失效分析和可靠性分析。失效分析是指根據運行結果判斷軟件是否失效,以及失效的后果、原因等;可靠性分析主要是指根據失效數據,評估軟件的可靠性水平,預估可能達到的可靠性水平,評價軟件產品是否已經達到要求的可靠性水平,為管理決策提供依據。

7.失效修正

如果軟件的運行結果與需求不一致,則稱軟件發生失效。通過失效分析,找到并修正引起失效的程序中的缺陷,從而實現軟件可靠性的增長。

3.3.2.2 軟件可靠性增長測試過程

軟件可靠性增長測試是為了滿足用戶對軟件可靠性的要求、提高軟件可靠性水平而對軟件進行的測試,是為了滿足軟件的可靠性指標要求對軟件進行測試—可靠性分析—修改—再測試—再分析—再修改的循環過程。軟件可靠性增長測試過程如圖3.6所示。

圖3.6 軟件可靠性增長測試過程

3.3.2.3 軟件可靠性驗證測試過程

軟件可靠性驗證測試是為了驗證在給定的統計置信度下軟件當前的可靠性水平是否滿足用戶的要求而進行的測試,即用戶在接收軟件時確定它是否滿足軟件規格說明書中規定的可靠性指標。一般在軟件可靠性驗證測試過程中,不對軟件進行修改。軟件可靠性驗證測試過程如圖3.7所示。

圖3.7 軟件可靠性驗證測試過程

總之,軟件可靠性測試是面向可靠性要求的測試,是軟件可靠性工程中的一項重要工作,它能有效地發現影響軟件可靠性的缺陷。通過軟件可靠性測試,可以有效實現軟件可靠性增長,估計軟件可靠性水平,驗證軟件可靠性是否達到要求。但是對于軟件可靠性測試的困難和局限性,也應有充分的認識。

首先,軟件可靠性測試是一項高投入的測試工作。進行軟件可靠性測試必須要了解軟件的使用歷史,或估計可能的使用情況,構造軟件的運行剖面,準備測試環境,并且要進行大量的測試運行。

其次,軟件可靠性測試不能代替其他的測試和驗證方法。從有效發現缺陷的角度出發,軟件可靠性測試可能不是最有效的方法,必須結合其他的測試和驗證方法、手段發現軟件中存在的各種缺陷。

最后,難以驗證具有極高可靠性要求的軟件。對于具有極高可靠性要求的軟件,如要求失效率為10-9的軟件,使用軟件可靠性測試方法進行驗證是不切合實際的,必須采用形式化驗證等方法來加以解決。

主站蜘蛛池模板: 田阳县| 扶风县| 广昌县| 上高县| 阿克| 西吉县| 上饶县| 专栏| 桑日县| 东丽区| 万山特区| 玉树县| 奉节县| 库伦旗| 大埔县| 富民县| 西青区| 延吉市| 湘阴县| 裕民县| 崇明县| 南华县| 威宁| 小金县| 渭源县| 拜城县| 沧州市| 讷河市| 远安县| 凤翔县| 新郑市| 罗定市| 错那县| 镇坪县| 神木县| 曲阳县| 乌审旗| 萝北县| 星子县| 长乐市| 万荣县|