1 軟件測試目的
測試的目的就是以最少的時間和人力找出軟件中潛在的各種錯誤和缺陷,證明軟件的功能和性能與需求說明相符,Glenford J.Myers
曾提出以下觀點:
- 測試是爲了證明程序有錯,而不是證明程序無錯誤
- 一個好的測試用例能發現至今未發現的錯誤
- 一個成功的測試是發現了至今未發現的錯誤
軟件測試的目的往往包含以下內容:
- 測試並不僅僅是爲了找出錯誤,通過分析錯誤產生的原因和錯誤的發生趨勢,可以幫助項目管理者發現當前軟件開發過程中的缺陷,以便及時改進
- 測試幫助測試人員設計有針對性的測試方法,改善測試的效率和有效性
- 沒有發現錯誤的測試也是有價值的,完整的測試是評定軟件質量的一種方法
2 軟件測試的原則
- 軟件測試是證僞而非證真
- 儘早地和不斷地進行軟件測試
- 重視無效數據和非預期的測試
- 應當對每一個測試結果做全面檢查
- 測試現場保護和資料歸檔
- 程序員應避免檢查自己的程序
- 充分注意測試中的羣集現象
- 用例要定期評審
3 軟件測試分類
3.1 按測試階段劃分
可以分爲:
- 單元測試:用於檢驗被測代碼的一個很小的、明確的功能是否正確
- 集成測試:對經過單元測試的模塊之間的依賴接口的關係圖進行測試
- 確認測試:用於驗證軟件的有效性
- 系統測試:將整個軟件系統與計算機硬件、外設、支持軟件、數據、人員等其他系統元素結合起來進行測試
- 驗收測試:最終用戶參與測試的過程
3.2 按執行狀態劃分
可以分爲:
- 動態測試:運行被測程序,檢查運行結果與預期結果的差異,並分析運行效率和健壯性等性能,由“構造測試實例、執行程序和分析程序的輸出結果”組成
- 靜態測試:對被測程序進行特性分析方法的總成,是指計算機不運行被測試的程序,而對程序和文檔進行分析和檢查,包括走查、符號執行、需求確認等
3.3 按照測試技術劃分
可以分爲:
- 黑盒測試:也叫功能測試或數據驅動測試,測試時把程序看做不能打開的黑盒,完全不考慮程序內部結構和特性,對程序接口測試,檢查程序功能是否按照需求規格說明書的規定正常使用,程序是否能適當地接收輸入數據而產生正確的輸出信息,並且保持外部信息的完整性
- 白盒測試:又叫結構測試或邏輯驅動測試,用於檢測產品內部的結構及檢驗程序中的每條通路能夠按照預定要求正確工作
- 灰盒測試:介於白盒與黑盒測試之間,主要用於測試各個組件之間的邏輯關係是否正確,採用樁驅動把各個函數按照一定的邏輯串起來,達到在產品還沒有界面的情況下的結果輸出
一般來說,單元測試採用白盒測試的方法,集成測試採用灰盒測試的方法,而系統測試和確認測試採用黑盒測試的方法,黑盒測試與白盒測試比較如下:
- 規劃方面:黑盒測試用於功能測試,而白盒測試用於結構測試
- 性質:黑盒測試是一種確認(
Validation
)技術,而白盒測試是一種驗證(Verification
)技術 - 優點:黑盒測試的優點包括從用戶的角度出發、適用於各階段測試、從產品功能角度測試、容易入手生成測試數據,而白盒測試的優點包括針對程序內部特定部分進行覆蓋測試、可構成測試數據使特定程序部分得到測試、有一定充分性的度量手段、可獲得較多工具的支持
- 缺點:黑盒測試的缺點包括無法測試程序內部特定部分、某些代碼得不到測試、如果規格說明錯誤則無法發現、不易進行充分性的測試,白盒測試的缺點包括無法測試程序外部特性、通常不易生成測試數據、無法對未實現規格說明的部分進行測試、工作量大通常只用於單元測試
- 應用範圍:黑盒測試的應用範圍包括邊界分析法、等價類劃分法、決策表測試,白盒測試的應用範圍包括:語句覆蓋、判定覆蓋、條件覆蓋、路徑覆蓋等
3.4 按執行主體劃分
可以分爲:
Alpha
測試:也叫驗收測試或開發方測試,開發者和用戶共同去檢測與證實軟件的實現是否滿足軟件設計說明或軟件需求規格說明的要求Beta
測試:通常被認爲是用戶測試,通過用戶大量使用來評價檢查軟件- 第三方測試:也叫獨立測試,由第三方機構來進行的測試
4 軟件測試模型
軟件測試模型用於指導軟件測試的實踐,常見的有:
V模型
W模型
H模型
X模型
前置模型
4.1 V模型
V模型
反映了測試活動與開發活動間的關係,標明測試過程中存在的不同級別,並清楚描述測試的各個階段和開發過程的各個階段對應關係。
- 左側是開發階段:從定義軟件需求開始,把需求轉換爲概要設計和詳細設計,最後形成程序代碼
- 右側是測試階段:在代碼編寫完成後,從單元測試開始,依次進行集成測試、系統測試和客戶驗收測試
4.2 W模型
W模型
相比起V模型
,增加了軟件各開發階段中應同步進行的驗證和確認活動。W模型
強調:
- 測試伴隨整個軟件週期
- 測試對象不僅是程序,需求、設計也要測試
- 測試與開發同步進行
4.3 H模型
H模型
將測試活動完全獨立出來,使得測試準備活動和測試執行活動清晰地體現出來,從而使得測試準備與測試執行分離,有利於資源調配,減低成本,提高效率。
4.4 X模型
- 左邊:描述的是針對單獨程序片段進行的編碼測試,此後將進行頻繁的交接,通過集成最終成爲可執行程序
- 右邊:上方定位了已通過集成測試的成品進行封板並提交給用戶,也可作爲更大規模和範圍內集成的一部分,下方定位了探索性測試
4.5 前置模型
前置模型將測試和開發緊密結合,優點如下:
- 開發和測試相結合
- 對每一個交付內容進行測試
- 讓驗收測試和技術測試保持相互獨立
- 反覆交替的開發和測試
- 引入新的測試理念
4.6 測試模型各自特點
V模型
:強調了整個軟件項目開發中需要經歷的若干個測試級別,每個級別都與一個開發階段相對應,但它沒有明確指出應該對需求、設計進行測試W模型
:對V模型
進行了補充,強調了測試計劃等工作的先行和堆系統需求和軟件設計的測試,但和V模型
一樣,沒有專門針對軟件測試的流程予以說明H模型
:表現了測試是獨立的,就每一個軟件的測試細節來說,都有一個獨立的操作流程,只要測試前提具備了,就可以開始進行測試X模型
:體現出測試設計、測試回溯的過程,幫助有經驗的測試人員在測試計劃之外發現軟件錯誤前置模型
:前置模型將測試和開發緊密結合,反覆交替第執行
5 測試用例
5.1 定義
測試用例是指對一項特定的軟件產品進行測試任務的描述,體現測試方案、方法、技術和策略,內容包括:
- 測試目標
- 測試環境
- 輸入數據
- 預期結果
- 測試腳本
等,最終形成文檔。
一個測試用例具有以下屬性:
- 優先級次序
- 目標性
- 所屬的範圍
- 階段性
- 狀態性
- 時效性
- 所有者、日期等特性
5.2 測試用例的設計方法
分爲有白盒和黑盒測試相對應的設計方法,比如,黑盒測試的用例設計可以採用:
- 等價類劃分
- 因果圖法
- 邊值分析
- 用戶界面測試
- 配置測試
- 安裝選項驗證
等,而白盒測試用例的設計方法如下:
- 採用邏輯覆蓋等結構的測試用例設計方法
- 基於程序結構的域測試用例設計方法
- 根據對象狀態或等待狀態變化來設計測試用例
- 基於程序錯誤的變異來設計測試用例
- 基於代數運算符號測試的測試用例設計方法
5.3 測試用例設計誤區
- 把測試用例設計等同於測試輸入數據的設計:測試用例中輸入數據的確定只是測試用例設計的一個子集,測試用例設計還包括如何根據測試需求、設計規格說明書等文檔設計用例的執行策略、執行步驟、預期結構、組織管理形式等問題
- 測試用例設計得越詳細越好:編寫過於詳細的測試用例會耗費大量的資源,必須分析被測試軟件的特徵,運用有效的測試用例設計手段,儘量使用較少的測試用例,同時滿足合理的測試覆蓋
- 追求測試用例設計“一步到位”:任何軟件項目的開發過程都處於不斷變化的過程中,在測試過程中可能發現設計測試用例時考慮不周的地方,需要完善,也有可能用戶對軟件功能提出新的需求變更,需要根據軟件變化對測試用例進行調整
- 將多個測試用例混在一個用例中:一個測試用例包含許多內容很容易引起混淆,從而使得測試結果很難記錄