《軟件測試教程(第2版)》主要介紹軟件測試理論知識和測試技術,并從工程角度展開和貫徹軟件測試的技術及其應用的策略方法。全書共分9章:軟件測試概述,軟件測試策略與過程,黑盒測試與白盒測試的測試用例設計,軟件特定環境及應用系統的測試,軟件自動化測試基礎,軟件項目的單元測試、功能測試及性能測試,軟件測試管理,基本涵蓋了軟件測試的全貌。
《軟件測試教程(第2版)》突出軟件測試基本知識的闡述和技術理論的解析,內容全面,層次清晰,論述簡明,反映軟件測試的發展脈絡及最新成果和工程運用,把握軟件測試學科基礎與技術運用的深度和廣度,注意將軟件測試理論知識、技術與工程實踐密切結合,使《軟件測試教程(第2版)》使用者能較快學習到軟件測試最新知識,并掌握實際的軟件測試技術工程方法。
《軟件測試教程(第2版)》適用于高等院校、高職高專院校、示范性軟件學院的軟件技術、軟件測試專業及計算機相關專業使用,可作為軟件測試課程的教材,也適合從事軟件開發和軟件測試的專業技術及管理人員參閱,并作為學習軟件測試入門和提高的培訓教材。《軟件測試教程(第2版)》也適用于準備參加國際軟件測試工程師認證(ISTQB)考試人員參考。
本書是《軟件測試教程》的修訂版本。本書第1版發行4年多來,獲得了高等院校師生和軟件業界工程技術人員讀者的廣泛歡迎,取得了較好的社會效益。同時,作者也不斷收到教材使用者和讀者的積極反饋和良好建議,以促成修訂。
軟件測試對于軟件質量保障的作用已被軟件業界廣泛接受和重視,軟件測試在軟件產品開發和工程中舉足輕重,軟件測試的地位和人才的高價值已得到共識。隨著軟件測試專業及軟件測試技術課程的開設,教學和技術培訓已在高校和社會軟件技術培訓機構中廣泛開展,使軟件測試課程的教學和專業人才的培養有了長足的進步。由此,對軟件測試課程教材的需求也與日俱增,特別是理論闡述和工程實踐結合緊密的優質教材。
本書第2版,以第1版架構為基礎,在體系結構上做了較大調整,進一步突出了作為高等工程教育課程教材的特點,為滿足培養軟件測試工程師專業規格和職業技能要求,適應“知識、能力、素質、創新”的教學思想與教學方法,增加了基于測試工程的過程、規范、標準、管理和技術的運用;在內容上吸收了國內外近年來軟件測試科學研究和技術工程實踐運用的豐富成果,并結合了軟件測試課程理論教學和實踐教學的經驗總結,修訂而成。
本書共分為軟件測試概述、軟件測試策略與過程、黑盒測試與白盒測試的測試用例設計方法、軟件特定環境及應用系統的測試、軟件自動化測試基礎、軟件項目的工程測試(單元測試、功能測試和性能測試),以及軟件測試管理9個章節,比較全面而系統地闡述了軟件測試所涉及的基本理論、基本方法、基本技術、基本過程和工程運用,并引入對軟件測試技術研究與應用的進一步方向指引,以利于讀者學習軟件測試知識和掌握測試技能奠定基礎和進一步的發展。
本書第2版繼續保持了第1版的特色,內容全面更新和充實,深度、廣度兼顧并適度,注意了技術理論基礎和技術實踐基礎兩方面的融合,并注重理論知識體系的建立和基本技能的培養,使學習達到“舉一反三”的效果。
本書基本涵蓋于ISTQB(國際軟件測試認證委員會)軟件測試初級認證大綱(2007中文版)規定的內容,因此可作為需要參加此認考試的參改資料。
因作者水平所限,書中錯誤和不妥之處難免,懇請讀者批評指正,并提出意見和建議。
第1章 軟件測試概述
1.1 軟件測試的產生
1.1.1 軟件可靠性問題
1.1.2 軟件缺陷與故障
1.1.3 軟件測試的發展
1.2 軟件測試基礎理論
1.2.1 軟件測試定義與基本問題
1.2.2 軟件測試的基本理論
1.2.3 軟件測試和缺陷修復的代價
1.2.4 軟件測試策略與技術概要
1.3 軟件開發過程
1.3.1 軟件產品的組成
1.3.2 軟件開發項目組
1.3.3 軟件開發模式
1.4 軟件開發與軟件測試的聯系
1.4.1 軟件開發與軟件測試各階段的聯系
1.4.2 測試與開發的并行特征
1.4.3 軟件測試模型
1.5 軟件測試過程
1.5.1 制定測試計劃
1.5.2 測試執行過程
1.6 軟件質量保證
1.6.1 軟件質量管理
1.6.2 軟件能力成熟度模型
1.6.3 軟件測試成熟度模型
1.7 軟件測試的職業
1.7.1 軟件測試職業和職位
1.7.2 軟件測試職業素質
習題與思考
第2章 軟件測試策略與過程
2.1 軟件測試的復雜性分析
2.1.1 無法對軟件程序進行完全測試
2.1.2 測試無法顯示潛在的軟件缺陷和故障
2.1.3 存在的故障現象與發現的故障數量成正比
2.1.4 不能修復所有軟件故障
2.1.5 軟件測試的代價
2.2 軟件測試策略與方法
2.2.1 靜態測試與動態測試
2.2.2 黑盒測試與白盒測試
2.2.3 手工測試和自動化測試
2.2.4 探索性測試
2.2.5 軟件測試的流程
2.3 單元測試
2.3.1 單元測試的主要任務
2.3.2 單元測試的執行過程
2.3.3 測試與調試
2.4 集成測試
2.4.1 非增量式測試
2.4.2 增量式測試
2.4.3 不同集成測試方法的比較
2.4.4 回歸測試
2.5 確認測試
2.5.1 確認測試的準則
2.5.2 配置審查的內容
2.6 系統性測試
2.6.1 功能測試
2.6.2 性能測試
2.6.3 安全測試
2.6.4 恢復性測試
2.6.5 兼容性測試
2.7 驗收測試
2.7.1 驗收測試的內容
2.7.2 軟件配置和文檔資料測試
2.8 軟件測試不同分類之間的關系
2.8.1 廣義的軟件組成
2.8.2 軟件測試的分類及其相互關系
習題與思考
第3章 黑盒測試及用例的設計
3.1 黑盒測試法的概念
3.1.1 黑盒測試的端口測試模型
3.1.2 黑盒測試的對象測試模型
3.1.3 黑盒測試的分層設計模型
3.1.4 黑盒測試的測試用例設計方法
3.2 三角形問題與Next Date函數
3.2.1 三角形問題
3.2.2 Next Date函數
3.3 等價類劃分方法
3.3.1 等價類的劃分原則
3.3.2 等價類劃分法的測試用例設計
3.3.3 常見等價類劃分測試形式
3.4 邊界值分析法
3.4.1 邊界值分析概要
3.4.2 邊界值分析法測試用例
3.4.3 邊界值分析法測試舉例
3.5 因果圖方法
3.5.1 因果圖法的思想
3.5.2 因果圖法
3.5.3 因果圖法舉例
3.6 決策表測試法
3.6.1 決策表
3.6.2 決策表應用
3.7 正交試驗設計法
3.7.1 正交試驗設計法的原理
3.7.2 正交試驗設計法的黑盒測試應用
3.7.3 正交試驗設計法的其他相關知識
3.8 測試方法的選擇
3.9 黑盒測試案例運用
3.9.1 用等價類劃分法測試保險公司保費費率計算程序
3.9.2 決策表測試應用案例
習題與思考
第4章 白盒測試及其用例的設計
4.1 白盒測試方法
4.2 白盒測試的幾個基本概念
4.2.1 程序控制流圖
4.2.2 環形復雜度
4.2.3 矩陣圖
4.3 覆蓋的測試
4.3.1 語句覆蓋和判定覆蓋
4.3.2 函數覆蓋
4.3.3 判定路徑覆蓋
4.3.4 更改條件判定覆蓋
4.3.5 分支條件組合覆蓋
4.3.6 Z路徑覆蓋
4.3.7 ESTCA覆蓋
4.3.8 層次LCSAJ覆蓋
4.3.9 繼承上下文覆蓋
4.3.10 基于狀態的上下文覆蓋
4.3.11 覆蓋率測試設計
4.4 路徑測試
4.4.1 路徑表達式
4.4.2 基本路徑測試方法
4.4.3 循環測試方法
4.4.4 產生測試用例
4.5 白盒測試案例運用
習題與思考
第5章 軟件特定環境及應用系統的測試
5.1 客戶/服務器體系結構測試
5.1.1 客戶/服務器體系結構的測試的主要內容
5.1.2 Web應用系統的架構和開發技術
5.1.3 Web應用系統的測試
5.2 圖形用戶界面測試
5.2.1 頁面元素測試
5.2.2 對窗體操作的測試
5.2.3 下拉式菜單和鼠標操作的測試
5.2.4 數據項操作的測試
5.3 實時系統測試
5.3.1 實時系統
5.3.2 實時系統測試
5.4 面向對象的軟件測試
5.4.1 面向對象的特點
5.4.2 面向對象軟件測試模型
5.4.3 面向對象軟件測試類別
5.4.4 類的功能性測試和結構性測試
5.4.5 狀態轉移圖方法的面向對象軟件測試
5.5 嵌入式系統的軟件測試
5.5.1 嵌入式系統概要
5.5.2 嵌入式系統軟件測試概要
5.5.3 嵌入式系統軟件測試的幾項經驗策略
5.6 特定環境及應用系統的測試運用
5.6.1 對Web應用系統進行壓力測試
5.6.2 類的數據流測試
習題與思考
第6章 軟件自動化測試基礎
6.1 軟件自動化測試概念與基礎知識
6.1.1 自動化測試的產生
6.1.2 軟件自動化測試的引入
……
第7章 軟件項目的單元測試
第8章 軟件項目的功能測試與性能測試
第9章 軟件測試管理
參考文獻
1.1.2 軟件缺陷與故障
1.軟件缺陷和故障案例
當今人類的生存和發展已經離不開各種各樣的信息服務,為了獲取這些信息,需要計算機網絡或通信網絡的支撐,這里不僅包含計算機硬件設備,還包括各種功能和用途的計算機軟件,軟件無處不在。然而,軟件是由人編寫開發的,是一種邏輯思維的產品,盡管現在軟件開發當中采取了一系列的有效措施,能不斷地提高軟件產品的質量,但仍然無法完全避免軟件會存在各種各樣的缺陷。
軟件故障或缺陷,依據其可能造成的危害程度不同,分為輕、重等不同級別。通過下面幾例軟件缺陷和故障的案例分析,足以說明軟件缺陷和故障問題造成的嚴重損失和災難。
【案例1】美國迪斯尼公司生產的獅子王游戲軟件bug事件,這是一項典型的軟件兼容性缺陷問題。1994年,該公司發布面向青少年的游戲軟件“獅子王動畫故事書”,銷售異常火爆,使該游戲軟件幾乎成為當年秋季全美青少年必買的游戲軟件產品。但產品售后不久,客戶支持部投訴電話就一直不斷,憤怒的兒童家長和玩不成游戲的孩子們大量投訴該游戲軟件的缺陷,一時間報紙和電視媒體大量報道了這一游戲軟件的各種問題,使該公司的聲譽大損,并為改正軟件缺陷和故障付出了沉重的代價。后經調查證實,造成這一嚴重問題的原因是迪斯尼公司沒有對該游戲軟件在已投入市場上使用的各種PC機型上進行完整的測試,游戲軟件對硬件環境的兼容性沒有得到保障,雖然該游戲軟件在軟件工程師們的機器硬件系統上工作正常,但在大眾群體使用的系統中卻存在不兼容的問題。
【案例2】美國航天局火星極地飛船著陸事故。1999年12月3日,美國航天局的火星極地著陸飛船在試圖登陸火星表面時突然失蹤。負責這一太空發展項目的錯誤修正委員會的專家們觀測到這一幕并分析了事故,確定出現該事故的原因可能是由于某一數據位被意外地更改,造成災難性后果,并得出造成事故的問題應在內部測試時就予以解決的結論。簡要地說,火星極地飛船著陸過程是這樣的:當飛船快要降落火星表面時,它將打開著陸降落傘以減緩飛船下落速度,在飛船距離火星1800m時,飛船將丟棄降落傘,同時點燃著陸推進器(反向推力),控制和穩定飛船的下降速度,同時飛船的三條支撐腳將迅速打開,使其在剩余的高度里緩慢降落到火星表面,在預定地點著陸。然而為節省研制經費,簡化了確定何時關閉著陸推進器的自動裝置,由通常太空船使用的昂貴著陸雷達系統改為在飛船的支撐腳上安裝簡易觸發開關,并在著陸程序中設置一個數據位來控制關閉著陸推進器燃料開關。顯然,飛船支撐腿在沒有著地之前,推進器引擎將一直處于著火工作狀態,支撐腳著地瞬間,觸發開關,程序控制關閉燃料,平穩安全著陸。但遺憾的是,事后分析測試中發現,當飛船的支撐腳打開準備著陸時,機械的震動卻很容易觸發著地觸電開關,導致程序設置了錯誤的數據位,關閉了著陸推進器燃料,也就是說,使得著陸推進器提前停止工作,使著陸飛船加速下墜1800m之后直接沖向了火星表面,飛船撞成碎片。這一事故后果非常嚴重,損失巨大,然而起因卻如此簡單,屬于軟件設計中的缺陷。事實是飛行發射之前,飛船各部位工作過程經過多個小組的測試,其中一個小組測試飛船的支撐腳落地的打開過程,另一個小組測試此后的著陸過程。前一小組沒有注意到著地數據位是否已置位,因為這不屬于他們負責的范圍,而后一小組總是在開始測試之前重置計算機,進行數據的初始化,清除數據位。