前 言
本書是一本面向軟件開發(fā)者的軟件測(cè)試教材,旨在從開發(fā)者的角度介紹軟件測(cè)試?yán)碚摗⒎椒ê蛯?shí)踐。本書從測(cè)試基礎(chǔ)概念出發(fā),結(jié)合概率統(tǒng)計(jì)和圖論基礎(chǔ)建立軟件測(cè)試?yán)碚摲治隹蚣;然后從多樣性、故障假設(shè)、圖分析三個(gè)方面構(gòu)建開發(fā)者視角的系統(tǒng)性軟件測(cè)試方法;最后介紹開發(fā)者測(cè)試實(shí)踐的三部曲,即單元測(cè)試、集成測(cè)試和回歸測(cè)試。同時(shí),本書穿插講解了部分智能化軟件測(cè)試的最新研究成果。本書以軟件測(cè)試?yán)碚摓橹骶,闡述了開發(fā)者測(cè)試方法背后的內(nèi)在聯(lián)系和主要區(qū)別,以啟發(fā)讀者思考。全書共分為9章,第1~3章主要介紹軟件測(cè)試?yán)碚摚?~6章介紹軟件測(cè)試方法,第7~9章介紹軟件測(cè)試實(shí)踐。軟件測(cè)試工具、測(cè)試案例和實(shí)踐內(nèi)容請(qǐng)參閱本書配套線上資源。本書主要面向具有一定編程基礎(chǔ)的高年級(jí)本科生,教師可以根據(jù)自己的習(xí)慣編排教學(xué)次序。本書導(dǎo)讀與教學(xué)建議如圖1所示。
圖1 本書導(dǎo)讀與教學(xué)建議
第1章是快速入門,通過一個(gè)簡(jiǎn)單的三角形程序Triangle,介紹了軟件測(cè)試的基本內(nèi)容。1.1節(jié)介紹了多樣性測(cè)試原則,包括隨機(jī)測(cè)試、等價(jià)類測(cè)試和組合測(cè)試。1.2節(jié)介紹了故障假設(shè)測(cè)試原理,包括常見軟件故障、邊界故障假設(shè)和變異故障假設(shè)。1.3節(jié)介紹了圖分析測(cè)試方法,包括圖生成方法、圖結(jié)構(gòu)測(cè)試和圖元素測(cè)試。通過學(xué)習(xí)本章,讀者可以對(duì)軟件測(cè)試常用方法有一個(gè)初步的了解。
第2章是基礎(chǔ)概念。2.1節(jié)簡(jiǎn)要介紹了軟件測(cè)試的基礎(chǔ)概念,包括常用術(shù)語和測(cè)試?yán)碚摽蚣,并基于理論框架重新審視了軟件測(cè)試三大基本問題,包括測(cè)試生成、測(cè)試預(yù)言和測(cè)試終止問題,這三大問題貫穿全書,成為軟件測(cè)試?yán)碚撆c方法的核心。本章為后續(xù)章節(jié)的深入學(xué)習(xí)奠定了基礎(chǔ)。2.2節(jié)介紹了開發(fā)者測(cè)試常用工具, 包括靜態(tài)測(cè)試工具、動(dòng)態(tài)測(cè)試工具和DevOps相關(guān)工具。2.3節(jié)介紹了軟件測(cè)試教材常用的三個(gè)待測(cè)程序示例,包括三角形程序 Triangle(輸入三個(gè)邊,輸出三角形的類型)、日期程序NextDay(輸入某一天的年月日,輸出后一天的年月日)和均值方差程序 MeanVar(輸入一組數(shù)字,計(jì)算其算術(shù)平均值 Mean 和方差 Var),這三個(gè)待測(cè)程序貫穿全書,但后續(xù)章節(jié)也會(huì)引入一些更加復(fù)雜的軟件項(xiàng)目作為示例。
第3章是Bug理論基礎(chǔ),介紹了Bug的概念、分類和生命周期等。3.1節(jié)首先簡(jiǎn)要介紹了軟件Bug的歷史,名詞概念的借鑒和延伸是工程技術(shù)領(lǐng)域的常用手段。本節(jié)還介紹了PIE模型,建立執(zhí)行-感染-傳播的基本分析框架,為Bug的準(zhǔn)確定義和統(tǒng)一概念提供基礎(chǔ)。3.2節(jié)深入分析了Bug的四大性質(zhì)。首先介紹Bug的反向定義,即通過執(zhí)行測(cè)試的動(dòng)態(tài)分析和故障修復(fù)來定義Bug。這樣的反向定義勢(shì)必帶來Bug的不確定性。對(duì)于任意程序和失效測(cè)試,存在不同的修復(fù)方法使得測(cè)試通過,從而可以派生出不同的Bug定義。本節(jié)還介紹Bug的非單調(diào)性定義,以及它給測(cè)試和修復(fù)帶來的障礙。借鑒物理波的相長(zhǎng)干涉和相消干涉概念,本節(jié)定義Bug間的干涉,并分析干涉給測(cè)試和調(diào)試帶來的諸多挑戰(zhàn)。在PIE模型的基礎(chǔ)上,3.3節(jié)介紹了軟件調(diào)試三部曲,即面向失效的Bug理解、面向錯(cuò)誤的Bug定位、面向故障的Bug修復(fù),從而銜接了開發(fā)者的測(cè)試與調(diào)試。本章可幫助讀者更好地理解軟件測(cè)試中Bug的本質(zhì)和處理方法。
第4章是多樣性測(cè)試。4.1節(jié)介紹了多樣性測(cè)試?yán)碚撆c方法,包括隨機(jī)測(cè)試、非均勻的隨機(jī)測(cè)試、反饋引導(dǎo)距離極大化的自適應(yīng)隨機(jī)測(cè)試以及路徑遍歷引導(dǎo)性隨機(jī)測(cè)試。等價(jià)類假設(shè)策略及其常用方案包括等價(jià)類劃分策略、等價(jià)類劃分和隨機(jī)測(cè)試相結(jié)合的理論與方法。組合測(cè)試基本思路包括經(jīng)典的t-強(qiáng)度組合測(cè)試準(zhǔn)則、約束組合測(cè)試準(zhǔn)則和可變強(qiáng)度組合測(cè)試準(zhǔn)則,采用基于隨機(jī)貪心的經(jīng)典組合測(cè)試策略AETG等方法來完成測(cè)試生成優(yōu)化。4.2節(jié)介紹開發(fā)者多樣性測(cè)試,代碼多樣性測(cè)試要求程序在測(cè)試運(yùn)行時(shí)實(shí)現(xiàn)對(duì)其程序結(jié)構(gòu)的覆蓋遍歷;組合多樣性測(cè)試通過分支組合覆蓋測(cè)試實(shí)現(xiàn)分支條件的組合枚舉和測(cè)試生成;行為多樣性測(cè)試通過將路徑行為特征提取和聚類抽樣相結(jié)合,適應(yīng)不同規(guī)模的開發(fā)者測(cè)試要求。本章為開發(fā)者提供了基礎(chǔ)且豐富的測(cè)試方法選擇。
第5章是故障假設(shè)測(cè)試,5.1節(jié)介紹了如何基于故障假設(shè)進(jìn)行測(cè)試,以及故障假設(shè)測(cè)試的方法和技巧。5.2節(jié)首先介紹最常用的邊界故障假設(shè),包括輸入邊界、中間邊界和輸出邊界;然后介紹了變異故障假設(shè),包括變異分析的基本概念、變異算子選擇方法及其相關(guān)理論性質(zhì),還介紹了變異分析在邏輯控制密集型的安全攸關(guān)軟件中的應(yīng)用,包括將程序邏輯抽象成布爾范式進(jìn)行故障建模;最后介紹的邏輯故障假設(shè)集中考慮邏輯相關(guān)的故障假設(shè)。本章可幫助開發(fā)者掌握另外一種簡(jiǎn)單有效的軟件測(cè)試策略。
第6章是圖分析測(cè)試,介紹了圖分析測(cè)試的基本概念、方法和技術(shù)。圖被廣泛應(yīng)用于軟件測(cè)試覆蓋準(zhǔn)則的定義和分析。6.1節(jié)介紹圖測(cè)試?yán)碚摲椒ê蛡鹘y(tǒng)的結(jié)構(gòu)化測(cè)試方法。圖測(cè)試要求測(cè)試人員覆蓋圖的結(jié)構(gòu)或元素,通過遍歷圖的特定部分完成測(cè)試目標(biāo)。圖測(cè)試?yán)碚摲椒ǹ梢詠碜匀魏诬浖橄髨D,而不僅是控制流圖、數(shù)據(jù)流圖和事件流圖。6.2節(jié)將傳統(tǒng)的結(jié)構(gòu)化測(cè)試方法分為三大類:L-路徑測(cè)試、主路徑測(cè)試和基本路徑測(cè)試。其中,L-路徑測(cè)試是根據(jù)圖中路徑長(zhǎng)度進(jìn)行簡(jiǎn)單延伸的策略;主路徑測(cè)試主要針對(duì)循環(huán)帶來L-路徑測(cè)試的無限問題;基本路徑測(cè)試通過引入獨(dú)立路徑的概念,覆蓋最大獨(dú)立路徑集合,這些路徑對(duì)應(yīng)了這個(gè)線性空間的基向量。6.3節(jié)中的數(shù)據(jù)流測(cè)試關(guān)注變量的定義和使用元素測(cè)試形式,邏輯覆蓋準(zhǔn)則則以DC、CC、CoC、MCDC為代表,通過示例說明各個(gè)準(zhǔn)則直接的強(qiáng)弱蘊(yùn)涵關(guān)系,強(qiáng)調(diào)MCDC在工業(yè)應(yīng)用中的價(jià)值。本章為讀者提供了一種基于圖論的軟件測(cè)試方法。
第7章是單元測(cè)試,針對(duì)軟件的最小可測(cè)試單元進(jìn)行討論。7.1節(jié)首先介紹單元測(cè)試的概述與最佳實(shí)踐,特別強(qiáng)調(diào)了自動(dòng)化測(cè)試;然后介紹模擬單元測(cè)試常用方法和單元測(cè)試評(píng)估方法,并闡述了全國(guó)大學(xué)生軟件測(cè)試大賽的評(píng)估策略META。7.2節(jié)介紹自動(dòng)化單元測(cè)試三部曲:執(zhí)行、生成和演化。以JUnit為例闡述了單元測(cè)試執(zhí)行框架,介紹了啟發(fā)式搜索覆蓋結(jié)合變異分析的生成方法、常用工具EvoSuite及其智能化改進(jìn)思路,并結(jié)合大模型從修復(fù)的角度進(jìn)行測(cè)試演化以滿足質(zhì)量保障
需求。
第8章是集成測(cè)試,檢測(cè)組件之間交互的正確性,發(fā)現(xiàn)組件間可能存在的接口問題,提高整體軟件系統(tǒng)的質(zhì)量。8.1節(jié)首先介紹集成測(cè)試的目標(biāo)與基本流程,以及常用策略和分析評(píng)估方法。8.2節(jié)介紹集成測(cè)試的核心內(nèi)容:接口測(cè)試。首先介紹接口測(cè)試的常用方法與最佳實(shí)踐,闡述接口測(cè)試的應(yīng)用案例。然后介紹接口測(cè)試的常用自動(dòng)化方法和工具:Postman用于API接口測(cè)試,Selenium用于Web接口測(cè)試,JMeter用于性能接口測(cè)試。最后強(qiáng)調(diào)了從自動(dòng)化到智能化的結(jié)合。
第9章是回歸測(cè)試,驗(yàn)證在修改或添加新功能后新系統(tǒng)能否仍然正常運(yùn)行。9.1節(jié)首先介紹回歸測(cè)試的目標(biāo)與基本概念,回歸測(cè)試的一個(gè)評(píng)估分析框架以及四個(gè)評(píng)估標(biāo)準(zhǔn)(完備性、準(zhǔn)確性、效率和通用性),測(cè)試優(yōu)先級(jí)以及APFD度量準(zhǔn)則。9.2節(jié)介紹常用程序分析輔助手段程序切片,討論如何基于程序切片實(shí)現(xiàn)回歸測(cè)試,測(cè)試用例約簡(jiǎn)的理論與常用方法,并結(jié)合執(zhí)行剖面聚類分析失效混合回歸測(cè)試方法。9.3節(jié)介紹聚類抽樣回歸測(cè)試,記錄特定的執(zhí)行剖面進(jìn)行聚類測(cè)試選擇,包括動(dòng)態(tài)聚類抽樣策略ESBS、加權(quán)聚類抽樣策略WAS和半監(jiān)督聚類方法SSKM的成對(duì)約束策略。
本書適合作為軟件工程、計(jì)算機(jī)科學(xué)與技術(shù)、信息安全等專業(yè)的教材,也可供從事軟件研發(fā)和測(cè)試的工程師、研究人員參考。通過學(xué)習(xí)本書,讀者可以掌握開發(fā)者視角的軟件測(cè)試基本知識(shí)和實(shí)踐技能,并且深入思考軟件測(cè)試的理論和方法。期待本書能夠成為廣大讀者的良師益友,幫助讀者在軟件測(cè)試領(lǐng)域取得更好的成果。
編者