版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1第7章
軟件的質(zhì)量與測(cè)試
軟件工程研究室SoftwareEngineering2
主要內(nèi)容
7.1
軟件的質(zhì)量
7.2軟件的測(cè)試
目的:測(cè)試是軟件質(zhì)量保證中至關(guān)重要的一個(gè)環(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ì)量保證的幾個(gè)問題47.1.1軟件的質(zhì)量觀7.1軟件的質(zhì)量高質(zhì)量客戶:
在可接受的資金和資源成本下解決問題用戶:
易學(xué)習(xí);
使用效率高;
對(duì)工作有幫助開發(fā):
易設(shè)計(jì);
易維護(hù);
易重用管理人員:
銷售量大并使客戶滿意,同時(shí)開發(fā)和維護(hù)的費(fèi)用少5
Juran
的質(zhì)量觀:
產(chǎn)品在使用時(shí),能適合用戶需要的目標(biāo)程度。
ISO的質(zhì)量觀:
“一個(gè)產(chǎn)品或服務(wù)是否能夠滿足其指定的或蘊(yùn)含的需求有關(guān)的性質(zhì)與特征總和”.
7.1.1軟件的質(zhì)量觀
7.1.2軟件質(zhì)量的特征(1)很難制定具體的、數(shù)量化的產(chǎn)品質(zhì)量標(biāo)準(zhǔn)沒有相應(yīng)的國(guó)際標(biāo)準(zhǔn)、國(guó)家標(biāo)準(zhǔn)或行業(yè)標(biāo)淮(2)大部分軟件很難做到“零缺陷”對(duì)軟件的測(cè)試不可能窮盡所有情況,有缺陷的軟件仍然可以使用軟件產(chǎn)品的不完善可通過維護(hù)和升級(jí)解決問題(3)軟件的類型不同,軟件質(zhì)量的衡量標(biāo)準(zhǔn)的側(cè)重點(diǎn)也不同。對(duì)實(shí)時(shí)系統(tǒng),可靠、效率是衡量軟件質(zhì)量的首要要素對(duì)一些需要用戶與軟件本身進(jìn)行大量交互的系統(tǒng),對(duì)可用性(usability)就提出了較高的要求。
7.1.2軟件質(zhì)量的特征(6)如果軟件只滿足了己經(jīng)定義的需求,而沒有滿足一些隱含的需求,軟件質(zhì)量也不能保證。(4)軟件產(chǎn)品之間很難進(jìn)行橫向的質(zhì)量對(duì)比(5)軟件需求是度量軟件質(zhì)量的基礎(chǔ),滿足了用戶需求的軟件質(zhì)量,就是好的軟件質(zhì)量。即使軟件在技術(shù)上很先進(jìn),界面很漂亮,功能也很多,但不是用戶所需要的,仍不能算軟件質(zhì)量好。功能性(Functionality)可靠性(Reliability)可用性(Usability)效率(Efficiency)可維護(hù)性(Maintainability)可移植性(Portability)7.1.3軟件質(zhì)量因素
1)ISO質(zhì)量特性國(guó)際標(biāo)準(zhǔn)(ISO/IEC9126)
1991年,ISO發(fā)布了ISO/IEC9126質(zhì)量特性的國(guó)際標(biāo)準(zhǔn),將質(zhì)量特性降為6個(gè),并定義了
21個(gè)子特性:
1)ISO質(zhì)量特性國(guó)際標(biāo)準(zhǔn)(ISO/IEC9126)圖7-1ISO軟件質(zhì)量模型
外部和內(nèi)部質(zhì)量適合性準(zhǔn)確性互操作性保密安全性功能性可靠性易用性維護(hù)性可移植性效率成熟性容錯(cuò)性易恢復(fù)性易理解性易學(xué)性易操作性吸引性時(shí)間特性資源利用性易分析性易改變性穩(wěn)定性易測(cè)試性適應(yīng)性易安裝性共存性易替換性102)McCall軟件質(zhì)量模型(1977):產(chǎn)品修改產(chǎn)品改型
圖7-2McCall軟件質(zhì)量模型
外部質(zhì)量屬性(externalqualityattribute)易移植性易復(fù)用性互用性
易維護(hù)性靈活性易測(cè)試性產(chǎn)品操作易使用性正確性可靠性高效性完整性11每個(gè)要素包含系列衡量標(biāo)準(zhǔn)正確性易追溯性:從需求中找到實(shí)現(xiàn)能力完備性:實(shí)現(xiàn)了所有的功能一致性:一致的術(shù)語和技術(shù)高效性運(yùn)行效率:使用最少的處理時(shí)間存儲(chǔ)效率:使用最小的內(nèi)存空間可靠性容錯(cuò)性:異常,仍能操作一致性準(zhǔn)確性簡(jiǎn)潔性易使用性易操作培訓(xùn)易交流輸入輸出量和速度靈活性一致性模塊性易擴(kuò)展性自我描述性互用性模塊性通訊共同性數(shù)據(jù)共同性13易測(cè)試性檢視:測(cè)量、識(shí)別錯(cuò)誤能力簡(jiǎn)潔性自我描述性模塊性模塊性易移植性軟件獨(dú)立性硬件獨(dú)立性自我描述性14易復(fù)用性軟件獨(dú)立性通用性模塊性硬件獨(dú)立性自我描述性易維護(hù)性簡(jiǎn)明性:代碼少簡(jiǎn)潔性:易理解模塊性一致性自我描述性:有解釋15總體效用易維護(hù)性現(xiàn)存效用易移植性易修改性易理解性易測(cè)試性效率人機(jī)界面可靠性易更改性
可認(rèn)性
簡(jiǎn)明性結(jié)構(gòu)性自我描述性易交流性易存取性設(shè)備效率可依靠性一致性完整性準(zhǔn)確性自我包含性硬件獨(dú)立性圖7-3Boehm模型3)Boehm模型
(1978)16McCall和Boehm模型從用戶出發(fā)的質(zhì)量觀.都是層次結(jié)構(gòu)的模型.根據(jù)具體情況決定質(zhì)量要素的相對(duì)重要性.
7.1.4軟件質(zhì)量要素之間的關(guān)系
質(zhì)量由多種因素組成,但互不獨(dú)立,也不一定同等重要,可能是沖突的.
在一定前提下來衡量質(zhì)量,不能脫離代價(jià)來衡量產(chǎn)品的質(zhì)量.17軟件質(zhì)量要素之間的關(guān)系正確性可靠性效率完整性易使用性易維護(hù)性易測(cè)試性靈活性易移植性易復(fù)用性互用性正確性可靠性效率完整性易使用性易維護(hù)性易測(cè)試性靈活性易移植性易復(fù)用性互用性直接相關(guān)反向相關(guān)無關(guān)圖7-4Perry的質(zhì)量要素之間關(guān)系18提高效率可能會(huì)使設(shè)計(jì)不宜理解,會(huì)降低系統(tǒng)的可維護(hù)性。實(shí)現(xiàn)高可靠性通常要求反復(fù)地進(jìn)行錯(cuò)誤檢查并添加一些冗余計(jì)算。
提高效率可能要求刪除這些檢查和冗余。改善可用性可能需要添加額外的代碼為用戶提供反饋信息,這又可能降低整體效率。良好的工程實(shí)踐,項(xiàng)目開始就應(yīng)設(shè)定質(zhì)量目標(biāo),目標(biāo)的實(shí)現(xiàn)應(yīng)讓所有相關(guān)人員都滿意。為了在市場(chǎng)競(jìng)爭(zhēng)中取得成功,在不超過預(yù)算和滿足其他質(zhì)量目標(biāo)要求的同時(shí),使某個(gè)質(zhì)量屬性達(dá)到最優(yōu)化(optimize)。19
內(nèi)部質(zhì)量屬性:
代碼注釋量,影響可維護(hù)性,間接影響可靠性;
代碼的復(fù)朵性,影響可維護(hù)性、可靠性。
說明:
注重短期需要而忽視決策的長(zhǎng)期影響是人類的天性.這可能引發(fā)嚴(yán)重后果。
只考慮短期效果,可能忽視系統(tǒng)的可維護(hù)性,
忽視客戶的長(zhǎng)期需要,導(dǎo)致過高的后期成本。20
幾個(gè)思考題:下面的問題與哪些質(zhì)量屬性有關(guān).一段宇宙飛船程序,使宇宙飛船進(jìn)入冥王星軌道.一個(gè)在購物中心運(yùn)行的系統(tǒng).使用該系統(tǒng),購物者可以確定哪個(gè)商店出售他們需要的商品.
汽車自動(dòng)變速器的控制程序.
打印票據(jù)的實(shí)用軟件包.計(jì)算所得稅的程序,公務(wù)員可以使用該程序檢查納稅人的賬目.
1)軟件質(zhì)量應(yīng)貫穿軟件開發(fā)的全過程軟件質(zhì)量管理該貫穿軟件開發(fā)的全過程,而不僅僅是軟件本身。
7.1.5質(zhì)量保證的幾個(gè)問題2)對(duì)開發(fā)文檔的評(píng)審
需求規(guī)格說明書設(shè)計(jì)規(guī)格說明書代碼文檔測(cè)試報(bào)告用戶手冊(cè)
3)運(yùn)用技術(shù)手段保證質(zhì)量使用多種軟件工具,保證軟件質(zhì)量。例如:
用RationalRose軟件進(jìn)行軟件開發(fā)等。采用先進(jìn)的系統(tǒng)分析方法和軟件設(shè)計(jì)方法
4)以滿足客戶和用戶需要為目標(biāo)的質(zhì)量保證(3)缺陷預(yù)防,控制對(duì)缺陷的修改
(1)采用快速原型法(2)充分設(shè)計(jì)之后再編碼(4)充分進(jìn)行軟件的系統(tǒng)測(cè)試
(5)恰當(dāng)掌握軟件的放行標(biāo)淮
237.2軟件測(cè)試
軟件測(cè)試
它既令人興奮,也令人煩腦;既令人羨慕不己,也令人望而卻步;要想在預(yù)算內(nèi)按時(shí)交付高質(zhì)量的軟件,測(cè)試是必不可少的。
7.2.1軟件測(cè)試概述
7.2.2程序錯(cuò)誤分類
7.2.3軟件測(cè)試的V模型
7.2.4軟件測(cè)試的分類
7.2.5軟件測(cè)試的方法
7.2.6軟件測(cè)試的步驟
7.2.7軟件的調(diào)試
7.2.1軟件測(cè)試概述1)什么是軟件測(cè)試(Test)
?2)為什么要測(cè)試(Test)
?3)軟件測(cè)試的目的
4)軟件測(cè)試的準(zhǔn)則5)軟件的可測(cè)試性
6)軟件測(cè)試與軟件開發(fā)階段7.2.1軟件測(cè)試概述1)什么是軟件測(cè)試(Test)
?
測(cè)試是采用測(cè)試用例,檢測(cè)出程序的錯(cuò)誤、缺陷、故障、失效和事故等的一項(xiàng)軟件活動(dòng)。對(duì)程序的副本提供一組有代表性的輸入數(shù)據(jù),給定的環(huán)境下運(yùn)行程序副本,并對(duì)程序的輸出進(jìn)行檢查和分析。
錯(cuò)誤(Error)稱bug不正確結(jié)果的全部。由開發(fā)人員引起的,如輸入錯(cuò)誤、需求錯(cuò)誤、設(shè)計(jì)錯(cuò)誤等。
缺陷(Defect)錯(cuò)誤的表現(xiàn)結(jié)果,會(huì)促成失敗的發(fā)生。由不恰當(dāng)或錯(cuò)誤的技術(shù)、算法、遺漏了某些功能或設(shè)計(jì)內(nèi)容所導(dǎo)致。故障(Fault)故障是指系統(tǒng)的規(guī)格說明與其行為之間的偏差,通常由一個(gè)或多個(gè)缺陷引起。通過對(duì)比程序的實(shí)際輸出與預(yù)期輸出來檢測(cè)。失效(Failure)故障引起的結(jié)果。系統(tǒng)不可接受的行為。由于錯(cuò)誤,導(dǎo)致系統(tǒng)的錯(cuò)誤輸出─失效。發(fā)生過失效的軟件通常仍然是可用的。只有當(dāng)軟件頻繁失效,或者公認(rèn)已經(jīng)“過時(shí)”了的時(shí)侯,軟件才被廢棄,意味著當(dāng)前這一版本軟件使用壽命的終結(jié)。事故(Incident)呈現(xiàn)給用戶的嚴(yán)重錯(cuò)誤的結(jié)果,造成一定的或嚴(yán)重的損失?!扒晗x”1970年代,一位程序員在開發(fā)公司的工資管理系統(tǒng)時(shí),迫于計(jì)算機(jī)存儲(chǔ)空間的限制,將4位數(shù)日期縮減為2位數(shù)(197373),從而節(jié)省了可觀的存儲(chǔ)空間;然而,世界各地更換或升級(jí)2000年問題所花的費(fèi)用超過數(shù)億美元…2)為什么要測(cè)試(Test)
?“愛國(guó)者導(dǎo)彈”愛國(guó)者導(dǎo)彈vs
飛毛腿導(dǎo)彈有一枚愛國(guó)者導(dǎo)彈擊斃28名美軍士兵…原因:導(dǎo)彈的軟件包含一個(gè)累加計(jì)時(shí)故障,系統(tǒng)時(shí)鐘錯(cuò)誤積累起來就可能拖延14個(gè)小時(shí),造成跟蹤系統(tǒng)失去準(zhǔn)確度。“獅子王”1994年秋天,迪斯尼公司發(fā)行《LionKingAnimated》,雖然銷售量巨大,卻引來巨大的、意想不到的投訴…原因:
發(fā)布之前未能對(duì)該軟件在各種不同類型的PC機(jī)上進(jìn)行測(cè)試,導(dǎo)致在某些系統(tǒng)上無法運(yùn)行。
如,對(duì)一個(gè)整數(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)這類錯(cuò)誤,程序運(yùn)行時(shí)會(huì)垮臺(tái),
它訪問非法的存儲(chǔ)器地址,災(zāi)難就發(fā)生了。323)軟件測(cè)試的目的
軟件測(cè)試是對(duì)軟件質(zhì)量的度量,并代表了規(guī)約、設(shè)計(jì)和編碼的最終評(píng)審。
為找出錯(cuò)誤而運(yùn)行程序或系統(tǒng)的過程。(Myers,1979)軟件測(cè)試概述測(cè)試是證明錯(cuò)誤的存在,而不是證明錯(cuò)誤的不存在。
(Dijstra)確信程序做了它應(yīng)該做的事。(Hetzel,1973)
確認(rèn)程序正確地實(shí)現(xiàn)了所要求的功能。33
4)軟件測(cè)試的準(zhǔn)則#
需求確定后,制定測(cè)試計(jì)劃,所有的測(cè)試應(yīng)能
追溯到用戶需求上。
軟件測(cè)試概述#盡早地和不斷地進(jìn)行軟件測(cè)試。
#
測(cè)試從小規(guī)模開始,逐漸擴(kuò)到大規(guī)模。
#
獨(dú)立測(cè)試組或SoftwareTestEngineer
。
#
測(cè)試中發(fā)現(xiàn)8o%錯(cuò)誤,可能由程序的20%的組件造成的(Pareto原理)。
#
使用或開發(fā)測(cè)試工具。
345)軟件的可測(cè)試性
程序被測(cè)試的難易程度軟件測(cè)試概述一個(gè)特定測(cè)試集覆蓋產(chǎn)品的充分程度
軟件可測(cè)試性的度量特征:
a.可操作性b.可觀察性c.可控制性
d可分解性e.簡(jiǎn)單性f.穩(wěn)定性
g.可理解性
35
6)軟件測(cè)試與軟件開發(fā)階段
軟件測(cè)試并不等于程序測(cè)試,應(yīng)貫穿于軟件定義與開發(fā)的各個(gè)階段。
需求階段
用例情景測(cè)試原型走查模型走查需求評(píng)審制定測(cè)試計(jì)劃設(shè)計(jì)階段
模型走查原型走查設(shè)計(jì)評(píng)審
制定測(cè)試計(jì)劃測(cè)試設(shè)計(jì)實(shí)現(xiàn)階段代碼走查接口分析文檔評(píng)估
編寫測(cè)試用例制定測(cè)試過程
單元測(cè)試實(shí)現(xiàn)階段制定測(cè)試計(jì)劃集成設(shè)計(jì)系統(tǒng)測(cè)試
α測(cè)試
β測(cè)試驗(yàn)收測(cè)試回歸測(cè)試,質(zhì)量保證驗(yàn)收階段表7-1軟件測(cè)試與軟件開發(fā)階段367.2.2軟件錯(cuò)誤分類
Beizer
給出的軟件錯(cuò)誤:
抽樣大小—6877000條語句(含注釋)總錯(cuò)誤數(shù)—16209個(gè)錯(cuò)每千條語句錯(cuò)誤數(shù)—2.36個(gè)錯(cuò)需求錯(cuò)誤,功能和性能錯(cuò)誤程序結(jié)構(gòu)錯(cuò)誤,數(shù)據(jù)錯(cuò)誤編碼錯(cuò)誤測(cè)試定義和執(zhí)行錯(cuò)誤軟件集成錯(cuò)誤37錯(cuò)誤分類錯(cuò)誤數(shù)百分比(%)需求錯(cuò)誤13178.1需求不正確6494.0需求邏輯錯(cuò)1530.9需求不完備2241.4需求文檔描述錯(cuò)130.1需求變更2781.7表7-2需求錯(cuò)誤錯(cuò)誤分類38錯(cuò)誤分類錯(cuò)誤數(shù)百分比(%)功能和性能錯(cuò)誤262416.2功能和性能不正確4562.8性能不完整2311.4功能不完整1931.2適用范圍錯(cuò)7784.8用戶信息和診斷信息錯(cuò)8575.3異常處理錯(cuò)790.5其他功能錯(cuò)300.2表7-3功能和性能錯(cuò)誤錯(cuò)誤分類39錯(cuò)誤分類錯(cuò)誤數(shù)百分比(%)程序結(jié)構(gòu)錯(cuò)誤408225.2控制流和控制順序錯(cuò)誤、變量、分支、循環(huán)等問題207812.8處理器錯(cuò)200412.4表7-4程序結(jié)構(gòu)錯(cuò)誤錯(cuò)誤分類40錯(cuò)誤分類錯(cuò)誤數(shù)百分比(%)數(shù)據(jù)錯(cuò)誤363822.4數(shù)據(jù)類型定義,引用及結(jié)構(gòu)錯(cuò)180511.1數(shù)據(jù)存取及處理錯(cuò)183111.3其他數(shù)據(jù)錯(cuò)(比較、計(jì)算、精度、零為除數(shù))2表7-5數(shù)據(jù)錯(cuò)誤錯(cuò)誤分類41錯(cuò)誤分類錯(cuò)誤數(shù)百分比(%)編碼與實(shí)現(xiàn)錯(cuò)誤16019.9編碼與程序輸入錯(cuò)誤3322.0違反編程標(biāo)準(zhǔn)或風(fēng)格3182.0文檔錯(cuò)9605.9其他實(shí)現(xiàn)錯(cuò)10.0表7-6編碼與實(shí)現(xiàn)錯(cuò)誤錯(cuò)誤分類42錯(cuò)誤分類錯(cuò)誤數(shù)百分比(%)測(cè)試定義和執(zhí)行錯(cuò)誤4472.8測(cè)試設(shè)計(jì)錯(cuò)110.1測(cè)試執(zhí)行錯(cuò)3552.2測(cè)試文檔錯(cuò)110.1測(cè)試用例不充分640.4其他測(cè)試錯(cuò)誤60.0其他錯(cuò)誤
(定時(shí)和協(xié)調(diào),性能,故障恢復(fù),不付合標(biāo)準(zhǔn))7634.7表7-7測(cè)試定義和執(zhí)行錯(cuò)誤錯(cuò)誤分類43錯(cuò)誤分類錯(cuò)誤數(shù)百分比(%)軟件集成錯(cuò)誤14559.0內(nèi)部接口錯(cuò)8595.3外部接口,時(shí)間吞吐量不匹配5183.2其他集成錯(cuò)780.5系統(tǒng)及軟件結(jié)構(gòu)錯(cuò)2821.7表7-8軟件集成錯(cuò)誤錯(cuò)誤分類447.2.3軟件測(cè)試的V模型模塊規(guī)約系統(tǒng)結(jié)構(gòu)與子系統(tǒng)規(guī)約用戶需求分析規(guī)約確定系統(tǒng)設(shè)計(jì)詳細(xì)設(shè)計(jì)模塊實(shí)現(xiàn)規(guī)約用戶需求用戶要求用戶接受測(cè)試系統(tǒng)測(cè)試系統(tǒng)集成子系統(tǒng)集成與測(cè)試模塊測(cè)試模塊代碼測(cè)試后的模塊測(cè)試后子系統(tǒng)集成的系統(tǒng)檢驗(yàn)過的系統(tǒng)交付的系統(tǒng)圖7-5軟件測(cè)試的V模型457.2.4軟件測(cè)試的分類
1)按實(shí)施步驟分:?jiǎn)卧獪y(cè)試組裝測(cè)試確認(rèn)測(cè)試系統(tǒng)測(cè)試
3)按使用的測(cè)試方法分:靜態(tài)測(cè)試:動(dòng)態(tài)測(cè)試:白盒測(cè)試、黑盒測(cè)試
2)按軟件組裝策略分:
#增量測(cè)試自頂向下自底向上三明治
#非增量測(cè)試46軟件測(cè)試的分類
功能測(cè)試
性能測(cè)試接口測(cè)試
強(qiáng)度測(cè)試
安全性測(cè)試
可靠性測(cè)試
恢復(fù)性測(cè)試
安裝性測(cè)試
協(xié)調(diào)性測(cè)試
人機(jī)界面測(cè)試4)按項(xiàng)目測(cè)試條目分:477.2.5軟件測(cè)試方法圖7-8軟件測(cè)試技術(shù)分類軟件測(cè)試方法靜態(tài)測(cè)試動(dòng)態(tài)測(cè)試黑盒測(cè)試/功能測(cè)試白盒測(cè)試/結(jié)構(gòu)測(cè)試48靜態(tài)測(cè)試(代碼會(huì)審/走查/辦公桌)對(duì)需求模型、設(shè)計(jì)模型的靜態(tài)檢查檢查:數(shù)據(jù)引用錯(cuò)(使用未賦值的變量)數(shù)據(jù)計(jì)算錯(cuò)(混合類型,零為除數(shù))數(shù)據(jù)說明錯(cuò)(類型不符錯(cuò))數(shù)據(jù)比較錯(cuò)(運(yùn)算符、邏輯符不符)控制流錯(cuò)(循環(huán)初值、次數(shù)不對(duì))接口錯(cuò)輸入輸出錯(cuò)文件錯(cuò)49
任何程序都可以看作是將輸入定義域取值映射到輸出值域的函數(shù)。將系統(tǒng)看成“黑盒”。也稱黑盒測(cè)試1)功能測(cè)試(FunctionTesting)軟件InputOutput圖7-6黑盒測(cè)試目的:功能的正確性測(cè)試
證實(shí)每個(gè)實(shí)現(xiàn)了的功能是否符合需求規(guī)格說明書的要求。
黑盒測(cè)試要在軟件的接口處進(jìn)行.50是否有不正確或遺漏的功能?黑盒測(cè)試可以發(fā)現(xiàn)如下錯(cuò)誤:在接口上,輸入能否被正確地接受?能否輸出正確的結(jié)果?是否有數(shù)據(jù)結(jié)構(gòu)錯(cuò)誤或外部信息(例如數(shù)據(jù)文件)訪問錯(cuò)誤?性能上是否能夠滿足要求?是否有初始化或終止性錯(cuò)誤?51
功能測(cè)試的方法:
等價(jià)類分析邊界值分析錯(cuò)誤推測(cè)法因果圖法
隨機(jī)測(cè)試基于決策樹的測(cè)試52(1)等價(jià)類(Equivalencepartitioning)
把輸入的數(shù)據(jù)按有效的和無效的劃分為若干個(gè)等價(jià)類。等價(jià)類,是指某個(gè)輸入域的子集合。在該子集合中,各個(gè)輸入數(shù)據(jù)對(duì)于揭露程序中的錯(cuò)誤都是等效的。
有效等價(jià)類:
對(duì)于程序規(guī)格說明,是合理的,有意義的輸入數(shù)據(jù)構(gòu)成的集合。
無效等價(jià)類:
是指對(duì)于程序規(guī)格說明,是不合理的,無意義的輸入數(shù)據(jù)構(gòu)成的集合。53等價(jià)類劃分的原則:
按區(qū)間劃分按數(shù)值劃分按數(shù)值集合劃分按限制條件或規(guī)則劃分
功能測(cè)試按區(qū)間劃分例如:輸入值是學(xué)生成績(jī),范圍是0~1000100有效等價(jià)類1≤成績(jī)≤100無效等價(jià)類2成績(jī)>100無效等價(jià)類1成績(jī)<054
測(cè)試用例
={測(cè)試數(shù)據(jù)十期望結(jié)果}
測(cè)試結(jié)果={測(cè)試用例十實(shí)際結(jié)果}
在確立了等價(jià)類之后,建立等價(jià)類表,列出所有劃分出的等價(jià)類數(shù)據(jù)十期望結(jié)果。
確立測(cè)試用例功能測(cè)試等價(jià)類劃分
………
………
……….
無效等價(jià)類
有效等價(jià)類
輸入條件表7-9劃分出的等價(jià)類不考慮程序的內(nèi)部結(jié)構(gòu),只依據(jù)程序的規(guī)格說明來設(shè)計(jì)測(cè)試用例。55
輸入條件
有效等價(jià)類
無效等價(jià)類標(biāo)識(shí)符個(gè)數(shù)1個(gè)(1)多個(gè)(2)0個(gè)(3)
標(biāo)識(shí)符字符數(shù)1—8個(gè)(4)
0個(gè)(5)>8個(gè)(6)>80個(gè)(7)標(biāo)識(shí)符組成
字母(8)
數(shù)字(9)非字母數(shù)字字符(10)
保留字(11)第一個(gè)標(biāo)識(shí)符
字母(12)
非字母(13)標(biāo)識(shí)符使用先說明后使用(14)
未說明已使用(15)表7-10標(biāo)識(shí)符的等價(jià)類劃分例1為標(biāo)識(shí)符劃分等價(jià)類56測(cè)試用例:
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位表示月。[問題]用等價(jià)類劃分法設(shè)計(jì)測(cè)試用例,來測(cè)試程序的“日期檢查功能”。輸入等價(jià)類有效等價(jià)類無效等價(jià)類日期的類型及長(zhǎng)度(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劃分等價(jià)類:表7-11日期的等價(jià)類劃分例2:日期檢查設(shè)計(jì)有效等價(jià)類的測(cè)試用例:測(cè)試用例編號(hào)測(cè)試用例內(nèi)容覆蓋的等價(jià)類U1200711(1)(5)(8)表7-12日期的有效等價(jià)類測(cè)試用例例2:日期檢查設(shè)計(jì)無效等價(jià)類的測(cè)試用例:測(cè)試用例編號(hào)測(cè)試用例內(nèi)容覆蓋的等價(jià)類U107June(2)U220076(3)U32007011(4)U4198912(6)U5205401(7)U6200700(8)U7200713(10)表7-13日期的無效等價(jià)類測(cè)試用例61確定等價(jià)類的原則小結(jié)(1)如果輸入條件規(guī)定了取值范圍,或者值的個(gè)數(shù),則可以確定一個(gè)有效等價(jià)類和兩個(gè)無效等價(jià)類。(2)如果輸入條件規(guī)定了輸入值的集合,或者是規(guī)定了“必須如何”的條件,則可以確立一個(gè)有效等價(jià)類和一個(gè)無效等價(jià)類。(3)如果輸入條件是一個(gè)布爾量,則可以確立一個(gè)有效等價(jià)類和一個(gè)無效等價(jià)類。(4)如果規(guī)定了輸入數(shù)據(jù)必須遵守的規(guī)則,則可以確立一個(gè)有效等價(jià)類(遵守規(guī)則的數(shù)據(jù))和若干無效等價(jià)類(從不同角度違反規(guī)則的數(shù)據(jù))。62選擇測(cè)試用例的原則:設(shè)計(jì)盡可能少的測(cè)試用例,覆蓋所有的有效等價(jià)類。等價(jià)類劃分針對(duì)每一個(gè)無效等價(jià)類,設(shè)計(jì)一個(gè)測(cè)試用例來覆蓋它。(5)如果確知以劃分的等價(jià)類中的各元素在程序中的處理方式不同,則應(yīng)進(jìn)一步劃分成更小的等價(jià)類。63(2)邊界值法(BoundaryValueAnalysis)
把測(cè)試值選在等價(jià)類的邊界上。錯(cuò)誤可能出現(xiàn)在輸入變量的極值附近。功能測(cè)試bacd圖7-7邊界值測(cè)試法例如,測(cè)試
的一段程序。憑直覺等價(jià)區(qū)間應(yīng)是(0,
1)和(1,
+∞)??扇=0.5以及x=2.0進(jìn)行等價(jià)測(cè)試,再取
x=0以及x=1進(jìn)行邊界值測(cè)試。
確定邊界通常輸入和輸出等價(jià)類的邊界,是重點(diǎn)測(cè)試的邊界情況。選取正好等于、剛剛大于、剛剛小于邊界的值作為測(cè)試數(shù)據(jù),而不是選取等價(jià)類中的典型值或任意值作為測(cè)試數(shù)據(jù)。65邊界值的選取
5個(gè)元素情況:
最小值,略高于最小值正常值略低于最大值,最大值
n個(gè)變量,有4n+1個(gè)測(cè)試用例abcd圖7-8邊界值測(cè)試法abcd在5個(gè)元素基礎(chǔ)上增如:略高于最大值略低于最小值
常見的邊界值通常情況下,軟件測(cè)試所包含的邊界檢驗(yàn)有幾種類型:數(shù)字、字符、位置、重量、大小、速度、方位、尺寸、空間等。相應(yīng)地,以上類型的邊界值應(yīng)該在:最大/最小、首位/末位、上/下、最快/最慢、最高/最低、
最短/最長(zhǎng)、空/滿等情況下。對(duì)16-bit的整數(shù)而言,32767和-32768是邊界屏幕上光標(biāo)在最左上、最右下位置數(shù)組元素的第一個(gè)和最后一個(gè)報(bào)表的第一行和最后一行循環(huán)的第0次、第1次和倒數(shù)第2次、最后1次邊界值分析的原則原則1:如果輸入條件規(guī)定了值的范圍,則應(yīng)取剛達(dá)到這個(gè)范圍的邊界的值,以及剛剛超越這個(gè)范圍邊界的值作為測(cè)試輸入數(shù)據(jù)。例如:如果程序的規(guī)格說明中規(guī)定“重量在10公斤至50公斤范圍內(nèi)的郵件,其郵費(fèi)計(jì)算公式為……”。
作為測(cè)試用例,應(yīng)取10、50、10.01、49.99、9.99及50.01等。原則2:如果輸入條件規(guī)定了值的個(gè)數(shù),則用最大個(gè)數(shù)、最小個(gè)數(shù)、比最小個(gè)數(shù)少1,比最大個(gè)數(shù)多1的數(shù)據(jù)作為測(cè)試數(shù)據(jù)。比如,一個(gè)輸入文件應(yīng)包括1-255個(gè)記錄,則測(cè)試用例可取1和255,還應(yīng)取0及256等。原則3:如果程序的規(guī)格說明給出的輸入域或輸出域是有序集合,則應(yīng)選取集合的第一個(gè)元素和最后一個(gè)元素作為測(cè)試用例。原則4:將原則1和原則2應(yīng)用于輸出條件,即設(shè)計(jì)測(cè)試用例使輸出值達(dá)到邊界值及其左右的值。
例如,某程序的規(guī)格說明要求計(jì)算出“每月保險(xiǎn)金扣除額為0至1165.25元”。其測(cè)試用例可取:0.00及1165.24、還可取:-0.01及1165.26等。再如,某程序要求每次”最少顯示1條、最多顯示4條查詢結(jié)果”。其測(cè)試用例包括1和4,還應(yīng)包括0和5等。[例1]NextDate()序號(hào)MonthDayYear期望輸出121420002000-2-15221419961996-2-15321420022002-2-15422820002000-2-29522819961996-2-29622820022002-3-1722920002000-3-1822919961996-3-192292002無效的輸入日期102302000無效的輸入日期112301996無效的輸入日期122302002無效的輸入日期序號(hào)MonthDayYear期望輸出1361420002000-6-151461419961996-6-151561420022002-6-151662920002000-6-301762919961996-6-301862920022002-6-301963020002000-7-12063019961996-7-12163020022002-7-1226312000無效的輸入日期236311996無效的輸入日期246312002無效的輸入日期序號(hào)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序號(hào)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)實(shí)際執(zhí)行的次數(shù)是否正確;
檢查不存在或空的輸入;
檢查單個(gè)輸入項(xiàng);
檢查一個(gè)正好填滿了的數(shù)組等等。
觀點(diǎn):大部分錯(cuò)誤都出現(xiàn)在邊界上例2測(cè)試代碼的邊界情況73
模擬fgets(從文件中獲取字符串函數(shù)),讀入一些字符,直到迂到一個(gè)換行或緩沖區(qū)滿了。
inti;
chars[MAX];
for(i=0;(s[i]=getchar())!=‘\n’&&i<MAX-1;++i)
;
s[--i]=‘\0’;
第1個(gè)邊界測(cè)試:
讀入一個(gè)空行,一開始就是個(gè)換行符.結(jié)果如何?74循環(huán)在第1次重復(fù)時(shí)就結(jié)束了,這時(shí)i=0最后一行代碼i值減小到-1,并把一個(gè)空字節(jié)寫入s[-1]在數(shù)組開始之前,通過邊界測(cè)試發(fā)現(xiàn)錯(cuò)誤重寫循環(huán),用字符填充數(shù)組的方法:for(i=0;i<MAX-1;i++)if((s[i]=getchar())==‘\n’)break;
s[i]=‘\0’;
75
重復(fù)前面邊界測(cè)試,對(duì)只有一個(gè)換行字符的行,程序能正確處理。i=0,第1個(gè)輸入字符跳出循環(huán),而‘\0’被存入s[0]中。對(duì)一個(gè)或兩個(gè)字符之后是換行符的輸入做類似檢查,在接近邊界處循環(huán)也能工作。
76
第2個(gè)邊界測(cè)試:
輸入中有一個(gè)很長(zhǎng)的行或其中無換行符,
保證i總是小于MAX-1的檢測(cè),能處理這個(gè)問題。
若輸入為空,對(duì)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個(gè)邊界測(cè)試:
檢查輸入即數(shù)組接近滿了,正好滿了,超過的情況。
若換行符正好在這個(gè)時(shí)候出現(xiàn),若在‘\n’出現(xiàn)前緩沖區(qū)己滿,程序做些什么?
78基本思想:列舉出程序中所有可能有的錯(cuò)誤和容易發(fā)生錯(cuò)誤的特殊情況,根據(jù)它們選擇測(cè)試用例。利用經(jīng)驗(yàn)確定程序中容易出錯(cuò)的地方。(3)錯(cuò)誤推測(cè)法功能測(cè)試?yán)龑?duì)排序程序進(jìn)行測(cè)試
邊界值法
#輸入表為空
#輸入表中僅有一個(gè)數(shù)據(jù)
#輸入表為滿表錯(cuò)誤猜測(cè)法
#輸入表已排好序
#輸入表的排序與要求的順序相反
#輸入表中的所有數(shù)據(jù)全部相同79(4)因果圖(Cause-EffectGraphing)
借助圖形來設(shè)計(jì)測(cè)試用例的一種方法.功能測(cè)試因果圖方法最終生成的就是判定表。用于被測(cè)程序具有多種輸入條件,而輸出又依賴于輸入條件的各種組合情況.80因果圖中的基本符號(hào)Ci表示原因,Ei表示結(jié)果。各結(jié)點(diǎn)表示狀態(tài),“0”---狀態(tài)不出現(xiàn),
“1”---狀態(tài)出現(xiàn).CiEi恒等CiEi非C1EiC2或C1EiC2與圖7-9因果圖基本符號(hào)81表示約束條件的因果圖符號(hào)EabE(互斥、排他)IabI(包含、或)cOabO(唯一)aRbR(要求)MabM(屏蔽)圖7-10表示約束條件的因果圖符號(hào)82例利用因果圖設(shè)計(jì)測(cè)試用例飲料自動(dòng)售貨機(jī)軟件測(cè)試用例。
售1杯飲料單價(jià)5角.若投入5角錢或1元錢的硬幣,按下橙汁或啤酒的按鈕,則飲料流出.若有零錢找,則顯示零錢找完的紅燈滅,并在送出飲料的同時(shí)退還5角硬幣。若售貨機(jī)沒有零錢找,則顯示一個(gè)零錢找完的紅燈亮,這時(shí)若投入1元錢硬幣并按下按鈕,則不僅不送出飲料而且退出1元錢;83自動(dòng)售貨機(jī)軟件測(cè)試用例
中間狀態(tài)11.投入1元硬幣且按下飲料按鈕12.按下橙汁或啤酒按鈕13.應(yīng)當(dāng)找5角錢且售貨機(jī)有零錢找14.錢已付清原因
結(jié)果1.售貨機(jī)有零錢找21.售貨機(jī)零錢找完紅燈亮2.投入1元硬幣22.退還1元硬幣3.投入5角硬幣23.退還5角硬幣4.按下橙汁按鈕24.送出橙汁飲料5.按下啤酒按鈕25.送出啤酒飲料84按下橙汁按鈕12345售貨機(jī)有零錢找投入1元硬幣投入5角硬幣按下啤酒按鈕2122232425售貨機(jī)零錢找完紅燈亮退還1元硬幣找回5角硬幣送出橙汁飲料送出啤酒飲料E11131412E該找5角可找5角按下按鈕錢已付清圖7-11自動(dòng)售貨機(jī)的因果圖85
因果圖方法生成測(cè)試用例的步驟:a.找出軟件規(guī)格說明中的原因(輸入條件或輸入條件的等價(jià)類),及由原因引起的結(jié)果(即輸出條件動(dòng)作).b.分析軟件規(guī)格說明描述中的語義,找出原因與結(jié)果之間,原因與原因之間對(duì)應(yīng)的是什么關(guān)系?根據(jù)這些關(guān)系畫出因果圖.86因果圖方法生成測(cè)試用例的步驟:c.由于語法或環(huán)境限制,有些原因與原因之間,
原因與結(jié)果之間的組合情況不可能出現(xiàn)。為表明這些特殊情況,在因果圖上用一些記號(hào)標(biāo)明約束或限制條件.d.把因果圖轉(zhuǎn)換成判定表.e.
把判定表的每一列拿出來作為依據(jù),設(shè)計(jì)測(cè)試用例.自動(dòng)售貨機(jī)轉(zhuǎn)換成判定表:表7-14自動(dòng)售貨機(jī)判定表88(5)綜合策略的測(cè)試方法Myers提出了使用各種測(cè)試方法的綜合策略:
任何情況下都必須使用邊界值分析方法。必要時(shí)用等價(jià)類劃分法補(bǔ)充一些測(cè)試用例.
用錯(cuò)誤推測(cè)法再追加一些測(cè)試用例.
如果程序的功能說明中含有輸入條件的組合情況,則一開始就可選用因果圖法.
測(cè)試用例的邏輯覆蓋程度要達(dá)到要求的覆蓋標(biāo)準(zhǔn).
89(6)窮舉測(cè)試
對(duì)于黑盒測(cè)試來講,最簡(jiǎn)單程序,設(shè)A、B、C都是整形變量,在字長(zhǎng)為32位的計(jì)算機(jī)上運(yùn)行,則輸入數(shù)據(jù)的可能性有232x232=264種,如果這個(gè)程序執(zhí)行一次需1ms,一年工作365×24小時(shí),則所有的組合完全測(cè)試一次將需要5億年。是不可能的ProgramABCc因此,測(cè)試人員只能在大量可能的數(shù)據(jù)中,選取其中一部分作為測(cè)試用例。90
檢查軟件在異常條件下的行為。容錯(cuò)性好的軟件能確保系統(tǒng)不發(fā)生無法意料的事故。
(7)非功能測(cè)試--容錯(cuò)性測(cè)試比較溫柔的容錯(cuò)性測(cè)試通常構(gòu)造一些不合理的輸入來引誘軟件出錯(cuò),例如:
(1)輸入錯(cuò)誤的數(shù)據(jù)類型。
(2)輸入定義域之外的數(shù)值。粗暴一些的容錯(cuò)性測(cè)試俗稱“大猩猩”測(cè)試,可使出任何招術(shù)。91
性能與效率測(cè)試:測(cè)試軟件的運(yùn)行速度和對(duì)資源的利用率。有時(shí)關(guān)心測(cè)試的“絕對(duì)值”,如數(shù)據(jù)輸送速率是每秒多少比特。有時(shí)關(guān)心測(cè)試的“相對(duì)值”,如某個(gè)軟件比另一個(gè)軟件快多少倍。(7)非功能測(cè)試--性能與效率測(cè)試
在獲取測(cè)試的“絕對(duì)值”時(shí),要充分考慮并記錄運(yùn)行環(huán)境對(duì)測(cè)試的影響.例如計(jì)算機(jī)主頻,總線結(jié)構(gòu)和外部設(shè)備都可能影響軟件的運(yùn)行速度;若與多個(gè)計(jì)算機(jī)共享資源,軟件運(yùn)行可能慢得像蝸牛爬行。92
在獲取測(cè)試的“相對(duì)值”時(shí),要確保被測(cè)試的幾個(gè)軟件運(yùn)行于完全一致的環(huán)境中。硬件環(huán)境的一致性比較容易做到(用同一臺(tái)計(jì)算機(jī)即可)。軟件環(huán)境的因素較多:操作系統(tǒng),程序設(shè)計(jì)語言,編譯系統(tǒng)等,對(duì)軟件的性能都會(huì)產(chǎn)生較大的影響。如果是比較幾個(gè)算法的性能,就要求編程語言和編譯器也完全一致。93
性能與效率測(cè)試中很重要的一項(xiàng)是
極限測(cè)試
因?yàn)楹芏嘬浖到y(tǒng)會(huì)在極限測(cè)試中崩潰。例如,連續(xù)不停地向服務(wù)器發(fā)請(qǐng)求,測(cè)試服務(wù)器是否會(huì)陷入死鎖狀態(tài)不能自拔;給程序輸入特別大的數(shù)據(jù),看看它是否吃得消。
94
易用性測(cè)試沒有一個(gè)量化的指標(biāo),主觀性較強(qiáng)。[Cusumano
1995]一般認(rèn)為,如果用戶不翻閱手冊(cè)就能使用軟件,那么表明這個(gè)軟件具有較好的易用性。(7)非功能測(cè)試--易用性測(cè)試95
文檔測(cè)試主要檢查文檔的正確性、完備性和可理解性。
文檔測(cè)試軟件=程序十文檔十?dāng)?shù)據(jù)
正確性是指不要把軟件的功能和操作寫錯(cuò),也不允許文檔內(nèi)容前后矛盾。
完備性是指文檔不可以“虎頭蛇尾”,更不許漏掉關(guān)鍵內(nèi)容。文檔中很多內(nèi)容對(duì)開發(fā)者可能是“顯然”的,但對(duì)用戶不見得都是“顯然”的。
文檔不可以寫成散文、詩歌或者偵探等小說,要讓用戶看得懂,能理解。96小結(jié)
功能測(cè)試的方法:
等價(jià)類分析邊界值分析錯(cuò)誤推測(cè)法因果圖法97
功能性測(cè)試方法優(yōu)點(diǎn):與軟件如何實(shí)現(xiàn)無關(guān),如果實(shí)現(xiàn)發(fā)生變化,測(cè)試用例仍然有用;測(cè)試用例開發(fā)可以與程序的實(shí)現(xiàn)并行進(jìn)行.缺點(diǎn):測(cè)試用例之間可能存在嚴(yán)重的冗余;存在測(cè)試的不徹底性.小結(jié)功能測(cè)試只能觀察軟件的外部表現(xiàn),滿足用戶的功能需求。小結(jié)即使軟件的輸入輸出都是正確的,卻并不能說明軟件就是正確的。因?yàn)槌绦蛴锌赡苡缅e(cuò)誤的運(yùn)算方式得出正確的結(jié)果,例如“負(fù)負(fù)得正,錯(cuò)錯(cuò)得對(duì)”,只有白盒測(cè)試才能發(fā)現(xiàn)真正的原因。白盒測(cè)試能發(fā)現(xiàn)程序里的隱患,象內(nèi)存泄漏、誤差累計(jì)問題。在這方面,黑盒測(cè)試存在嚴(yán)重的不足。2)結(jié)構(gòu)測(cè)試(白盒測(cè)試)
白盒測(cè)試白盒測(cè)試又稱覆蓋測(cè)試。測(cè)試軟件產(chǎn)品的內(nèi)部邏輯結(jié)構(gòu),是否符合設(shè)計(jì)規(guī)格要求。白盒測(cè)試考慮測(cè)試用例對(duì)程序內(nèi)部邏輯的覆蓋程度:最徹底的白盒法是覆蓋程序中的每一條路徑,但是由于程序中一般含有循環(huán),所以路徑的數(shù)目極大,要執(zhí)行每一條路徑是不可能的,只能希望覆蓋的程度盡可能高些。對(duì)一個(gè)具有多重選擇和循環(huán)嵌套的程序,不同的路徑數(shù)目可能是天文數(shù)字。例:某個(gè)小程序的流程圖,包括了一個(gè)執(zhí)行20次的循環(huán)。包含的不同執(zhí)行路徑數(shù)達(dá)520條,對(duì)每一條路徑進(jìn)行測(cè)試需要1毫秒,假定一年工作365×24小時(shí),要把所有路徑測(cè)試完,需3170年。圖7-12執(zhí)行20次循環(huán)程序的流程圖邏輯覆蓋:語句覆蓋判定覆蓋(分支覆蓋)條件覆蓋判定/條件覆蓋條件組合覆蓋控制結(jié)構(gòu)覆蓋:基本路徑測(cè)試循環(huán)測(cè)試條件測(cè)試數(shù)據(jù)流測(cè)試為了衡量測(cè)試的覆蓋程度,下面給出了從低到高的覆蓋方法:102對(duì)模塊的每一個(gè)獨(dú)立的執(zhí)行路徑至少測(cè)試一次。
對(duì)所有的邏輯判定的每一個(gè)分支,(真與假)都至少測(cè)試一次。
在循環(huán)的邊界和運(yùn)行界限內(nèi)執(zhí)行循環(huán)體。這些方法主要對(duì)程序模塊進(jìn)行如下的檢查:測(cè)試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性。(1)語句覆蓋(StatementCoverage)被測(cè)程序中的每條語句至少應(yīng)該執(zhí)行一次語句覆蓋是最弱的測(cè)試標(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;}測(cè)試用例:圖7-13例1程序流程圖A>1&&B=0aA=2‖X>1X=X+1bdceX=X/AYYNNA=2,B=0,X=3語句覆蓋的缺點(diǎn)語句覆蓋是最弱邏輯覆蓋如果第一個(gè)條件語句中的“&&”錯(cuò)誤的寫成“||”,上面的測(cè)試用例無法發(fā)現(xiàn)這個(gè)錯(cuò)誤;如果第三個(gè)條件語句中x>1誤寫成x>0,這個(gè)測(cè)試用例也不能暴露它;沿著路徑abd執(zhí)行時(shí),x的值應(yīng)該保持不變,如果這一方面有錯(cuò)誤,上述測(cè)試數(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}測(cè)試用例:x=4,y=5,z=5圖7-13例2程序流程圖(2)判定(分支)覆蓋執(zhí)行足夠的測(cè)試用例,使得程序中的每一個(gè)分支至少都通過一次。測(cè)試用例: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判定(分支)覆蓋測(cè)試用例:但是,兩個(gè)測(cè)試用例雖然能夠滿足條件覆蓋的要求,但是也不能對(duì)判斷條件進(jìn)行檢查。如把條件y>5錯(cuò)誤的寫成y<5,上面的測(cè)試用例同樣滿足了分支覆蓋。x=4,y=5,z=5x=2,y=5,z=5圖7-13例2程序流程圖(3)條件覆蓋一個(gè)判定中往往包含了若干個(gè)條件;例如:判定(A>1)AND(B=0)包含了兩個(gè)條件:A>1以及B=0“條件覆蓋”,執(zhí)行足夠的測(cè)試用例,使得判定中的每個(gè)條件獲得各種可能的結(jié)果。條件覆蓋
例中
的程序有四個(gè)條件:
A>1、B=0、A=2、X>1
圖7-13例1程序流程圖A>1&&B=0aA=2‖X>1X=X+1bdceX=X/AYYNN
在a點(diǎn)的條件有:
A>1、A≤1、B=0、B≠0
在b點(diǎn)條件有:A=2、A≠2、X>1、X≤1 現(xiàn)在只需設(shè)計(jì)以下兩個(gè)測(cè)試用例就可滿足這一標(biāo)準(zhǔn):A=2,B=0,X=4
(沿路徑ace執(zhí)行);A=1,B=1,X=1
(沿路徑abd執(zhí)行)。
條件覆蓋對(duì)例中的所有條件取值加以標(biāo)記。對(duì)于第一個(gè)判斷:條件x>3取真值為T1,取假值為-T1條件z<10取真值為T2,取假值為-T2圖7-13例2程序流程圖對(duì)于第二個(gè)判斷:條件x=4取真值為T3,取假值為-T3條件y>5取真值為T4,取假值為-T4條件覆蓋表7-15條件覆蓋測(cè)試用例1
測(cè)試用例
通過路徑
條件取值
覆蓋分支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上面的測(cè)試用例不但覆蓋了所有分支的真假兩個(gè)分支,而且覆蓋了判斷中的所有條件的可能值。
條件覆蓋“條件覆蓋”通常比“分支覆蓋”強(qiáng),因?yàn)樗挂粋€(gè)判定中的每一個(gè)條件都取到了兩個(gè)不同的結(jié)果,而分支覆蓋則不保證這一點(diǎn)?!皸l件覆蓋”并不包含“分支覆蓋”,如對(duì)語句“if(A&&B)S;”設(shè)計(jì)測(cè)試用例使其滿足條件覆蓋,即“使A為真并使B為假”、“使A為假且B為真”,但是它們都未能使語句S得以執(zhí)行。
如設(shè)計(jì)了下面的測(cè)試用例,則雖然滿足了條件覆蓋,但只覆蓋了第一個(gè)條件的取假分支和第二個(gè)條件的取真分支,不滿足分支覆蓋的要求。測(cè)試用例
通過路徑
條件取值覆蓋分支x=2、y=6、z=5acd-T1、T2、-T3、T4cdx=4、y=5、z=15acdT1、-T2、T3、-T4cd表7-15條件覆蓋測(cè)試用例2圖7-13例2程序流程圖(4)分支/條件覆蓋分支/條件覆蓋是:執(zhí)行足夠的測(cè)試用例,使得分支中每個(gè)條件取到各種可能的值,并使每個(gè)分支取到各種可能的結(jié)果。對(duì)前面的兩個(gè)例子: ①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分支/條件覆蓋
對(duì)該例,根據(jù)定義只需設(shè)計(jì)以下兩個(gè)測(cè)試用例便可以覆蓋8個(gè)條件值以及4個(gè)判斷分支。
測(cè)試用例通過路徑條件取值覆蓋分支x=4、y=6、z=5abdT1、T2、T3、T4bdx=2、y=5、z=11ace-T1、-T2、-T3、-T4ce表7-15分支/條件覆蓋測(cè)試用例圖7-13例2程序流程圖分支/條件覆蓋分支/條件覆蓋從表面來看,它測(cè)試了所有條件的取值,但是實(shí)際上某些條件掩蓋了另一些條件。如:
對(duì)于條件表達(dá)式(x>3)&&(z<10)來說,必須兩個(gè)條件都滿足才能確定表達(dá)式為真。如果(x>3)為假,則一般的編譯器不再判斷是否z<10了。
對(duì)于表達(dá)式(x==4)||(y>5)來說,若x==4測(cè)試結(jié)果為真,就認(rèn)為表達(dá)式的結(jié)果為真,這時(shí)不再檢查(y>5)條件了。因此,采用分支/條件覆蓋,邏輯表達(dá)式中的錯(cuò)誤不一定能夠查出來了。(5)條件組合覆蓋針對(duì)上述問題,提出“條件組合覆蓋”方法。含義:執(zhí)行足夠的例子,使得每個(gè)判定中條件的各種可能組合都至少出現(xiàn)一次。顯然,滿足“條件組合覆蓋”的測(cè)試用例是一定滿足“分支覆蓋”、“條件覆蓋”和“分支/條件覆蓋”的。條件組合覆蓋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
后四種情況是第二個(gè)if語句的條件組合,而X的值在該語句之前是要經(jīng)過計(jì)算的,所以還必須根據(jù)程序的邏輯推算出在程序的入口點(diǎn)X的輸入值應(yīng)是什么。
A>1,B≠0A≤1,B≠0 A=2,X≤1A≠2,X≤1
該圖可出現(xiàn)下面8種條件組合:
下面設(shè)計(jì)的四個(gè)例子可以使上述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);條件組合覆蓋上面四個(gè)例子雖然滿足條件組合覆蓋,但并不能覆蓋程序中的每一條路徑,例如路徑
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,第一個(gè)判斷的取真分支2、x>3,z>=10記做T1-T2,第一個(gè)判斷的取假分支3、x<=3,z<10記做-T1T2,第一個(gè)判斷的取假分支4、x<=3,z>=10記做-T1-T2,第一個(gè)判斷的取假分支5、x=4,y>5記做T3T4,第二個(gè)判斷的取真分支6、x=4,y<=5記做T3-T4,第二個(gè)判斷的取真分支7、x!=4,y>5記做-T3T4,第二個(gè)判斷的取真分支8、x!=4,y<=5記做-T3-T4,第二個(gè)判斷的取假分支現(xiàn)對(duì)例中各個(gè)判斷取條件組合:圖7-13例2程序流程圖條件組合覆蓋根據(jù)定義取4個(gè)測(cè)試用例,就可以覆蓋上面8種條件取值的組合。測(cè)試用例如下表:測(cè)試用例通過路徑條件取值覆蓋組合號(hào)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上面的測(cè)試用例覆蓋了所有條件的可能取值的組合,覆蓋了所有判斷的可取分支,但是卻丟失了一條路徑abe。表7-16條件組合覆蓋測(cè)試用例發(fā)現(xiàn)錯(cuò)誤的能力弱強(qiáng)語句覆蓋每條語句至少執(zhí)行一次判定覆蓋每一判定的每個(gè)分支至少執(zhí)行一次條件覆蓋每一判定中的每個(gè)條件,分別按“真”、“假”至少各執(zhí)行一次判定/條件覆蓋同時(shí)滿足判定覆蓋和條件覆蓋的要求條件組合覆蓋求出判定中所有條件的各種可能組合值,每一可能的條件組合至少執(zhí)行一次表7-17五種覆蓋標(biāo)準(zhǔn)的對(duì)比1五種覆蓋標(biāo)準(zhǔn)的對(duì)比覆蓋標(biāo)準(zhǔn)程序結(jié)構(gòu)舉例測(cè)試用例應(yīng)滿足的條件語句覆蓋AB=T判定覆蓋AB=TAB=F表7-17五種覆蓋標(biāo)準(zhǔn)的對(duì)比2覆蓋標(biāo)準(zhǔn)程序結(jié)構(gòu)舉例測(cè)試用例應(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)的對(duì)比3路徑測(cè)試:設(shè)計(jì)足夠多的測(cè)試用例,覆蓋被測(cè)試對(duì)象中的所有可能路徑。下面的測(cè)試用例則可對(duì)程序進(jìn)行全部的路徑覆蓋。測(cè)試用例通過路徑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路徑測(cè)試1(6)路徑測(cè)試路徑測(cè)試下面的測(cè)試用例,則可對(duì)該圖進(jìn)行全部的路徑覆蓋。測(cè)試用例通過路徑覆蓋條件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路徑測(cè)試2圖7-13例2程序流程圖
基本路徑測(cè)試:將程序流程圖轉(zhuǎn)換為程序圖,確定基本可執(zhí)行路徑集合,計(jì)算環(huán)形復(fù)雜度V(G),確定獨(dú)立路徑(一條獨(dú)立路徑是指,和其他的獨(dú)立路徑相比,至少引入一個(gè)新處理語句或一個(gè)新判斷的程序通路)。V(G)值正好等于該程序的獨(dú)立路徑的條數(shù)。導(dǎo)出測(cè)試用例:根據(jù)復(fù)雜度和程序結(jié)構(gòu)設(shè)計(jì)用例數(shù)據(jù)輸入和預(yù)期結(jié)果。測(cè)試用例,確?;韭窂郊械拿恳粭l獨(dú)立路徑的執(zhí)行。
程序圖(流圖)的符號(hào)順序結(jié)構(gòu)if結(jié)構(gòu)case結(jié)構(gòu)while結(jié)構(gòu)until結(jié)構(gòu)圖中的每一個(gè)圓稱為流圖的結(jié)點(diǎn),代表一條或多條語句。流圖中的箭頭稱為邊或連接,代表控制流。圖7-14程序圖符號(hào)程序流程圖流圖程序流程圖流圖圖7-15程序流程圖和程序圖對(duì)應(yīng)關(guān)系流圖如果判斷中的條件表達(dá)式是由一個(gè)或多個(gè)邏輯運(yùn)算符(OR,AND,NAND,NOR)連接的復(fù)合條件表達(dá)式,則需要改為一系列只有單條件的嵌套的判斷。例如:
1,2ifaorb3x4else5y對(duì)應(yīng)的程序圖為:圖7-16有邏輯運(yùn)算符程序圖
91762,38910114,5
76
231
8
41110區(qū)域:由邊和節(jié)點(diǎn)封閉起來的。計(jì)算區(qū)域:不要忘記區(qū)域外的部分。待測(cè)試程序用流圖表示的待測(cè)試程序
5
節(jié)點(diǎn)邊區(qū)域圖7-17程序流程圖和程序圖獨(dú)立路徑獨(dú)立路徑:至少沿一條新的邊移動(dòng)的路徑路徑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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年鋼筋大宗采購商務(wù)協(xié)議
- 2024年庭院圍墻護(hù)欄供應(yīng)及施工協(xié)議
- 文書模板-《車輛剮蹭修補(bǔ)合同》
- 2024年專利技術(shù)交易協(xié)議樣本
- 2024年度國(guó)內(nèi)專線物流運(yùn)輸服務(wù)協(xié)議
- 2024年擔(dān)保協(xié)議責(zé)任分配指南
- 2024屆安徽亳州闞疃金石中學(xué)高三第五次適應(yīng)性訓(xùn)練數(shù)學(xué)試題
- 2023-2024學(xué)年浙江省溫州市求知中學(xué)高三下學(xué)期半期聯(lián)合考試數(shù)學(xué)試題
- 2024預(yù)包裝食品批量采購協(xié)議范本
- 地產(chǎn)開發(fā)項(xiàng)目2024土方工程施工協(xié)議
- 倉庫管理中的客戶服務(wù)和溝通技巧
- 2024年給藥錯(cuò)誤護(hù)理不良事件分析持續(xù)改進(jìn)
- 電力行業(yè)網(wǎng)絡(luò)安全
- 《北京大學(xué)介紹》課件
- 提升員工營(yíng)銷能力的企業(yè)教育培訓(xùn)
- 學(xué)院(部)國(guó)際交流與合作工作考核指標(biāo)體系與評(píng)分標(biāo)準(zhǔn)
- 大學(xué)生社團(tuán)對(duì)大學(xué)生的影響的社會(huì)調(diào)查報(bào)告
- 胱氨酸純度的測(cè)定(最終版)
- 表-D完整版本.0.2-作業(yè)架施工驗(yàn)收記錄表
- 英語48個(gè)國(guó)際音標(biāo)課件(單詞帶聲、附有聲國(guó)際音標(biāo)圖)
- (完整文本版)貨物驗(yàn)收單
評(píng)論
0/150
提交評(píng)論