
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模型
V模型
反映了測試活動與開發活動間的關系,标明測試過程中存在的不同級别,并清楚描述測試的各個階段和開發過程的各個階段對應關系。
- 左側是開發階段:從定義軟體需求開始,把需求轉換為概要設計和詳細設計,最後形成程式代碼
- 右側是測試階段:在代碼編寫完成後,從單元測試開始,依次進行內建測試、系統測試和客戶驗收測試
4.2 W模型
W模型
W模型
相比起
V模型
,增加了軟體各開發階段中應同步進行的驗證和确認活動。
W模型
強調:
- 測試伴随整個軟體周期
- 測試對象不僅是程式,需求、設計也要測試
- 測試與開發同步進行
4.3 H模型
H模型
H模型
将測試活動完全獨立出來,使得測試準備活動和測試執行活動清晰地展現出來,進而使得測試準備與測試執行分離,有利于資源調配,減低成本,提高效率。
4.4 X模型
X模型
- 左邊:描述的是針對單獨程式片段進行的編碼測試,此後将進行頻繁的交接,通過內建最終成為可執行程式
- 右邊:上方定位了已認證內建測試的成品進行封闆并送出給使用者,也可作為更大規模和範圍内內建的一部分,下方定位了探索性測試
4.5 前置模型
前置模型将測試和開發緊密結合,優點如下:
- 開發和測試相結合
- 對每一個傳遞内容進行測試
- 讓驗收測試和技術測試保持互相獨立
- 反複交替的開發和測試
- 引入新的測試理念
4.6 測試模型各自特點
-
:強調了整個軟體項目開發中需要經曆的若幹個測試級别,每個級别都與一個開發階段相對應,但它沒有明确指出應該對需求、設計進行測試V模型
-
:對W模型
進行了補充,強調了測試計劃等工作的先行和堆系統需求和軟體設計的測試,但和V模型
一樣,沒有專門針對軟體測試的流程予以說明V模型
-
:表現了測試是獨立的,就每一個軟體的測試細節來說,都有一個獨立的操作流程,隻要測試前提具備了,就可以開始進行測試H模型
-
:展現出測試設計、測試回溯的過程,幫助有經驗的測試人員在測試計劃之外發現軟體錯誤X模型
-
:前置模型将測試和開發緊密結合,反複交替第執行前置模型
5 測試用例
5.1 定義
測試用例是指對一項特定的軟體産品進行測試任務的描述,展現測試方案、方法、技術和政策,内容包括:
- 測試目标
- 測試環境
- 輸入資料
- 預期結果
- 測試腳本
等,最終形成文檔。
一個測試用例具有以下屬性:
- 優先級次序
- 目标性
- 所屬的範圍
- 階段性
- 狀态性
- 時效性
- 所有者、日期等特性
5.2 測試用例的設計方法
分為有白盒和黑盒測試相對應的設計方法,比如,黑盒測試的用例設計可以采用:
- 等價類劃分
- 因果圖法
- 邊值分析
- 使用者界面測試
- 配置測試
- 安裝選項驗證
等,而白盒測試用例的設計方法如下:
- 采用邏輯覆寫等結構的測試用例設計方法
- 基于程式結構的域測試用例設計方法
- 根據對象狀态或等待狀态變化來設計測試用例
- 基于程式錯誤的變異來設計測試用例
- 基于代數運算符号測試的測試用例設計方法
5.3 測試用例設計誤區
- 把測試用例設計等同于測試輸入資料的設計:測試用例中輸入資料的确定隻是測試用例設計的一個子集,測試用例設計還包括如何根據測試需求、設計規格說明書等文檔設計用例的執行政策、執行步驟、預期結構、組織管理形式等問題
- 測試用例設計得越詳細越好:編寫過于詳細的測試用例會耗費大量的資源,必須分析被測試軟體的特征,運用有效的測試用例設計手段,盡量使用較少的測試用例,同時滿足合理的測試覆寫
- 追求測試用例設計“一步到位”:任何軟體項目的開發過程都處于不斷變化的過程中,在測試過程中可能發現設計測試用例時考慮不周的地方,需要完善,也有可能使用者對軟體功能提出新的需求變更,需要根據軟體變化對測試用例進行調整
- 将多個測試用例混在一個用例中:一個測試用例包含許多内容很容易引起混淆,進而使得測試結果很難記錄