本書是經(jīng)典的軟件測試教材,也可作為軟件測試者、開發(fā)者和工程師的參考書。書中對基礎(chǔ)知識、方法提供了系統(tǒng)的綜合闡述,既涉及基于模型的開發(fā),又介紹了測試驅(qū)動的開發(fā),做到了理論與實踐的完美結(jié)合,反映了軟件標準和開發(fā)的新進展和變化。
Software Testing:A Craftsman’s Approach,Fourth Edition此次再版,我們增加了四章新內(nèi)容,同時更加深入地討論了基于路徑的測試,從而拓展了本書18年以來一直側(cè)重基于模型測試的傳統(tǒng)。此前本書已經(jīng)再版三次,經(jīng)過了18年的教學和業(yè)界使用的檢驗。借助精心挑選的簡單易懂的實例,本書把理論與實踐緊密地結(jié)合在一起。此外,很多第3版中的內(nèi)容被合并、重組在一起,使全書內(nèi)容更加簡潔流暢。把很多面向?qū)ο筌浖䴗y試的內(nèi)容和過程軟件測試(procedural software testing)整合在一起形成了一個有機的整體。還有就是針對美國聯(lián)邦航空管理局和美國國防部有關(guān)標準的要求,在“路徑測試”一章中擴充了復雜條件測試(complex condition testing)和修正的條件判定覆蓋率(modified condition decision coverage)指標等內(nèi)容。
這一版新增加的章節(jié)如下:
軟件技術(shù)評審(第22章)。側(cè)重軟件技術(shù)檢驗,這實際上被視為“靜態(tài)測試”,而本書的前三版一直側(cè)重于討論如何利用精心挑選的測試用例來執(zhí)行代碼的“動態(tài)測試”。本章內(nèi)容實際上來自一個軟件開發(fā)公司20多年來的產(chǎn)業(yè)實踐經(jīng)驗,該公司具有完善的技術(shù)評審流程。
附錄。附錄中給出了一套完整的用例集(采用UML),可以針對典型的客戶需求實現(xiàn)實際產(chǎn)業(yè)開發(fā)所要求的技術(shù)檢驗。其中包括用例標準、用例故障嚴重程度定義、潛在問題的技術(shù)檢驗事項表,以及典型評審報告和最終報告的格式文檔。
基于模型的綜合系統(tǒng)測試(第17章)。由系統(tǒng)構(gòu)成復雜系統(tǒng)的問題相對還是較新的(始于1999年)。軟件測試從業(yè)人員現(xiàn)在是在追隨幾位大學研究人員的步伐,主要關(guān)注如何界定一個由若干系統(tǒng)構(gòu)成的復雜系統(tǒng)。這一章介紹了“泳道事件驅(qū)動Petri網(wǎng)”,在表達能力上接近著名的狀態(tài)圖方法。有了它就可以對復雜系統(tǒng)實施基于模型的測試。
軟件復雜度(第16章)。目前大部分文獻都僅考察了在單元層面上的圈復雜度(cyclomatic,也稱為McCabe)。本章從兩個方面拓展了對單元層面復雜度的考量,引進了兩種集成層面上的復雜度。對面向?qū)ο缶幊毯拖到y(tǒng)層面的測試來說,需要涉及對復雜度的處理。在任何層面上,對復雜度的考量都是提升設(shè)計、編碼、測試和維護工作的重要手段。保持一種一致的軟件復雜度表述,對每個階段都有很大的促進作用。
測試用例的評估(第21章)。新增的這一章要研究一個難題:如何評估一個測試用例集?測試覆蓋性是長期以來為人所接受的指標,但是其中總有一定程度的不確定性。古羅馬關(guān)于“誰來守衛(wèi)衛(wèi)兵”的問題,在此變成了“誰來評估測試”的問題。十幾年來,變異測試(mutation testing)逐漸成為一種解決方案,所以本章對其效果和貢獻進行了介紹,同時也介紹了另外兩種方法:漏洞挖掘(fuzzing)和故障注入(fault insertion)。
做了47年的軟件開發(fā)人員和大學教授,我認為自己的軟件測試知識既有深度也有廣度。在大學里,我一直在數(shù)學系和計算機系授課,同時我還有20多年的工業(yè)軟件開發(fā)和管理經(jīng)驗,這些經(jīng)歷使我能夠很好地編寫和改進我的軟件測試教程并不斷加深對于軟件測試的理解。在我講到書本以外的內(nèi)容時,我經(jīng)常會不斷地產(chǎn)生新的看法。所以,我把本書的出版視為我對軟件測試領(lǐng)域做出的一點貢獻。最后,我還要感謝我的三位同事Roger Ferguson博士、Jagadeesh Nandigam博士和Christian Trefftz博士,感謝他們在面向?qū)ο鬁y試這幾章的撰寫中給予我的巨大幫助。
非常感謝!
Paul C.Jorgensen于密歇根州羅克福德市
paul c.jorgensen博士,在其職業(yè)生涯的前20年中,主要從事電話交換系統(tǒng)的開發(fā)、支持和測試工作。1986年以來,他一直在大學為研究生講授軟件工程課程,先是亞利桑那州立大學,然后在大峽谷州立大學。
目 錄
Software Testing: A Craftsman’s Approach, Fourth Edition
出版者的話
譯者序
前言
第一部分 數(shù)學基礎(chǔ)
第1章 測試概述 2
1.1 基本概念 2
1.2 測試用例 3
1.3 利用維恩圖來理解軟件測試 3
1.4 構(gòu)造測試用例 4
1.4.1 基于規(guī)格說明的測試 5
1.4.2 基于代碼的測試 5
1.4.3 兩種測試方法的對比 6
1.5 故障的分類 7
1.6 測試的層次 8
1.7 習題 8
1.8 參考文獻 8
第2章 程序示例 9
2.1 通用偽代碼 9
2.2 三角形問題 10
2.2.1 問題描述 10
2.2.2 三角形問題的討論 11
2.2.3 三角形問題的經(jīng)典實現(xiàn) 11
2.2.4 三角形問題的結(jié)構(gòu)化實現(xiàn) 14
2.3 NextDate日期函數(shù) 15
2.3.1 問題描述 15
2.3.2 NextDate函數(shù)的討論 16
2.3.3 NextDate函數(shù)的實現(xiàn) 16
2.4 傭金問題 18
2.4.1 問題描述 18
2.4.2 傭金問題的討論 19
2.4.3 傭金問題的實現(xiàn) 19
2.5 SATM系統(tǒng) 20
2.5.1 問題描述 20
2.5.2 SATM系統(tǒng)的討論 21
2.6 貨幣兌換計算器 22
2.7 雨刷控制器 22
2.8 車庫門遙控開關(guān) 22
2.9 習題 23
2.10 參考文獻 24
第3章 面向測試人員的離散數(shù)學 25
3.1 集合論 25
3.1.1 集合的成員關(guān)系 25
3.1.2 集合的定義方法 25
3.1.3 空集 26
3.1.4 集合的維恩圖 26
3.1.5 集合運算 27
3.1.6 集合關(guān)系 28
3.1.7 集合劃分 29
3.1.8 集合恒等 29
3.2 函數(shù) 30
3.2.1 定義域與值域 30
3.2.2 函數(shù)類型 30
3.2.3 函數(shù)復合 31
3.3 關(guān)系 32
3.3.1 集合之間的關(guān)系 32
3.3.2 單個集合上的關(guān)系 33
3.4 命題邏輯 34
3.4.1 邏輯運算符 34
3.4.2 邏輯表達式 35
3.4.3 邏輯等價 35
3.5 概率論 36
3.6 習題 37
3.7 參考文獻 37
第4章 面向測試人員的圖論 38
4.1 圖 38
4.1.1 節(jié)點的度 38
4.1.2 關(guān)聯(lián)矩陣 39
4.1.3 鄰接矩陣 39
4.1.4 路徑 40
4.1.5 連通性 40
4.1.6 壓縮圖 41
4.1.7 圈數(shù) 41
4.2 有向圖 41
4.2.1 入度與出度 42
4.2.2 節(jié)點類型 42
4.2.3 有向圖的鄰接矩陣 43
4.2.4 路徑與半路徑 43
4.2.5 可達矩陣 44
4.2.6 n連通性 44
4.2.7 強分圖 44
4.3 軟件測試中常用的圖 45
4.3.1 程序圖 45
4.3.2 有限狀態(tài)機 46
4.3.3 Petri網(wǎng) 47
4.3.4 事件驅(qū)動Petri網(wǎng) 49
4.3.5 狀態(tài)圖 50
4.4 習題 52
4.5 參考文獻 52
第二部分 單元測試
第5章 邊界值測試 54
5.1 邊界值分析 54
5.1.1 邊界值分析的拓展 55
5.1.2 邊界值分析的局限性 56
5.2 健壯性測試 56
5.3 最壞情況測試 57
5.4 特殊值測試 57
5.5 示例 58
5.5.1 三角形問題的測試用例 58
5.5.2 NextDate函數(shù)的測試用例 59
5.5.3 傭金問題的測試用例 60
5.6 隨機測試 62
5.7 邊界值測試的原則 63
5.8 習題 65
第6章 等價類測試 66
6.1 等價類 66
6.2 傳統(tǒng)的等價類測試 66
6.3 改進的等價類測試 67
6.3.1 弱一般等價類測試 68
6.3.2 強一般等價類測試 68
6.3.3 弱健壯等價類測試 68
6.3.4 強健壯等價類測試 69
6.4 三角形問題的等價類測試用例 69
6.5 NextDate函數(shù)的等價類測試用例 71
6.6 傭金問題的等價類測試用例 73
6.7 邊緣測試 75
6.8 原則與注意事項 75
6.9 習題 76
6.10 參考文獻 76
第7章 基于決策表的測試 77
7.1 決策表 77
7.2 決策表使用技巧 77
7.3 三角形問題的測試用例 80
7.4 Next Date函數(shù)的測試用例 81
7.4.1 第一輪嘗試 81
7.4.2 第二輪嘗試 82
7.4.3 第三輪嘗試 83
7.5 傭金問題的測試用例 85
7.6 因果關(guān)系圖 85
7.7 原則與注意事項 86
7.8 習題 87
7.9 參考文獻 87
第8章 路徑測試 88
8.1 程序圖 88
8.2 DD路徑 90
8.3 測試覆蓋指標 92
8.3.1 基于程序圖的覆蓋度量方法 92
8.3.2 E. F. Miller的覆蓋度量方法 92
8.3.3 復合條件下的閉合路徑 95
8.3.4 示例 96
8.3.5 測試覆蓋分析器 99
8.4 基路徑測試 99
8.4.1 McCabe的基路徑方法 100
8.4.2 McCabe基路徑方法的考慮 102
8.4.3 McCabe方法的基本復雜度 103
8.5 原則與注意事項 105
8.6 習題 105
8.7 參考文獻 106
第9章 數(shù)據(jù)流測試 107
9.1 定義/使用測試 107
9.1.1 舉例 108
9.1.2 stocks的定義使用路徑 110
9.1.3 locks的定義使用路徑 110
9.1.4 totalLocks的定義使用路徑 113
9.1.5 sales的定義使用路徑 113
9.1.6 commission的定義使用路徑 115
9.1.7 定義使用路徑的測試覆蓋指標 115
9.1.8 面向?qū)ο缶幋a的定義/使用測試 116
9.2 基于程序切片的測試 116
9.2.1 舉例 118
9.2.2 風格與技術(shù) 122
9.2.3 切片拼接 123
9.3 程序切片工具 124
9.4 習題 125
9.5 參考文獻 125
第10章 單元測試回顧 126
10.1 測試方法的搖擺 126
10.2 測試方法搖擺問題探索 128
10.3 用于評估測試方法的指標 131
10.4 重新