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