第7章軟件的質(zhì)量與測試_第1頁
第7章軟件的質(zhì)量與測試_第2頁
第7章軟件的質(zhì)量與測試_第3頁
第7章軟件的質(zhì)量與測試_第4頁
第7章軟件的質(zhì)量與測試_第5頁
已閱讀5頁,還剩203頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1第7章

軟件的質(zhì)量與測試

軟件工程研究室SoftwareEngineering2

主要內(nèi)容

7.1

軟件的質(zhì)量

7.2軟件的測試

目的:測試是軟件質(zhì)量保證中至關(guān)重要的一個環(huán)節(jié)3

主要內(nèi)容

7.1

軟件的質(zhì)量

7.1.1軟件的質(zhì)量觀

7.1.2軟件質(zhì)量的特征

7.1.3軟件質(zhì)量因素

7.1.4軟件質(zhì)量要素之間的關(guān)系

7.1.5質(zhì)量保證的幾個問題47.1.1軟件的質(zhì)量觀7.1軟件的質(zhì)量高質(zhì)量客戶:

在可接受的資金和資源成本下解決問題用戶:

易學(xué)習(xí);

使用效率高;

對工作有幫助開發(fā):

易設(shè)計;

易維護;

易重用管理人員:

銷售量大并使客戶滿意,同時開發(fā)和維護的費用少5

Juran

的質(zhì)量觀:

產(chǎn)品在使用時,能適合用戶需要的目標(biāo)程度。

ISO的質(zhì)量觀:

“一個產(chǎn)品或服務(wù)是否能夠滿足其指定的或蘊含的需求有關(guān)的性質(zhì)與特征總和”.

7.1.1軟件的質(zhì)量觀

7.1.2軟件質(zhì)量的特征(1)很難制定具體的、數(shù)量化的產(chǎn)品質(zhì)量標(biāo)準(zhǔn)沒有相應(yīng)的國際標(biāo)準(zhǔn)、國家標(biāo)準(zhǔn)或行業(yè)標(biāo)淮(2)大部分軟件很難做到“零缺陷”對軟件的測試不可能窮盡所有情況,有缺陷的軟件仍然可以使用軟件產(chǎn)品的不完善可通過維護和升級解決問題(3)軟件的類型不同,軟件質(zhì)量的衡量標(biāo)準(zhǔn)的側(cè)重點也不同。對實時系統(tǒng),可靠、效率是衡量軟件質(zhì)量的首要要素對一些需要用戶與軟件本身進(jìn)行大量交互的系統(tǒng),對可用性(usability)就提出了較高的要求。

7.1.2軟件質(zhì)量的特征(6)如果軟件只滿足了己經(jīng)定義的需求,而沒有滿足一些隱含的需求,軟件質(zhì)量也不能保證。(4)軟件產(chǎn)品之間很難進(jìn)行橫向的質(zhì)量對比(5)軟件需求是度量軟件質(zhì)量的基礎(chǔ),滿足了用戶需求的軟件質(zhì)量,就是好的軟件質(zhì)量。即使軟件在技術(shù)上很先進(jìn),界面很漂亮,功能也很多,但不是用戶所需要的,仍不能算軟件質(zhì)量好。功能性(Functionality)可靠性(Reliability)可用性(Usability)效率(Efficiency)可維護性(Maintainability)可移植性(Portability)7.1.3軟件質(zhì)量因素

1)ISO質(zhì)量特性國際標(biāo)準(zhǔn)(ISO/IEC9126)

1991年,ISO發(fā)布了ISO/IEC9126質(zhì)量特性的國際標(biāo)準(zhǔn),將質(zhì)量特性降為6個,并定義了

21個子特性:

1)ISO質(zhì)量特性國際標(biāo)準(zhǔn)(ISO/IEC9126)圖7-1ISO軟件質(zhì)量模型

外部和內(nèi)部質(zhì)量適合性準(zhǔn)確性互操作性保密安全性功能性可靠性易用性維護性可移植性效率成熟性容錯性易恢復(fù)性易理解性易學(xué)性易操作性吸引性時間特性資源利用性易分析性易改變性穩(wěn)定性易測試性適應(yīng)性易安裝性共存性易替換性102)McCall軟件質(zhì)量模型(1977):產(chǎn)品修改產(chǎn)品改型

圖7-2McCall軟件質(zhì)量模型

外部質(zhì)量屬性(externalqualityattribute)易移植性易復(fù)用性互用性

易維護性靈活性易測試性產(chǎn)品操作易使用性正確性可靠性高效性完整性11每個要素包含系列衡量標(biāo)準(zhǔn)正確性易追溯性:從需求中找到實現(xiàn)能力完備性:實現(xiàn)了所有的功能一致性:一致的術(shù)語和技術(shù)高效性運行效率:使用最少的處理時間存儲效率:使用最小的內(nèi)存空間可靠性容錯性:異常,仍能操作一致性準(zhǔn)確性簡潔性易使用性易操作培訓(xùn)易交流輸入輸出量和速度靈活性一致性模塊性易擴展性自我描述性互用性模塊性通訊共同性數(shù)據(jù)共同性13易測試性檢視:測量、識別錯誤能力簡潔性自我描述性模塊性模塊性易移植性軟件獨立性硬件獨立性自我描述性14易復(fù)用性軟件獨立性通用性模塊性硬件獨立性自我描述性易維護性簡明性:代碼少簡潔性:易理解模塊性一致性自我描述性:有解釋15總體效用易維護性現(xiàn)存效用易移植性易修改性易理解性易測試性效率人機界面可靠性易更改性

可認(rèn)性

簡明性結(jié)構(gòu)性自我描述性易交流性易存取性設(shè)備效率可依靠性一致性完整性準(zhǔn)確性自我包含性硬件獨立性圖7-3Boehm模型3)Boehm模型

(1978)16McCall和Boehm模型從用戶出發(fā)的質(zhì)量觀.都是層次結(jié)構(gòu)的模型.根據(jù)具體情況決定質(zhì)量要素的相對重要性.

7.1.4軟件質(zhì)量要素之間的關(guān)系

質(zhì)量由多種因素組成,但互不獨立,也不一定同等重要,可能是沖突的.

在一定前提下來衡量質(zhì)量,不能脫離代價來衡量產(chǎn)品的質(zhì)量.17軟件質(zhì)量要素之間的關(guān)系正確性可靠性效率完整性易使用性易維護性易測試性靈活性易移植性易復(fù)用性互用性正確性可靠性效率完整性易使用性易維護性易測試性靈活性易移植性易復(fù)用性互用性直接相關(guān)反向相關(guān)無關(guān)圖7-4Perry的質(zhì)量要素之間關(guān)系18提高效率可能會使設(shè)計不宜理解,會降低系統(tǒng)的可維護性。實現(xiàn)高可靠性通常要求反復(fù)地進(jìn)行錯誤檢查并添加一些冗余計算。

提高效率可能要求刪除這些檢查和冗余。改善可用性可能需要添加額外的代碼為用戶提供反饋信息,這又可能降低整體效率。良好的工程實踐,項目開始就應(yīng)設(shè)定質(zhì)量目標(biāo),目標(biāo)的實現(xiàn)應(yīng)讓所有相關(guān)人員都滿意。為了在市場競爭中取得成功,在不超過預(yù)算和滿足其他質(zhì)量目標(biāo)要求的同時,使某個質(zhì)量屬性達(dá)到最優(yōu)化(optimize)。19

內(nèi)部質(zhì)量屬性:

代碼注釋量,影響可維護性,間接影響可靠性;

代碼的復(fù)朵性,影響可維護性、可靠性。

說明:

注重短期需要而忽視決策的長期影響是人類的天性.這可能引發(fā)嚴(yán)重后果。

只考慮短期效果,可能忽視系統(tǒng)的可維護性,

忽視客戶的長期需要,導(dǎo)致過高的后期成本。20

幾個思考題:下面的問題與哪些質(zhì)量屬性有關(guān).一段宇宙飛船程序,使宇宙飛船進(jìn)入冥王星軌道.一個在購物中心運行的系統(tǒng).使用該系統(tǒng),購物者可以確定哪個商店出售他們需要的商品.

汽車自動變速器的控制程序.

打印票據(jù)的實用軟件包.計算所得稅的程序,公務(wù)員可以使用該程序檢查納稅人的賬目.

1)軟件質(zhì)量應(yīng)貫穿軟件開發(fā)的全過程軟件質(zhì)量管理該貫穿軟件開發(fā)的全過程,而不僅僅是軟件本身。

7.1.5質(zhì)量保證的幾個問題2)對開發(fā)文檔的評審

需求規(guī)格說明書設(shè)計規(guī)格說明書代碼文檔測試報告用戶手冊

3)運用技術(shù)手段保證質(zhì)量使用多種軟件工具,保證軟件質(zhì)量。例如:

用RationalRose軟件進(jìn)行軟件開發(fā)等。采用先進(jìn)的系統(tǒng)分析方法和軟件設(shè)計方法

4)以滿足客戶和用戶需要為目標(biāo)的質(zhì)量保證(3)缺陷預(yù)防,控制對缺陷的修改

(1)采用快速原型法(2)充分設(shè)計之后再編碼(4)充分進(jìn)行軟件的系統(tǒng)測試

(5)恰當(dāng)掌握軟件的放行標(biāo)淮

237.2軟件測試

軟件測試

它既令人興奮,也令人煩腦;既令人羨慕不己,也令人望而卻步;要想在預(yù)算內(nèi)按時交付高質(zhì)量的軟件,測試是必不可少的。

7.2.1軟件測試概述

7.2.2程序錯誤分類

7.2.3軟件測試的V模型

7.2.4軟件測試的分類

7.2.5軟件測試的方法

7.2.6軟件測試的步驟

7.2.7軟件的調(diào)試

7.2.1軟件測試概述1)什么是軟件測試(Test)

?2)為什么要測試(Test)

?3)軟件測試的目的

4)軟件測試的準(zhǔn)則5)軟件的可測試性

6)軟件測試與軟件開發(fā)階段7.2.1軟件測試概述1)什么是軟件測試(Test)

?

測試是采用測試用例,檢測出程序的錯誤、缺陷、故障、失效和事故等的一項軟件活動。對程序的副本提供一組有代表性的輸入數(shù)據(jù),給定的環(huán)境下運行程序副本,并對程序的輸出進(jìn)行檢查和分析。

錯誤(Error)稱bug不正確結(jié)果的全部。由開發(fā)人員引起的,如輸入錯誤、需求錯誤、設(shè)計錯誤等。

缺陷(Defect)錯誤的表現(xiàn)結(jié)果,會促成失敗的發(fā)生。由不恰當(dāng)或錯誤的技術(shù)、算法、遺漏了某些功能或設(shè)計內(nèi)容所導(dǎo)致。故障(Fault)故障是指系統(tǒng)的規(guī)格說明與其行為之間的偏差,通常由一個或多個缺陷引起。通過對比程序的實際輸出與預(yù)期輸出來檢測。失效(Failure)故障引起的結(jié)果。系統(tǒng)不可接受的行為。由于錯誤,導(dǎo)致系統(tǒng)的錯誤輸出─失效。發(fā)生過失效的軟件通常仍然是可用的。只有當(dāng)軟件頻繁失效,或者公認(rèn)已經(jīng)“過時”了的時侯,軟件才被廢棄,意味著當(dāng)前這一版本軟件使用壽命的終結(jié)。事故(Incident)呈現(xiàn)給用戶的嚴(yán)重錯誤的結(jié)果,造成一定的或嚴(yán)重的損失。“千年蟲”1970年代,一位程序員在開發(fā)公司的工資管理系統(tǒng)時,迫于計算機存儲空間的限制,將4位數(shù)日期縮減為2位數(shù)(197373),從而節(jié)省了可觀的存儲空間;然而,世界各地更換或升級2000年問題所花的費用超過數(shù)億美元…2)為什么要測試(Test)

?“愛國者導(dǎo)彈”愛國者導(dǎo)彈vs

飛毛腿導(dǎo)彈有一枚愛國者導(dǎo)彈擊斃28名美軍士兵…原因:導(dǎo)彈的軟件包含一個累加計時故障,系統(tǒng)時鐘錯誤積累起來就可能拖延14個小時,造成跟蹤系統(tǒng)失去準(zhǔn)確度?!蔼{子王”1994年秋天,迪斯尼公司發(fā)行《LionKingAnimated》,雖然銷售量巨大,卻引來巨大的、意想不到的投訴…原因:

發(fā)布之前未能對該軟件在各種不同類型的PC機上進(jìn)行測試,導(dǎo)致在某些系統(tǒng)上無法運行。

如,對一個整數(shù)組排序,應(yīng)該用整數(shù)比較函數(shù)

icmp調(diào)用qsort:

int

arr[N];

qsort(arr,N,sizeof(arr[0],icmp);無意中把字符串比較函數(shù)傳進(jìn)去:?int

arr[N];

?qsort(arr,N,sizeof(arr[0],scmp);

編譯無法發(fā)現(xiàn)這類錯誤,程序運行時會垮臺,

它訪問非法的存儲器地址,災(zāi)難就發(fā)生了。323)軟件測試的目的

軟件測試是對軟件質(zhì)量的度量,并代表了規(guī)約、設(shè)計和編碼的最終評審。

為找出錯誤而運行程序或系統(tǒng)的過程。(Myers,1979)軟件測試概述測試是證明錯誤的存在,而不是證明錯誤的不存在。

(Dijstra)確信程序做了它應(yīng)該做的事。(Hetzel,1973)

確認(rèn)程序正確地實現(xiàn)了所要求的功能。33

4)軟件測試的準(zhǔn)則#

需求確定后,制定測試計劃,所有的測試應(yīng)能

追溯到用戶需求上。

軟件測試概述#盡早地和不斷地進(jìn)行軟件測試。

#

測試從小規(guī)模開始,逐漸擴到大規(guī)模。

#

獨立測試組或SoftwareTestEngineer

。

#

測試中發(fā)現(xiàn)8o%錯誤,可能由程序的20%的組件造成的(Pareto原理)。

#

使用或開發(fā)測試工具。

345)軟件的可測試性

程序被測試的難易程度軟件測試概述一個特定測試集覆蓋產(chǎn)品的充分程度

軟件可測試性的度量特征:

a.可操作性b.可觀察性c.可控制性

d可分解性e.簡單性f.穩(wěn)定性

g.可理解性

35

6)軟件測試與軟件開發(fā)階段

軟件測試并不等于程序測試,應(yīng)貫穿于軟件定義與開發(fā)的各個階段。

需求階段

用例情景測試原型走查模型走查需求評審制定測試計劃設(shè)計階段

模型走查原型走查設(shè)計評審

制定測試計劃測試設(shè)計實現(xiàn)階段代碼走查接口分析文檔評估

編寫測試用例制定測試過程

單元測試實現(xiàn)階段制定測試計劃集成設(shè)計系統(tǒng)測試

α測試

β測試驗收測試回歸測試,質(zhì)量保證驗收階段表7-1軟件測試與軟件開發(fā)階段367.2.2軟件錯誤分類

Beizer

給出的軟件錯誤:

抽樣大小—6877000條語句(含注釋)總錯誤數(shù)—16209個錯每千條語句錯誤數(shù)—2.36個錯需求錯誤,功能和性能錯誤程序結(jié)構(gòu)錯誤,數(shù)據(jù)錯誤編碼錯誤測試定義和執(zhí)行錯誤軟件集成錯誤37錯誤分類錯誤數(shù)百分比(%)需求錯誤13178.1需求不正確6494.0需求邏輯錯1530.9需求不完備2241.4需求文檔描述錯130.1需求變更2781.7表7-2需求錯誤錯誤分類38錯誤分類錯誤數(shù)百分比(%)功能和性能錯誤262416.2功能和性能不正確4562.8性能不完整2311.4功能不完整1931.2適用范圍錯7784.8用戶信息和診斷信息錯8575.3異常處理錯790.5其他功能錯300.2表7-3功能和性能錯誤錯誤分類39錯誤分類錯誤數(shù)百分比(%)程序結(jié)構(gòu)錯誤408225.2控制流和控制順序錯誤、變量、分支、循環(huán)等問題207812.8處理器錯200412.4表7-4程序結(jié)構(gòu)錯誤錯誤分類40錯誤分類錯誤數(shù)百分比(%)數(shù)據(jù)錯誤363822.4數(shù)據(jù)類型定義,引用及結(jié)構(gòu)錯180511.1數(shù)據(jù)存取及處理錯183111.3其他數(shù)據(jù)錯(比較、計算、精度、零為除數(shù))2表7-5數(shù)據(jù)錯誤錯誤分類41錯誤分類錯誤數(shù)百分比(%)編碼與實現(xiàn)錯誤16019.9編碼與程序輸入錯誤3322.0違反編程標(biāo)準(zhǔn)或風(fēng)格3182.0文檔錯9605.9其他實現(xiàn)錯10.0表7-6編碼與實現(xiàn)錯誤錯誤分類42錯誤分類錯誤數(shù)百分比(%)測試定義和執(zhí)行錯誤4472.8測試設(shè)計錯110.1測試執(zhí)行錯3552.2測試文檔錯110.1測試用例不充分640.4其他測試錯誤60.0其他錯誤

(定時和協(xié)調(diào),性能,故障恢復(fù),不付合標(biāo)準(zhǔn))7634.7表7-7測試定義和執(zhí)行錯誤錯誤分類43錯誤分類錯誤數(shù)百分比(%)軟件集成錯誤14559.0內(nèi)部接口錯8595.3外部接口,時間吞吐量不匹配5183.2其他集成錯780.5系統(tǒng)及軟件結(jié)構(gòu)錯2821.7表7-8軟件集成錯誤錯誤分類447.2.3軟件測試的V模型模塊規(guī)約系統(tǒng)結(jié)構(gòu)與子系統(tǒng)規(guī)約用戶需求分析規(guī)約確定系統(tǒng)設(shè)計詳細(xì)設(shè)計模塊實現(xiàn)規(guī)約用戶需求用戶要求用戶接受測試系統(tǒng)測試系統(tǒng)集成子系統(tǒng)集成與測試模塊測試模塊代碼測試后的模塊測試后子系統(tǒng)集成的系統(tǒng)檢驗過的系統(tǒng)交付的系統(tǒng)圖7-5軟件測試的V模型457.2.4軟件測試的分類

1)按實施步驟分:單元測試組裝測試確認(rèn)測試系統(tǒng)測試

3)按使用的測試方法分:靜態(tài)測試:動態(tài)測試:白盒測試、黑盒測試

2)按軟件組裝策略分:

#增量測試自頂向下自底向上三明治

#非增量測試46軟件測試的分類

功能測試

性能測試接口測試

強度測試

安全性測試

可靠性測試

恢復(fù)性測試

安裝性測試

協(xié)調(diào)性測試

人機界面測試4)按項目測試條目分:477.2.5軟件測試方法圖7-8軟件測試技術(shù)分類軟件測試方法靜態(tài)測試動態(tài)測試黑盒測試/功能測試白盒測試/結(jié)構(gòu)測試48靜態(tài)測試(代碼會審/走查/辦公桌)對需求模型、設(shè)計模型的靜態(tài)檢查檢查:數(shù)據(jù)引用錯(使用未賦值的變量)數(shù)據(jù)計算錯(混合類型,零為除數(shù))數(shù)據(jù)說明錯(類型不符錯)數(shù)據(jù)比較錯(運算符、邏輯符不符)控制流錯(循環(huán)初值、次數(shù)不對)接口錯輸入輸出錯文件錯49

任何程序都可以看作是將輸入定義域取值映射到輸出值域的函數(shù)。將系統(tǒng)看成“黑盒”。也稱黑盒測試1)功能測試(FunctionTesting)軟件InputOutput圖7-6黑盒測試目的:功能的正確性測試

證實每個實現(xiàn)了的功能是否符合需求規(guī)格說明書的要求。

黑盒測試要在軟件的接口處進(jìn)行.50是否有不正確或遺漏的功能?黑盒測試可以發(fā)現(xiàn)如下錯誤:在接口上,輸入能否被正確地接受?能否輸出正確的結(jié)果?是否有數(shù)據(jù)結(jié)構(gòu)錯誤或外部信息(例如數(shù)據(jù)文件)訪問錯誤?性能上是否能夠滿足要求?是否有初始化或終止性錯誤?51

功能測試的方法:

等價類分析邊界值分析錯誤推測法因果圖法

隨機測試基于決策樹的測試52(1)等價類(Equivalencepartitioning)

把輸入的數(shù)據(jù)按有效的和無效的劃分為若干個等價類。等價類,是指某個輸入域的子集合。在該子集合中,各個輸入數(shù)據(jù)對于揭露程序中的錯誤都是等效的。

有效等價類:

對于程序規(guī)格說明,是合理的,有意義的輸入數(shù)據(jù)構(gòu)成的集合。

無效等價類:

是指對于程序規(guī)格說明,是不合理的,無意義的輸入數(shù)據(jù)構(gòu)成的集合。53等價類劃分的原則:

按區(qū)間劃分按數(shù)值劃分按數(shù)值集合劃分按限制條件或規(guī)則劃分

功能測試按區(qū)間劃分例如:輸入值是學(xué)生成績,范圍是0~1000100有效等價類1≤成績≤100無效等價類2成績>100無效等價類1成績<054

測試用例

={測試數(shù)據(jù)十期望結(jié)果}

測試結(jié)果={測試用例十實際結(jié)果}

在確立了等價類之后,建立等價類表,列出所有劃分出的等價類數(shù)據(jù)十期望結(jié)果。

確立測試用例功能測試等價類劃分

………

………

……….

無效等價類

有效等價類

輸入條件表7-9劃分出的等價類不考慮程序的內(nèi)部結(jié)構(gòu),只依據(jù)程序的規(guī)格說明來設(shè)計測試用例。55

輸入條件

有效等價類

無效等價類標(biāo)識符個數(shù)1個(1)多個(2)0個(3)

標(biāo)識符字符數(shù)1—8個(4)

0個(5)>8個(6)>80個(7)標(biāo)識符組成

字母(8)

數(shù)字(9)非字母數(shù)字字符(10)

保留字(11)第一個標(biāo)識符

字母(12)

非字母(13)標(biāo)識符使用先說明后使用(14)

未說明已使用(15)表7-10標(biāo)識符的等價類劃分例1為標(biāo)識符劃分等價類56測試用例:

VARX,T1234567:REAL;(1),(2),(4),(8),(9),(12),(14)X=3.414;T1234567:=2.73VAR:REAL;(3)VARX,:REAL;(5)VART12345678:REAL;(6)VART123456789….:REAL>80(7)VART$:CHAR;(10)VARGOTO:INTEGER;(11)VAR2T:REAL;(13)VARPAR:REAL;(15)例2:日期檢查檔案管理系統(tǒng),要求用戶輸入以年月表示的日期。假設(shè)日期限定在1990年1月--2049年12月,并規(guī)定日期由6位數(shù)字字符組成,前4位表示年,后2位表示月。[問題]用等價類劃分法設(shè)計測試用例,來測試程序的“日期檢查功能”。輸入等價類有效等價類無效等價類日期的類型及長度(1)6位數(shù)字字符(2)有非數(shù)字字符(3)少于6位數(shù)字字符(4)多于6位數(shù)字字符年份范圍(5)在1990-2049之間(6)小于1990(7)大于2049月份范圍(8)在01~12之間(9)等于00(10)大于12劃分等價類:表7-11日期的等價類劃分例2:日期檢查設(shè)計有效等價類的測試用例:測試用例編號測試用例內(nèi)容覆蓋的等價類U1200711(1)(5)(8)表7-12日期的有效等價類測試用例例2:日期檢查設(shè)計無效等價類的測試用例:測試用例編號測試用例內(nèi)容覆蓋的等價類U107June(2)U220076(3)U32007011(4)U4198912(6)U5205401(7)U6200700(8)U7200713(10)表7-13日期的無效等價類測試用例61確定等價類的原則小結(jié)(1)如果輸入條件規(guī)定了取值范圍,或者值的個數(shù),則可以確定一個有效等價類和兩個無效等價類。(2)如果輸入條件規(guī)定了輸入值的集合,或者是規(guī)定了“必須如何”的條件,則可以確立一個有效等價類和一個無效等價類。(3)如果輸入條件是一個布爾量,則可以確立一個有效等價類和一個無效等價類。(4)如果規(guī)定了輸入數(shù)據(jù)必須遵守的規(guī)則,則可以確立一個有效等價類(遵守規(guī)則的數(shù)據(jù))和若干無效等價類(從不同角度違反規(guī)則的數(shù)據(jù))。62選擇測試用例的原則:設(shè)計盡可能少的測試用例,覆蓋所有的有效等價類。等價類劃分針對每一個無效等價類,設(shè)計一個測試用例來覆蓋它。(5)如果確知以劃分的等價類中的各元素在程序中的處理方式不同,則應(yīng)進(jìn)一步劃分成更小的等價類。63(2)邊界值法(BoundaryValueAnalysis)

把測試值選在等價類的邊界上。錯誤可能出現(xiàn)在輸入變量的極值附近。功能測試bacd圖7-7邊界值測試法例如,測試

的一段程序。憑直覺等價區(qū)間應(yīng)是(0,

1)和(1,

+∞)。可取x=0.5以及x=2.0進(jìn)行等價測試,再取

x=0以及x=1進(jìn)行邊界值測試。

確定邊界通常輸入和輸出等價類的邊界,是重點測試的邊界情況。選取正好等于、剛剛大于、剛剛小于邊界的值作為測試數(shù)據(jù),而不是選取等價類中的典型值或任意值作為測試數(shù)據(jù)。65邊界值的選取

5個元素情況:

最小值,略高于最小值正常值略低于最大值,最大值

n個變量,有4n+1個測試用例abcd圖7-8邊界值測試法abcd在5個元素基礎(chǔ)上增如:略高于最大值略低于最小值

常見的邊界值通常情況下,軟件測試所包含的邊界檢驗有幾種類型:數(shù)字、字符、位置、重量、大小、速度、方位、尺寸、空間等。相應(yīng)地,以上類型的邊界值應(yīng)該在:最大/最小、首位/末位、上/下、最快/最慢、最高/最低、

最短/最長、空/滿等情況下。對16-bit的整數(shù)而言,32767和-32768是邊界屏幕上光標(biāo)在最左上、最右下位置數(shù)組元素的第一個和最后一個報表的第一行和最后一行循環(huán)的第0次、第1次和倒數(shù)第2次、最后1次邊界值分析的原則原則1:如果輸入條件規(guī)定了值的范圍,則應(yīng)取剛達(dá)到這個范圍的邊界的值,以及剛剛超越這個范圍邊界的值作為測試輸入數(shù)據(jù)。例如:如果程序的規(guī)格說明中規(guī)定“重量在10公斤至50公斤范圍內(nèi)的郵件,其郵費計算公式為……”。

作為測試用例,應(yīng)取10、50、10.01、49.99、9.99及50.01等。原則2:如果輸入條件規(guī)定了值的個數(shù),則用最大個數(shù)、最小個數(shù)、比最小個數(shù)少1,比最大個數(shù)多1的數(shù)據(jù)作為測試數(shù)據(jù)。比如,一個輸入文件應(yīng)包括1-255個記錄,則測試用例可取1和255,還應(yīng)取0及256等。原則3:如果程序的規(guī)格說明給出的輸入域或輸出域是有序集合,則應(yīng)選取集合的第一個元素和最后一個元素作為測試用例。原則4:將原則1和原則2應(yīng)用于輸出條件,即設(shè)計測試用例使輸出值達(dá)到邊界值及其左右的值。

例如,某程序的規(guī)格說明要求計算出“每月保險金扣除額為0至1165.25元”。其測試用例可取:0.00及1165.24、還可取:-0.01及1165.26等。再如,某程序要求每次”最少顯示1條、最多顯示4條查詢結(jié)果”。其測試用例包括1和4,還應(yīng)包括0和5等。[例1]NextDate()序號MonthDayYear期望輸出121420002000-2-15221419961996-2-15321420022002-2-15422820002000-2-29522819961996-2-29622820022002-3-1722920002000-3-1822919961996-3-192292002無效的輸入日期102302000無效的輸入日期112301996無效的輸入日期122302002無效的輸入日期序號MonthDayYear期望輸出1361420002000-6-151461419961996-6-151561420022002-6-151662920002000-6-301762919961996-6-301862920022002-6-301963020002000-7-12063019961996-7-12163020022002-7-1226312000無效的輸入日期236311996無效的輸入日期246312002無效的輸入日期序號MonthDayYear期望輸出2581420002000-8-152681419961996-8-152781420022002-8-152882920002000-8-302982919961996-8-303082920022002-8-303183020002000-8-313283019961996-8-313383020022002-8-313483120002000-9-13583119961996-9-13683120022002-9-1序號MonthDayYear期望輸出37123120002001-1-138123119961997-1-139123120022003-1效的輸入日期4113301996無效的輸入日期4213312002無效的輸入日期43302000無效的輸入日期443321996無效的輸入日期459140無效的輸入日期46000無效的輸入日期47-1142000無效的輸入日期4811-12002無效的輸入日期在NextDate()函數(shù)中:1≤month≤121≤day≤311912≤year≤2050[例1]NextDate()另一種更詳盡的劃分方法D1={1≤date<lastdayofthemonth}D2={lastdayofthemonth}D3={Dec.31}M1={30-daymonths}M2={31-daymonths}M3={Feb.}Y1={2000}Y2={leapyear}Y3={notleapyear}72

檢查條件所導(dǎo)致的分支是否正確;

檢查循環(huán)實際執(zhí)行的次數(shù)是否正確;

檢查不存在或空的輸入;

檢查單個輸入項;

檢查一個正好填滿了的數(shù)組等等。

觀點:大部分錯誤都出現(xiàn)在邊界上例2測試代碼的邊界情況73

模擬fgets(從文件中獲取字符串函數(shù)),讀入一些字符,直到迂到一個換行或緩沖區(qū)滿了。

inti;

chars[MAX];

for(i=0;(s[i]=getchar())!=‘\n’&&i<MAX-1;++i)

s[--i]=‘\0’;

第1個邊界測試:

讀入一個空行,一開始就是個換行符.結(jié)果如何?74循環(huán)在第1次重復(fù)時就結(jié)束了,這時i=0最后一行代碼i值減小到-1,并把一個空字節(jié)寫入s[-1]在數(shù)組開始之前,通過邊界測試發(fā)現(xiàn)錯誤重寫循環(huán),用字符填充數(shù)組的方法:for(i=0;i<MAX-1;i++)if((s[i]=getchar())==‘\n’)break;

s[i]=‘\0’;

75

重復(fù)前面邊界測試,對只有一個換行字符的行,程序能正確處理。i=0,第1個輸入字符跳出循環(huán),而‘\0’被存入s[0]中。對一個或兩個字符之后是換行符的輸入做類似檢查,在接近邊界處循環(huán)也能工作。

76

第2個邊界測試:

輸入中有一個很長的行或其中無換行符,

保證i總是小于MAX-1的檢測,能處理這個問題。

若輸入為空,對getchar的第1次調(diào)用就返回EOF,必須增加新條件:

inti;chars[MAX]for(i=0;i<MAX-1;i++)if((s[i]=getchar())==‘\n’||s[i]==EOF)break;

s[i]=‘\0’;

77第3個邊界測試:

檢查輸入即數(shù)組接近滿了,正好滿了,超過的情況。

若換行符正好在這個時候出現(xiàn),若在‘\n’出現(xiàn)前緩沖區(qū)己滿,程序做些什么?

78基本思想:列舉出程序中所有可能有的錯誤和容易發(fā)生錯誤的特殊情況,根據(jù)它們選擇測試用例。利用經(jīng)驗確定程序中容易出錯的地方。(3)錯誤推測法功能測試?yán)龑ε判虺绦蜻M(jìn)行測試

邊界值法

#輸入表為空

#輸入表中僅有一個數(shù)據(jù)

#輸入表為滿表錯誤猜測法

#輸入表已排好序

#輸入表的排序與要求的順序相反

#輸入表中的所有數(shù)據(jù)全部相同79(4)因果圖(Cause-EffectGraphing)

借助圖形來設(shè)計測試用例的一種方法.功能測試因果圖方法最終生成的就是判定表。用于被測程序具有多種輸入條件,而輸出又依賴于輸入條件的各種組合情況.80因果圖中的基本符號Ci表示原因,Ei表示結(jié)果。各結(jié)點表示狀態(tài),“0”---狀態(tài)不出現(xiàn),

“1”---狀態(tài)出現(xiàn).CiEi恒等CiEi非C1EiC2或C1EiC2與圖7-9因果圖基本符號81表示約束條件的因果圖符號EabE(互斥、排他)IabI(包含、或)cOabO(唯一)aRbR(要求)MabM(屏蔽)圖7-10表示約束條件的因果圖符號82例利用因果圖設(shè)計測試用例飲料自動售貨機軟件測試用例。

售1杯飲料單價5角.若投入5角錢或1元錢的硬幣,按下橙汁或啤酒的按鈕,則飲料流出.若有零錢找,則顯示零錢找完的紅燈滅,并在送出飲料的同時退還5角硬幣。若售貨機沒有零錢找,則顯示一個零錢找完的紅燈亮,這時若投入1元錢硬幣并按下按鈕,則不僅不送出飲料而且退出1元錢;83自動售貨機軟件測試用例

中間狀態(tài)11.投入1元硬幣且按下飲料按鈕12.按下橙汁或啤酒按鈕13.應(yīng)當(dāng)找5角錢且售貨機有零錢找14.錢已付清原因

結(jié)果1.售貨機有零錢找21.售貨機零錢找完紅燈亮2.投入1元硬幣22.退還1元硬幣3.投入5角硬幣23.退還5角硬幣4.按下橙汁按鈕24.送出橙汁飲料5.按下啤酒按鈕25.送出啤酒飲料84按下橙汁按鈕12345售貨機有零錢找投入1元硬幣投入5角硬幣按下啤酒按鈕2122232425售貨機零錢找完紅燈亮退還1元硬幣找回5角硬幣送出橙汁飲料送出啤酒飲料E11131412E該找5角可找5角按下按鈕錢已付清圖7-11自動售貨機的因果圖85

因果圖方法生成測試用例的步驟:a.找出軟件規(guī)格說明中的原因(輸入條件或輸入條件的等價類),及由原因引起的結(jié)果(即輸出條件動作).b.分析軟件規(guī)格說明描述中的語義,找出原因與結(jié)果之間,原因與原因之間對應(yīng)的是什么關(guān)系?根據(jù)這些關(guān)系畫出因果圖.86因果圖方法生成測試用例的步驟:c.由于語法或環(huán)境限制,有些原因與原因之間,

原因與結(jié)果之間的組合情況不可能出現(xiàn)。為表明這些特殊情況,在因果圖上用一些記號標(biāo)明約束或限制條件.d.把因果圖轉(zhuǎn)換成判定表.e.

把判定表的每一列拿出來作為依據(jù),設(shè)計測試用例.自動售貨機轉(zhuǎn)換成判定表:表7-14自動售貨機判定表88(5)綜合策略的測試方法Myers提出了使用各種測試方法的綜合策略:

任何情況下都必須使用邊界值分析方法。必要時用等價類劃分法補充一些測試用例.

用錯誤推測法再追加一些測試用例.

如果程序的功能說明中含有輸入條件的組合情況,則一開始就可選用因果圖法.

測試用例的邏輯覆蓋程度要達(dá)到要求的覆蓋標(biāo)準(zhǔn).

89(6)窮舉測試

對于黑盒測試來講,最簡單程序,設(shè)A、B、C都是整形變量,在字長為32位的計算機上運行,則輸入數(shù)據(jù)的可能性有232x232=264種,如果這個程序執(zhí)行一次需1ms,一年工作365×24小時,則所有的組合完全測試一次將需要5億年。是不可能的ProgramABCc因此,測試人員只能在大量可能的數(shù)據(jù)中,選取其中一部分作為測試用例。90

檢查軟件在異常條件下的行為。容錯性好的軟件能確保系統(tǒng)不發(fā)生無法意料的事故。

(7)非功能測試--容錯性測試比較溫柔的容錯性測試通常構(gòu)造一些不合理的輸入來引誘軟件出錯,例如:

(1)輸入錯誤的數(shù)據(jù)類型。

(2)輸入定義域之外的數(shù)值。粗暴一些的容錯性測試俗稱“大猩猩”測試,可使出任何招術(shù)。91

性能與效率測試:測試軟件的運行速度和對資源的利用率。有時關(guān)心測試的“絕對值”,如數(shù)據(jù)輸送速率是每秒多少比特。有時關(guān)心測試的“相對值”,如某個軟件比另一個軟件快多少倍。(7)非功能測試--性能與效率測試

在獲取測試的“絕對值”時,要充分考慮并記錄運行環(huán)境對測試的影響.例如計算機主頻,總線結(jié)構(gòu)和外部設(shè)備都可能影響軟件的運行速度;若與多個計算機共享資源,軟件運行可能慢得像蝸牛爬行。92

在獲取測試的“相對值”時,要確保被測試的幾個軟件運行于完全一致的環(huán)境中。硬件環(huán)境的一致性比較容易做到(用同一臺計算機即可)。軟件環(huán)境的因素較多:操作系統(tǒng),程序設(shè)計語言,編譯系統(tǒng)等,對軟件的性能都會產(chǎn)生較大的影響。如果是比較幾個算法的性能,就要求編程語言和編譯器也完全一致。93

性能與效率測試中很重要的一項是

極限測試

因為很多軟件系統(tǒng)會在極限測試中崩潰。例如,連續(xù)不停地向服務(wù)器發(fā)請求,測試服務(wù)器是否會陷入死鎖狀態(tài)不能自拔;給程序輸入特別大的數(shù)據(jù),看看它是否吃得消。

94

易用性測試沒有一個量化的指標(biāo),主觀性較強。[Cusumano

1995]一般認(rèn)為,如果用戶不翻閱手冊就能使用軟件,那么表明這個軟件具有較好的易用性。(7)非功能測試--易用性測試95

文檔測試主要檢查文檔的正確性、完備性和可理解性。

文檔測試軟件=程序十文檔十?dāng)?shù)據(jù)

正確性是指不要把軟件的功能和操作寫錯,也不允許文檔內(nèi)容前后矛盾。

完備性是指文檔不可以“虎頭蛇尾”,更不許漏掉關(guān)鍵內(nèi)容。文檔中很多內(nèi)容對開發(fā)者可能是“顯然”的,但對用戶不見得都是“顯然”的。

文檔不可以寫成散文、詩歌或者偵探等小說,要讓用戶看得懂,能理解。96小結(jié)

功能測試的方法:

等價類分析邊界值分析錯誤推測法因果圖法97

功能性測試方法優(yōu)點:與軟件如何實現(xiàn)無關(guān),如果實現(xiàn)發(fā)生變化,測試用例仍然有用;測試用例開發(fā)可以與程序的實現(xiàn)并行進(jìn)行.缺點:測試用例之間可能存在嚴(yán)重的冗余;存在測試的不徹底性.小結(jié)功能測試只能觀察軟件的外部表現(xiàn),滿足用戶的功能需求。小結(jié)即使軟件的輸入輸出都是正確的,卻并不能說明軟件就是正確的。因為程序有可能用錯誤的運算方式得出正確的結(jié)果,例如“負(fù)負(fù)得正,錯錯得對”,只有白盒測試才能發(fā)現(xiàn)真正的原因。白盒測試能發(fā)現(xiàn)程序里的隱患,象內(nèi)存泄漏、誤差累計問題。在這方面,黑盒測試存在嚴(yán)重的不足。2)結(jié)構(gòu)測試(白盒測試)

白盒測試白盒測試又稱覆蓋測試。測試軟件產(chǎn)品的內(nèi)部邏輯結(jié)構(gòu),是否符合設(shè)計規(guī)格要求。白盒測試考慮測試用例對程序內(nèi)部邏輯的覆蓋程度:最徹底的白盒法是覆蓋程序中的每一條路徑,但是由于程序中一般含有循環(huán),所以路徑的數(shù)目極大,要執(zhí)行每一條路徑是不可能的,只能希望覆蓋的程度盡可能高些。對一個具有多重選擇和循環(huán)嵌套的程序,不同的路徑數(shù)目可能是天文數(shù)字。例:某個小程序的流程圖,包括了一個執(zhí)行20次的循環(huán)。包含的不同執(zhí)行路徑數(shù)達(dá)520條,對每一條路徑進(jìn)行測試需要1毫秒,假定一年工作365×24小時,要把所有路徑測試完,需3170年。圖7-12執(zhí)行20次循環(huán)程序的流程圖邏輯覆蓋:語句覆蓋判定覆蓋(分支覆蓋)條件覆蓋判定/條件覆蓋條件組合覆蓋控制結(jié)構(gòu)覆蓋:基本路徑測試循環(huán)測試條件測試數(shù)據(jù)流測試為了衡量測試的覆蓋程度,下面給出了從低到高的覆蓋方法:102對模塊的每一個獨立的執(zhí)行路徑至少測試一次。

對所有的邏輯判定的每一個分支,(真與假)都至少測試一次。

在循環(huán)的邊界和運行界限內(nèi)執(zhí)行循環(huán)體。這些方法主要對程序模塊進(jìn)行如下的檢查:測試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性。(1)語句覆蓋(StatementCoverage)被測程序中的每條語句至少應(yīng)該執(zhí)行一次語句覆蓋是最弱的測試標(biāo)準(zhǔn)。例1:floatexample(floatA,B,X){if(A>1&&B==0)X=X/A;if(A==2||X>1)X=X+1;}測試用例:圖7-13例1程序流程圖A>1&&B=0aA=2‖X>1X=X+1bdceX=X/AYYNNA=2,B=0,X=3語句覆蓋的缺點語句覆蓋是最弱邏輯覆蓋如果第一個條件語句中的“&&”錯誤的寫成“||”,上面的測試用例無法發(fā)現(xiàn)這個錯誤;如果第三個條件語句中x>1誤寫成x>0,這個測試用例也不能暴露它;沿著路徑abd執(zhí)行時,x的值應(yīng)該保持不變,如果這一方面有錯誤,上述測試數(shù)據(jù)也不能發(fā)現(xiàn)它。語句覆蓋的例2voidDoWork(intx,inty,intz){

intk=0,j=0;if((x>3)&&(z<10)){k=x*y-1;//語句塊1j=sqrt(k);}if((x==4)||(y>5)){j=x*y+10;//語句塊2}j=j%3;//語句塊3}測試用例:x=4,y=5,z=5圖7-13例2程序流程圖(2)判定(分支)覆蓋執(zhí)行足夠的測試用例,使得程序中的每一個分支至少都通過一次。測試用例:A=3,B=0,X=1(沿路徑acd執(zhí)行)

A=2,B=1,X=3(沿路徑abe執(zhí)行)圖7-13例1程序流程圖A>1&&B=0aA=2‖X>1X=X+1bdceX=X/AYYNN判定(分支)覆蓋測試用例:但是,兩個測試用例雖然能夠滿足條件覆蓋的要求,但是也不能對判斷條件進(jìn)行檢查。如把條件y>5錯誤的寫成y<5,上面的測試用例同樣滿足了分支覆蓋。x=4,y=5,z=5x=2,y=5,z=5圖7-13例2程序流程圖(3)條件覆蓋一個判定中往往包含了若干個條件;例如:判定(A>1)AND(B=0)包含了兩個條件:A>1以及B=0“條件覆蓋”,執(zhí)行足夠的測試用例,使得判定中的每個條件獲得各種可能的結(jié)果。條件覆蓋

例中

的程序有四個條件:

A>1、B=0、A=2、X>1

圖7-13例1程序流程圖A>1&&B=0aA=2‖X>1X=X+1bdceX=X/AYYNN

在a點的條件有:

A>1、A≤1、B=0、B≠0

在b點條件有:A=2、A≠2、X>1、X≤1 現(xiàn)在只需設(shè)計以下兩個測試用例就可滿足這一標(biāo)準(zhǔn):A=2,B=0,X=4

(沿路徑ace執(zhí)行);A=1,B=1,X=1

(沿路徑abd執(zhí)行)。

條件覆蓋對例中的所有條件取值加以標(biāo)記。對于第一個判斷:條件x>3取真值為T1,取假值為-T1條件z<10取真值為T2,取假值為-T2圖7-13例2程序流程圖對于第二個判斷:條件x=4取真值為T3,取假值為-T3條件y>5取真值為T4,取假值為-T4條件覆蓋表7-15條件覆蓋測試用例1

測試用例

通過路徑

條件取值

覆蓋分支x=4、y=6、z=5abdT1、T2、T3、T4

bdx=2、y=5、z=5ace-T1、T2、-T3、-T4cex=4、y=5、z=15acdT1、-T2、T3、-T4cd上面的測試用例不但覆蓋了所有分支的真假兩個分支,而且覆蓋了判斷中的所有條件的可能值。

條件覆蓋“條件覆蓋”通常比“分支覆蓋”強,因為它使一個判定中的每一個條件都取到了兩個不同的結(jié)果,而分支覆蓋則不保證這一點?!皸l件覆蓋”并不包含“分支覆蓋”,如對語句“if(A&&B)S;”設(shè)計測試用例使其滿足條件覆蓋,即“使A為真并使B為假”、“使A為假且B為真”,但是它們都未能使語句S得以執(zhí)行。

如設(shè)計了下面的測試用例,則雖然滿足了條件覆蓋,但只覆蓋了第一個條件的取假分支和第二個條件的取真分支,不滿足分支覆蓋的要求。測試用例

通過路徑

條件取值覆蓋分支x=2、y=6、z=5acd-T1、T2、-T3、T4cdx=4、y=5、z=15acdT1、-T2、T3、-T4cd表7-15條件覆蓋測試用例2圖7-13例2程序流程圖(4)分支/條件覆蓋分支/條件覆蓋是:執(zhí)行足夠的測試用例,使得分支中每個條件取到各種可能的值,并使每個分支取到各種可能的結(jié)果。對前面的兩個例子: ①A=2,B=0,X=4(沿ace路)

②A=1,B=1,X=1(沿abd路徑)

是滿足這一標(biāo)準(zhǔn)的。圖7-13例1程序流程圖A>1&&B=0aA=2‖X>1X=X+1bdceX=X/AYYNN分支/條件覆蓋

對該例,根據(jù)定義只需設(shè)計以下兩個測試用例便可以覆蓋8個條件值以及4個判斷分支。

測試用例通過路徑條件取值覆蓋分支x=4、y=6、z=5abdT1、T2、T3、T4bdx=2、y=5、z=11ace-T1、-T2、-T3、-T4ce表7-15分支/條件覆蓋測試用例圖7-13例2程序流程圖分支/條件覆蓋分支/條件覆蓋從表面來看,它測試了所有條件的取值,但是實際上某些條件掩蓋了另一些條件。如:

對于條件表達(dá)式(x>3)&&(z<10)來說,必須兩個條件都滿足才能確定表達(dá)式為真。如果(x>3)為假,則一般的編譯器不再判斷是否z<10了。

對于表達(dá)式(x==4)||(y>5)來說,若x==4測試結(jié)果為真,就認(rèn)為表達(dá)式的結(jié)果為真,這時不再檢查(y>5)條件了。因此,采用分支/條件覆蓋,邏輯表達(dá)式中的錯誤不一定能夠查出來了。(5)條件組合覆蓋針對上述問題,提出“條件組合覆蓋”方法。含義:執(zhí)行足夠的例子,使得每個判定中條件的各種可能組合都至少出現(xiàn)一次。顯然,滿足“條件組合覆蓋”的測試用例是一定滿足“分支覆蓋”、“條件覆蓋”和“分支/條件覆蓋”的。條件組合覆蓋A>1,B=0

A≤1,B=0 A=2,X>1 A≠2,X>1圖7-13例1程序流程圖A>1&&B=0aA=2‖X>1X=X+1bdceX=X/AYYNN

后四種情況是第二個if語句的條件組合,而X的值在該語句之前是要經(jīng)過計算的,所以還必須根據(jù)程序的邏輯推算出在程序的入口點X的輸入值應(yīng)是什么。

A>1,B≠0A≤1,B≠0 A=2,X≤1A≠2,X≤1

該圖可出現(xiàn)下面8種條件組合:

下面設(shè)計的四個例子可以使上述8種條件組合至少出現(xiàn)一次:

①A=2,B=0,X=4,ace

使、兩種情況出現(xiàn);圖7-13例1程序流程圖A>1&&B=0aA=2‖X>1X=X+1bdceX=X/AYYNN1條件組合覆蓋5263748

②A=2,B=1,X=1,abe

使、兩種情況出現(xiàn);④A=1,B=1,X=1,abd

使、兩種情況出現(xiàn)。③A=1,B=0,X=2,abe

使、兩種情況出現(xiàn);條件組合覆蓋上面四個例子雖然滿足條件組合覆蓋,但并不能覆蓋程序中的每一條路徑,例如路徑

acd就沒有執(zhí)行,因此,條件組合覆蓋標(biāo)準(zhǔn)仍然是不徹底。圖7-14例1程序流程圖A>1&&B=0aA=2‖X>1X=X+1bdceX=X/AYYNN

1、x>3,z<10記做T1T2,第一個判斷的取真分支2、x>3,z>=10記做T1-T2,第一個判斷的取假分支3、x<=3,z<10記做-T1T2,第一個判斷的取假分支4、x<=3,z>=10記做-T1-T2,第一個判斷的取假分支5、x=4,y>5記做T3T4,第二個判斷的取真分支6、x=4,y<=5記做T3-T4,第二個判斷的取真分支7、x!=4,y>5記做-T3T4,第二個判斷的取真分支8、x!=4,y<=5記做-T3-T4,第二個判斷的取假分支現(xiàn)對例中各個判斷取條件組合:圖7-13例2程序流程圖條件組合覆蓋根據(jù)定義取4個測試用例,就可以覆蓋上面8種條件取值的組合。測試用例如下表:測試用例通過路徑條件取值覆蓋組合號x=4、y=6、z=5abdT1、T2、T3、T41和5x=4、y=5、z=15acdT1、-T2、T3、-T42和6x=2、y=6、z=5acd-T1、T2、-T3、T43和7x=2、y=5、z=15ace-T1、-T2、-T3、-T44和8上面的測試用例覆蓋了所有條件的可能取值的組合,覆蓋了所有判斷的可取分支,但是卻丟失了一條路徑abe。表7-16條件組合覆蓋測試用例發(fā)現(xiàn)錯誤的能力弱強語句覆蓋每條語句至少執(zhí)行一次判定覆蓋每一判定的每個分支至少執(zhí)行一次條件覆蓋每一判定中的每個條件,分別按“真”、“假”至少各執(zhí)行一次判定/條件覆蓋同時滿足判定覆蓋和條件覆蓋的要求條件組合覆蓋求出判定中所有條件的各種可能組合值,每一可能的條件組合至少執(zhí)行一次表7-17五種覆蓋標(biāo)準(zhǔn)的對比1五種覆蓋標(biāo)準(zhǔn)的對比覆蓋標(biāo)準(zhǔn)程序結(jié)構(gòu)舉例測試用例應(yīng)滿足的條件語句覆蓋AB=T判定覆蓋AB=TAB=F表7-17五種覆蓋標(biāo)準(zhǔn)的對比2覆蓋標(biāo)準(zhǔn)程序結(jié)構(gòu)舉例測試用例應(yīng)滿足的條件條件覆蓋A=T,A=FB=T,B=F判定/條件覆蓋AB=T,AB=FA=T,A=FB=T,B=F條件組合覆蓋A=TB=TA=TB=FA=FB=TA=FB=F表7-17五種覆蓋標(biāo)準(zhǔn)的對比3路徑測試:設(shè)計足夠多的測試用例,覆蓋被測試對象中的所有可能路徑。下面的測試用例則可對程序進(jìn)行全部的路徑覆蓋。測試用例通過路徑A=2、B=0、X=3aceA=1、B=0、X=1abdA=2、B=1、X=1abeA=3、B=0、X=1acd

圖7-13例1程序流程圖A>1&&B=0aA=2‖X>1X=X+1bdceX=X/AYYNN表7-18路徑測試1(6)路徑測試路徑測試下面的測試用例,則可對該圖進(jìn)行全部的路徑覆蓋。測試用例通過路徑覆蓋條件x=4、y=6、z=5abdT1、T2、T3、T4x=4、y=5、z=15acdT1、-T2、T3、-T4x=2、y=5、z=15ace-T1、-T2、-T3、T4x=5、y=5、z=5abeT1、T2、-T3、-T4表7-18路徑測試2圖7-13例2程序流程圖

基本路徑測試:將程序流程圖轉(zhuǎn)換為程序圖,確定基本可執(zhí)行路徑集合,計算環(huán)形復(fù)雜度V(G),確定獨立路徑(一條獨立路徑是指,和其他的獨立路徑相比,至少引入一個新處理語句或一個新判斷的程序通路)。V(G)值正好等于該程序的獨立路徑的條數(shù)。導(dǎo)出測試用例:根據(jù)復(fù)雜度和程序結(jié)構(gòu)設(shè)計用例數(shù)據(jù)輸入和預(yù)期結(jié)果。測試用例,確保基本路徑集中的每一條獨立路徑的執(zhí)行。

程序圖(流圖)的符號順序結(jié)構(gòu)if結(jié)構(gòu)case結(jié)構(gòu)while結(jié)構(gòu)until結(jié)構(gòu)圖中的每一個圓稱為流圖的結(jié)點,代表一條或多條語句。流圖中的箭頭稱為邊或連接,代表控制流。圖7-14程序圖符號程序流程圖流圖程序流程圖流圖圖7-15程序流程圖和程序圖對應(yīng)關(guān)系流圖如果判斷中的條件表達(dá)式是由一個或多個邏輯運算符(OR,AND,NAND,NOR)連接的復(fù)合條件表達(dá)式,則需要改為一系列只有單條件的嵌套的判斷。例如:

1,2ifaorb3x4else5y對應(yīng)的程序圖為:圖7-16有邏輯運算符程序圖

91762,38910114,5

76

231

8

41110區(qū)域:由邊和節(jié)點封閉起來的。計算區(qū)域:不要忘記區(qū)域外的部分。待測試程序用流圖表示的待測試程序

5

節(jié)點邊區(qū)域圖7-17程序流程圖和程序圖獨立路徑獨立路徑:至少沿一條新的邊移動的路徑路徑1:1-11路徑2:1-2-3-4-5-10-1-11路徑3:1-2-3-6-8-9-10-1-11路徑4:1-2-3-6-7-9-10-1-111

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論