1. 軟件測試基礎
1.1. 什么是軟件測試
軟件測試是為了發現錯誤而執行程序的過程?;蛘哒f,軟件測試是根據軟件開發各階段的規格說明和程序的內部結構而精心設計一批測試用例(即輸入數據及其預期的輸出結果),并利用這些測試用例去運行程序,以發現程序錯誤的過程。
軟件測試在軟件生存期中橫跨兩個階段:通常在編寫出每一個模塊之后就對它做必要的測試(稱為單元測試)。模塊的編寫者與測試者是同一個人。編碼與單元測試屬于軟件生存期中的同一個階段。在這個階段結束之后,對軟件系統還要進行各種綜合測試,這是軟件生存期的另一個獨立的階段,即測試階段,通常由專門的測試人員承擔這項工作。
1.2. 軟件測試的目的、任務和原則
設計測試的目標是想以最少的時間和人力系統地找出軟件中潛在的各種錯誤和缺陷。
軟件測試的目的,第一是確認軟件的質量,其一方面是確認軟件做了你所期望的事情(Do the right thing),另一方面是確認軟件以正確的方式來做了這個事件(Do it right)。第二是提供信息,比如提供給開發人員或程序經理的回饋信息,為風險評估所準備的信息。第三軟件測試不僅是在測試軟件產品的本身,而且還包括軟件開發的過程。如果一個軟件產品開發完成之后發現了很多問題,這說明此軟件開發過程很可能是有缺陷的。因此軟件測試的第三個目的是保證整個軟件開發過程是高質量的。
測試人員在軟件開發過程中的任務:
1、尋找Bug;
2、避免軟件開發過程中的缺陷;
3、衡量軟件的質量;
4、關注用戶的需求。
軟件測試的原則:
?、?應當把“盡早地和不斷地進行軟件測試”作為軟件開發者的座右銘。
不應把軟件測試僅僅看作是軟件開發的一個獨立階段,而應當把它貫穿到軟件開發的各個階段中。堅持在軟件開發的各個階段的技術評審,這樣才能在開發過程中盡早發現和預防錯誤,把出現的錯誤克服在早期,杜絕某些發生錯誤的隱患。
?、?測試用例應由測試輸入數據和與之對應的預期輸出結果這兩部分組成。
測試以前應當根據測試的要求選擇測試用例(Test case),用來檢驗程序員編制的程序,因此不但需要測試的輸入數據,而且需要針對這些輸入數據的預期輸出結果。
?、?程序員應避免檢查自己的程序。
程序員應盡可能避免測試自己編寫的程序,程序開發小組也應盡可能避免測試本小組開發的程序。如果條件允許,最好建立獨立的軟件測試小組或測試機構。這點不能與程序的調試(debuging)相混淆。調試由程序員自己來做可能更有效。
?、?在設計測試用例時,應當包括合理的輸入條件和不合理的輸入條件。
合理的輸入條件是指能驗證程序正確的輸入條件,不合理的輸入條件是指異常的,臨界的,可能引起問題異變的輸入條件。軟件系統處理非法命令的能力必須在測試時受到檢驗。用不合理的輸入條件測試程序時,往往比用合理的輸入條件進行測試能發現更多的錯誤。
?、?充分注意測試中的群集現象。
在被測程序段中,若發現錯誤數目多,則殘存錯誤數目也比較多。這種錯誤群集性現象,已為許多程序的測試實踐所證實。根據這個規律,應當對錯誤群集的程序段進行重點測試,以提高測試投資的效益。
?、?嚴格執行測試計劃,排除測試的隨意性。
測試之前應仔細考慮測試的項目,對每一項測試做出周密的計劃,包括被測程序的功能、輸入和輸出、測試內容、進度安排、資源要求、測試用例的選擇、測試的控制方式和過程等,還要包括系統的組裝方式、跟蹤規程、調試規程,回歸測試的規定,以及評價標準等。對于測試計劃,要明確規定,不要隨意解釋。
?、?應當對每一個測試結果做全面檢查。
有些錯誤的征兆在輸出實測結果時已經明顯地出現了,但是如果不仔細地全面地檢查測試結果,就會使這些錯誤被遺漏掉。所以必須對預期的輸出結果明確定義,對實測的結果仔細分析檢查,抓住征侯,暴露錯誤。
?、?妥善保存測試計劃,測試用例,出錯統計和最終分析報告,為維護提供方便。
1.3. 確認和驗證的關系
確認(Validation)是一系列的活動和過程,其目的是想證實在一個給定的外部環境中軟件的邏輯正確性。它包括需求規格說明的確認和程序的確認,而程序的確認又分為靜態確認與動態確認。靜態確認一般不在計算機上實際執行程序,而是通過人工分析或者程序正確性證明來確認程序的正確性; 動態確認主要通過動態分析和程序測試來檢查程序的執行狀態,以確認程序是否有問題。
原文轉自:http://www.uml.org.cn/Test/201511262.asp