軟體測試:第3版

軟體測試:第3版

《軟體測試第3版》是2011年人民郵電出版社出版的圖書,作者是(美)PaulC.Jorgensen。

基本信息

內容簡介

《軟體測試:第3版》是經典的軟體測試教材。書中對基礎知識、方法提供了系統的綜合闡述,既涉及基於模型的開發又介紹測試驅動的開發,做到了理論與實踐的完美結合,反映了軟體標準和開發的最新進展和變化。

《軟體測試:第3版》適合作為高等院校計算機學院及軟體學院相關專業軟體測試課程的教材,也是軟體測試領域技術人員的理想參考書。

譯者序

很長時間以來,我們一直關注著軟體測試技術的發展。工作在計算機科學與技術領域中,如何確保軟體產品在實際工作中“不出錯”,是我們時刻都要面對的一個非常現實的問題。目前大量關於軟體測試方面的專著和教材已經面市,從中可以看到許多不同的測試原理與測試方法。如何科學地選擇和運用這些測試原理與技術,在很大程度上取決於個人的經驗。同時,對諸如如何評價軟體測試的結果,測試後的軟體是否還有殘留缺陷,殘留的缺陷對軟體有何影響等問題,目前還沒有一個統一的評估標準。因此,我們認為,軟體開發人員應該是軟體測試的行家,軟體測試人員也應該是軟體開發的高手。在大力培養軟體開發人才的同時大力培養軟體測試人才,並特別重視其對科學的思維方式的培養,對軟體行業的發展至關重要。

原書是作者在總結長期從事軟體設計、開發與測試工作經驗的基礎上,融合近年在軟體測試教學工作中的心得體會而寫成的。本書是第3版,較前兩版最主要的改動是增加了在更高層次上對軟體測試整體策略的全面討論。本書的重要特點是:對軟體測試理論與技術的介紹層次分明、全面精當;以若干實例為線索展開內容,循序漸進,便於讀者掌握;在很多章節的最後,還提供深入的對比和討論,總結了在軟體測試中普遍存在的實際問題,精闢深刻;此外,原書在語言上不拘一格,多有詼諧之處,這也是我們翻譯過程中所要面對的一項挑戰。

在翻譯過程中,我們在忠實於原文的同時,針對軟體測試工作所涉及的各種理論與技術進行了整理和推敲,對基礎理論和技術概念儘可能採用相關學科的主流說法,對新技術和新名詞儘可能使用業界當前流行的說法,以期使全書更易於理解、更標準和更科學;對作者舉例時講述的故事,則力求通俗流暢,保持原書的韻味。

《軟體測試:第3版》由李海峰翻譯第1~10章和第21~23章,馬琳翻譯第11~20章、第24章和第25章,李海峰對全書進行了審校和潤色。在翻譯工作中我們借鑑了《軟體測試:第3版》前兩版和其他同類著作,在此我們向其作譯者表示深深的謝意。對人民郵電出版社編輯的艱苦工作和大力支持表示深深的感謝。

好作品必然是經過了反覆修改才日臻完善的。由於時間有限,加上譯者的知識水平和實際工作經驗有限,不當之處在所難免,懇請讀者和同行批評指正,提出寶貴意見。

海峰馬琳

2010年10月於哈工大

目錄

第一部分 數學基礎

第1章 測試概述 2

1.1 基本概念 2

1.2 測試用例 3

1.3 通過維恩圖來考察測試 4

1.4 構造測試用例 5

1.4.1 功能測試 6

1.4.2 結構測試 7

1.4.3 功能測試與結構測試之爭 7

1.5 錯誤與故障差異 8

1.6 測試的層次 10

參考文獻 11

習題 11

第2章 程式示例 12

2.1 通用偽代碼 12

2.2 三角形問題 13

2.2.1 問題描述 13

2.2.2 三角形問題的討論 14

2.2.3 三角形問題的經典實現 14

.2.2.4 三角形問題的結構化實現 16

2.3 nextdate函式 18

2.3.1 問題描述 18

2.3.2 nextdate函式的討論 18

2.3.3 nextdate函式的實現 19

2.4 佣金問題 21

2.4.1 問題描述 21

2.4.2 佣金問題的討論 22

2.4.3 佣金問題的實現 22

2.5 satm系統 23

2.5.1 問題描述 23

2.5.2 satm系統的討論 25

2.6 貨幣轉換器 25

2.7 雨刷控制器 26

參考文獻 26

習題 26

第3章 測試人員的離散數學 28

3.1 集合論 28

3.1.1 集合的成員關係 28

3.1.2 集合的定義方法 28

3.1.3 空集 29

3.1.4 集合的維恩圖 29

3.1.5 集合運算 30

3.1.6 集合關係 32

3.1.7 集合劃分 32

3.1.8 集合恆等 33

3.2 函式 33

3.2.1 定義域與值域 34

3.2.2 函式的類型 34

3.2.3 函式複合 35

3.3 關係 36

3.3.1 集合之間的關係 36

3.3.2 單個集合上的關係 37

3.4 命題邏輯 38

3.4.1 邏輯運算符 39

3.4.2 邏輯表達式 39

3.4.3 邏輯等價 40

3.5 機率論 40

參考文獻 41

習題 42

第4章 測試人員的圖論 43

4.1 圖 43

4.1.1 節點的度 44

4.1.2 關聯矩陣 44

4.1.3 鄰接矩陣 45

4.1.4 路徑 45

4.1.5 連通性 46

4.1.6 壓縮圖 46

4.1.7 圈數 46

4.2 有向圖 47

4.2.1 入度與出度 48

4.2.2 節點類型 48

4.2.3 有向圖的鄰接矩陣 48

4.2.4 路徑與半路徑 49

4.2.5 可達矩陣 49

4.2.6 n連通性 50

4.2.7 強分圖 50

4.3 軟體測試中常用的圖 51

4.3.1 程式圖 51

4.3.2 有限狀態機 52

4.3.3 petri網 53

4.3.4 事件驅動petri網 55

4.3.5 狀態圖 57

參考文獻 58

習題 58

第二部分 功能測試

第5章 邊界值測試 62

5.1 邊界值分析 62

5.1.1 邊界值分析的拓展 63

5.1.2 邊界值分析的局限性 64

5.2 健壯性測試 64

5.3 最壞情況測試 65

5.4 特殊值測試 66

5.5 示例 66

5.5.1 三角形問題的測試用例 66

5.5.2 nextdate函式的測試用例 68

5.5.3 佣金問題的測試用例 68

5.6 隨機測試 70

5.7 邊界值測試的原則 72

習題 72

第6章 等價類測試 73

6.1 等價類 73

6.1.1 弱一般等價類測試 74

6.1.2 強一般等價類測試 74

6.1.3 弱健壯等價類測試 74

6.1.4 強健壯等價類測試 75

6.2 三角形問題的等價類測試用例 75

6.3 nextdate函式的等價類測試用例 77

6.4 佣金問題的等價類測試用例 80

6.5 原則與注意事項 82

參考文獻 82

習題 82

第7章 基於決策表的測試 84

7.1 決策表 84

7.2 三角形問題的測試用例 88

7.3 nextdate函式的測試用例 88

7.3.1 第一輪嘗試 88

7.3.2 第二輪嘗試 89

7.3.3 第三輪嘗試 90

7.4 佣金問題的測試用例 92

7.5 原則與注意事項 93

參考文獻 93

習題 93

第8章 功能測試回顧 94

8.1 測試的工作量 94

8.2 測試的效率 96

8.3 測試的有效性 97

8.4 原則 98

8.5 案例研究 99

第三部分 結構測試

第9章 路徑測試 104

9.1 dd路徑 106

9.2 測試覆蓋指標 108

9.2.1 基於指標的測試 108

9.2.2 測試覆蓋分析器 110

9.3 基路徑測試 110

9.3.1 mccabe的基路徑方法 111

9.3.2 mccabe基路徑方法的注意事項 113

9.3.3 mccabe方法的基本複雜度 114

9.4 原則與注意事項 117

參考文獻 118

習題 118

第10章 數據流測試 120

10.1 定義/使用測試 120

10.1.1 舉例 121

10.1.2 stocks的定義使用路徑 125

10.1.3 locks的定義使用路徑 125

10.1.4 totallocks的定義使用路徑 125

10.1.5 sales的定義使用路徑 126

10.1.6 commission的定義使用路徑 126

10.1.7 定義使用路徑的測試覆蓋指標 127

10.2 基於片的測試 128

10.2.1 舉例 129

10.2.2 風格與方法 132

10.3 原則與注意事項 133

參考文獻 134

習題 134

第11章 結構測試回顧 135

11.1 缺漏與冗餘 135

11.2 用於評估測試方法的指標 137

11.3 重新修訂的案例研究 139

11.3.1 基於路徑的測試 141

11.3.2 數據流測試 141

11.3.3 片測試 141

參考文獻 142

習題 142

第四部分 集成測試和系統測試

第12章 測試的層次 144

12.1 測試層次劃分的傳統觀點 144

12.2 其他生命周期模型 145

12.2.1 瀑布模型的變體 146

12.2.2 基於規格說明的生命周期模型 147

12.3 satm系統 149

12.4 將集成測試與系統測試分開 157

12.4.1 從結構角度分析 158

12.4.2 從行為角度分析 159

參考文獻 159

第13章 集成測試 160

13.1 深入研究satm系統 160

13.2 基於功能分解的集成 164

13.2.1 自頂向下集成 164

13.2.2 自底向上集成 166

13.2.3 三明治集成 166

13.2.4 優缺點 167

13.3 基於調用圖的集成 167

13.3.1 成對集成 167

13.3.2 相鄰集成 168

13.3.3 基於調用圖集成的優缺點 169

13.4 基於路徑的集成 170

13.4.1 新概念與擴展概念 170

13.4.2 satm系統中的mm路徑 172

13.4.3 mm路徑複雜度 176

13.4.4 基於路徑集成技術的優缺點 177

13.5 案例分析 177

13.5.1 基於分解的集成 181

13.5.2 基於調用圖的集成 181

13.5.3 基於mm路徑的集成 181

參考文獻 182

習題 182

第14章 系統測試 184

14.1 線索 184

14.1.1 線索存在的可能性 185

14.1.2 線索定義 186

14.2 需求規格說明的基本概念 187

14.2.1 數據 187

14.2.2 行為 188

14.2.3 設備 188

14.2.4 事件 188

14.2.5 線索 189

14.2.6 基本概念之間的關係 189

14.2.7 利用基本概念建模 189

14.3 尋找線索 190

14.4 線索測試的結構策略 193

14.4.1 自底向上組織線索 194

14.4.2 節點與邊覆蓋指標 194

14.5 線索測試的功能策略 196

14.5.1 基於事件的線索測試 196

14.5.2 基於連線埠的線索測試 197

14.5.3 基於數據的線索測試 197

14.6 satm測試線索 199

14.7 系統測試原則 203

14.7.1 偽結構系統測試 203

14.7.2 性能分析 204

14.7.3 累進測試與回歸測試 206

14.8 asf測試示例 206

參考文獻 208

習題 208

第15章 互動性測試 209

15.1 互動的語境 209

15.2 互動的分類 211

15.2.1 單處理器中的靜態互動 211

15.2.2 多處理器中的靜態互動 212

15.2.3 單處理器中的動態互動 213

15.2.4 多處理器中的動態互動 217

15.3 線索的互動、合成和確定性 223

15.4 客戶/伺服器系統的測試 224

參考文獻 225

習題 226

第五部分 面向對象測試

第16章 面向對象測試的相關問題 228

16.1 面向對象測試的單元 228

16.2 合成與封裝的含義 229

16.3 繼承的含義 230

16.4 多態性的含義 231

16.5 面向對象測試的層次 232

16.6 gui測試 232

16.7 面向對象軟體的數據流測試 232

16.8 第五部分所採用的示例 232

16.8.1 面向對象的日曆程式 232

16.8.2 貨幣轉換應用程式 234

參考文獻 238

習題 238

第17章 類測試 239

17.1 以方法為單元的測試 239

17.1.1 o-ocalendar 的偽代碼 240

17.1.2 date.increment 的單元測試 244

17.2 以類為單元的測試 245

17.2.1 windshieldwiper類的偽代碼 245

17.2.2 windshieldwiper類的單元測試 246

第18章 面向對象的集成測試 250

18.1 uml對集成測試的支持 250

18.2 面向對象軟體的mm路徑 252

18.3 面向對象數據流集成測試的框架 259

18.3.1 事件驅動和訊息驅動的petri網 259

18.3.2 由繼承導出的數據流 260

18.3.3 由訊息導出的數據流 261

18.3.4 是否需要片 261

參考文獻 261

習題 262

第19章 gui測試 264

19.1 貨幣轉換程式 264

19.2 貨幣轉換程式的單元測試 264

19.3 貨幣轉換程式的集成測試 265

19.4 貨幣轉換程式的系統測試 267

習題 272

第20章 面向對象的系統測試 273

20.1 貨幣轉換器的uml描述 273

20.1.1 問題陳述 273

20.1.2 系統功能 273

20.1.3 表示層 274

20.1.4 高層用例 274

20.1.5 基本用例 275

20.1.6 詳細的gui定義 276

20.1.7 擴展的基本用例 276

20.1.8 真實用例 279

20.2 基於uml的系統測試 280

20.3 基於狀態圖的系統測試 282

參考文獻 282

第六部分 新興測試技術

第21章 探索式測試 284

21.1 上下文驅動學派 284

21.2 探索式測試 285

21.3 探索一個常見示例 287

21.4 探索式測試與上下文驅動測試探討 288

參考文獻 289

習題 289

第22章 基於模型測試 290

22.1 基於模型進行測試 290

22.2 恰當的系統模型 290

22.2.1 peterson格 291

22.2.2 主流模型的表達能力 292

22.2.3 選擇恰當的模型 292

22.3 基於用例的測試 293

22.3.1 從用例中推導出測試用例 293

22.3.2 互動用例 294

22.3.3 需要多少用例 295

22.4 支持基於模型的測試的商用工具 295

參考文獻 296

第23章 測試驅動開發 297

23.1 “測試然後編碼”的軟體開發周期 297

23.2 自動化測試執行(測試框架) 304

23.3 java和junit示例 305

23.3.1 java原始碼 306

23.3.2 junit測試代碼 307

23.4 其他待解決的問題 308

23.4.1 基於規格說明還是基於代碼 308

23.4.2 需要配置管理嗎 309

23.4.3 粒度應該多大 309

23.5 測試驅動開發的優缺點及其他相關問題 310

23.6 模型驅動開發與測試驅動開發對比 311

第24章 全對測試詳述 315

24.1 全對測試技術 315

24.1.1 程式輸入 316

24.1.2 獨立變數 317

24.1.3 輸入的順序 319

24.1.4 完全由輸入所引發的失效 322

24.2 對nist研究成果的進一步分析 322

24.3 全對測試的適用範圍 323

24.4 對全對測試的建議 324

參考文獻 324

第25章 尾聲:軟體測試精益求精 325

25.1 軟體測試是一種技藝 325

25.2 軟體測試的最佳實踐 326

25.3 讓軟體測試更出色的10項最佳實踐 327

25.3.1 模型驅動開發 327

25.3.2 慎重地定義與劃分測試的層次 327

25.3.3 基於模型的系統級測試 328

25.3.4 系統測試的擴展 328

25.3.5 利用關聯矩陣指導回歸測試 328

25.3.6 利用mm路徑實現集成測試 328

25.3.7 把基於規格說明的測試和基於代碼的單元級測試有機地結合起來 328

25.3.8 基於單個單元特性的代碼覆蓋指標 329

25.3.9 維護階段的探索式測試 329

25.3.10 測試驅動開發 329

25.4 針對不同項目實現最佳實踐 329

25.4.1 任務關鍵型項目 329

25.4.2 時間關鍵型項目 330

25.4.3 對遺留代碼的糾錯維護 330

相關詞條

相關搜尋

熱門詞條

聯絡我們