圖書信息
測試實踐叢書
軟體測試設計馬均飛 鄭文強 編著
ISBN 978-7-121-12967-4
2011年4月出版
定價:55.00元
16開
444 頁
宣傳語
全面解析問題驅動的軟體測試設計方法
內 容 簡 介
本書針對軟體測試人員在測試設計過程中面臨的各種問題,提出了“問題驅動的軟體測試設計”方法。該方法將軟體測試設計技術、測試設計中面臨的問題和項目測試實踐經驗緊密結合,詳細闡述了測試人員應該如何有效地開展軟體測試設計活動。
測試人員在測試設計過程中經常面臨各種問題和挑戰,主要包括幾乎無窮的測試對象輸入數據的組合、不同利益相關者對軟體產品的不同質量要求、非常有限的測試時間和測試資源,以及不全、模糊且經常變更的需求規格說明等。問題驅動的軟體測試設計方法從經典測試設計、基於質量特性的測試設計、基於風險的測試設計和基於經驗的測試設計4個方面,系統地解決測試人員在測試設計過程中碰到的各種問題。
本書適用於測試工程師、測試經理和質量改進人員閱讀,也可以作為國際軟體測試認證委員會(ISTQB)高級測試技術分析員和高級測試分析員的培訓參考教材。
前 言
如何有效地減少測試用例數目?
如何避免測試用例之間的冗餘?
如何滿足客戶對產品的不同質量要求?
如何應付緊迫的測試時間和有限的測試資源?
如何適應需求的不完善和變更?
如何快速獲得產品的質量信息?
當你還在為這些測試設計問題而苦苦思索的時候,不妨看一看本書,它將為你提供一個測試設計的全新視角和思路。本書結合編者10年的軟體測試實踐經驗,以解決軟體測試設計面臨的具體問題為目的,以現有的軟體測試設計技術為基礎,提出了問題驅動的軟體測試設計方法。該方法不再將關注點集中在測試設計技術本身的描述,而是放在了不同的測試技術如何解決測試設計過程中面臨的實際問題上。本書首先提出測試人員在測試設計過程中遇到的各種不同問題,然後套用不同的測試設計技術從不同的角度解決問題。
問題驅動的軟體測試設計由4大類測試設計技術組成,即經典測試設計、基於質量特性的測試設計、基於風險的測試設計和基於經驗的測試設計。該方法全面覆蓋了現有的各種軟體測試設計技術,不僅包括了等價類劃分、邊界值分析和決策表測試等經典測試技術,也包括了失效模式和影響分析FMEA以及探索性測試等測試技術。問題驅動的軟體測試設計方法通過將測試人員面臨的問題、測試技術和實踐經驗的緊密結合,為讀者提供了全新的測試設計思想和理念,相信書中介紹的技術、方法和實踐經驗能夠給讀者帶來對軟體測試設計的全新認識。
軟體測試設計的誤區及本書的解決方法
軟體測試設計是整個軟體測試過程中的一個重要活動,其輸出質量(無論是文檔化的工作產品,還是存在於測試人員頭腦中的想法)將會直接影響後續測試活動的效率和有效性,進而影響軟體產品的最終質量。測試人員在測試設計過程中的如下誤區常常會影響測試活動的有效開展。
(1)測試對象的需求規格說明是測試設計和執行的唯一輸入,即測試人員的測試活動都以該說明作為判斷依據。需求規格說明作為測試的輸入,這觀點本身沒有錯,但它不是唯一的。在測試過程中測試人員面對的需求常常是不全且模糊,甚至沒有任何需求文檔;另外,測試對象除了需求規格說明中包括的顯現需求之外,測試人員還需要考慮一些隱現的需求。例如,競爭對手的產品特點和以前版本發現的缺陷等。
(2)假如測試對象滿足了需求規格說明的要求,那么它就滿足了產品的質量要求,這個誤區實際上是上面的誤區導致的。我們需要強調的是軟體測試不僅僅是驗證的目的(即Verification,正確地構建產品),而且需要達到確認的目的(即Validation,構建正確的產品)。因此在測試過程中還需要進行確認測試,即從用戶的角度檢查軟體產品是否確實是用戶需要的,是否實際滿足了用戶的真實需求和要求。在測試過程中,測試人員除了要考慮功能測試之外,還需要針對不同的質量特性進行非功能測試。
(3)測試對象的每個功能對於測試設計而言是同樣重要。在實際測試設計過程中經常無意識地按照這個觀點開展測試活動。例如,無論什麼功能,忽略其重要程度和優先權,測試人員都會基於需求進行測試設計,同等對待每個功能的測試用例和規格說明等文檔。
我們認為,前面的這些誤區是由於片面地理解了一些測試思想和理念造成的,它們會直接影響測試人員測試設計活動的效率和有效性。為了更好地建立測試人員的測試思想和理念,從而更好地進行軟體測試設計,本書提出了問題驅動的軟體測試設計方法。這種方法將從需求、質量特性、風險和測試經驗等方面入手,針對測試設計過程中面臨的各種問題提供系統化的測試設計解決方案。
本書的創作過程及其主要內容
兩年前就想寫一本關於軟體測試設計方面的書,機緣巧合,鄭文強與筆者先寫了一本《軟體測試管理》(電子工業出版社,2010年7月)。正是該書的出版,為本書的寫作奠定了堅實的理論和實踐基礎,使得該書在不到半年的時間內就完成了撰寫和評審的所有工作。實際上我們在2009年末就完成了本書經典測試設計部分的內容,後來由於忙於《軟體測試管理》的出版工作,所以中止了本書的寫作。2010年5月完成《軟體測試管理》出版之前的所有工作後,我們才又開始繼續編寫本書。本書的創作思路經歷了如下兩個不同的階段。
(1)我們計畫覆蓋所有軟體測試技術人員需要掌握的知識點。《軟體測試管理》覆蓋測試管理的內容,而本書將重點關注高級軟體測試分析和技術。但是軟體測試技術的內容很寬泛,而且軟體測試技術人員需要掌握的知識點和軟體測試管理人員有很多是重複的。如果按照原計畫,本書差不多有一半的內容與《軟體測試管理》類似。考慮再三,我們認為這樣的一本書,對我們本身測試知識水平的提高不大,對讀者而言也是不公平的,所以最後我們完全放棄了原來確定的寫作架構和內容。
(2)儘管重新建立本書的框架和思路花費了很多精力,但是卻更好地開拓了我們的視野,並且可以更加貼近測試人員的實際測試工作。此時我們將本書定位為軟體測試設計領域的專著,而儘量不涉及軟體測試其他方面的內容(當然完全不涉及其他內容是不可能的,因為軟體測試設計不可能獨立於其他測試活動而單獨存在)。
確定本書的定位之後,接下來需要完善整體寫作思路和目錄結構。儘管軟體測試設計技術在很多相關書籍中都會有所涉及,但是專門論述這些技術的書籍確實還不多。
首先我們根據自己多年的軟體測試經驗,羅列了測試人員在測試設計過程中經常面臨的各種問題和挑戰;
其次根據具體的問題分析,有針對性地選擇合適的測試設計技術來解決它們;
最後將不同的測試設計技術和測試設計面臨的問題與編者多年的測試設計實踐經驗相結合,提出了“問題驅動的軟體測試設計”方法。該方法不再將重點放在軟體測試設計技術理論上,而是將重點放在如何在測試過程中套用這些技術,有效地解決測試人員所面臨的各種問題。
創作過程總是充滿了艱辛,無論是收集各種相關的測試資料,還是準備各種合適的項目案例,甚至是評審過程中的各種爭論。創作過程同樣也是收穫的過程,包含各種喜悅和成就感。比如,書的內容隨著時間不斷增加,軟體測試設計技術的不斷清晰化,以及測試設計中闡述的各種測試思想和理念不斷解決測試人員面臨的問題和挑戰等。
本書是《軟體測試管理》之後,二位筆者和鄭文強的又一次成功合作。本書的創作過程不僅加深了我們在軟體測試設計方面的理解,也在寫作技巧、溝通和合作方面有了更多的收穫。
本書分為4大部分,共12章。每個部分將基於測試人員在測試過程中面臨的不同問題類型,分別闡述不同的測試技術,以及如何有效地解決該類型的問題。
本書主要解決的問題和挑戰是相對獨立的,讀者可以根據自己面臨的最緊迫問題選擇相關的內容閱讀,更加有效地在測試過程中解決實際問題。假如讀者有時間,建議從頭開始閱讀,以系統地掌握本書所提出的整個測試思想,從而系統地解決測試設計過程中面臨的各種問題。
本書的讀者對象
軟體測試設計是測試過程中的重要測試活動,不同測試人員對測試設計的理解和要求不同,筆者在本書的寫作過程中兼顧不同要求。本書可以作為測試人員的案頭手冊,其中不僅提供全面的測試設計技術,同時幫助解決軟體測試設計過程中面臨的各種問題。本書的主要作用如下。
(1)對於軟體測試的新手,本書提供的軟體測試設計知識可以幫助其理解軟體測試設計的概念,更好且更快地了解軟體測試設計。
(2)對於有經驗的測試人員,本書可以提供系統而全面的軟體測試設計技術和方法,以快速提高其軟體測試設計水平。
(3)對於軟體測試的研究者,本書將測試設計過程中碰到的實際問題與測試設計技術和方法緊密結合起來,為其提供全新的軟體測試設計思想。
推薦的閱讀方式
本書融合了編者10多年的測試設計實踐經驗,以一個貫穿始終的大型項目案例為背景,系統地介紹了問題驅動的軟體測試設計方法的思想。本書在介紹編者自身軟體測試設計經驗的同時,還介紹了大量的業界實踐。本書融合了國內外眾多軟體測試領域專家的測試設計思想,直接參考的文獻達上百篇。並通過腳註的形式提供,為讀者的擴展閱讀提供了方便。
如果讀者希望全面了解軟體測試設計知識,建議從頭到尾順序閱讀本書;如果暫時只對部分章節感興趣,也可以直接跳到相關章節。本書系統地介紹了各種軟體測試設計知識,讀者可以在需要了解某些測試設計技術和方法的時候回頭翻閱本書,相信書中的內容和思想一定能夠對讀者的學習和工作有所幫助。
致謝
本書的出版離不開我們成長過程中給予我們幫助的同學、同事和朋友,他們為此書的出版提供了誠懇的指導和寶貴的意見。
感謝電子工業出版社孫學瑛編輯為本書提供的寶貴意見和大力支持,本書才得以在這么短的時間內與讀者見面;同時感謝其他博文視點同事,他們的專業素質和敬業精神令我們感動。
最後要感謝我們的家人,這本書的寫作占用了大量的晚上和周末的時間。沒有他們的支持和鼓勵,這本書很難面世。
由於編者水平和時間的限制,書中難免存在錯誤和不足之處,歡迎讀者及各界同仁不吝指正。
編者
2011.2.1
目 錄
第1部分 經典測試設計
第1章 靜態測試 3
1.1 評審 4
1.1.1 評審遵循的原則 7
1.1.2 選擇合適的評審類型 8
1.1.3 案例分析:如何開展評審活動 13
1.1.4 影響評審成功的因素 19
1.2 靜態分析 21
1.2.1 基於代碼的分析 22
1.2.2 基於架構的分析 28
1.3 小結 30
第2章 基於結構的測試 31
2.1 語句測試 35
2.2 判定測試 36
2.3 條件測試 37
2.4 判定條件測試 39
2.5 條件決定測試 40
2.6 條件組合測試 43
2.7 線性代碼序列和跳轉測試 44
2.8 路徑測試 46
2.9 案例分析 48
2.9.1 實現各種測試覆蓋 48
2.9.2 圈複雜度和路徑測試 54
2.10 小結 58
第3章 基於規格說明的測試 60
3.1 等價類劃分 61
3.1.1 識別等價類 63
3.1.2 創建測試用例 64
3.1.3 覆蓋率準則 65
3.1.4 案例分析:LACP參數等價類測試 66
3.2 邊界值分析 70
3.2.1 識別等價類 70
3.2.2 識別邊界值 70
3.2.3 創建測試用例 72
3.2.4 覆蓋率準則 72
3.2.5 案例分析:LACP參數邊界值測試 72
3.3 決策表測試 76
3.3.1 確定條件樁和動作樁 77
3.3.2 初始決策表 78
3.3.3 最佳化決策表 78
3.3.4 創建測試用例 80
3.3.5 覆蓋率準則 80
3.3.6 因果圖和決策表 80
3.3.7 案例分析:ATM取款的決策表測試 81
3.4 狀態轉換測試 84
3.4.1 狀態轉換圖 84
3.4.2 測試用例 86
3.4.3 N-Switch 92
3.4.4 覆蓋率準則 93
3.4.5 案例分析:堆疊的狀態轉換測試 93
3.5 結對測試 100
3.5.1 基於正交矩陣的結對測試 102
3.5.2 Allpairs 114
3.5.3 案例分析:用戶認證系統的測試 117
3.6 分類樹方法 122
3.6.1 簡介 122
3.6.2 CTE-XL 123
3.6.3 案例分析:測試編輯器的字型屬性 132
3.7 用例/場景測試 135
3.7.1 用例的相關概念 135
3.7.2 用例規格說明 137
3.7.3 案例分析:ATM取款的用例測試 138
3.8 動態分析 141
3.8.1 記憶體泄漏 142
3.8.2 野指針 142
3.8.3 性能分析 143
3.9 案例分析:綜合套用測試技術 143
3.9.1 使用Allpairs得到測試用例 144
3.9.2 基於分類樹方法得到的測試用例 145
3.10 小結 146
第2部分 基於質量特性的測試設計
第4章 質量模型 149
4.1 McCall質量模型 149
4.1.1 軟體質量框架 150
4.1.2 軟體質量因素 151
4.1.3 軟體質量標準 152
4.1.4 軟體質量度量 154
4.2 Boehm質量模型 156
4.2.1 軟體質量特性樹 157
4.2.2 代碼質量度量 158
4.2.3 使用質量特性改進軟體生命周期 160
4.3 Dromey質量模型 161
4.3.1 質量模型框架 161
4.3.2 結構形式和產品屬性 162
4.3.3 相互間的關係 163
4.4 ISO/IEC 9126 166
4.4.1 質量模型 166
4.4.2 內部和外部質量 167
4.4.3 使用質量 170
4.4.4 軟體質量度量 171
4.5 案例分析:質量模型在測試類型定義中的套用 173
4.5.1 獲取測試類型 174
4.5.2 定義測試類型 175
4.5.3 測試類型改變了什麼 176
4.6 案例分析:測試存儲設備解決方案 180
4.6.1 方案介紹 180
4.6.2 存儲設備解決方案的測試設計 182
4.7 小結 183
第5章 功能測試 184
5.1 適合性測試 184
5.1.1 案例分析:用戶視頻點播的適合性測試 185
5.1.2 案例分析:圖書線上續借功能的適合性
測試 187
5.2 準確性測試 188
5.2.1 案例分析:網上購物系統中購物結算的
準確性測試 189
5.2.2 案例分析:計算器中的準確性測試 193
5.3 互操作性測試 194
5.3.1 案例分析:SAN卷控制器的互操作性測試 195
5.3.2 案例分析:Gmail的互操作性測試 199
5.4 安全保密性測試 201
5.4.1 案例分析:PC安全性測試 203
5.4.2 案例分析:交換機安全性測試 206
5.5 輔助性測試 208
5.5.1 案例分析:命令行的輔助性測試 209
5.5.2 案例分析:網站的輔助性測試 211
5.6 小結 214
第6章 非功能測試 216
6.1 可靠性測試 216
6.1.1 可靠性測試介紹 216
6.1.2 軟體可靠性工程測試 218
6.1.3 軟體可靠性度量 221
6.2 易用性測試 223
6.2.1 易用性測試類型 224
6.2.2 易用性測試技術 229
6.3 效率測試 231
6.3.1 效率測試的主要類型 232
6.3.2 度量軟體產品效率 234
6.4 可維護性測試 237
6.4.1 維護活動的分類 237
6.4.2 提高軟體的可維護性 240
6.5 可移植性測試 243
6.6 案例分析:DHCP的非功能測試 245
6.6.1 DHCP功能介紹 245
6.6.2 DHCP非功能測試設計 247
6.6.3 DHCP非功能測試用例概要 247
6.7 小結 248
第3部分 基於風險的測試設計
第7章 認識風險 252
7.1 基本概念 252
7.1.1 產品風險 253
7.1.2 項目風險 254
7.1.3 風險與測試 256
7.2 開展風險活動 257
7.2.1 風險識別 258
7.2.2 風險分析 263
7.2.3 風險應對 265
7.3 ISO/IEC 16805 270
7.3.1 計畫和實施風險管理 271
7.3.2 管理風險概要 272
7.3.3 執行風險分析 273
7.3.4 執行風險應對 274
7.3.5 執行風險監控 274
7.3.6 評估風險管理過程 275
7.4 小結 276
第8章 基於風險的測試設計 277
8.1 啟發式分析方法 277
8.1.1 INSIDE-OUT 278
8.1.2 OUTSIDE-IN 279
8.2 攻擊 281
8.2.1 用戶接口攻擊 282
8.2.2 系統接口攻擊 283
8.2.3 衝突測試 283
8.3 失效模式和影響分析 284
8.3.1 概述 284
8.3.2 套用領域 287
8.3.3 實現步驟 289
8.3.4 收益與成本 297
8.3.5 確定RPN 298
8.4 案例分析:綜合實施基於風險的測試設計 299
8.4.1 了解測試對象 301
8.4.2 識別失效模式 301
8.4.3 確定發生可能性 306
8.4.4 確定嚴重程度 307
8.4.5 確定檢測難度 308
8.4.6 計算RPN 308
8.4.7 設計測試用例 309
8.5 小結 310
第9章 基於風險的測試管理 312
9.1 選擇測試重點 312
9.2 選擇合適的測試策略 317
9.2.1 測試策略 317
9.2.2 案例分析:風險管理在IGMP功能中的套用 318
9.3 基於風險的測試實踐 322
9.3.1 風險與測試過程的集成 322
9.3.2 儘早開展風險活動 324
9.3.3 風險活動的疊代 325
9.4 討論:基於風險的測試 325
9.4.1 作用 325
9.4.2 優點 326
9.4.3 挑戰 330
9.5 案例分析:通過風險監控測試過程 332
9.5.1 風險相關的度量 332
9.5.2 風險在測試過程監控中的套用 333
9.6 小結 336
第4部分 基於經驗的測試設計
第10章 基於缺陷分類的測試 339
10.1 軟體缺陷分類 340
10.1.1 異常分類 340
10.1.2 正交缺陷分類 344
10.1.3 其他分類 347
10.2 實施基於缺陷分類的測試 351
10.2.1 缺陷分類的作用 351
10.2.2 激發測試思想 352
10.2.3 創建缺陷分類 355
10.3 案例分析:缺陷分類在測試設計中的套用 357
10.3.1 獲取功能基本信息 357
10.3.2 獲取缺陷分類 358
10.3.3 評審和改進 360
10.3.4 測試用例設計和實現 361
10.4 小結 361
第11章 探索性測試 362
11.1 概述 363
11.1.1 測試的本質 363
11.1.2 腳本化測試的問題 364
11.1.3 探索性測試的引入 368
11.2 實施探索性測試 370
11.2.1 學習 371
11.2.2 設計 374
11.2.3 執行 376
11.2.4 結果分析 377
11.2.5 探索性測試人員 378
11.3 基於會話的測試管理 378
11.3.1 會話與會話管理 379
11.3.2 度量和估算 383
11.3.3 面臨的挑戰 385
11.4 案例分析:HTSM 387
11.4.1 什麼是HTSM 387
11.4.2 套用HTSM 392
11.5 小結 395
第12章 基於套用類型的測試 397
12.1 基於Web的測試 397
12.1.1 Web系統組成 399
12.1.2 客戶端測試 401
12.1.3 伺服器端測試 402
12.2 GUI測試 404
12.2.1 GUI的特點 404
12.2.2 Rational Functional Tester 405
12.3 協定一致性測試 406
12.3.1 多種不同協定 407
12.3.2 TTCN在協定一致性測試中的套用 410
12.4 安全關鍵系統測試 411
12.4.1 安全關鍵系統 411
12.4.2 主要特徵 412
12.4.3 測試安全關鍵系統的注意事項 413
12.5 綜合系統測試 416
12.5.1 綜合系統 416
12.5.2 主要特徵 418
12.5.3 測試綜合系統的注意事項 419
12.6 小結 421
參考文獻 422
實例目錄
第1章 靜態測試 3
例1-1 “IGMP系統需求規格說明”評審邀請信 15
例1-2 “IGMP系統需求規格
說明”審查收集的數據 18
例1-3 C++編碼標準命名規則(方法和函式命名) 27
第2章 基於結構的測試 31
例2-1 程式代碼到控制流圖的轉換 33
第3章 基於規格說明的測試 60
例3-1 發放年終獎 62
例3-2 判斷三角形類型 77
例3-3 某航空公司的訂票系統 84
例3-4 測試某網站系統 100
第4章 質量模型 149
例4-1 不同軟體的質量比較 150
例4-2 軟體質量因素之間的聯繫 154
例4-3 對比型度量 154
例4-4 度量指標評估 159
例4-5 準確性內部度量 171
例4-6 安全保密性外部度量 172
例4-7 有效性使用度量 172
第6章 非功能測試 216
例6-1 某醫院門診信息管理系統的可靠性測試 220
例6-2 圖書館信息系統運行概況 222
例6-3 Bridge模式和設定MAC
老化時間的易用性測試 224
例6-4 Bridge不同模式術語的不一致 225
例6-5 軟體產品輸入和輸出的易理解性問題 225
例6-6 DHCP配置的易學性問題 226
例6-7 系統安裝步驟過於複雜 226
例6-8 幫助信息不清晰 226
例6-9 CLI命令格式不一致 227
例6-10 無法批量更改連線埠屬性 227
例6-11 選擇參數問題 228
例6-12 創建密碼時的易用性驗證 231
例6-13 IBM提供的維護活動(部分) 240
例6-14 系統需求規格說明的可維護性要求 243
例6-15 不同CPU架構的位元組順序 244
第7章 認識風險 252
例7-1 風險的可能性與風險的嚴重程度 253
例7-2 產品風險列表 254
例7-3 風險問卷調查法 259
例7-4 風險模板 260
第8章 基於風險的測試設計 277
例8-1 INSIDE-OUT的模擬場景 278
例8-2 質量特性列表 280
例8-3 通用風險列表 280
例8-4 測試邊界值 282
例8-5 印表機的衝突測試 283
第9章 基於風險的測試管理 312
例9-1 基於潛在風險列表選擇測試重點 313
例9-2 基於最佳化的風險級別選擇測試重點 315
例9-3 沒有及時應對“採購IGMP測試儀表”風險而導致的影響 324
第10章 基於缺陷分類的測試 339
例10-1 按發現的項目階段分類缺陷 340
例10-2 按嚴重程度分類缺陷 340
例10-3 按優先權分類缺陷 341
例10-4 當“目標”為“需求/設計/代碼”時對應的缺陷類型 345
例10-5 缺陷分類如何拓寬測試人員的測試思想 353
第11章 探索性測試 362
例11-1 不同的利益相關者對軟體產品質量的理解不同 364
例11-2 環境驅動的測試 366
例11-3 腳本化測試與探索性測試 369
例11-4 探索性測試 370
例11-5 規格說明中的模糊問題 373
例11-6 規格說明中的可測試性問題 374
例11-7 何時應該根據失效設計測試用例 375
例11-8 如何通過失效設計測試用例 375
例11-9 結對測試 376
例11-10 測試用例執行結果判斷準則 377
例11-11 測試章程 380
例11-12 測試章程相關的活動和非測試章程相關的活動 381
例11-13 針對光電轉換模組SFP的測試會話報告 382
例11-14 根據平均會話數目估算測試工作量 384
第12章 基於套用類型的測試 397
例12-1 不同瀏覽器對同一Web頁面的解析 398
例12-2 selenium 403
例12-3 IBM® Rational® TTCN Suite 411
例12-4 企業級存儲設備 412
例12-5 FDA對軟體開發活動的要求 414
例12-6 安全關鍵系統組件 416
例12-7 未來作戰系統 417