徐興浩
摘要科學技術不斷的飛速發展,軟件的功能越來越強大,軟件的復雜性也越來越高,從而大大增加了軟件測試與可靠性評估的難度。作為軟件開發的重要環節,軟件測試越來越受到人們的重視,軟件測試的重要性更加突出。為了保證一個軟件系統的質量,有必要針對軟件的測試與可靠性評估方法進行專門地研究。本文就是針對這一領域所做的一些研究。
關鍵詞:軟件測試;滿足需求;可靠性
Software Test
Dalian maritime University in Liaoning province Xu Xinghao
Abstract: With the development of science and technology, the function of software is becoming more and more powerful. The complexity of software is increasing so fast that it is very difficult to test and assess the reliability of software. As an important part of software development, software testing has been paid more and more attention. The importance of software testing is more prominent. In order to ensure the quality of a software system, it is necessary to specialize in software testing and method for assessment of reliability. This paper is something about studying in this area.
Key words: software testing; meet demand; reliability
1 引言
隨著科學技術的飛速發展,硬件發雜性、多樣性和應用的復雜性增加,軟件系統的復雜性和規模也在不斷增大,軟件安全性和質量的保證成為各大公司及個人日益關注的焦點,軟件中存在的各種問題也逐漸成為制約我國軟件產業發展的主要因素。后期的軟件測試工作可以說是為軟件產品的完工把好最后一道關,是檢驗軟件產品最為重要的一步。所以軟件測試在軟件開發中的地位日趨升高、軟件測試員的地位也在日益提高。
我們先簡單的分析一下軟件缺陷產生的原因。軟件在投入運行之前會先進行軟件測試,但運行前的軟件測試是根據軟件的需求分析、設計規格和編碼實現為審定目標。但程序中的故障并一定是由編碼引起的,大多數的軟件缺陷可能是在系統詳細設計階段、概要設計階段甚至是在需求分析階段就存在問題所導致。在軟件開發過程中,需求的更改、軟件說明書的描述開發小組人員間的交流都可能導致軟件程序出現缺陷。而軟件測試是最大限度避免軟件缺陷產生的最好途徑[1]。本文系統的介紹了有關軟件測試的各階段及其用途。
2 軟件測試的定義
軟件測試(Software testing)是軟件生存期(Software life cycle)中的一個重要階段,是軟件質量保證的關鍵步驟。通俗地講,軟件測試就是在軟件投入運行前,對軟件需求分析、設計規格說明和編碼進行最終復審的活動。1983年IEEE提出的軟件工程術語中給軟件測試下的定義是:“使用人工或自動的手段來運行或測定某個軟件系統的過程,其目的在于檢驗它是否滿足規定的需求或弄清預期結果與實際結果之間的差別”。這個定義明確指出:軟件測試的目的是為了檢驗軟件系統是否滿足需求[2]。
從用戶的角度來看,普遍希望通過軟件測試暴露軟件中隱藏的錯誤和缺陷,所以軟件測試應該是“為了發現錯誤而執行程序的過程”。或者說,軟件測試應該根據軟件開發各階段的規格說明和程序的內部結構而精心設計一批測試用例(即輸入數據及其預期的輸出結果),并利用這些測試用例去運行程序,以發現程序錯誤或缺陷。
3 軟件測試的生命周期
軟件測試就是軟件在投入運行前,對軟件需求分析、設計規格和編碼是的最終審查,他是保證軟件質量的關鍵步驟。軟件測試是為了發現錯誤而執行程序并根據軟件開發各階段的規格說明和程序的內部結構而精心設計的測試。下圖為一個測試生命周期模型。
軟件測試不僅僅是對程序的測試,而是貫穿于軟件定義和開發的整個過程,因此,軟件開發過程中產生的需求分析、概要設計、詳細設計以及編碼等各個階段所得到的文檔,包括需求規格說明、概要設計規格說明、詳細設計規格說明以及源程序,都是軟件測試的對象[3]。軟件測試在軟件生命周期,也就是軟件從開發設計、運行、直到結束使用的全過程中,主要橫跨單元測試階段和綜合測試階段,即要在每個模塊編寫出以后進行測試、在完成單元測試后進行的測試,如集成測試、系統測試、驗收測試等。
4 軟件測試的目的
軟件測試的目的,第一是確認軟件的質量,其一方面是確認軟件做了你所期望的事情(Do the right thing),另一方面是確認軟件以正確的方式來做了這個事件(Do it right)。第二是提供信息,比如提供給開發人員或程序經理的反饋信息,為風險評估所準備的信息。 第三軟件測試不僅是在測試軟件產品的本身,而且還包括軟件開發的過程。如果一個軟件產品開發完成之后發現了很多問題,這說明此軟件開發過程很可能是有缺陷的。因此軟件測試的第三個目的是保證整個軟件開發過程是高質量的。
軟件質量是由幾個方面來衡量的:一、在正確的時間用正確的的方法把一個工作做正確(Doing the right things right at the right time.)。二、符合一些應用標準的要求,比如不同國家的用戶不同的操作習慣和要求,項目工程中的可維護性、可測試性等要求。三、質量本身就是軟件達到了最開始所設定的要求,而代碼的優美或精巧的技巧并不代表軟件的高質量(Quality is defined as conformance to requirements, not as “goodness” or “elegance”.)。四、質量也代表著它符合客戶的需要(Quality also means “meet customer needs”.)。作為軟件測試這個行業,最重要的一件事就是從客戶的需求出發,從客戶的角度去看產品,客戶會怎么去使用這個產品,使用過程中會遇到什么樣的問題。只有這些問題都解決了,軟件產品的質量才可以說是上去了[4]。
測試人員在軟件開發過程中的任務:
1、尋找Bug;
2、避免軟件開發過程中的缺陷;
3、衡量軟件的品質;
4、關注用戶的需求。
總的目標是:確保軟件的質量
5軟件測試方法及流程
軟件測試方法主要有黑箱測試方法與白箱測試兩類。黑箱測試又稱功能測試、數據驅動測試或基于規格說明的測試,是在完全不考慮程序內部結構和內部特性的情況下,檢查輸入與輸出之間關系是否符合要求。白箱測試又稱結構測試、邏輯驅動測試或基于程序的測試,是在已知程序內部結構的情況下設計測試用例的測試方法。顯然,白箱測試適合在單元測試中運用,而在獨立測試階段多采用黑箱測試方法。
測試用例(Test case)實際上是對軟件運行過程中所有可能存在的目標、運動、行動、環境和結果的描述,是對客觀世界的一種抽象。設計測試用例即設計針對特定功能或組合功能的測試方案,并編寫成文檔。測試用例應該體現軟件工程的思想和原則。測試用例的選擇既要有一般情況,也應有極限情況以及最大和最小的邊界值情況[5]。因為測試的目的是暴露應用軟件中隱藏的缺陷,所以在設計選取測試用例和數據時要考慮那些易于發現缺陷的測試用例和數據,結合復雜的運行環境,在所有可能的輸入條件和輸出條件中確定測試數據,來檢查應用軟件是否都能產生正確的輸出。
軟件測試所得到的數據經過處理以后,可以用來作為評估軟件系統是否滿足用戶需求的依據。軟件測試階段的信息流如下圖所示:
6 結語
軟件系統的規模也在持續擴大,需求日益復雜,對軟件質量的要求也越來越高。但現實中軟件系統的質量和穩定性卻不盡如人意,采用有效的軟件測試是保證軟件質量、提高軟件可靠性的重要手段。
軟件測試是產品最終交付到用戶之前的最后一道防線,有著舉足輕重的地位。然而,做好軟件測試卻是不容易的,一方面你需要同時掌握軟件開發的技能和軟件測試方面的技能;另一方面,產品必須給予測試充分的獨立性和資源保證。
軟件測試是發現軟件中錯誤而檢查文檔、運行程序的一個過程。軟件測試的概念雖然是和軟件編程同時提出的,但發展速度卻遠遠沒有編程技術快。近十幾年來,隨著軟件應用的迅速推廣,對軟件測試也變得迫切需要,各種針對性的測試方法和技術不斷出現。
軟件測試前景被極為看好,我們相信,在不久的將來,軟件測試會成為軟件行業的主題被越來越多的人更廣泛的重視。
參考文獻
[1].楊為民等,可靠性維修性保障性叢書,國防工業出版社,1995.
[2].張海藩,軟件工程,人民郵電出版社,2008.
[3].Daniel J.Mosley, Bruce A.Posey,軟件測試自動化,機械工業出版社,2007.
[4].梅啟智、廖炯生、孫惠中,系統可靠性工程基礎,科學出版社,1992.
[5].Elfriede Dustin,有效軟件測試 ,清華大學出版社,2004.
注:文章內所有公式及圖表請以PDF形式查看。