天天看點

軟體測試與可靠性評估方法研究 ZT

摘要:随着科學技術的飛速發展,軟體的功能越來越強大,軟體的複雜性也越來越高,進而大大增加了軟體測試與可靠性評估的難度。為了保證一個軟體系統的品質,有必要針對軟體的測試與可靠性評估方法進行專門地研究。本文就是針對這一領域所做的一些研究。

  一.軟體測試的定義

  軟體測試(software testing)是軟體生存期(software life cycle)中的一個重要階段,是軟體品質保證的關鍵步驟。通俗地講,軟體測試就是在軟體投入運作前,對軟體需求分析、設計規格說明和編碼進行最終複審的活動。1983年ieee提出的軟體工程術語中給軟體測試下的定義是:“使用人工或自動的手段來運作或測定某個軟體系統的過程,其目的在于檢驗它是否滿足規定的需求或弄清預期結果與實際結果之間的差别”。這個定義明确指出:軟體測試的目的是為了檢驗軟體系統是否滿足需求。

  從使用者的角度來看,普遍希望通過軟體測試暴露軟體中隐藏的錯誤和缺陷,是以軟體測試應該是“為了發現錯誤而執行程式的過程”。或者說,軟體測試應該根據軟體開發各階段的規格說明和程式的内部結構而精心設計一批測試用例(即輸入資料及其預期的輸出結果),并利用這些測試用例去運作程式,以發現程式錯誤或缺陷。

  二.軟體測試的生命周期

  測試主要依據是被試系統的研制任務書和技術規格書,是對軟體整體功能和性能的綜合測試與評估。測試原理是軟體測試活動的理論基礎,測試方法是測試原理的實際應用和獲得測試資料的手段。基于軟體的共性,對于軟體的測試要遵循一般軟體的測試原理和方法。同時,針對軟體的特性,必須找到合适的測試方法。測試用例的合理性對于軟體的測試與評估具有關鍵作用,而如何使設計的用例合情、合理并且典型有效并不容易。是以應該與軟體的研制人員以及最終使用者一起,有針對性地研究實際操作環境并加以描述,形成合理的測試用例集。另一方面,軟體運作環境的複雜程度對軟體評估具有重要作用,是以應産生盡量逼真的運作背景以便于研究。軟體測試的周期如圖1所示。

  實踐證明,盡管人們在開發軟體的過程中使用了許多保證軟體品質的方法和技術,但開發出的軟體中還會隐藏許多錯誤和缺陷。這對于規模大、複雜性高的軟體更是如此。是以,嚴格的軟體測試對于保證軟體品質具有重要作用。

  軟體測試在軟體生存期中橫跨兩個階段。在軟體編碼階段,當編寫出一個子產品後,通常要對它進行必要的測試(稱為單元測試),這時測試與編碼屬于同一個階段。在編碼階段結束後,對軟體系統還要進行各種綜合測試(內建測試與系統測試),這是一個獨立階段,即軟體測試階段。在這個測試階段又有兩種性質不同的測試:研制機關内部進行的內建測試和系統測試與使用者(或第三方)進行的驗收性測試。

  在軟體測試生命周期内,錯誤在軟體開發的每個階段都可能被帶入。在軟體測試中,某些錯誤被發現、分類、隔離,最終被糾正。由于軟體不斷被修改,是以這個過程是一個反複進行的過程。

       三.測試方法和流程

  軟體測試方法主要有黑箱測試方法與白箱測試兩類。黑箱測試又稱功能測試、資料驅動測試或基于規格說明的測試,是在完全不考慮程式内部結構和内部特性的情況下,檢查輸入與輸出之間關系是否符合要求。 白箱測試又稱結構測試、邏輯驅動測試或基于程式的測試,是在已知程式内部結構的情況下設計測試用例的測試方法。顯然,白箱測試适合在單元測試中運用,而在獨立測試階段多采用黑箱測試方法。

  測試用例(test case)實際上是對軟體運作過程中所有可能存在的目标、運動、行動、環境和結果的描述,是對客觀世界的一種抽象。設計測試用例即設計針對特定功能或組合功能的測試方案,并編寫成文檔。測試用例應該展現軟體工程的思想和原則。測試用例的選擇既要有一般情況,也應有極限情況以及最大和最小的邊界值情況。因為測試的目的是暴露應用軟體中隐藏的缺陷,是以在設計選取測試用例和資料時要考慮那些易于發現缺陷的測試用例和資料,結合複雜的運作環境,在所有可能的輸入條件和輸出條件中确定測試資料,來檢查應用軟體是否都能産生正确的輸出。

  軟體測試所得到的資料經過處理以後,可以用來作為評估軟體系統是否滿足使用者需求的依據。

  四.軟體評估理論及其發展現狀

  軟體的評估理論是進行評估的理論依據,評估方法是評估理論的實際應用和處理測試資料的方法。對于評估名額體系中的不同名額,應該根據測試資料的不同,選取相應的評估理論和方法。軟體評估(software assessment)的實質是對軟體品質的度量與評價。

  我們對軟體品質評估的定義是:“為了确定一特定的軟體子產品、軟體包或軟體産品是否驗收合格或釋出而把特定的評估準則應用到該軟體子產品、軟體包或軟體産品上去的活動”。

  可見,軟體評估的對象是“軟體子產品、軟體包或軟體産品”,軟體評估的目的是“确定被評對象是否驗收合格或釋出”。定義中提到的評估準則是“根據特定的軟體産品和品質需求,确定産品是否通過驗收或釋出的一組成文的規則和條件的集合”。從廣泛意義上講,評估準則已經包括了評估方法和名額體系,即如何處理獲得的測試資料與如何應用評估準則到被評估軟體上。

  軟體可靠性評估(software reliability assessment)的完整含義是:根據軟體系統可靠性結構(單元與系統間可靠性關系)、壽命類型和各單元的可靠性試驗資訊,利用機率統計方法,評估出系統的可靠性特征量。

  目前,軟體可靠性工程是一門雖然得到普遍承認,但還處于不成熟的正在發展确立階段的新興工程學科。國外從60年代後期開始加強軟體可靠性的研究工作,經過20年左右的研究推出了各種可靠性模型和預測方法,于1990年前後形成較為系統的軟體可靠性工程體系。同時,從80年代中期開始,西方各主要工業強國均确立了專門的研究計劃和課題,如英國的aivey(軟體可靠性和度量标準)計劃、歐洲的esprit(歐洲資訊技術研究與發展戰略)計劃、spmms(軟體生産和維護管理保障)課題、eureka(尤裡卡)計劃等。每年,都有大量人力物力投入軟體可靠性研究項目,并取得一定成果。

  國内對于軟體可靠性的研究工作起步較晚,在軟體可靠性量化理論、度量标準(名額體系)、模組化技術、設計方法、測試技術等方面與國外差距較大。國内多數軟體的生産方式還處于計算機時代的早期階段,缺點很明顯,主要表現在:1、透明度差;2、軟體傳遞系統聯調前隻靠自檢,品質得不到保證;3、使用者對傳遞的軟體可靠性缺乏信心。多數所謂的“軟體測試”僅僅對幾個預先指定的用例進行一下表演就算通過。目前還沒有像硬體那樣完善的檢驗體系,傳遞軟體的品質不高。典型統計表明,“開發階段平均每千行代碼有50-60個缺陷,傳遞後平均每千行代碼有15-18個缺陷”,有時會留下嚴重隐患。

  目前,軟體可靠性管理方面還沒有建立起具有權威性的管理體系和規範。比如,如何描述軟體可靠性、如何測試、如何評估、如何設計、如何提高等。由于目前國内外對于軟體可靠性模型的研究多集中在軟體的研制階段,而很少有涉及測試與評估階段的可靠性模型,是以從事軟體可靠性測試與評估研究是一個有理論價值和實際意義、并且存在一定難度的課題。

  随着計算機軟體編制的規範化,必然要将軟體可靠性考核納入科學、規範的軌道。具體表現在:1、在軟體系統研制任務中,制定軟體可靠性量化名額,使軟體考核有明确的标準;2、建立完善的軟體測試、可靠性資訊收集系統,使在計算機軟體開發中通過科學的軟體測試不斷減少缺陷;3、通過研究軟體可靠性考核方法,制定相應的軟體考核規程、标準;4、開發軟體可靠性評估軟體,使軟體鑒定更加友善。