本書詳盡地闡述了軟件測試領域中的一些基本理論和實用技術。首先從學生需要理解并掌握的軟件測試基本概念和基本知識入手,使學生弄清楚為什么要進行軟件測試,什么是軟件測試?如何運用數(shù)學工具進行測試的描述和分析;在此基礎上,結合經(jīng)典案例討論如何進行黑盒和白盒測試;然后依托實際案例深入討論如何進行單元測試、集成測試和系統(tǒng)測試,以及具體的測試實施過程。最后,討論了如何選擇和使用各種自動化測試工具提高測試效率,以及如何進行軟件缺陷的管理。
本書作為軟件測試的實際應用參考書,除了力求突出基本知識和基本概念的表述外,更注重軟件測試技術的運用,在介紹諸多知識點的過程當中結合直觀形象的圖表或?qū)嶋H案例進行深入淺出的分析,從而使讀者可以更好地理解掌握軟件測試理論知識,并迅速地運用到實際測試工作中去。
本書適合作為各層次高等院校計算機及相關專業(yè)的教學用書,也可作為軟件測試人員的參考書。
隨著信息技術的普及,各種各樣的軟件已經(jīng)應用到很多領域,設計的復雜程度逐漸增加,開發(fā)周期不斷縮短。而用戶對軟件要求卻越來越高,不再僅僅關注軟件產(chǎn)品功能的先進性,并且十分重視對產(chǎn)品質(zhì)量的穩(wěn)定性和可靠性的考察,這使得軟件開發(fā)人員和軟件測試人員面臨著前所未有的挑戰(zhàn)。因此,如何保證軟件質(zhì)量將成為軟件工程領域深入研究的課題。
毋庸置疑,優(yōu)化軟件開發(fā)過程和提高軟件測試人員的技術水平,是保證軟件質(zhì)量的最佳途徑,這種觀念正在被更多的軟件行業(yè)人士理解、接受和實施。但軟件測試在國內(nèi)仍處于起步階段,各種軟件測試的方法、技術和標準都還在探索階段?梢哉J為,當今中國的軟件測試行業(yè)處于“春秋戰(zhàn)國”時期,百家爭鳴。一方面,這給行業(yè)的創(chuàng)新和發(fā)展提供了營養(yǎng)豐富的土壤;另一方面在測試行業(yè)一派“欣欣向榮”的氣象背后,也隱藏著深深的危機。軟件質(zhì)量和測試觀點“良莠不齊”、 “泥石俱下”。
在這種情況下,很多高校為了培養(yǎng)更多軟件行業(yè)急需的軟件測試人才,都已開設了軟件測試課程,為了適應當前教學的需要,編者在軟件測試課程實踐的基礎上,結合教學和科研成果,以及當前軟件測試技術的最新發(fā)展動態(tài)編寫了本書。
本書作為軟件測試的實際應用參考書,除了力求突出基本知識和基本概念的表述外,更加注重軟件測試技術的運用,在介紹很多知識點的過程中都結合直觀形象的圖表或?qū)嶋H案例進行了深入淺出的分析,從而使讀者可以更好地理解和掌握軟件測試技術理論知識,并迅速地運用到實際測試工作中去。
本書參考教學時數(shù)為32~40學時。全書包括9章: 第1章討論了軟件測試的發(fā)展歷史、軟件測試的定義和基本原則;第2章介紹了軟件測試過程中需要掌握的離散數(shù)學和圖論基礎知識;第3、4章結合經(jīng)典案例討論了白盒和黑盒測試技術,第5~7章討論了單元測試、集成測試和系統(tǒng)測試相關的知識,并且以實際軟件系統(tǒng)的測試為例討論了具體的實施過程;第8章介紹了軟件測試自動化,討論了自動化測試的時機,自動化測試成本的衡量,自動化測試工具的選擇和使用;第9章介紹了關于軟件bug及其管理方面的知識,討論了軟件bug的分類、提交和管理。為了讀者的方便,本書在出版社網(wǎng)站提供了測試案例使用的源代碼、配置說明等相關資源。需要的讀者可到清華大學出版社網(wǎng)站(www.tup.com.cn)下載。
本書在編寫過程中,參閱了很多國內(nèi)外同行的著作或文章,汲取了該領域最新的研究成果。在此,對這些成果的作者表示深深的感謝!
由于編者水平有限,書中難免存在一些錯誤和不妥之處,希望有關專家、同行和廣大讀者批評指正。
編著者2015年1月
第1章 概述
1.1 軟件測試的發(fā)展歷程及現(xiàn)狀
1.1.1 軟件測試的發(fā)展歷程
1.1.2 我國軟件測試的現(xiàn)狀
1.2 什么是軟件測試
1.2.1 軟件測試的定義
1.2.2 軟件測試生命周期
1.2.3 軟件開發(fā)與測試模型
1.2.4 與軟件測試相關的術語
1.3 軟件測試技術分類
1.4 軟件測試的目的
1.5 軟件測試的原則
1.5.1 盡早地和不斷地進行軟件測試
1.5.2 不可能完全的測試
1.5.3 增量測試,由小到大
1.5.4 避免測試自己的程序
1.5.5 設計周密的測試用例
1.5.6 注意錯誤集中的現(xiàn)象
1.5.7 確認bug的有效性
1.5.8 合理安排測試計劃
1.5.9 回歸測試
1.5.10 測試結果的統(tǒng)計和分析
1.5.11 及時更新測試
1.6 軟件測試工作流程
1.7 軟件測試中的誤區(qū)
1.8 一個貫穿全文的例子――在線測評平臺
1.8.1 系統(tǒng)概述
1.8.2 系統(tǒng)需求
1.8.3 系統(tǒng)分析
1.8.4 系統(tǒng)設計
1.8.5 系統(tǒng)實施
1.8.6 系統(tǒng)運行環(huán)境及配置
1.8.7 系統(tǒng)使用說明
本章小結
習題
第2章 離散數(shù)學和圖論基礎
2.1 集合論
2.2 函數(shù)
2.3 關系
2.4 命題邏輯
2.5 概率論
2.6 用于測試的圖
2.6.1 圖
2.6.2 程序圖
2.6.3 有限狀態(tài)機
2.6.4 狀態(tài)圖
本章小結
習題
第3章 白盒測試
3.1 白盒測試概述
3.1.1 白盒測試與調(diào)試的異同
3.1.2 白盒測試的分類
3.2 白盒測試用例設計技術
3.2.1 邏輯覆蓋測試
3.2.2 邊界值分析
3.2.3 基本路徑測試
3.2.4 循環(huán)語句測試
3.2.5 程序插裝
3.2.6 其他白盒測試方法
本章小結
習題
第4章 黑盒測試
4.1 黑盒測試概述
4.1.1 黑盒測試和白盒測試的異同
4.1.2 黑盒測試的原則和策略
4.2 黑盒測試用例設計技術
4.2.1 等價類劃分法
4.2.2 邊界值分析法
4.2.3 因果圖法
4.2.4 決策表法
4.2.5 錯誤推測法
本章小結
習題
第5章 單元測試
5.1 單元測試概述
5.1.1 單元測試誤區(qū)
5.1.2 單元測試與集成測試區(qū)別
5.1.3 單元測試與系統(tǒng)測試區(qū)別
5.2 單元測試環(huán)境
5.3 單元測試策略
5.3.1 自頂向下的單元測試策略
5.3.2 自底向上的單元測試
5.3.3 孤立測試
5.4 單元測試主要任務
5.5 單元測試步驟
5.6 單元測試用例設計
5.7 單元測試案例
5.8 單元測試經(jīng)驗總結
本章小結
習題
第6章 集成測試
6.1 集成測試概述
6.1.1 集成測試與系統(tǒng)測試的區(qū)別
6.1.2 集成測試與開發(fā)的關系
6.1.3 集成測試的重點
6.1.4 集成測試的層次
6.2 如何進行集成測試
6.2.1 集成測試分析
6.2.2 集成測試策略
6.2.3 集成測試環(huán)境
6.2.4 集成測試用例設計
6.2.5 集成測試過程
6.2.6 集成測試舉例
6.3 集成測試經(jīng)驗總結
本章小結
習題
第7章 系統(tǒng)測試
7.1 系統(tǒng)測試概述
7.1.1 什么是系統(tǒng)測試
7.1.2 系統(tǒng)測試的組織和分工
7.2 如何進行系統(tǒng)測試
7.2.1 系統(tǒng)測試分析
7.2.2 系統(tǒng)測試環(huán)境
7.2.3 系統(tǒng)測試類型
7.2.4 系統(tǒng)測試用例設計
7.2.5 系統(tǒng)測試執(zhí)行
7.2.6 系統(tǒng)測試案例研究
7.3 系統(tǒng)測試經(jīng)驗總結
本章小結
習題
第8章 軟件測試自動化
8.1 進行自動化測試的適當時機
8.1.1 概述
8.1.2 自動化測試的成本
8.1.3 自動化測試的生命周期
8.1.4 自動化測試的價值
8.1.5 例子
8.1.6 另外一些需要考慮的問題
8.2 自動化測試和手工測試
8.2.1 自動化測試與手工測試的比較
8.2.2 短測試周期中手工測試面臨的挑戰(zhàn)
8.2.3 手工測試的問題
8.2.4 自動化測試的問題
8.2.5 自動化測試的優(yōu)點
8.2.6 自動化測試的缺點
8.3 自動化測試工具的選擇和使用
8.3.1 應用自動化測試工具的目的
8.3.2 自動化測試工具的概要介紹
8.3.3 自動化測試工具的選擇
8.3.4 自動化測試工具在測試過程中的應用
8.4 自動化測試工具
8.4.1
8.4.2 C+
8.4.3 Load
8.4.4 IBM Rational Functional
經(jīng)驗總結
本章小結
習題
第9章 軟件bug和管理
9.1 軟件bug概述
9.1.1 bug的影響
9.1.2 bug的產(chǎn)生
9.2 bug的種類
9.2.1 需求階段的
9.2.2 分析設計階段的
9.2.3 實現(xiàn)階段的
9.2.4 配置階段的
9.2.5 短視將來的
9.2.6 靜態(tài)文檔的
9.3 bug報告單的提交和管理
9.3.1 bug報告單的內(nèi)容
9.3.2 bug報告的特點
9.3.3 重現(xiàn)bug的分析和方法
9.3.4 bug管理流程
本章小結
習題
附錄A 軟件測試常用術語表
附錄B 軟件常見錯誤
B1 用戶界面錯誤
B1.1 功能性
B1.2 通信
B1.3 命令結構和錄入
B1.4 遺漏的命令
B1.5 程序僵化
B1.6 性能
B1.7 輸出
B2 錯誤處理
B3 邊界相關錯誤
B4 計算錯誤
B5 初始狀態(tài)和以后狀態(tài)
B6 控制流錯誤
B6.1 程序失去控制
B6.2 程序停止
B6.3 循環(huán)
B6.4 IF、THEN、ELSE或者其他情況
B6.5 多種情況
B7 處理或解釋數(shù)據(jù)的錯誤
B7.1 在例程之間傳遞數(shù)據(jù)時的問題
B7.2 數(shù)據(jù)邊界
B7.3 超過消息緩沖區(qū)的極限讀取數(shù)據(jù)
B7.4 消息問題
B7.5 數(shù)據(jù)存儲損壞
B8 競爭條件
B9 負荷情況
B10 硬件
B11 來源、版本和ID控制
B12 測試錯誤
參考文獻