實用軟件工程第9章--軟件測試課件_第1頁
實用軟件工程第9章--軟件測試課件_第2頁
實用軟件工程第9章--軟件測試課件_第3頁
實用軟件工程第9章--軟件測試課件_第4頁
實用軟件工程第9章--軟件測試課件_第5頁
已閱讀5頁,還剩167頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、二、軟件測試背景軟件是人編的所以不完美實例:1994-1995,迪斯尼的獅子王系統(tǒng)不支持問題Intel的pentium處理器1994年浮點除法缺陷200年8月28日,1.13MHZ處理器一個可能導(dǎo)致運行程序被掛起的執(zhí)行指令問題1999年12月3日,美國航天局火星極地登陸飛船失蹤1991年愛國者導(dǎo)彈防御系統(tǒng)系統(tǒng)時鐘錯誤積累造成跟蹤系統(tǒng)失去精確度千年蟲,世界各地解決2000年錯誤超過數(shù)億美元 軟件產(chǎn)品最大的成本是檢測軟 件錯誤、修正軟件錯誤的成本。 在整個軟件開發(fā)中,測試工作量 一般占30%40%,甚至50%。 在人命關(guān)天的軟件(如飛機控制、核反應(yīng)堆等)測試所花費的時間往往是其它軟件工程活動時間之

2、和的三到五倍軟件測試的認識的發(fā)展人們對軟件測試認識的五個階段:階段1 測試=調(diào)試階段2 測試是證明軟件正確階段3 測試是發(fā)現(xiàn)軟件中錯誤階段4 測試是減小軟件不工作的風(fēng)險 (是度量軟件質(zhì)量要素的過程)階段5 測試是可產(chǎn)生低風(fēng)險的軟件的 一種認識上的訓(xùn)練軟件測試是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的活動過程。軟件開發(fā)過程必須伴有質(zhì)量保證活動。軟件測試是軟件質(zhì)量保證的關(guān)鍵元素,代表了規(guī)約、設(shè)計和編碼的最終檢查。 9.1.1 測試目標(1)完全預(yù)防錯誤幾乎不可實現(xiàn)(2)盡可能多地發(fā)現(xiàn)錯誤 9.1 軟件測試目標和方法測試的目的與地位 G.J.Myers在中認為:1.測試是為了尋找錯誤而運行程序的過程。2.一個好的測

3、試用例是指很可能找到迄今為止尚未發(fā)現(xiàn)的錯誤的測試。3.一個成功的測試是揭示了迄今為止尚未發(fā)現(xiàn)的錯誤的測試。 E.W.Dijkstra 指出:“程序測試能證明錯誤的存在,但不能證明錯誤不存在.” 測試的目的是發(fā)現(xiàn)程序中的錯誤,是為了證明程序有錯,而不是證明程序無錯. 把證明程序無錯當(dāng)作測試目的不僅是不正確的, 完全做不到的,而且對做好測試沒有任何益處,甚至是十分有害的. 軟件測試要設(shè)法使軟件發(fā)生故障,暴露軟件錯誤。 測試的“成功”與“失敗” 能夠發(fā)現(xiàn)錯誤的測試是成功的測試,否則是失敗的測試。 9.1.2 測試方法軟件測試的策略和方法靜態(tài)測試方法動態(tài)測試方法人工測試方法計算機輔助靜態(tài)分析方法白盒測

4、試方法黑盒測試方法靜態(tài)和動態(tài)測試汽車的檢查過程:看車漆打開前蓋檢查發(fā)動汽車聽聽發(fā)動機聲音上路行使靜態(tài)測試動態(tài)測試有時候在測試時使用靜態(tài)測試方法更為有效。靜態(tài)測試方法有計算機輔助靜態(tài)分析和人工測試等方法,其中,對源程序進行態(tài)分析的方法有生成各類引用表、靜態(tài)錯誤分析、類型和單位分析、引用分析、表達式分析和接口分析等;人工測試的方法有桌前檢查、代碼會審和走查等,檢查變量、標號的交叉引用,檢查子程序、宏、函數(shù)、常量、標準和風(fēng)格等,可以由編寫者自己非正式檢查(稱為桌前檢查),也可以由小組正式審查(稱為代碼會審)或非正式檢查(稱為走查),這里不做更詳細介紹;動態(tài)測試方法有白盒測試和黑盒測試等方法。其基本步

5、驟為: (1)選取定義域有效值,或定義域 外無效值.(2)對已選取值決定預(yù)期的結(jié)果(3)用選取值執(zhí)行程序(4)執(zhí)行結(jié)果 與(2)結(jié)果相比, 不吻和程序有錯.針對專門環(huán)境和應(yīng)用的測試(1)GUI測試常見GUI測試指南:對于窗口對于菜單和鼠標操作對于數(shù)據(jù)項(2)C/S體系結(jié)構(gòu)的測試 整體C/S測試策略(三個不同層次)客戶端應(yīng)以“分離的”模式被測試 (不考慮服務(wù)器和底層網(wǎng)絡(luò)的運行)客戶端軟件和關(guān)聯(lián)的服務(wù)器端應(yīng)用被一起測試(網(wǎng)絡(luò)運行不被明顯考慮)完整的C/S體系結(jié)構(gòu)(包括網(wǎng)絡(luò)運行和性能)被測試 C/S常用測試方法客戶端應(yīng)用功能測試服務(wù)器測試(協(xié)調(diào)和數(shù)據(jù)管理功能、性能)數(shù)據(jù)庫測試事務(wù)測試網(wǎng)絡(luò)通信測試(3

6、)實時系統(tǒng)測試可采用以下四步策略:(1) 任務(wù)測試(2) 行為測試(3) 任務(wù)間測試(4) 系統(tǒng)測試1) 任務(wù)測試 (task testing) 對每一個任務(wù)進行單獨測試(白盒、黑盒測試),發(fā)現(xiàn)邏輯和功能上錯誤,不能發(fā)現(xiàn)定時上和行為上錯誤 。2)行為測試(behavioral testing) 用CASE工具創(chuàng)建應(yīng)用系統(tǒng)模型,模擬實時系統(tǒng)行為。 按類測試各種事件(如中斷、控制信號、數(shù)據(jù))。 測試過的事件以隨機次序、隨機頻率送給系統(tǒng),檢查軟件行為方面的錯誤.3)任務(wù)間測試(intertask testing) 檢查與時間有關(guān)錯誤。 如用不同數(shù)據(jù)速率、處理負載 測試相互通信的異步任務(wù)。 通過消息隊

7、列或數(shù)據(jù)存儲測試 任務(wù)間的通信來找出數(shù)據(jù)存儲區(qū)錯 誤的范圍。4) 系統(tǒng)測試 (system testing) 軟件、硬件組裝后,找出軟、硬件接口錯誤。黑盒法測試 又稱:功能測試 數(shù)據(jù)驅(qū)動測試 基于規(guī)格說明書的測試動態(tài)黑盒測試 閉著眼睛測試軟件軟件輸入 不深入代碼細節(jié)的測試方法稱為動態(tài)黑盒測試。軟件測試員充當(dāng)客戶來使用它。輸出白盒法測試 又稱:開盒測試 結(jié)構(gòu)測試 玻璃盒測試 基于覆蓋的測試. 根據(jù)被測程序的邏輯結(jié)構(gòu)設(shè)計測試用例; 力求提高測試覆蓋率;動態(tài)白盒測試 帶上X光眼鏡測試軟件?3581322.293419985680302829734315250*(1+0.015)*(1+0.015)3

8、60-1)/0.015250*(1+0.015)*(1+0.015)360-1)/0.015 假如知道一個盒子包含一臺計算機,而另一個盒子是人用紙筆計算,就會選擇不同的測試用例了解軟件的運作方式會影響測試手段黑盒測試與白盒測試比較 黑盒測試是從用戶觀點,按規(guī)格說明書要求的輸入數(shù)據(jù)與輸出數(shù)據(jù)的對應(yīng)關(guān)系設(shè)計測試用例,是根據(jù)程序外部特征進行測試。 白盒測試是根據(jù)程序內(nèi)部邏輯結(jié)構(gòu)進行測試。 黑盒測試與白盒測試優(yōu)缺點比較 黑盒測試 白盒測試 優(yōu)點缺點性質(zhì)適用于各階段測試從產(chǎn)品功能角度測試容易入手生成測試數(shù) 據(jù)可構(gòu)成測試數(shù)據(jù)使特定程 序部分得到測試有一定的充分性度量手段可或較多工具支持某些代碼得不到測試如

9、果規(guī)格說明有誤, 則無法發(fā)現(xiàn)不易進行充分性測試不易生成測試數(shù)據(jù)(通常)無法對未實現(xiàn)規(guī)格說明的 部分進行測試工作量大,通常只用于單 元測試,有應(yīng)用局限是一種確認技術(shù),回答“我們在構(gòu)造一個正確 的系統(tǒng)嗎?”是一種驗證技術(shù),回答“我們在正確 地構(gòu)造一個系 統(tǒng)嗎?” 不論黑盒還是白盒測試都不能進行窮盡測試, 所以軟件測試不可能發(fā)現(xiàn)程序中存在的所有錯誤, 因此需精心設(shè)計測試方案, 力爭盡可能少的次數(shù),測出盡可能多的錯誤.程序測試舉例例:程序 Triangle, 輸入三個整 數(shù),表示一個三角形的三個邊 長,該程序產(chǎn)生一個結(jié)果,指 出該三角形是等邊三角形、等 腰三角形還是不等邊三角形。判斷三角型的測試用例設(shè)

10、計: 輸入數(shù)據(jù) 預(yù)期結(jié)果(1) 6;6;6 等邊(2) 8;8;4 等腰(3) 4;5;6 一般 還應(yīng)輸入非法數(shù)據(jù): 0; 7; 9 -7;3; 5 a; 2; 7 等9.1.3 測試原則(1)所有的測試都應(yīng)追溯到用戶需求 最嚴重的錯誤(從用戶角度)是那些導(dǎo)致軟件無法滿足需求的錯誤。 程序中的問題根源可能在開發(fā) 前期的各階段解決、糾正錯誤也必須追溯到前期工作。 (2)概要設(shè)計時應(yīng)完成測試計劃, 詳細的測試用例定義可在設(shè)計 模型確定后開始,所有測試可 在任何代碼被產(chǎn)生之前進行計 劃和設(shè)計。 軟件測試不等于程序測試 軟件測試應(yīng)貫穿于軟件定義與開發(fā)的整個期間; 據(jù)美國一家公司統(tǒng)計,查出的軟件錯誤中,

11、屬于需求分析和軟件設(shè)計的錯誤約占 64%,屬于程序編寫的錯誤僅占 36%。程序編寫的許多錯誤是“先天的”。(3)pareto原則:測試發(fā)現(xiàn)的錯誤中80%很可能起源于20%的模塊中。應(yīng)孤立這些疑點模塊重點測試。(4)窮舉測試是不可能的。(5)應(yīng)由獨立的第三方來構(gòu)造測試。 (開發(fā)和測試隊伍分別建立)(6)測試用例應(yīng)由輸入數(shù)據(jù)和預(yù)期的輸 出結(jié)果兩部分組成.(7)兼顧合理的輸入和不合理的輸入數(shù)據(jù)(8)程序修改后要回歸測試(9)應(yīng)長期保留測試用例,直至系統(tǒng)廢棄。軟件測試是有風(fēng)險的行為數(shù)量遺漏軟件缺陷數(shù)目測試費用測試中測試后軟件測試工作量每一個軟件項目都有一個最優(yōu)的測量量最優(yōu)測量量 “好”測試的特征: 發(fā)

12、現(xiàn)錯誤的可能性高不冗余在目的相似的測試中,應(yīng)使用最可能找到錯誤的測試每一個測試應(yīng)獨立執(zhí)行所以,軟件測試應(yīng)該是有計劃的活動,軟件測試輸入、輸出和中間信息流軟件配置測試測試配置測試工具結(jié)果分析排錯可靠性 分析測試結(jié)果錯誤預(yù)期結(jié)果出錯率 改正的軟件預(yù)測的可靠性需求規(guī)格說明書軟件設(shè)計說明書 被測源程序 測試計劃 測試用例(測試數(shù)據(jù))測試驅(qū)動程序其中,測試工具包括靜態(tài)分析工具、動態(tài)測試工具、測試數(shù)據(jù)自動生成工具和集成化測試環(huán)境等, 9.2 測試步驟單元測試: 檢驗每個模塊能否單獨工作.集成測試: 檢驗概要設(shè)計中模塊接口設(shè) 計問題(可分子系統(tǒng)和系統(tǒng))確認測試: 以需求規(guī)格說明書為檢驗尺 度(可分內(nèi)部確認和

13、驗收)系統(tǒng)測試: 綜合檢驗軟件與整個計算機 系統(tǒng) . 廣義的測試可視為分析、設(shè)計、編碼三個階段的最終復(fù)審,以保證軟件質(zhì)量.測試與開發(fā)前期工作的關(guān)系決定軟件與系統(tǒng)的配合關(guān)系需求分析概要設(shè)計詳細設(shè)計 編 碼單元測試集成測試確認測試系統(tǒng)測試設(shè)計信息軟件需求其它系統(tǒng)元素軟件測試的過程被測模塊單元測試設(shè)計信息集成測試被測模塊單元測試被測模塊單元測試測試過的模塊確認測試平行運行軟件需求其它系統(tǒng)元素裝配好的軟件 確認的軟件可運行的軟件軟件測試策略單元測試UCDRSIVST集成測試確認測試平行運行系統(tǒng)工程軟件需求分析軟件設(shè)計代碼編寫9.2.1 單元(模塊)測試單元測試著重對軟件設(shè)計的最小單元(軟件構(gòu)件或模塊)

14、進行驗證。這里將構(gòu)件或模塊統(tǒng)一稱為模塊。單元測試根據(jù)設(shè)計描述,對重要的控制路徑進行測試,以發(fā)現(xiàn)模塊內(nèi)部的錯誤,主要揭露編碼階段產(chǎn)生的錯誤。單元測試通常采用白盒測試法,也可多個模塊并行進行測試。1.單元測試的內(nèi)容主要對模塊的五個基本特性進行評價模塊錯誤處理模塊接口局部數(shù)據(jù)結(jié)構(gòu) 重要的執(zhí)行路徑邊界條件常見錯誤類型 接口錯誤I/O錯誤數(shù)據(jù)結(jié)構(gòu)錯誤算法錯誤比較及控制邏輯錯誤錯誤處理錯誤模塊測試基本原則 至少一次測試所有語句測試所有可能的執(zhí)行或邏輯路徑的組合測試每個模塊的所有入口和出口2. 單元測試的環(huán)境 單元測試一般為編碼步驟的附屬部分.模塊不是獨立的程序,自己不能運行,要靠其它部分來調(diào)用和驅(qū)動,要為

15、每個單元測試開發(fā)兩個軟件:(1)驅(qū)動模塊(驅(qū)動程序):相當(dāng)于主模塊(2)樁模塊(測試存根、連接程序) : 代替所測模塊調(diào)用的子模塊單元測試的測試環(huán)境舉例:BACDE待測試模塊單元測試的測試環(huán)境舉例:被測模塊 B 驅(qū)動模塊(模擬模塊A)樁模塊(測試存根)(模擬模塊E)測試用例測試結(jié)果 許多模塊不能用簡單的軟件進行充分的單元測試, 此時, 完全的測試可放到集成測試階段再進行.單元測試的測試環(huán)境舉例: 實際軟件華氏到懾氏轉(zhuǎn)換模塊溫度數(shù)據(jù)實際配置測試用例數(shù)據(jù)結(jié)果 測試驅(qū)動軟件華氏到懾氏轉(zhuǎn)換模塊結(jié)果測試驅(qū)動際配置單元測試的測試環(huán)境舉例 溫度顯示模塊溫度接口模塊實際配置測試驅(qū)動際配置 溫度顯示模塊程序員編

16、寫的樁模塊(測試存根)溫度值的測試文件9.2.2 集成測試(組裝測試)集成測試又稱組裝測試或聯(lián)合測試。經(jīng)單元測試后,每個模塊都能獨立工作,但把它們放在一起往往不能正常工作,需要做集成測試。集成測試針對集成的軟件系統(tǒng),主要揭露設(shè)計階段產(chǎn)生的錯誤,通常采用黑盒測試技術(shù)。 集成測試需考慮的問題:數(shù)據(jù)穿越接口可能丟失.一模塊可能破壞另一模塊功能.子功能組裝可能未產(chǎn)生所要求的 主功能.全程數(shù)據(jù)結(jié)構(gòu)可能出問題.誤差累積問題.1.集成測試策略通常采用黑盒測試技術(shù)實施策略:非漸增式測試漸增式測試 深度優(yōu)先廣度優(yōu)先自頂向下結(jié)合自底向上結(jié)合(1)非漸增式集成方式 一次就把所有通過了單元測試的模塊組合在一起進行全程

17、序的測試.缺點:發(fā)現(xiàn)錯誤難以診斷定位. 又稱“莽撞測試” .(2) 漸增式集成方式 從一個模塊開始,測一次添加一個模塊,邊組裝邊測試,以發(fā)現(xiàn)與接口相聯(lián)系的問題。自頂向下結(jié)合方式舉例:ADBE模塊測試結(jié)合順序CF深度優(yōu)先:A、B、E、C、D、F廣度優(yōu)先:A、B、C、D、E、F自頂向下結(jié)合方式舉例:(深度優(yōu)先)A測試 AS2S1S3A加入BS2BS3S4A加入ES2BS3EA加入CCBS3E加入DCBDE加入FCBDEAAFS5自底向上結(jié)合方式舉例:ACBDFEEd1Cd3Fd4Bd2EDd5F自底向上結(jié)合方式舉例:McD1MaMbD2D3簇1簇2簇3 自頂向下 自底向上優(yōu)點 可在測試早期 設(shè)計測

18、試用例容易 實現(xiàn)并驗證系 統(tǒng)主要功能 不需驅(qū)動模塊 不需樁模塊 缺點 需樁模塊 只有到最后程序才 能作為一個整體(3)混合集成方式一般對軟件結(jié)構(gòu)的上層使用自頂向下結(jié)合的方法;對下層使用自底向上結(jié)合的方法;9.2.3 確認測試(Validation Testing) 確認測試是根據(jù)軟件需求規(guī)約對集成的軟件進行確認。確認測試標準 確認測試以軟件需求規(guī)約為依據(jù),以發(fā)現(xiàn)軟件與需求不一致的錯誤。主要檢查:軟件是否實現(xiàn)了規(guī)約規(guī)定的全部功能要求; 文檔資料是否完整、正確、合理;其他的需求,如可移植性、可維護性、兼容性、錯誤恢復(fù)能力等是否滿足。軟件配置評審軟件配置評審也稱軟件審計(audit),其目的是保證軟

19、件配置的所有成分都齊全,各方面的質(zhì)量都符合要求,具有維護階段必需的細節(jié),而且已經(jīng)編排好分類目錄。軟件配置主要包括計算機程序(源代碼和可執(zhí)行程序),針對開發(fā)者和用戶的各類文檔,包含在程序內(nèi)部或程序外部的數(shù)據(jù)。測試和測試如果軟件是為一個客戶開發(fā)的,那么,最后由客戶進行驗收測試(acceptance test),以使客戶確認該軟件是他所需要的。如果軟件是給許多客戶使用的(如市場上銷售的各種軟件),那么讓每個客戶做驗收測試是不現(xiàn)實的。大多數(shù)軟件廠商都使用一種稱為測試和測試的過程,來發(fā)現(xiàn)那些似乎只有最終用戶才能發(fā)現(xiàn)的錯誤。測試是由一個用戶在開發(fā)者的場所進行的,軟件在開發(fā)者對用戶的“指導(dǎo)下”進行測試。經(jīng)測

20、試后的軟件稱為版軟件。測試是由軟件的最終用戶在一個或多個用戶場所進行的,與測試不同,開發(fā)者通常不在測試現(xiàn)場,因此,測試是軟件在一個開發(fā)者不能控制的環(huán)境中的“活的”應(yīng)用,用戶記錄所有在測試中遇到的(真正的或想象的)問題,并定期把這些問題報告給開發(fā)者,在接到測試的問題報告后,開發(fā)者對軟件進行最后的修改,然后著手準備向所有的用戶發(fā)布最終的軟件產(chǎn)品。 確認測試的結(jié)果可分為兩類:滿足需求規(guī)約要求的功能或性能特性,用戶可以接受。 發(fā)現(xiàn)與需求規(guī)約有偏差,此時需列出問題清單。9.2.4 系統(tǒng)測試(System Testing)系統(tǒng)測試是對整個基于計算機的系統(tǒng)進行的一系列測試。系統(tǒng)測試的種類很多,每種測試都有不

21、同的目的,它們從不同的角度測試計算機系統(tǒng)是否被正常地集成,并完成相應(yīng)的功能。常用的系統(tǒng)測試包括:恢復(fù)測試(recovery testing)安全測試(security testing)壓力測試(stress testing)性能測試(performance testing)1.恢復(fù)測試(recovery testing)恢復(fù)測試是通過各種手段,強制軟件發(fā)生故障,然后來驗證系統(tǒng)能否在指定的時間間隔內(nèi)恢復(fù)正常,包括修正錯誤并重新啟動系統(tǒng)。如果恢復(fù)是由系統(tǒng)自身來完成的,那么,需驗證重新初始化、檢查點機制、數(shù)據(jù)恢復(fù)和重啟動等的正確性。如果恢復(fù)需要人工干預(yù),那么要估算平均修復(fù)時間MTTR(mean ti

22、me to repair)是否在用戶可以接受的范圍內(nèi)。2.安全測試(security testing)安全測試用來驗證集成在系統(tǒng)中的保護機制能否實際保護系統(tǒng)不受非法侵入。在安全測試過程中,測試者扮演一個試圖攻擊系統(tǒng)的角色,采用各種方式攻擊系統(tǒng)。例如,截取或碼譯密碼;借助特殊軟件攻擊系統(tǒng);“制服”系統(tǒng),使他人無法訪問;故意導(dǎo)致系統(tǒng)失效,企圖在系統(tǒng)恢復(fù)之機侵入系統(tǒng);通過瀏覽非保密數(shù)據(jù),從中找出進入系統(tǒng)的鑰匙等等。一般來說,只要有足夠的時間和資源,好的完全測試一定能最終侵入系統(tǒng)。系統(tǒng)設(shè)計者的任務(wù)是把系統(tǒng)設(shè)計成:攻破系統(tǒng)所付出的代價大于攻破系統(tǒng)后得到信息的價值。3.壓力測試(stress testin

23、g)壓力測試也稱強度測試,它是在一種需要非正常數(shù)量、頻率或容量的方式下執(zhí)行系統(tǒng),其目的是檢查系統(tǒng)對非正常情況的承受程度。例如:當(dāng)系統(tǒng)的中斷頻率是每秒1或2個時,執(zhí)行每秒10個中斷的測試用例將輸入數(shù)據(jù)的數(shù)量提高一個數(shù)量級來測試輸入功能如何響應(yīng)執(zhí)行需要最大內(nèi)存或其它資源的測試用例執(zhí)行可能導(dǎo)致大量磁盤駐留數(shù)據(jù)的測試用例4.性能測試(performance testing)性能測試用來測試軟件在集成的系統(tǒng)中的運行性能。它對實時系統(tǒng)和嵌入式系統(tǒng)尤為重要。性能測試可以發(fā)生在測試過程的所有步驟中單元測試時,主要測試一個獨立模塊的性能,如算法的執(zhí)行速度。軟件集成后,進行軟件整體的性能測試。計算機系統(tǒng)集成后,進

24、行整個計算機系統(tǒng)的性能測試。性能測試常常需要與壓力測試結(jié)合起來進行,而且常常需要一些硬件和軟件測試設(shè)備,以監(jiān)測系統(tǒng)的運行情況。有的比較重要的系統(tǒng)還需要平行運行。 平行運行是指投入運行后,與舊系統(tǒng)同時使用的一種測試。 是系統(tǒng)測試的一種。一般持續(xù)幾個月到一年。9.3 測試用例設(shè)計9.3.1 黑盒法 黑盒測試是依據(jù)軟件的需求規(guī)約,檢查程序的功能是否符合需求規(guī)約的要求。 主要的黑盒測試方法有等價類劃分、邊界值分析、錯誤猜測、比較測試和因果圖等方法。1.等價劃分法 把所有可能的輸入數(shù)據(jù)(有效的和無效的)劃分成若干個等價的子集(稱為等價類), 使得每個子集中的一個典型值在測試中的作用與這一子集中所有其它值

25、的作用相同. 可從每個子集中選取一組數(shù)據(jù)來測試程序(1)等價類 等價類是指輸入或輸出域的某個子集,該子集中的每個輸入或輸出數(shù)據(jù)對揭露軟件中的錯誤都是等效的,測試等價類的某個代表值就等價于測試這一類其他值。也就是說,如果該子集中的某個輸入或輸出數(shù)據(jù)能檢測出某個錯誤,那么該子集中的其他輸入或輸出數(shù)據(jù)也能檢測出同樣的錯誤,反之,如果該子集中的某個輸入或輸出數(shù)據(jù)不能檢測出錯誤,那么該子集中的其他輸入或輸出數(shù)據(jù)也不能檢測出錯誤。 有效等價類(合理等價類) 有效輸入或輸出數(shù)據(jù)即符合規(guī)格說明要求的合理的輸入或輸出數(shù)據(jù)的等價類,主要用來檢驗程序是否實現(xiàn)了規(guī)格說明中的功能。 無效等價類(不合理等價類) 無效輸入

26、或輸出數(shù)據(jù)即不符合規(guī)格說明要求的不合理或非法的輸入或輸出數(shù)據(jù)的等價類,主要用來檢驗程序是否做了規(guī)格說明以外的事。 (2)劃分等價類的規(guī)則劃分等價類的原則:覆蓋不相交代表性具體規(guī)則 1)如果輸入條件規(guī)定了取值范圍, 可定義一個有效等價類和兩個無 效等價類。例 :輸入值是學(xué)生成績,范圍是01000 100 有效等價類1成績100無效等價類 成績100 無效等價類 成績0具體規(guī)則: 2)如果輸入條件代表集合的某 個元素,則可定義一個有效 等價類和一個無效等價類。 例:規(guī)定輸入的考試成績?yōu)閮?yōu)、良、中、及格、不及格,則可確定一個有效等價類優(yōu)、良、中、及格、不及格和一個無效等價類(所有不是這5個成績之一的

27、)。劃分等價類的規(guī)則: 3)如規(guī)定了輸入數(shù)據(jù)的一組值,且 程序?qū)Σ煌斎胫底霾煌幚恚?則每個允許的輸入值是一個有 效等價類,并有一個無效等價類 (所有不允許的輸入值的集合)。例:輸入條件說明學(xué)歷可為:??啤⒈究?、 碩士、博士四種之一,則分別取這四 種這四個值作為四個有效等價類,另 外把四種學(xué)歷之外的任何學(xué)歷作為無 效等價類劃分等價類的規(guī)則:4)如果輸入條件規(guī)定了值的個數(shù),則可以確定一個有效等價類(輸入值的個數(shù)等于規(guī)定的個數(shù))和兩個無效等價類(輸入值的個數(shù)小于規(guī)定的個數(shù)和大于規(guī)定的個數(shù))。 例:規(guī)定輸入構(gòu)成三角形的3條邊,則有效等價類是“輸入邊數(shù) = 3”,無效等價類是“輸入邊數(shù) 3”和“輸入

28、邊數(shù) 3”。劃分等價類的規(guī)則: 5)如果規(guī)定了輸入數(shù)據(jù)必須遵循的規(guī) 則,可確定一個有效等價類(符合 規(guī)則)和若干個無效等價類(從不 同角度違反規(guī)則)。 例:在Pascal語言中對變量標識符規(guī)定為“以字母開頭的串”。那么有效等價類是“以字母開頭的串”,而無效等價類有“以數(shù)字開頭的串”、“以標點符號開頭的串”等。 6)如已劃分的等價類各元素在程序中 的處理方式不同,則應(yīng)將此等價 類進一步劃分成更小的等價類。 以上只是列舉了一些典型規(guī)則,實際情況往往是千變?nèi)f化的,在遇到具體問題時,可參照上述規(guī)則的思想來劃分等價類。(3)設(shè)計測試用例 步驟: 1)形成等價類表,每一等價類規(guī)定 一個唯一的編號; 2)設(shè)

29、計一測試用例,使其盡可能多 地覆蓋尚未覆蓋的有效等價類, 重復(fù)這一步驟,直到所有有效等 價類均被測試用例所覆蓋; 3)設(shè)計一新測試用例,使其只覆蓋 一個無效等價類,重復(fù)這一步驟 直到所有無效等價類均被覆蓋;例:某報表處理系統(tǒng)要求用戶輸入處理 報表的日期,日期限制在2001年1 月至2005年12月,即系統(tǒng)只能對該 段期間內(nèi)的報表進行處理,如日期 不在此范圍內(nèi),則顯示輸入錯誤信 息。 系統(tǒng)日期規(guī)定由年、月的6位數(shù)字 字符組成,前四位代表年,后兩位 代表月。 如何用等價類劃分法設(shè)計測試用例, 來測試程序的日期檢查功能?第一步:等價類劃分,并列表和編號。 輸入等價類 有效等價類 無效等價類 報表日期

30、的類型及長度6位數(shù)字字符(1)有非數(shù)字字符 (4)少于6個數(shù)字字符 (5)多于6個數(shù)字字符 (6)年份范圍在20012005之間 (2)小于2001 (7)大于2005 (8)月份范圍在112之間(3)“報表日期”輸入條件的等價類表小于1 (9)大于12 (10)第二步:為有效等價類設(shè)計測試用例 對表中編號為1,2,3的3個有效等價類 用一個測試用例覆蓋: 測試數(shù)據(jù) 期望結(jié)果 覆蓋范圍200105等價類(1)(2)(3)輸入有效第三步:為每一個無效等價類設(shè)至少 計一個測試用例 測試數(shù)據(jù) 期望結(jié)果 覆蓋范圍001MAY等價類(4)輸入無效20015等價類(5)輸入無效2001005等價類(6)輸

31、入無效200005等價類(7)輸入無效200805等價類(8)輸入無效200100等價類(9)輸入無效200113等價類(10)輸入無效不能出現(xiàn)相同的測試用例本例的10個等價類至少需要8個測試用例例:對招干考試系統(tǒng)“輸入學(xué)生成績” 子模塊設(shè)計測試用例 招干考試分三個專業(yè),準考證號第一位 為專業(yè)代號,如: 1-行政專業(yè), 2-法律專業(yè), 3-財經(jīng)專業(yè). 行政專業(yè)準考證號碼為:110001111215法律專業(yè)準考證號碼為:210001212006財經(jīng)專業(yè)準考證號碼為:310001314015例:準考證號碼的等價類劃分 有效等價類: (1) 110001 111215 (2) 210001 2120

32、06 (3) 310001 314015 無效等價類: (4) - 110000 (5) 111216 210000 (6) 212007 31000 (7) 314016 + 例:計算給定月份中天數(shù)的方法接口(java):Class MyGregorianCalender public static in getNumDaysInMonth(int month,int year)getNumDaysInMonth( )方法有兩個參數(shù), 月和年,年份的有效輸入是從0到maxInt.有效等價類和用來測試getNumDaysInMonth()方法所選的有效輸入 有效等價類一個月有31天,非閏年19

33、017(七月)一個月有31天, 閏年19047(七月)一個月有30天,非閏年19016(六月)一個月有30天, 閏年19046(六月)一個月為28或29天,非閏年19012(二月)月份輸入值年份輸入值一個月為28或29天, 閏年2(二月)1904用來測試getNumDaysInMonth()方法的附加邊界值等價類可以被400整除的閏年20002(二月)可以被100整除的非閏年19002(二月)非正數(shù)無效月份12910正數(shù)無效月份131513月份輸入值年份輸入值 2.邊界值分析法 等價類劃分即把輸入空間分解成一系列子域,軟件在一個子域內(nèi)的行為應(yīng)是等價的。 軟件錯誤分為兩類:計算錯誤 域錯誤針對計

34、算錯誤的測試方法針對域錯誤的測試方法:測試域邊界 劃定的正確性邊界值分析法與等價類劃分法區(qū)別(1)邊界值分析不是從某等價類中 隨便挑一個作為代表,而是使 這個等價類的每個邊界都要作 為測試條件。(2)邊界值分析不僅考慮輸入條件, 還要考慮輸出空間產(chǎn)生的測試 情況被測試子 域測試內(nèi)點測試外點軟件邊界與懸崖很類似邊界條件類型 如果軟件測試問題包含確定的邊界,那么數(shù)據(jù)類型可能是:數(shù)值字符位置數(shù)量速度地址尺寸還要考慮數(shù)據(jù)類型的特征:第一個/最后一個最小值/最大值開始/完成空/滿最慢/最快相鄰/最遠超過/在內(nèi)測試邊界線測試臨近邊界的合法數(shù)據(jù),以及剛超過邊界的非法數(shù)據(jù).越界測試通常簡單地加1或很小的數(shù) (

35、對于最大值)和減1或很小的數(shù)(對于最小值). 輸入條件報表日期的類型及長度1個數(shù)字字符5個數(shù)字字符7個數(shù)字字符有1個非數(shù)字字符全部是非數(shù)字字符6個數(shù)字字符顯示出錯顯示出錯顯示出錯顯示出錯顯示出錯輸入有效日期范圍月份范圍“報表日期”邊界值分析法測試用例測試用例說明測試數(shù)據(jù)期望結(jié)果選取理由52001520010052001.5MAY-200105月份為1月月份為12月月份12200101200112200100200113200101200512200100200513輸入有效輸入有效顯示出錯顯示出錯輸入有效輸入有效顯示出錯顯示出錯在有效范圍邊界上選取數(shù)據(jù)僅有1個合法字符比有效長度少1比有效長度多

36、1只有1個非法字符6個非法字符類型及長度均有效最小日期最大日期剛好小于最小日期剛好大于最大日期最小月份最大月份剛好小于最小月份剛好大于最大月份3.錯誤推測法(error guessing) 根據(jù)經(jīng)驗來設(shè)計測試用例的方法例如,數(shù)據(jù)測試中的:缺省值空白空值零值無 4. 因果圖法 在等價類劃分方法和邊界值方法中均未考慮輸入條件的各種組合。當(dāng)輸入條件比較多時,輸入條件組合的數(shù)目會相當(dāng)大。 因果圖方法是一種幫助人們系統(tǒng)地選擇一組高效測試用例的方法,它既考慮了輸入條件的組合關(guān)系,又考慮了輸出結(jié)果對輸入條件的依賴關(guān)系,即因果關(guān)系,其測試用例發(fā)現(xiàn)錯誤的效率比較高。 這里不做詳細介紹,需要時可參閱參考文獻1等教

37、材。5.實用測試策略 等價劃分法與邊界值分析法結(jié)合任何時候都要使用邊界值分析法等價劃分法作為邊界植分析法的補充最后用錯誤推測法補充9.3.2 白盒法 常用的白盒測試方法有邏輯覆蓋法、基本路徑覆蓋法、數(shù)據(jù)流測試和循環(huán)測試等。 1.邏輯覆蓋法 邏輯覆蓋主要考察使用測試數(shù)據(jù)運行被測程序時對程序邏輯的覆蓋程度。通常希望選擇最少的測試用例來滿足所需的覆蓋標準, (1)語句覆蓋(2)判定覆蓋(3)條件覆蓋(4)判定/條件覆蓋(5)條件組合覆蓋(6)路徑覆蓋(7)點覆蓋(8)邊覆蓋例:PROCEDURE SAMPAL (A,B:REAL; VAR X:REAL); BEGIN IF (A1) AND (B=

38、0) THEN X:=X/A IF (A=2) OR (X1) THEN X:=X+1 END; 開始返回(A1) AND (B=0)(A=2) OR (X1)X=X/AX=X+1FFTTabdce(1)語句覆蓋 選擇足夠的測試用例,使得運行這些測試用例時,被測程序的使程序中每個語句至少執(zhí)行一次。 語句覆蓋是最弱的邏輯覆蓋。 語句覆蓋開始(A1) AND (B=0)(A=2) OR (X1)返回X=X/AX=X+1FFTTabdce只需設(shè)計一個測試用例:輸入數(shù)據(jù):A=2,B=0,X=4輸出數(shù)據(jù):X3。即達到了語句覆蓋;(2)判定覆蓋(分支覆蓋) 指選擇足夠的測試用例,使得運行這些測試用例時,被

39、測程序的每個判定的所有可能結(jié)果都至少執(zhí)行一次(即判定的每個分支至少經(jīng)過一次)判定覆蓋開始(A1) AND (B=0)(A=2) OR (X1)返回X=X/AX=X+1FFTTabdce例:可設(shè)計兩組測試用例:輸入數(shù)據(jù):A=3,B=0 ,X=3 ;輸出數(shù)據(jù):X=1。(可覆蓋c、d分支) 輸入數(shù)據(jù):A=2,B=1 ,X=1 ;輸出數(shù)據(jù):X=2。(可覆蓋b、e分支)兩組測試用例可覆蓋所有判定的真假分支(3)條件覆蓋 選擇足夠的測試用例,使得運行這些測試用例時,使每個判定的每個條件的可能取值至少執(zhí)行一次第一判定表達式:設(shè)條件 A1 取真 記為 T1 假 T1 條件 B=1 取真 記為 T2 假 T2第

40、二判定表達式:設(shè)條件 A=2 取真 記為 T3 假 T3 條件 X1 取真 記為 T4 假 T4條件覆蓋開始(A1) AND (B=0)(A=2) OR (X1)返回X=X/AX=X+1FFTTabdce滿足條件: T1,T1, T2,T2 T3,T3 T4,T4測試用例 通過 滿足的 覆蓋A B X X 路徑 條件 分支1 0 3 4 abe T1,T2,T3,T4 b,e2 1 1 2 abe T1,T2,T3,T4 b,e 兩個測試用例覆蓋了四個條件八種可能取值。未覆蓋c、d分支,不滿足判定覆蓋的要求.條件覆蓋不一定包含判定覆蓋判定覆蓋也不一定包含條件覆蓋(4)判定/條件覆蓋 選取足夠多

41、的測試用例,使判斷中的每個條件的所有可能取值至少執(zhí)行一次,同時每個判斷本身的所有可能判斷結(jié)果至少執(zhí)行一次.判定/條件 覆蓋開始(A1) AND (B=0)(A=2) OR (X1)返回X=X/AX=X+1FFTTabdce滿足條件: T1,T1, T2,T2 T3,T3 T4,T4測試用例 通過 滿足的 覆蓋A B X X 路徑 條件 分支2 0 4 3 ace T1,T2,T3,T4 c,e2 1 1 2 abd T1,T2,T3,T4 b,d 能同時滿足判定、條件兩種覆蓋標準。(5)條件組合覆蓋 指選擇足夠的測試用例,使得運行這些測試用例時,所有可能的條件取值組合至少執(zhí)行一次 A1, B=

42、0 A1, B0 A1, B=0 A1, B0 A=2, X1 A=2, X1 A2, X1 A2, X1測試用例 通過 滿足的 覆蓋A B X X 路徑 條件 分支2 0 4 3 ace T1,T2,T3,T4 c,e2 1 1 2 abe T1,T2,T3,T4 b,e1 0 2 2 abd T1,T2,T3,T4 b,d1 1 1 1 abd T1,T2,T3,T4 b,d 顯然,滿足條件組合覆蓋標準的測試用例一定也滿足判定覆蓋、條件覆蓋、判定/條件覆蓋、語句覆蓋標準。 測試用例 通過 滿足的 覆蓋A B X X 路徑 條件 分支2 0 3 2 ace T1,T2,T3,T4 c,e2

43、1 1 2 abe T1,T2,T3,T4 b,e1 0 3 4 abe T1,T2,T3,T4 b,e1 1 1 1 abd T1,T2,T3,T4 b,d 滿足條件/判定覆蓋的不一定滿足條件組合覆蓋。 (6)路徑覆蓋 指選擇足夠的測試用例,使得運行這些測試用例時,覆蓋每一個可能的路徑。測試用例 通過 滿足的 覆蓋A B X X 路徑 條件 分支1 1 1 1 abd T1,T2,T3,T4 b,d1 1 2 3 abe T1,T2,T3,T4 b,e3 0 1 0 acd T1,T2,T3,T4 c,d2 0 4 3 ace T1,T2,T3,T4 c,e2.基本路徑測試法 通過分析由控制

44、構(gòu)造的環(huán)路的復(fù)雜性,導(dǎo)出基本路徑集合,從而設(shè)計測試用例,保證這些路徑至少通過一次。 基本路徑測試步驟: 導(dǎo)出程序流程圖的拓撲結(jié)構(gòu)-流圖 (程序圖) 計算流圖G的環(huán)路復(fù)雜度V(G) 確定只包含獨立路徑的基本路徑集 設(shè)計測試用例(1)導(dǎo)出程序流程圖的拓撲結(jié)構(gòu)-流圖12,364,5710611a節(jié)點邊R4區(qū)域12345873911程序流程圖89R1R2R3計算流圖G的環(huán)路復(fù)雜度V(G) V(G)= 區(qū)域個數(shù)=4 V(G)=邊的條數(shù)-節(jié)點個數(shù)+2=4 V(G)=判定節(jié)點個數(shù)+1=4(2)確定只包含獨立路徑的基本路徑集path1:1-11path1:1-2-3-4-5-10-1-11path1:1-2-

45、3-6-8-9-10-1-11path1:1-2-3-6-7-9-10-1-11 一條新路徑必須包含一條新邊。 這4條路徑組成了一個基本路徑集。4(環(huán)路復(fù)雜度V(G)是構(gòu)成這個基本路徑集的獨立路徑數(shù)的上界,也是設(shè)計測試用例的數(shù)目。 (3)設(shè)計測試用例,保證基本路徑集中每條路徑的執(zhí)行。3. 判定結(jié)構(gòu)分析當(dāng)程序中判定多于一個時,形成的分支結(jié)構(gòu)可以分為兩類:嵌套型分支結(jié)構(gòu)和連鎖型分支結(jié)構(gòu)。對于嵌套型分支結(jié)構(gòu),若有n個判定語句,需要n+1個測試用例;對于連鎖型分支結(jié)構(gòu), 若有n個判定語句,需要有2n個測試用例,覆蓋它的2n條路徑。嵌套型分支結(jié)構(gòu)連鎖型分支結(jié)構(gòu)s1s2s3s4p1p2p3s1s2s3s4

46、s5s6p1p2p3對于連鎖型分支結(jié)構(gòu),當(dāng) n 較大時將無法測試。為減少測試用例的數(shù)目,可采用試驗設(shè)計法,抽取部分路徑進行測試。由于抽樣服從均勻分布,因此,在假定各條路徑的重要性相同,或暫不明確各條路徑的重要性的情況下可以做到均勻抽樣。如果明確了各條路徑的重要性,還可以采取加權(quán)的辦法,篩選掉部分路徑,再用如下的措施進行抽樣。 設(shè)連鎖型分支結(jié)構(gòu)中有 n 個判定,計算滿足關(guān)系式 n+12m 的最小自然數(shù)m;設(shè)t = 2m,取正交表Lt,并利用它設(shè)計測試數(shù)據(jù)。例如,一個連鎖型分支結(jié)構(gòu)中有三個判定語句p1,p2,p3。全部路徑是238 條。先計算3+12m = t 的 t,得 t = 4。取正交表L4

47、,把每一列當(dāng)做一個判定,每一行當(dāng)做可取的測試用例,可得4個測試用例。 用各個判定的取假分支取代正交表L4中的“0”,用取真分支取代正交表中的“1”,就建立起一個測試路徑矩陣。這樣,測試路徑數(shù)目從238條減少到314條。 L40 0 01 0 10 1 11 1 01 2 31234用例s1 s3 s5s2 s3 s6s1 s4 s6s2 s4 s5p1 p2 p31234s1 s3 s5s2 s3 s6s1 s4 s6s2 s4 s5路 徑s1s3s5p1p2p3s2s3s6p1p2p3s1s4s6p1p2p3s2s4s5p1p2p3L201112L40 0 01 0 10 1 11 1 01

48、 2 31234L2L80 0 0 0 0 0 01 0 1 0 1 0 10 1 1 0 0 1 11 0 0 1 1 00 0 0 1 1 1 10 1 1 0 1 00 1 1 1 1 0 01 1 0 1 0 0 11 2 3 4 5 6 712345678L44. 循環(huán)結(jié)構(gòu)分析循環(huán)分為4種不同類型:簡單循環(huán)、連鎖循環(huán)、嵌套循環(huán)和非結(jié)構(gòu)循環(huán)。(1) 簡單循環(huán) 零次循環(huán):從循環(huán)入口到出口 一次循環(huán):檢查循環(huán)初始值 二次循環(huán):檢查多次循環(huán) m次循環(huán): 檢查在多次循環(huán) 最大次數(shù)循環(huán)、比最大次數(shù)多一次、少一次的循環(huán)。簡單循環(huán)設(shè)計測試用例的例子:求最小值k = i;for ( j = i+1;

49、j = n; j+ ) if ( Aj Ak ) k = j; k = i ; j = i+1;j = n?AjAk?k = jj +fdcabe測試用例選擇 對最內(nèi)層循環(huán)做簡單循環(huán)的全部測試。所有其他層的循環(huán)變量置為最小值; 逐步外推,對其外面一層循環(huán)進行測試。測試時保持所有外層循環(huán)的循環(huán)變量取最小值,所有其他嵌套內(nèi)層循環(huán)的循環(huán)變量取“典型”值。 反復(fù)進行,直到所有各層循環(huán)測試完畢。(2) 嵌套循環(huán) 對全部各層循環(huán)同時取最小循環(huán)次數(shù),或者同時取最大循環(huán)次數(shù)(3) 連鎖循環(huán)如果各個循環(huán)互相獨立,則可以用與簡單循環(huán)相同的方法進行測試。但如果幾個循環(huán)不是互相獨立的,則需要使用測試嵌套循環(huán)的辦法來處

50、理。(4) 非結(jié)構(gòu)循環(huán)這一類循環(huán)應(yīng)該使用結(jié)構(gòu)化程序設(shè)計方法重新設(shè)計測試用例。因果圖法 因果圖適合于描述對于多種輸入條件的組合,相應(yīng)產(chǎn)生多個動作的形式來設(shè)計測試用例。 因果圖方法最終生成的是判定表。因果圖方法實例某電力公司有A、B、C、D四類收費標準,并規(guī)定:居民用電 100度/月 按A類收費 100度/月按B類收費動力用電 10000度/月,非高峰,B類收費 10000度/月,非高峰,C類收費 10000度/月, 高峰,C類收費 10000度/月, 高峰,D類收費用因果圖表明輸入和輸出間的邏輯關(guān)系1I12B4AC35DI4I3I2把因果圖轉(zhuǎn)換為判定表組合條件條件(原因) 動作(結(jié)果)ABC12

51、3123456101100011000110000100001104101050011D000110010000測試用例為判定表每一列設(shè)計一個測試用例:1列 居民電,90度/月 A2列 居民電,110度/月 B3列 動力電,非高峰,8000度/月 B4列 動力電,非高峰,1.2萬度/月 C5列 動力電, 高峰,0.9萬度/月 C6列 動力電, 高峰,1.1萬度/月 D 條件 測試用例 預(yù)期結(jié)果組合 (輸入數(shù)據(jù)) (輸出動作)9.3.3 調(diào)試(糾錯技術(shù)) 測試是找出軟件錯誤的過程; (醫(yī)生做各種檢查或檢驗,找出不正常的體征或指標) 調(diào)試是確定錯誤的位置、性質(zhì)并糾正。 (醫(yī)生診斷病因并給出治療方案

52、) 調(diào)試的困難在于錯誤的定位(排錯).(醫(yī)生找出病因)調(diào)試的執(zhí)行步驟錯誤現(xiàn)場結(jié)果執(zhí)行案例改正測試用例調(diào)試已識別的原因被懷疑的原因回歸測試附加測試排錯策略方法1.蠻干法(強行排錯,brute force)常見形式:(1)打印出所有存儲內(nèi)容、代碼(2)程序中設(shè)打印語句(3)用自動糾錯工具 效率最低2.回溯法(跟蹤法) 根據(jù)錯誤癥狀位置,人工沿程序控制流程向回追蹤源代碼。 適用于小程序,路徑數(shù)目很大時無法進行。3.消去原因(cause limitation)列出可能原因,逐個排除,找出問題(1) 試探法(2) 歸納法(3) 演繹法(4) 二分查找法(1) 歸納法收集有關(guān)數(shù)據(jù)組織數(shù)據(jù)構(gòu)造線索研究線索關(guān)

53、系假設(shè)錯誤原因證明假設(shè)糾正錯誤能不能證明線索關(guān)系錯誤線索能不能(2) 演繹法列舉可能錯誤原因排除不會發(fā)生原因?qū)ΡA舻募僭O(shè)推斷證明留下的假設(shè)確定錯誤待定錯因剩余錯因能出錯原因不能收集更多數(shù)據(jù)無剩余修改錯誤原則注意錯誤的群集現(xiàn)象,在錯誤近鄰檢查。找到錯誤的本質(zhì)并修改采用回歸測試,避免因修改引起的新錯誤。修改源程序。9.4 可靠性分析 開發(fā)過程中,利用測試的統(tǒng)計數(shù)據(jù)來估算軟件的可靠性,以控制軟件的質(zhì)量。統(tǒng)計錯誤的產(chǎn)生頻度推測殘留在程序中的錯誤數(shù)評價測試的精確度和覆蓋率(推測錯誤產(chǎn)生的時間間隔,可靠性的一種度量)1K(ET/IT- Ec(t)/IT)方法:估算平均故障時間(MTTF估算公式)當(dāng)故障率為

54、獨立于時間的常量:MTTF K : 經(jīng)驗常數(shù),通常取200。ET : 程序中原有的殘留錯誤數(shù)IT : 程序長度t: 測試時間 Ec(t):在0-t期間內(nèi)發(fā)現(xiàn)的錯誤總數(shù)1=推測殘留在程序中的錯誤數(shù) 1.錯誤植入模型 Mills將播種模型用于程序中殘留錯誤的估算,稱錯誤植入模型播種模型:N: 程序中原有殘留的錯誤數(shù)Nt:新植入的錯誤數(shù)n: 測試發(fā)現(xiàn)的原有錯誤數(shù)nt :測試發(fā)現(xiàn)的植入錯誤數(shù)NNnnttNNnnt=t 2.Hyman對錯誤植入模型的改進ET: 程序中原有的殘留錯誤數(shù)E1: 1號測試員在某一時間內(nèi)發(fā)現(xiàn)的錯誤數(shù)E2: 2號測試員在同一時間內(nèi)發(fā)現(xiàn)的錯誤數(shù)E0: 兩位測試員共同發(fā)現(xiàn)的錯誤數(shù)EE

55、EE10=2TETE1E2/E09.5 面向?qū)ο鬁y試策略傳統(tǒng)軟件測試有單元測試、組裝測試、確認測試和系統(tǒng)測試等4個步驟。其中,單元測試主要針對最小的程序單元(模塊)進行測試,一旦這些程序模塊分別測試完成后,就將它們組裝起來形成軟件結(jié)構(gòu),最后對整個系統(tǒng)進行一系列的確認測試,查找和排除在需求方面的問題。面向?qū)ο蟓h(huán)境下的測試步驟與此類似,但測試策略有所不同,下面介紹面向?qū)ο笙鄳?yīng)測試步驟的測試策略。面向?qū)ο鬁y試策略1.單元測試 (類測試) 在面向?qū)ο蟓h(huán)境下,最小的可測試單元是封裝了的類或?qū)ο螅皇浅绦蚰K。 面向?qū)ο筌浖念悳y試等價于傳統(tǒng)方法中的單元測試。但它是由類中封裝的操作和和類的狀態(tài)行為驅(qū)動的

56、。 完全孤立地測試類的操作是不可行的。其收效是很小的。類作為在語法上獨立的部件,應(yīng)當(dāng)允許用在許多不同的應(yīng)用中,每個類都應(yīng)該是可靠的,并且不需要了解任何實現(xiàn)的細節(jié)就能復(fù)用。因此,類應(yīng)盡可能孤立地進行測試,首先定義測試類的各個操作的測試用例組,然后再把測試用例組擴充,針對被測操作調(diào)用類中其它操作的情況,設(shè)計組裝測試的測試用例組。測試一個類時,需要考慮一個類的層次。假設(shè)在基類中假定定義了一個操作X,每一個派生類都使用操作X,它是在各個類所定義的私有屬性和操作的環(huán)境中使用的,因使用操作X的環(huán)境變化太大,所以必須在每一個派生類的環(huán)境下都測試操作X。測試一個派生類時,首先對基類和繼承關(guān)系進行完全測試,然后

57、從基類的測試用例組復(fù)用已存在的測試用例到派生類的測試用例組中,這種技術(shù)基于類的帶有祖先的層次關(guān)系,漸增地開發(fā)類的測試用例組,因此叫做分層增殖式測試。我們首先安排一個針對單獨的類的測試計劃,然后考慮分層增殖式測試計劃和算法。類測試的種類有:1)基于定義的測試 把類當(dāng)作一個黑盒對待,確認類的實現(xiàn)是否遵循它的定義。例如,若類是一個“Stack”,則測試應(yīng)當(dāng)確保 LIFO 原則得以實施?;诙x的測試包括類定義和操作定義兩個級別。類定義指的是一個類的定義由各個服務(wù)的定義和一些表示類的概念的語句組合而成。例如,一個stack類包括了操作push和pop的定義,還表達了LIFO的思想。C+中類的定義是多層的。 對于多數(shù)的類,檢驗類的定義主要檢驗在類定義的 public 域中的那些操作。對于派生類,要檢查包括public域和protected 域的擴充界面。如果完全地檢查類中定義的操作,則需要檢查所有三個訪問級別public域,protected域及private域中的界面。操作定義指的是對于一個單獨的操作,可通過該操作的先決條件和后置條件,以及它的名字加以定義。根據(jù)先決條件選擇測試用例,產(chǎn)生輸出,以便讓測試者能夠判斷后置條件是否能夠得到滿足。各個操作的定義的測試與對于各個過程定義的測試基本相同。2)基于程序的測試基

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論