一.軟件測試的定義
軟件測試(Software testing)是軟件生存期(Software life cycle)中的一個重要階段,是軟件質量保證的關鍵步驟。通俗地講,軟件測試就是在軟件投入運行前,對軟件需求分析、設計規格說明和編碼進行最終復審的活動。1983年IEEE提出的軟件工程術語中給軟件測試下的定義是:“使用人工或自動的手段來運行或測定某個軟件系統的過程,其目的在于檢驗它是否滿足規定的需求或弄清預期結果與實際結果之間的差別”。這個定義明確指出:軟件測試的目的是為了檢驗軟件系統是否滿足需求。
從用戶的角度來看,普遍希望通過軟件測試暴露軟件中隱藏的錯誤和缺陷,所以軟件測試應該是“為了發現錯誤而執行程序的過程”;蛘哒f,軟件測試應該根據軟件開發各階段的規格說明和程序的內部結構而精心設計一批測試用例(即輸入數據及其預期的輸出結果),并利用這些測試用例去運行程序,以發現程序錯誤或缺陷。
二.軟件測試的生命周期
測試主要依據是被試系統的研制任務書和技術規格書,是對軟件整體功能和性能的綜合測試與評估。測試原理是軟件測試活動的理論基礎,測試方法是測試原理的實際應用和獲得測試數據的手段;谲浖墓残,對于軟件的測試要遵循一般軟件的測試原理和方法。同時,針對軟件的特性,必須找到合適的測試方法。測試用例的合理性對于軟件的測試與評估具有關鍵作用,而如何使設計的用例合情、合理并且典型有效并不容易。所以應該與軟件的研制人員以及最終用戶一起,有針對性地研究實際操作環境并加以描述,形成合理的測試用例集。另一方面,軟件運行環境的復雜程度對軟件評估具有重要作用,所以應產生盡量逼真的運行背景以便于研究。軟件測試的周期如圖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、開發軟件可靠性評估軟件,使軟件鑒定更加方便。
文章來源于領測軟件測試網 http://www.kjueaiud.com/