本書從開發(fā)者測(cè)試的角度,介紹了軟件測(cè)試的產(chǎn)生與發(fā)展以及開發(fā)者與測(cè)試的關(guān)系;講述了程序靜態(tài)分析、邏輯覆蓋測(cè)試、程序插樁與變異測(cè)試等開發(fā)者需要掌握的測(cè)試方法和技術(shù);結(jié)合示例講解了單元測(cè)試、集成測(cè)試中開發(fā)者應(yīng)當(dāng)要能發(fā)現(xiàn)和避免的各種問題;由淺入深,介紹了測(cè)試工具JUnit的使用;*后介紹了由慕測(cè)科技提供的開發(fā)者測(cè)試平臺(tái)和全國(guó)大學(xué)生軟件測(cè)試大賽。
當(dāng)前,信息需求的持續(xù)增長(zhǎng)和信息技術(shù)的快速發(fā)展加快了軟件產(chǎn)品的研發(fā)速度,同時(shí)也大大增加了軟件產(chǎn)品的測(cè)試壓力。以互聯(lián)網(wǎng)、移動(dòng)應(yīng)用等產(chǎn)品為例,眾多軟件公司普遍采用微小改進(jìn)、快速迭代、反饋收集、及時(shí)響應(yīng)等手段來提高軟件的迭代速度,縮短軟件產(chǎn)品的發(fā)布流程。顯然,僅僅依賴測(cè)試人員已經(jīng)難以滿足市場(chǎng)和客戶對(duì)產(chǎn)品質(zhì)量的需求,這就要求開發(fā)人員也深入?yún)⑴c到軟件測(cè)試過程中,與測(cè)試人員共同完成軟件產(chǎn)品的質(zhì)量保證工作。在本書中,我們定義由開發(fā)者承擔(dān)的與代碼相關(guān)的軟件測(cè)試工作為開發(fā)者測(cè)試。
本書從開發(fā)者測(cè)試出現(xiàn)的背景與意義、開發(fā)者所應(yīng)掌握的基本和高級(jí)程序分析方法以及軟件測(cè)試技術(shù)、開發(fā)者所應(yīng)掌握的軟件測(cè)試分析輔助工具、用于開發(fā)者測(cè)試教學(xué)和競(jìng)賽的慕測(cè)平臺(tái)等多個(gè)方面對(duì)開發(fā)者測(cè)試進(jìn)行系統(tǒng)性介紹。相信通過本書的學(xué)習(xí),讀者可以對(duì)開發(fā)者參與測(cè)試的必要性、開發(fā)者測(cè)試所涵蓋的內(nèi)容有初步的認(rèn)識(shí)和了解,同時(shí)能夠結(jié)合本書的示例及平臺(tái)鍛煉自己的測(cè)試能力。
本書適用于兩類不同的讀者:1)在高等院校學(xué)習(xí)和工作的教師和學(xué)生,本書有助于他們理解和認(rèn)識(shí)測(cè)試工作承擔(dān)者的責(zé)任,并為他們學(xué)習(xí)和鍛煉自身的測(cè)試能力提供方向和平臺(tái);2)軟件產(chǎn)業(yè)的開發(fā)人員、測(cè)試人員和管理人員,本書有助于他們認(rèn)識(shí)開發(fā)者在測(cè)試工作中的重要性和所應(yīng)承擔(dān)的工作內(nèi)容,以及開發(fā)者所應(yīng)具備的測(cè)試技能。
本書講述的方法是通用的,可以用于測(cè)試任何類型的計(jì)算機(jī)軟件。但是,為了使讀者更好地理解和學(xué)習(xí)本書的開發(fā)者測(cè)試方法,本書提供了大量Java示例代碼以及面向Java的程序分析、測(cè)試工具。這些示例和工具可以在任何支持Java的操作系統(tǒng)(如Windows、Linux、Mac)、開發(fā)環(huán)境(如Eclipse、IntelliJ、Sublime Text)中開發(fā)、測(cè)試和運(yùn)行。
本書共包含8章及一個(gè)附錄,除第7章與第8章外,其他章節(jié)的內(nèi)容互不相關(guān),因而讀者可選擇其中部分章節(jié)進(jìn)行閱讀。
第1章:開發(fā)者測(cè)試概述。本章在研究和分析開發(fā)者與軟件測(cè)試關(guān)系的基礎(chǔ)上,介紹了開發(fā)者測(cè)試的定義、背景與意義。同時(shí),本章還從靜態(tài)測(cè)試與動(dòng)態(tài)測(cè)試、白盒測(cè)試與黑盒測(cè)試、不同測(cè)試工具間的對(duì)比中分析得到開發(fā)者測(cè)試所涉及的方法、技術(shù)與工具。此外,本章還討論了開發(fā)者測(cè)試技術(shù)未來的趨勢(shì),并介紹了支持開發(fā)者測(cè)試教學(xué)與競(jìng)賽的慕測(cè)平臺(tái)。
第2章:程序靜態(tài)分析。本章對(duì)軟件靜態(tài)測(cè)試的基礎(chǔ)程序靜態(tài)分析方法進(jìn)行了介紹。通過代碼評(píng)審、結(jié)構(gòu)分析等方法可以有效地檢測(cè)出程序中的邏輯錯(cuò)誤,而程序流程分析(如控制流分析、數(shù)據(jù)流分析)則可以更細(xì)粒度地反映程序中語句間、變量間的關(guān)聯(lián)。此外,本章還介紹了輔助程序正確性證明的靜態(tài)/動(dòng)態(tài)符號(hào)執(zhí)行方法,便于讀者了解更高級(jí)的程序分析方法。
第3章:白盒測(cè)試。白盒測(cè)試要求軟件內(nèi)部的邏輯結(jié)構(gòu)透明可見,因此更適合由軟件項(xiàng)目的開發(fā)者來承擔(dān)。本章介紹了兩類主要的白盒測(cè)試方法,包括以程序內(nèi)部邏輯結(jié)構(gòu)為基礎(chǔ)的邏輯覆蓋測(cè)試方法和以程序路徑為基礎(chǔ)的路徑覆蓋測(cè)試方法。與此同時(shí),本章還比較了不同白盒測(cè)試方法的測(cè)試強(qiáng)度,并介紹了用于度量程序復(fù)雜度的環(huán)復(fù)雜度方法。
第4章:程序插樁與變異測(cè)試。本章介紹了用于獲取程序運(yùn)行時(shí)信息的程序插樁方法,以及用于度量測(cè)試用例集缺陷檢測(cè)能力的變異測(cè)試方法。對(duì)于程序插樁方法,本章詳細(xì)介紹了插樁位置、類型、數(shù)量的選擇方法;對(duì)于變異測(cè)試方法,本章詳細(xì)介紹了變異算子的設(shè)計(jì)與選擇方法。同時(shí),本章還介紹了工具JaCoCo和PITest,以便讀者體驗(yàn)Java程序的運(yùn)行時(shí)信息收集和變異測(cè)試過程。
第5章:?jiǎn)卧獪y(cè)試。單元測(cè)試是對(duì)軟件基本組成單元(如方法、函數(shù)、過程)的測(cè)試。在測(cè)試過程中要完成初始狀態(tài)的創(chuàng)建、測(cè)試結(jié)果的驗(yàn)證、測(cè)試資源的釋放等工作,這些工作適合開發(fā)者使用代碼控制開展。本章在介紹單元測(cè)試框架的基礎(chǔ)上,進(jìn)一步闡述了單元測(cè)試的各項(xiàng)內(nèi)容,使讀者能針對(duì)不同的測(cè)試對(duì)象分析、建立相應(yīng)的測(cè)試模型。
第6章:集成測(cè)試。通過單元測(cè)試的軟件模塊并不能保證在整合后依然運(yùn)行正確,因此需要做集成測(cè)試以進(jìn)一步驗(yàn)證。本章介紹了集成測(cè)試過程、集成測(cè)試所面向的缺陷類型以及分析方法,并詳細(xì)介紹了多種集成測(cè)試策略。同時(shí),本章還討論了不同集成測(cè)試策略的優(yōu)缺點(diǎn),并對(duì)它們各自的適用場(chǎng)景進(jìn)行了分析,測(cè)試人員可據(jù)此選擇合適的集成測(cè)試策略。
第7章:JUnit基礎(chǔ)。工欲善其事,必先利其器。JUnit是開發(fā)者開展單元測(cè)試的一把利器。本章對(duì)Java單元測(cè)試框架的基本功能(如注解、測(cè)試類與測(cè)試方法、錯(cuò)誤與異常處理、批量測(cè)試)進(jìn)行了詳細(xì)的介紹,使讀者對(duì)JUnit的功能和適用范圍有了詳細(xì)的了解。本章還穿插了數(shù)個(gè)JUnit示例程序,幫助讀者更快、更方便地學(xué)習(xí)Java單元測(cè)試。
第8章:JUnit深入應(yīng)用。在前一章介紹JUnit基本功能的基礎(chǔ)上,本章對(duì)JUnit的高級(jí)功能進(jìn)行了介紹,包括用于提高測(cè)試代碼開發(fā)效率的匹配器功能,面向Controller和Private函數(shù)的測(cè)試功能、Stup測(cè)試功能和Mock測(cè)試功能。同時(shí),本章還介紹了JUnit與常用Java開發(fā)框架(如Ant、Maven)的集成方法,讀者可據(jù)此配置來構(gòu)建更方便的Java單元測(cè)試環(huán)境。
附錄:慕測(cè)科技開發(fā)者測(cè)試平臺(tái)。實(shí)踐練習(xí)是提高開發(fā)者測(cè)試能
前 言
第1章 開發(fā)者測(cè)試概述 1
1.1 開發(fā)者與軟件測(cè)試 1
1.1.1 測(cè)試和調(diào)試 1
1.1.2 開發(fā)者測(cè)試 3
1.1.3 PIE模型 4
1.2 開發(fā)者測(cè)試方法與技術(shù) 6
1.2.1 靜態(tài)測(cè)試與動(dòng)態(tài)測(cè)試 6
1.2.2 黑盒測(cè)試與白盒測(cè)試 8
1.2.3 失效重現(xiàn) 9
1.3 開發(fā)者測(cè)試工具 9
1.3.1 靜態(tài)測(cè)試掃描工具 9
1.3.2 測(cè)試覆蓋分析工具 12
1.4 開發(fā)者測(cè)試趨勢(shì) 14
1.4.1 軟件開發(fā)和運(yùn)營(yíng)困境 14
1.4.2 DevOps介紹 16
1.4.3 DevOps中的開發(fā)者測(cè)試 17
1.5 慕測(cè)開發(fā)者測(cè)試 19
1.6 小結(jié) 27
習(xí)題1 28
第2章 程序靜態(tài)分析 29
2.1 程序靜態(tài)分析概述 29
2.1.1 代碼評(píng)審 30
2.1.2 結(jié)構(gòu)分析 31
2.2 程序流程分析 32
2.2.1 控制流分析 32
2.2.2 數(shù)據(jù)流分析 33
2.3 符號(hào)執(zhí)行 35
2.3.1 靜態(tài)符號(hào)執(zhí)行 36
2.3.2 動(dòng)態(tài)符號(hào)執(zhí)行 38
2.4 編程規(guī)范和規(guī)則 39
2.5 程序靜態(tài)分析工具 42
2.5.1 工具簡(jiǎn)介 42
2.5.2 工具安裝與評(píng)估 42
2.6 小結(jié) 48
習(xí)題2 48
第3章 白盒測(cè)試 50
3.1 邏輯覆蓋測(cè)試 50
3.1.1 語句覆蓋 52
3.1.2 分支覆蓋 54
3.1.3 條件覆蓋 56
3.1.4 條件/判定覆蓋 58
3.1.5 修正條件/判定覆蓋 61
3.1.6 條件組合覆蓋 63
3.2 路徑覆蓋測(cè)試 65
3.2.1 環(huán)復(fù)雜度 65
3.2.2 基本路徑覆蓋 66
3.2.3 主路徑覆蓋 69
3.2.4 循環(huán)結(jié)構(gòu)測(cè)試 72
3.3 小結(jié) 74
習(xí)題3 74
第4章 程序插樁與變異測(cè)試 77
4.1 程序插樁 77
4.1.1 程序插樁概述 77
4.1.2 程序插樁示例 78
4.1.3 程序插樁工具JaCoCo 79
4.2 變異測(cè)試 84
4.2.1 變異測(cè)試概述 84
4.2.2 變異測(cè)試方法 85
4.2.3 變異測(cè)試工具PITest 89
4.3 小結(jié) 91
習(xí)題4 91
第5章 單元測(cè)試 94
5.1 單元測(cè)試概述 94
5.2 單元測(cè)試框架 95
5.3 單元測(cè)試內(nèi)容 96
5.3.1 算法邏輯 96
5.3.2 模塊接口 97
5.3.3 數(shù)據(jù)結(jié)構(gòu) 97
5.3.4 邊界條件 98
5.3.5 獨(dú)立路徑 98
5.3.6 錯(cuò)誤處理 99
5.3.7 輸入數(shù)據(jù) 99
5.3.8 表達(dá)式與SQL語句 100
5.4 慕測(cè)單元測(cè)試實(shí)例 100
5.5 小結(jié) 102
習(xí)題5 103
第6章 集成測(cè)試 105
6.1 集成測(cè)試概述 105
6.1.1 集成測(cè)試過程 106
6.1.2 集成測(cè)試缺陷類型 107
6.2 集成測(cè)試分析 110
6.3 集成測(cè)試策略 112
6.3.1 一次性集成與增量式集成 112
6.3.2 自頂向下與自底向上集成 114
6.3.3 基于調(diào)用圖的集成 117
6.3.4 其他集成測(cè)試策略 118
6.4 小結(jié) 124
習(xí)題6 124
第7章 JUnit基礎(chǔ) 127
7.1 一個(gè)JUnit實(shí)例 127
7.2 注解 132
7.3 測(cè)試類與測(cè)試方法 135
7.3.1 Assert 135
7.3.2 TestCase 139
7.3.3 TestResult 141
7.3.4 TestSuite 142
7.4 錯(cuò)誤與異常處理 143
7.4.1 錯(cuò)誤和異常 143
7.4.2 異常處理 144
7.5 批量測(cè)試 146
7.5.1 參數(shù)化測(cè)試 146
7.5.2 打包測(cè)試 149
7.6 小結(jié) 150
練習(xí)7 150
第8章 JUnit深入應(yīng)用 152
8.1 匹配器 152
8.2 JUnit測(cè)試進(jìn)階 154
8.2.1 Controller測(cè)試 154
8.2.2 Stup測(cè)試 155
8.2.3 Mock測(cè)試 159
8.2.4 Private測(cè)試 162
8.3 JUnit集成 165
8.3.1 JUnit-Ant集成 165
8.3.2 JUnit-Maven集成 169
8.4 小結(jié) 171
練習(xí)8 171
附錄 慕測(cè)科技開發(fā)者測(cè)試平臺(tái) 172
參考文獻(xiàn) 192