本書緊扣軟件測試和軟件工程標準規范要求, 結合國內軟件測試現狀, 形成一套適應軟件測試實踐需要的測試技術方法與過程管理的實用指南, 系統地介紹了相關的知識、技術、方法和軟件工具, 給出了較為詳細的測試過程技術文檔和記錄表格模板。
本書為“軟件開發與測試叢書”中的一冊,由從事軟件評測與工程化管理的專業人員組織編寫。本書結合實例,系統地介紹了動態測試和靜態測試中的典型技術方法,比較了各種方法的不同之處并分析了它們的優缺點,緊扣軟件測試實際和標準規范要求,從測試原則、測試環境、測試策略、測試內容、測試方法、測試過程等不同方面分別介紹了單元測試、集成測試、配置項測試和系統測試等不同測試級別中實用的測試方法與技術,具有很好地參考與應用價值。本書定位于一本軟件測試方法和技術的實用指南,適用于軟件從業人員了解軟件測試的基礎知識、一般流程、實用技術方法和常用測試工具,提高技術能力和過程能力水平,也適用于軟件測試機構建立測試能力體系,規范軟件測試管理。
“軟件開發與測試”叢書序
為應對“軟件危機”的挑戰,人們在20世紀60年代末提出借鑒傳統行業在質量管理方面的經驗,用工程化的思想來管理軟件,以提高復雜軟件系統的質量和開發效率,即軟件工程化。40多年以來,軟件已廣泛應用到各個工程領域乃至生活的各個方面,極大地提高了社會信息化水平,軟件工程也早已深入人心。
質量是產品的生命,對軟件尤其如此。軟件的直觀性遠不及硬件,軟件的質量管理相對困難得多;但與傳統行業類似,大型復雜軟件的質量在很大程度上取決于軟件過程質量。質量評估是質量管理的關鍵,沒有科學的評估標準和方法,就無從有效地管理質量,軟件評測是質量評估的最有效和最重要的手段之一。
北京跟蹤與通信技術研究所軟件評測中心是從事軟件評測與工程化管理的專業機構,是在我國大力發展航天事業的背景下,為保障載人航天工程軟件質量,經原國防科工委批準,國內最早成立的第三方軟件評測與工程化管理的技術實體組織之一。自成立以來,軟件評測中心出色地完成了以載人航天工程、探月工程為代表的數百項重大工程關鍵軟件評測項目,自主研發了測試仿真軟件系統、測試輔助設計工具、評測項目與過程管理軟件等一系列軟件測試工具,為主制訂了GB/T 15532—2008《計算機軟件測試規范》、GB/T 9386—2008《計算機軟件測試文檔編制規范》、GJB 141《軍用軟件測試指南》等軟件測試標準,深入研究了軟件測試自動化、缺陷分析與預測、可信性分析與評估、測試用例復用等軟件測試技術,在嵌入式軟件、非嵌入式軟件和可編程邏輯器件軟件等不同類型軟件測試領域,積累了豐富的測試經驗和強大的技術實力。
為進一步促進技術積累和對外交流,北京跟蹤與通信技術研究所組織編寫了本套叢書。本叢書是軟件評測中心多年來技術經驗的結晶,致力于以資深軟件從業者和工程一線技術人員的視角,融會貫通軟件工程特別是軟件測試、質量評估與過程管理等領域相關的知識、技術和方法。本叢書的特色是重點突出、實用性強,每本書針對不同方向,著重介紹實踐中常用的、好用的技術內容,并配以相應的范例、模板、算法或工具,具有很高的參考價值。
本叢書將為具有一定知識基礎和工作經驗、想要實現快速進階的從業者提供一套內容豐富的實踐指南。對于要對工作經驗較少的初入職人員進行技術培訓、快速提高其動手能力的單位或機構,本叢書也是一套難得的參考資料。
叢書編審委員會
2015年5月6日軟件測試是保障軟件質量的重要手段,是構建高可信軟件的關鍵環節。隨著軟件應用的日益廣泛,人們對軟件測試重要性的認識越來越深刻。20世紀80年代以來,特別是在最近一二十年間,軟件測試無論是作為一項技術、一門學科還是作為一個行業,都得到了快速蓬勃的發展。
本書定位于一本軟件測試方法和技術的實用指南,緊扣軟件測試實際和標準規范要求,結合行業內軟件測試現狀,系統地介紹軟件測試相關的知識、方法、技術和軟件工具,給出較為詳細的軟件測試過程技術文檔模板。
本書旨在幫助軟件從業人員了解軟件測試的基礎知識、一般流程、實用技術方法和常用測試工具,提高技術能力和過程能力水平,以及幫助軟件測試機構建立測試能力體系,規范軟件測試過程管理。
本書是作者多年從事軟件測試工程實踐和技術方法研究的經驗總結,與其他公開教材相比,主要特色有: 實用性強,本書緊扣軟件測試實際和標準規范要求,著重介紹測試實踐中常用和好用的知識、技術和方法;視角特殊,本書從第三方測評的角度,系統地闡述適用于工程實踐的測試方法和技術,反映行業實際需求和技術發展動態。
本書共有12章,可分為5大部分。
第一部分(第1章)是軟件測試概述,簡要介紹軟件測試發展歷程、軟件測試典型定義、軟件測試一般原則、常用軟件測試模型、常見軟件測試級別與測試類型、軟件測試相關的標準規范等基本內容。
第二部分(第2、3章)是軟件測試技術,結合程序實例,分別介紹靜態測試技術和動態測試技術,并對典型技術進行比較分析。
第三部分(第4~7章)按照不同的測試級別,從測試原則、測試環境、測試策略、測試內容、測試方法、測試過程等方面分別介紹單元測試、集成測試、配置項測試和系統測試中的實用測試方法與技術。
第四部分(第8~10章)以獨立章節分別介紹回歸測試、面向對象軟件測試和FPGA測試等專門測試類別中的實用測試方法與技術。
第五部分(第11、12章)主要內容是測試實踐,第11章分別介紹了在靜態測試、動態測試和測試管理中常用的軟件工具。第12章著重介紹測試策劃、測試設計、測試實施和測試總結等測試過程中常用的技術文檔,給出通用技術文檔模板。
軟件測試包含大量相關的活動,有些是技術性的,有些是管理性的,還有些是相互交織的。例如,單元測試、集成測試、配置項測試、系統測試、回歸測試中測試用例、測試數據和測試期望結果的設計是典型的技術性活動;人員計劃、成本預算以及配置管理、項目監控中的大部分內容是典型的管理性活動。如前所述,本書偏重于講述軟件測試的技術性活動,軟件測試的管理性活動將在本套叢書的另一本書《軟件測試管理》中重點介紹。
本書第1~3章由張衛祥編寫,第4~7章和第12章由劉文紅編寫,第8章由陳青編寫,第9章由齊玉華編寫,第10章由司倩然編寫,第11章由馬賢穎和司倩然編寫。全書由劉文紅、杜會森統稿。趙輝、張衛民、楊寶明、李國華、牛勝芬等專家審閱了初稿并提出了許多寶貴意見。
在本書編寫過程中,得到了北京跟蹤與通信技術研究所,特別是軟件評測中心的大力支持,還得到了編者同事、朋友和家人的關心與幫助,在此一并表示感謝!
由于水平有限,本書肯定還存在不少問題,敬請大家批評指正。
編者 2017年4月
第1章軟件測試概述1
1.1軟件測試簡史1
1.2軟件測試定義3
1.3軟件測試原則4
1.4軟件的可測試性6
1.4.1可測試性定義與內涵6
1.4.2可測試性設計與實現7
1.4.3可測試性度量與評估9
1.5軟件測試模型9
1.5.1V模型9
1.5.2W模型10
1.5.3H模型11
1.6軟件測試級別與測試類型12
1.6.1軟件測試級別12
1.6.2軟件測試類型13
1.6.3軟件關鍵等級16
1.7軟件測試標準規范18
1.7.1相關標準概述18
1.7.2GB/T 9386—2008《計算機軟件測試文檔編制規范》21
1.7.3GB/T 15532—2008《計算機軟件測試規范》21
1.7.4GB/T 25000.51—2010《軟件工程軟件產品質量要求和評價
(SQuaRE)商業現貨(COTS)軟件產品的質量要求和測試細則》21
1.7.5ISO/IEC 29119 Software Testing22
1.8軟件測試人員能力素質要求26
1.9術語與縮略語27
第2章靜態測試技術29
2.1文檔審查29
2.1.1實施要點30
2.1.2組織與流程30
2.1.3成果形式31
2.2代碼審查34
2.2.1實施要點34
2.2.2組織與流程35
2.2.3成果形式35
2.3靜態分析38
2.3.1實施要點38
2.3.2組織與流程39
2.3.3成果形式40
2.4代碼走查40
2.4.1實施要點40
2.4.2組織與流程40
2.4.3成果形式41
2.5靜態測試技術分析41
〖1〗軟件測試實用方法與技術〖1〗目錄
第3章動態測試技術43
3.1白盒測試43
3.1.1概述43
3.1.2白盒測試基礎46
3.1.3基本路徑測試51
3.1.4控制結構測試53
3.1.5其他白盒測試技術61
3.2黑盒測試64
3.2.1概述64
3.2.2等價類劃分65
3.2.3邊界值分析68
3.2.4因果圖與決策表法70
3.2.5組合測試75
3.2.6基于場景測試77
3.2.7錯誤推測法81
3.2.8黑盒測試技術分析84
3.3灰盒測試85
3.3.1概述85
3.3.2實施步驟86
3.3.3灰盒測試技術分析86
3.4動態測試技術分析87
第4章單元測試89
4.1概述89
4.1.1單元測試的定義89
4.1.2單元測試的目的89
4.1.3單元測試的重要性90
4.2單元測試原則92
4.3單元測試環境92
4.4單元測試策略94
4.4.1自頂向下94
4.4.2自底向上94
4.4.3獨立單元95
4.5單元測試內容95
4.5.1功能測試96
4.5.2性能測試96
4.5.3接口測試96
4.5.4局部數據結構測試96
4.5.5邊界條件測試97
4.5.6獨立執行路徑測試97
4.5.7錯誤處理測試97
4.6單元測試方法98
4.6.1靜態測試98
4.6.2動態測試99
4.7單元測試用例設計100
4.8單元測試過程101
4.8.1測試策劃102
4.8.2靜態測試103
4.8.3動態測試111
4.8.4測試總結113
第5章集成測試114
5.1概述114
5.1.1集成測試的定義114
5.1.2集成測試的目的115
5.1.3集成測試的重要性116
5.2集成測試原則117
5.3集成測試環境117
5.4集成測試策略118
5.4.1大爆炸式集成119
5.4.2自頂向下集成120
5.4.3自底向上集成122
5.4.4三明治式集成123
5.4.5核心系統先行集成124
5.4.6分層集成125
5.4.7基于功能的集成126
5.4.8高頻集成127
5.4.9基于進度的集成128
5.4.10基于使用的集成128
5.4.11基于風險的集成129
5.4.12客戶/服務器系統的集成129
5.5集成測試內容130
5.6測試方法131
5.6.1體系結構分析131
5.6.2模塊分析131
5.6.3接口分析132
5.6.4可測試性分析133
5.6.5集成測試策略分析133
5.7集成測試用例設計133
5.8集成測試過程134
5.8.1測試策劃135
5.8.2測試設計與實現137
5.8.3測試執行138
5.8.4測試總結138
第6章配置項測試140
6.1概述140
6.1.1配置項測試的定義140
6.1.2配置項測試的目的140
6.1.3配置項測試的重要性141
6.2配置項測試原則141
6.3配置項測試環境142
6.4配置項測試策略143
6.5配置項測試內容143
6.6配置項測試方法144
6.6.1功能測試145
6.6.2性能測試146
6.6.3接口測試147
6.6.4人機交互界面測試148
6.6.5強度測試149
6.6.6余量測試149
6.6.7安全性測試150
6.6.8恢復性測試151
6.6.9邊界測試152
6.6.10數據處理測試152
6.6.11安裝性測試153
6.6.12容量測試154
6.7配置項測試用例設計154
6.7.1概述154
6.7.2SFME&FTA綜合分析155
6.7.3建立軟件測試用例設計模式158
6.7.4應用實例159
6.8配置項測試過程161
6.8.1測試策劃162
6.8.2測試設計與實現163
6.8.3測試執行164
6.8.4測試總結164
第7章系統測試166
7.1概述166
7.1.1系統測試的定義166
7.1.2系統測試的目的166
7.1.3系統測試的重要性167
7.2系統測試原則167
7.3系統測試環境168
7.4系統測試策略168
7.5系統測試內容169
7.6系統測試方法169
7.6.1可靠性測試169
7.6.2互操作性測試172
7.6.3兼容性測試173
7.7系統測試用例設計174
7.7.1概述174
7.7.2系統形式化模型175
7.7.3基于模型的系統測試178
7.7.4實例182
7.8系統測試過程184
第8章回歸測試185
8.1概述185
8.1.1回歸測試的定義185
8.1.2回歸測試的目的186
8.1.3回歸測試的重要性186
8.2回歸測試策略187
8.3軟件更動影響域分析方法187
8.3.1黑盒測試更動影響域分析187
8.3.2白盒測試更動影響域分析191
8.4回歸測試用例設計195
8.4.1回歸測試用例設計原則195
8.4.2已有測試用例的選取195
8.5回歸測試過程198
第9章面向對象軟件測試200
9.1面向對象軟件簡介200
9.2面向對象軟件測試概述203
9.2.1面向對象軟件的特點對測試的影響203
9.2.2面向對象軟件測試和傳統測試的不同204
9.2.3面向對象軟件測試分類205
9.3面向對象軟件測試模型205
9.3.1面向對象分析測試206
9.3.2面向對象設計測試208
9.3.3面向對象編程測試208
9.3.4面向對象單元測試209
9.3.5面向對象集成測試212
9.3.6面向對象系統測試215
第10章FPGA測試218
10.1FPGA測試概述218
10.1.1可編程邏輯器件的基本概念218
10.1.2硬件描述語言的發展歷程219
10.1.3VHDL語言219
10.1.4Verilog HDL語言220
10.1.5面向可編程邏輯器件的開發過程220
10.1.6可編程邏輯器件軟件與傳統軟件的不同222
10.1.7全過程域的可編程邏輯器件測試框架223
10.2靜態測試223
10.2.1文檔審查224
10.2.2代碼審查227
10.2.3編碼規則檢查229
10.2.4跨時鐘域分析230
10.2.5等效性驗證235
10.2.6靜態時序分析239
10.3仿真測試243
10.3.1仿真測試的特點244
10.3.2仿真測試平臺的組成245
10.3.3仿真測試的流程245
10.3.4功能仿真測試247
10.3.5門級仿真測試248
10.3.6時序仿真測試248
10.3.7仿真測試支持工具249
10.4軟硬協同驗證250
10.4.1驗證環境構成250
10.4.2支持工具251
10.5板級驗證251
10.5.1作用251
10.5.2板級驗證的典型環境252
10.5.3板級驗證的流程252
第11章測試工具254
11.1概述254
11.2靜態測試工具255
11.2.1Logiscope255
11.2.2PRQA257
11.2.3SpyGlass259
11.2.4PrimeTime261
11.2.5Formalpro261
11.2.6其他靜態測試工具262
11.3動態測試工具262
11.3.1QACenter262
11.3.2WinRunner265
11.3.3JUnit266
11.3.4Testbed268
11.3.5CodeTest270
11.3.6QuestaSim271
11.3.7其他動態測試工具272
11.4測試管理工具272
11.4.1TestCenter272
11.4.2TPManager274
11.4.3其他測試工具278
第12章軟件測試文檔279
12.1概述279
12.2制定測試計劃280
12.2.1測試計劃內容280
12.2.2測試計劃模板281
12.2.3測試計劃常見問題284
12.3測試設計與實現285
12.3.1測試設計與實現的內容286
12.3.2測試說明模板287
12.3.3測試設計與實現常見問題288
12.4測試執行290
12.4.1測試執行的內容290
12.4.2測試執行模板290
12.4.3測試實施常見問題292
12.5測試總結293
12.5.1測試總結的內容293
12.5.2測試總結模板294
12.5.3測試總結常見問題296
參考文獻298
CHAPTER 3第3章
動態測試技術
與靜態測試不同,動態測試需要首先設計測試用例,然后一次或多次運行被測軟件,并通過分析軟件運行結果與期望結果的差異,來分析被測軟件是否滿足要求。
前面已經介紹,軟件測試有多種分類方法。從是否關注被測程序的內部結構和實現細節的角度,軟件測試可分為白盒測試、黑盒測試,以及灰盒測試。
白盒測試利用程序設計的內部邏輯和控制結構生成測試用例,進行軟件測試;黑盒測試方法主要通過分析規格說明中被測軟件輸入和輸出的有關描述來設計測試用例,不需要了解被測軟件的實現細節;灰盒測試是介于白盒測試和黑盒測試之間的一種測試方法,基于程序運行時的外部表現并結合程序內部邏輯結構來設計測試用例,采集程序外部輸出和外部接口數據以及路徑執行信息來衡量測試結果,對軟件程序的外部需求及內部路徑都進行檢驗。
3.1白盒測試〖1〗3.1.1概述圖31白盒測試的基本原理圖白盒測試(whitebox testing)也稱結構測試、邏輯驅動測試或基于程序的測試。根據GB/T 11457—2006,結構測試(structural testing)是“側重于系統或部件內部機制的測試。類型包括分支測試、路徑測試、語句測試”。白盒測試將測試形象地比喻成把程序放在一個透明的盒子里,如圖31所示,測試人員了解被測程序的內部結構,利用程序的內部邏輯結構和相關信息,對程序的結構和路徑進行測試。白盒測試是從程序設計者的角度進行的測試。
白盒測試的方法總體上可分為靜態方法和動態方法兩大類。靜態方法是不實際執行程序而進行的測試,主要是檢查程序代碼或文檔的表示和描述是否一致、符合要求以及有無沖突或歧義。文檔審查、代碼審查、靜態分析、代碼走查等都屬于靜態測試方法,已在第2章中進行了介紹。
動態測試的主要特點是當軟件在真實的或模擬的環境中執行之前、之后及執行當中,對軟件行為進行分析。動態測試時,軟件在受控的環境下使用特定的期望結果進行正式運行,顯示其在檢查狀態下是正確還是不正確。在本節后續小節中,將主要介紹動態白盒測試技術,包括基本路徑測試、控制結構測試和其他的技術。
基本路徑測試對程序設計復雜度進行合理度量,并以此為指導來定義一個基本路徑集合。基本路徑測試對所有獨立路徑進行測試,這些獨立路徑能組成程序的任意一條路徑,因此能夠滿足分支測試的要求。基本路徑測試通過對基本路徑集生成測試用例,保證程序中的每條語句在測試中至少被執行一次。
控制結構測試是由基本路徑測試演化而來的,對程序中語句或指令的執行順序進行控制,其主要目標是選擇測試用例以滿足代碼的各種覆蓋準則。控制結構測試通常包括對判定的測試、對循環的測試、對數據流的測試等。
〖1〗軟件測試實用方法與技術〖1〗第3章動態測試技術下面給出一段代碼示例,本節后續小節將結合該代碼開展相關介紹。
問題描述: NextDate是一個函數,作用是根據輸入的日期(年、月、日)計算后一天的日期。假設NextDate函數接收的輸入值均為合法值,對輸入值是否合法的判斷在其他函數中完成,在此不再列出。
……