【教學(xué)課件】第五章軟件測試工程
Click to edit Master title style,,Click to edit Master text styles,,Second Level,,Third Level,,Fourth Level,,Fifth Level,,第五章 軟件測試工程,概述,,軟件開發(fā)過程必須伴有質(zhì)量保證活動。,,軟件測試是軟件質(zhì)量保證的關(guān)鍵元素,代表了規(guī)約、設(shè)計和編碼的最終檢查。,,軟件產(chǎn)品最大的成本是檢測軟,,件錯誤、修正軟件錯誤的成本。,,,,在整個軟件開發(fā)中,測試工作量,,一般占,30%~40%,甚至≥50%。,,,在人命關(guān)天的軟件(如飛機控制、核反應(yīng)堆等)測試所花費的時間往往是其它軟件工程活動時間之和的三到五倍,,軟件測試是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程,或者說,軟件測試是根據(jù)軟件的規(guī)格說明(例如軟件的功能、性能、運行環(huán)境等要求)以及程序內(nèi)部結(jié)構(gòu)而設(shè)計一批測試用例,并利用這些測試用例去運行程序,以發(fā)現(xiàn)軟件錯誤的過程。,,,測試用例是為了測試軟件而設(shè)計的一組數(shù)據(jù),它應(yīng)該包括輸入的數(shù)據(jù)和預(yù)期輸出的結(jié)果兩部分。,,,測試用例={輸入數(shù)據(jù)+預(yù)期結(jié)果},軟件測試背景,軟件是人編的—所以不完美,,實例:,,Intel,的,pentium,處理器,,1994,年,浮點除法缺陷,,2000,年,8,月,28,日,,1.13MHZ,處理器一個可能導(dǎo)致運行程序被掛起的執(zhí)行指令問題,,1999,年,12,月,3,日,,,美國航天局火星極地登陸飛船失蹤,,1991,年愛國者導(dǎo)彈防御系統(tǒng)系統(tǒng)時鐘錯誤積累造成跟蹤系統(tǒng)失去精確度,,千年蟲:世界各地解決,2000,年錯誤超過數(shù)億美元,,質(zhì)量管理領(lǐng)域權(quán)威人物,將質(zhì)量定義為“決定產(chǎn)品性能和‘滿意程度’的特征”,,,測試注重于產(chǎn)品的滿意度。,,測試應(yīng)針對這樣一種情況:軟件產(chǎn)品在一些特定的范圍內(nèi)不能滿足客戶的合理要求。,,通過,測試,過程可以評定,質(zhì)量風險(可能的錯誤),,了解被測試系統(tǒng)中存在的,錯誤模式(觀察到的錯誤癥狀),。,,軟件測試是一個查找錯誤的過程,所以軟件測試只能證明錯誤的存在,而不是證明程序無錯,不能保證經(jīng)過測試的程序一定沒有錯誤。,,軟件測試僅僅是一個手段,根本的目的是為了糾錯,即糾正軟件中的錯誤,從而提高軟件的質(zhì)量。,,測試不可能發(fā)現(xiàn)所有錯誤,只能在有限的時間和經(jīng)濟條件下,盡可能地發(fā)現(xiàn)錯誤。,質(zhì)量控制技術(shù),質(zhì)量控制活動分類,開發(fā)方法學(xué),配置管理,驗證技術(shù),評 審,正確性驗證,性能調(diào)試,組件測試,集成測試,系統(tǒng)測試,原子事務(wù),模塊冗余性,檢 錯,質(zhì)量控制,避免錯誤,容 錯,調(diào) 試,測 試,測試的目的與地位,,,在《軟件測試技巧,》,中認為:,,1.測試是為了尋找錯誤而運行程序的過程。,,2.一個好的測試用例是指很可能找到迄今為止尚未發(fā)現(xiàn)的錯誤的測試。,,3.一個成功的測試是揭示了迄今為止尚未發(fā)現(xiàn)的錯誤的測試。,指出:,,“,程序測試能證明錯誤的存在,但不能證明錯誤不存在,。”,,,測試的目的是發(fā)現(xiàn)程序中的錯誤,是為了,證明程序有錯,而不是證明程序無錯。,,把證明程序無錯當作測試目的不僅是不正確的,,,完全做不到的,而且對做好測試沒有任何益處,甚至是,十分有害,的。,,軟件測試要設(shè)法使軟件發(fā)生故障,,,暴露軟件錯誤。,,,,測試的“成功”與“失敗”:能夠發(fā)現(xiàn)錯誤的測試是成功的測試,否則是失敗的測試。,,“,測試的目的是說明程序正確地執(zhí)行它應(yīng)有的功能,” 這種說法正確嗎?,,,例:程序Triangle,輸入三個整數(shù),表示一個三角形的三個邊長,該程序產(chǎn)生一個結(jié)果,指出該三角形是等邊三角形、等腰三角形還是不等邊三角形。,,為說明其能正確執(zhí)行它的功能,可使用“測試用例”(3,4,5),(5,5,6),(6,6,6),,,程序都能給出正確結(jié)果,是否就可認為程序是正確的?,,,(兩邊之和必須大于第三邊),難以說清的軟件缺陷,古諺: “一片樹葉飄落在森林中沒有人聽見,誰能說它發(fā)出了聲音?”,由于不能報告沒有看見的問題,因此,沒有看見就不能說存在軟件缺陷。,,如果軟件中的問題沒有人發(fā)現(xiàn),那么它算不算軟件缺陷?”,只有看到了,才能斷言軟件缺陷,尚未,,發(fā)現(xiàn)的軟件缺陷只能說是未知軟件缺陷。,眼,,見,,為,,實,測試原則,,(1)所有的測試都應(yīng)追溯到用戶需求,,最嚴重的錯誤(從用戶角度)是那些導(dǎo)致軟件無法滿足需求的錯誤。,,程序中的問題根源,可能出現(xiàn)在開發(fā)前期的各階段,糾正錯誤也必須追溯到前期工作。,,測試與開發(fā)前期工作的關(guān)系,決定軟件與系統(tǒng)的配合關(guān)系,需求分析,概要設(shè)計,詳細設(shè)計,編 碼,單元測試,集成測試,確認測試,系統(tǒng)測試,開發(fā)前期出現(xiàn)錯誤的擴展,計劃,需求,,分析,設(shè),,計,編,,碼,測,,試,A,A,B,軟件生存期各階段間需保持的正確性,用戶要求,用戶:,,我要什么?,運行結(jié)果,計算機:,,程序運行得,,到的結(jié)果,源程序,程序員:,,我要讓計算,,機什么做?,設(shè)計說明書,設(shè)計員:,,我要讓軟件,,做什么?,需求說明書,分析員:,,我可以提,,供什么?,1,2,3,4,5,理解正確性,,表達正確性,理解正確性,,設(shè)計正確性,,表達正確性,理解正確性,,編碼正確性,運行正確性,,輸入正確性,相符嗎?,測試原則,,(2),應(yīng)該盡早制定測試計劃。,,,概要設(shè)計時應(yīng)完成測試計劃,詳細的測試用例定義可在設(shè)計模型確定后開始,所有測試可在任何代碼被產(chǎn)生之前進行計劃和設(shè)計。,,,測試原則,,(3),應(yīng)該由第三方進行測試工作。,,一個軟件項目的開發(fā)人員不應(yīng)該同時是該軟件的測試人員,基于心理因素,人們往往不愿意否定自己的工作。,測試原則,,(4),窮舉測試是不可能的。,,測試的最高目標是指發(fā)現(xiàn)錯誤的可能性最高的測試,所以,測試的關(guān)鍵技術(shù)是設(shè)計一組高產(chǎn)的測試用例,好的測試方案是盡可能發(fā)現(xiàn)至今為止仍未發(fā)現(xiàn)的錯誤。從某種意義上說,測試是否成功,取決測試用例的選擇。,測試原則,,(5)充分注意到錯誤的群集現(xiàn)象,,經(jīng)驗表明,測試發(fā)現(xiàn)的錯誤中有80%的錯誤很可能是由20%的程序模塊造成的,這是一種錯誤群集性現(xiàn)象。也就是說,在程序段中,發(fā)現(xiàn)錯誤數(shù)目多的地方,則殘存錯誤的數(shù)目也比較多,這一現(xiàn)象已為許多程序測試實踐所證明。,測試原則,,(6)測試應(yīng)該從“小規(guī)模”到“大規(guī)?!?,通常,最初的測試重點往往是放在單個的程序模塊中,然后,進一步的測試重點放在集成的模塊族,最后是對整個系統(tǒng)進行測試。隨著測試的逐步深入展開,要集中測試容易出錯的地方。,,軟件測試流程,軟件,,配置,測試,測試,,配置,測試,,工具,結(jié)果,,分析,排錯,可靠性,,分析,測試,,結(jié)果,錯誤,預(yù)期,,結(jié)果,出錯率,,改正,,的軟件,預(yù)測,,的可,,靠性,,需求規(guī)格說明書,,軟件設(shè)計說明書,,被測源程序,測試計劃,,測試用例,,(測試數(shù)據(jù)),,測試驅(qū)動程序,,軟件配置:需求規(guī)格說明、設(shè)計說明書、源程序等。軟件配置中還應(yīng)包含測試配置。,,測試工具:為軟件測試提供的某種服務(wù)程序。,,評價:測試結(jié)果與期望結(jié)果比較,如果有差異則往往程序有錯,需要改正。,,可靠性預(yù)測有3種情況可以考慮:,,A.如果測試發(fā)現(xiàn)嚴重錯誤,則軟件的質(zhì)量和可靠性一定不高;,,B.如果測試結(jié)果是軟件功能完成正常,發(fā)現(xiàn)的問題不是嚴重錯誤,也容易修改,則可能:(1)軟件質(zhì)量和可靠性可以接受;(2)所進行的測試還不足以發(fā)現(xiàn)嚴重錯誤,錯誤被潛伏下來。,,C.測試沒有發(fā)現(xiàn)任何錯誤,則極有可能是測試配置選擇不當(測試用例沒有選好),錯誤被深深地潛伏下來,這是極危險。,,軟件測試對象,,軟件測試的對象應(yīng)包括需求分析與設(shè)計以及編碼等所獲得一切的文檔和程序。,,軟件測試方法,軟件測試方法一般可以分成靜態(tài)測試和動態(tài)測試等。,,,靜態(tài)測試實際上是確認在給定的外部環(huán)境中軟件的邏輯正確性,它應(yīng)該包括需求規(guī)格說明和程序等的確認。,,,動態(tài)測試也稱為機器測試,動態(tài)測試主要是通過動態(tài)分析以及程序測試來檢查程序的執(zhí)行狀態(tài),以確認程序的正確性。,,測試的方法與技術(shù),軟件測試的,,策略和方法,靜態(tài)測,,試方法,動態(tài)測,,試方法,人工測試方法,計算機輔助靜,,態(tài)分析方法,白盒測試方法,黑盒測試方法,靜態(tài)和動態(tài)測試,汽車的檢查過程:,,踩油門,,看車漆,,打開前蓋檢查,,發(fā)動汽車,,聽聽發(fā)動機聲音,,上路行使,靜態(tài)測試,動態(tài)測試,靜態(tài)測試:,基本特征是對軟件進行,,分析、檢查和審閱,不實,,際運行被測試的軟件。,,,靜態(tài)測試約可找出,30,~,70%,的邏輯設(shè)計錯誤,.,,對,需求規(guī)格說明書,、,軟件設(shè)計說明書,、,源程序,做檢查和,審閱,,,包括:,①,是否符合標準和規(guī)范;,②,通過,結(jié)構(gòu)分析、流圖分析、符號執(zhí)行,指出軟件缺陷,;,,,靜態(tài)測試方法,,(1)人工測試方法。人工測試就是通過人工閱讀分析以及評審軟件的文檔、程序資料等等,以發(fā)現(xiàn)程序中的錯誤,尤其是一些設(shè)計上的邏輯錯誤在機器上不易發(fā)現(xiàn),需要人工復(fù)查。根據(jù)統(tǒng)計,好的人工評審,可以發(fā)現(xiàn)30%到70%的編碼或邏輯設(shè)計錯誤。,,(2)計算機輔助靜態(tài)分析。為了提高測試的效率,人們可以設(shè)計一些分析工具對被測試的程序進行靜態(tài)分析,從中提取一些信息。例如,檢查程序中的局部變量和全局變量、參數(shù)的匹配、判斷與循環(huán)的嵌套匹配、潛在的死循環(huán)、不執(zhí)行的代碼、過程調(diào)用層次等等。,,(3)程序正確性說明。程序正確性證明是試圖找到某種方法,確切地證明程序是沒有錯誤的。所謂證明,就是確信一個斷言真實性的論證。這種證明可以形式化的或非形式化。,動態(tài)測試:,通過運行軟件來檢驗軟件的動態(tài)行為和運行結(jié)果的正確性。,,,動態(tài)測試的兩個基本要素:,,,被測試程序,,測試數(shù)據(jù)(測試用例),動態(tài)測試方法,,(1)選取定義域有效值,或定義域,,外無效值.,,(2)對已選取值決定,預(yù)期的結(jié)果,,(3)用選取值執(zhí)行程序,,(4),執(zhí)行結(jié)果,與(2)結(jié)果相比,,,,不吻和則程序有錯,.,,動態(tài)黑盒測試 —,閉著眼睛測試軟件,軟件,輸入,不深入代碼細節(jié)的測試方法稱為動態(tài)黑盒測試。,,軟件測試員充當客戶來使用它。,輸出,動態(tài)白盒測試 —,帶上,X,光眼鏡測試軟件,?,?????????????,,250*(1+0.015)*((1+0.015)^360-1)/0.015,250*(1+0.015)*((1+0.015)^360-1)/0.015,假如知道一個盒子包含一臺計算機,而另一個,,盒子是人用紙筆計算,就會選擇不同的測試用例,了解軟件的運作方式會影響測試手段,窮舉測試,,例:,輸入 三條邊長,黑盒測試,,可采用的測試用例數(shù),,,(設(shè)字長16位),,執(zhí)行時間: 設(shè)測試一次需1ms,,共需一萬年.,=2 X2 X2 ≈3X10,16,16,16,14,窮舉測試,白盒測試,,例:,,含4個分支,循環(huán)次數(shù),,≤20,從A到B的可能,,路徑,,,,執(zhí)行時間: 設(shè)測試一次需2ms,,窮舉測試需5億年.,=5+5 +..+5 +5,,≈10,20,1,2,19,14,A,B,第一次為5,第二次為5*5,,不論黑盒還是白盒測試都,不能,,進行窮盡測試,, 所以軟件測試不可,,能發(fā)現(xiàn)程序中存在的所有錯誤, 因,,此需精心設(shè)計測試方案,,力爭盡可,,能少的次數(shù),測出盡可能多的錯誤,.,兩種類型的測試,,,黑盒測試,,,又稱:功能測試,,,數(shù)據(jù)驅(qū)動測試,,基于規(guī)格說明書的測試,,,白盒測試,,又稱:開盒測試,,結(jié)構(gòu)測試,,玻璃盒測試,,基于覆蓋的測試.,,根據(jù)被測程序的邏輯結(jié)構(gòu)設(shè)計測試用例;力求提高測試覆蓋率;,黑盒測試與白盒測試比較,,,黑盒測試,是從用戶觀點,按,,規(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ù)使特定程,,序部分得到測試,,②有一定的充分性度量手段,,③較多工具支持,①某些代碼得不到測試,,②如果規(guī)格說明有誤,,,則無法發(fā)現(xiàn),,③不易進行充分性測試,①不易生成測試數(shù)據(jù)(通常),,②無法對未實現(xiàn)規(guī)格說明的,,部分進行測試,,③工作量大,通常只用于單,,元測試,有應(yīng)用局限,是一種,確認,技術(shù),回答:,,“,我們在構(gòu)造一個正確,,的系統(tǒng)嗎?,”,是一種,驗證,技術(shù),回答:,,“,我們在正確地構(gòu)造一個系,,統(tǒng)嗎,?”,黑盒測試與白盒測試能發(fā)現(xiàn)的錯誤,,,C,B,A,D,-,只能用黑盒測試發(fā)現(xiàn)的錯誤,A,-,只能用白盒測試發(fā)現(xiàn)的錯誤,-,兩種方法都能發(fā)現(xiàn)的錯誤,-,兩種方法都不能發(fā)現(xiàn)的錯誤,B,C,D,,測試用例設(shè)計,,,選擇測試用例是軟件測試員最重要,,的一項工作。,,測試用例的屬性:,,屬性 描述,,name,測試用例的名稱,,,location,可執(zhí)行的完全路徑名,,,input,輸入數(shù)據(jù)或命令,,oracle,與測試輸入相比較的期待測試結(jié)果,,log,測試生產(chǎn)的輸出,程序測試舉例,,例:程序 Triangle, 輸入三個整,,數(shù),表示一個三角形的三個邊,,長,該程序產(chǎn)生一個結(jié)果,指,,出該三角形是等邊三角形、等,,腰三角形還是不等邊三角形。,判斷三角型的測試用例設(shè)計:,,輸入數(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,等,白盒測試的測試用例設(shè)計,,,邏輯覆蓋法,,(1)語句覆蓋,,(2)判定覆蓋,,(3)條件覆蓋,,(4)判定/條件覆蓋,,(5)條件組合覆蓋,,(6)路徑覆蓋,,(7)點覆蓋,,(8)邊覆蓋,例:,PROCEDURE SAMPAL,,(A,B:REAL; VAR X:REAL);,,BEGIN,,IF (A>1) AND (B=0),,THEN X:=X/A,,IF (A=2) OR (X>1),,THEN X:=X+1,,END;,,開始,(A>1) AND (B=0),(A=2) OR (X>1),返回,X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,(1)語句覆蓋,,,使程序中每個語句至少執(zhí)行一次,,,語句覆蓋,,開始,(A>1) AND (B=0),(A=2) OR (X>1),返回,X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,,只需設(shè)計一個測試用例:,,輸入數(shù)據(jù):,A=2,B=0,X=4,,則覆蓋ace,可以執(zhí)行程序中的每一條語句,即達到了語句覆蓋;,,,語句覆蓋是,最弱,的邏輯覆蓋,,(2)判定覆蓋(分支覆蓋),,,,,使每個判定的真假分支都至少執(zhí)行一次,判定覆蓋,,開始,(A>1) AND (B=0),(A=2) OR (X>1),返回,X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,例:可設(shè)計兩組測試用例:,,A=3,B=0 ,X=3 可覆蓋,c、d,分支,,,A=2,B=1 ,X=1 可覆蓋,b、e,分支,,兩組測試用例可覆蓋所有判定的真假,,分支。,,,語句覆蓋仍是,弱,的邏輯覆蓋。,(3)條件覆蓋,,,使每個判定的每個條件的可能取值至少執(zhí)行一次,,第一判定表達式:,,設(shè),條件 A>1,取真 記為,T1,,,假,T1,,,條件 B=1,取真 記為,T2,,,假,T2,,第二判定表達式:,,設(shè),條件 A=2,取真 記為,T3,,,假,T3,,,條件 X>1,取真 記為,T4,,,假,T4,條件覆蓋,,開始,(A>1) AND (B=0),(A=2) OR (X>1),返回,X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,滿足條件:,T1,T1,,,T2,T2,,T3,T3,,T4,T4,測試用例,,通過 滿足的 覆蓋,,A B X,,,路徑 條件 分支,,1 0 3 abe,T1,T2,T3,T4,b,,,e,,2 1 1 abe,T1,T2,T3,T4,b,,,e,,,兩個測試用例,覆蓋了四個條件八種可能,,取值,。,,未覆蓋c、d分支,,不滿足判定覆蓋的要,,求.,,條件覆蓋不一定包含判定覆蓋,,判定覆蓋也不一定包含條件覆蓋,(4)判定/條件覆蓋,,選取足夠多的測試用例,使判斷中的每個條件的所有可能取值至少執(zhí)行一次,同時每個判斷本身的所有可能判斷結(jié)果至少執(zhí)行一次.,,判定/條件,,覆蓋,,開始,(A>1) AND (B=0),(A=2) OR (X>1),返回,X=X/A,X=X+1,F,F,T,T,a,b,d,c,e,滿足條件:,T1,T1,,,T2,T2,,T3,T3,,T4,T4,測試用例,,通過 滿足的 覆蓋,,A B X,,,,路徑 條件 分支,,2 0 4 ace,T1,T2,T3,T4,c,,,e,,2 1 1 abd,T1,T2,T3,T4,b,,,d,,,能同時滿足判定、條件兩種覆蓋標準取值。,,測試用例,,通過 滿足的 覆蓋,,A B X,,路徑 條件 分支,,2 0 3 ace T1,T2,T3,T4 c,e,,2 1 1 abe,T1,T2,T3,T4,b,e,,1 0 3 abe,T1,T2,T3,T4 b,e,,1 1 1 abd,T1,T2,T3,T4 b,d,,,,,(5)條件組合覆蓋,,,所有可能的條件取值組合至少執(zhí)行一次,,,①,A>1, B=0,,,②,A>1, B≠0,,,③,A,≤,1, B=0,,,④,A,≤,1, B≠0,,,⑤,A=2, X>1,,,⑥,A=2, X,≤,1,,,⑦,A≠2, X>1,,,⑧,A≠2, X,≤,1,測試用例,,通過 滿足的 覆蓋,,ABX,,路徑 條件 分支,,204,①⑤,,ace,T1,T2,T3,T4 c,e,,211,②⑥,abe,T1,T2,T3,T4,b,e,,102,③⑦,abd,T1,T2,T3,T4 b,d,,111,④⑧,abd,T1,T2,T3,T4 b,d,,,它是這幾種覆蓋標準中最強的,,,,,(6)路徑覆蓋,,覆蓋每一個可能的路徑,,測試用例,,通過 滿足的 覆蓋,,A B X,,路徑 條件 分支,,1 1 1 abd T1,T2,T3,T4 b,d,,1 1 2 abe,T1,T2,T3,T4,b,e,,3 0 1 acd,T1,T2,T3,T4 c,d,,2 0 4 ace,T1,T2,T3,T4 c,e,,循環(huán)測試,,(1)簡單循環(huán)測試,,假設(shè)n是允許通過循環(huán)的最大次數(shù),應(yīng)該進行下列的測試:,,跳過整個循環(huán);,,只執(zhí)行循環(huán)一次;,,執(zhí)行循環(huán)兩次;,,執(zhí)行循環(huán)m次,其中,m<n-1;,,執(zhí)行循環(huán)n-1,n,n+1次。,,(2)嵌套循環(huán)測試,,如果把簡單循環(huán)的方法直接用于嵌套循環(huán),可能的測試次數(shù)會隨著嵌套循環(huán)的層數(shù)的增加按幾何級數(shù)增加,導(dǎo)致不現(xiàn)實的測試數(shù)目,可以進行下列的測試:,,從最內(nèi)層循環(huán)開始測試,把其他循環(huán)都設(shè)置為最小值;,,對最內(nèi)層循環(huán)使用簡單測試方法,使外層循環(huán)的迭代參數(shù)取最小值(例如,循環(huán)計算器等),并且,為越界或非法值增加一些額外的測試;,,由內(nèi)向外,對下一個循環(huán)進行測試,保持它的所有外層循環(huán)為最小值,其他的嵌套循環(huán)取“典型”值。如此繼續(xù)進行,直到測試完所有循環(huán)。,,,(3)串接循環(huán)測試,,如果串接循環(huán)的各個循環(huán)都彼此獨立,則可以使用簡單循環(huán)測試的方法來進行。但是,如果在兩個串接循環(huán)中,第一個循環(huán)的循環(huán)計算器的值是第二個循環(huán)的初始值,則這兩個循環(huán)并不是獨立的。這時,建議使用嵌套循環(huán)測試方法來進行。,,基本路徑測試法,,,通過分析由控制構(gòu)造的環(huán)路的復(fù)雜性,導(dǎo)出基本路徑集合,從而設(shè)計測試用例,保證這些路徑至少通過一次。,,,基本路徑測試步驟:,,,導(dǎo)出程序流程圖的拓撲結(jié)構(gòu)-流圖,,(程序圖),,計算流圖G的環(huán)路復(fù)雜度V(G),,確定只包含獨立路徑的基本路徑集,,設(shè)計測試用例,導(dǎo)出程序流程圖的拓撲結(jié)構(gòu),-,流圖,,,1,2,3,6,4,5,7,10,11,a,節(jié)點,邊,R4,區(qū)域,1,2,3,4,5,8,7,6,9,10,11,程序流程圖,8,9,R1,R2,R3,計算流圖G的環(huán)路復(fù)雜度V(G),,V(G)=區(qū)域個數(shù)=4,,V(G)=邊的條數(shù)-節(jié)點個數(shù)+2=4,,,V(G)=判定節(jié)點個數(shù)+1=4,確定只包含獨立路徑的基本路徑集,,path1:1-11,,path2:1-2-3-4-5-10-1-11,,path3:1-2-3-6-8-9-10-1-11,,path4:1-2-3-6-7-9-10-1-11,,一條新路徑必須包含一條新邊。,,這4條路徑組成了一個基本路徑集。4(環(huán),,路復(fù)雜度V(G))是構(gòu)成這個基本路徑集的獨立,,路徑數(shù)的上界,也是設(shè)計,測試用例的數(shù)目。,,,設(shè)計測試用例,保證基本路徑集中每條,,路徑的執(zhí)行。,黑盒測試的測試用例設(shè)計,,等價類劃分法,,,把所有可能的輸入數(shù)據(jù)(有效的,,和無效的)劃分成若干個等價的子集,,(稱為等價類), 使得每個子集中的,,一個典型值在測試中的作用與這一,,子集中所有其它值的作用相同.,,可從每個子集中選取一組數(shù)據(jù)來測試程序,例:,某報表處理系統(tǒng)要求用戶輸入處理,,報表的日期,日期限制在2001年1,,月至2005年12月,即系統(tǒng)只能對該,,段期間內(nèi)的報表進行處理,如日期,,不在此范圍內(nèi),則顯示輸入錯誤信,,息。,,系統(tǒng)日期規(guī)定由年、月的6位數(shù)字,,字符組成,前四位代表年,后兩位,,代表月。,,如何用等價類劃分法設(shè)計測試用例,,,來測試程序的日期檢查功能?,,如何劃分等價類?,,有效等價類,(,合理等價類,),,無效等價類,(,不合理等價類,),,,,,劃分等價類的標準:,,覆蓋,,不相交,,代表性,劃分等價類的規(guī)則,(1),如果輸入條件規(guī)定了取值范圍,,,可定義一個有效等價類和兩個無,,效等價類。,例,,輸入值是學(xué)生成績,范圍是0~100,0 100,,有效,,等價類,,1≤成績≤100,無效等價類,,成績>100,,無效等價類,,成績<0,~,劃分等價類的規(guī)則:,(2),如果輸入條件代表集合的某,,個元素,則可定義一個有效,,等價類和一個無效等價類。,,劃分等價類的規(guī)則:,(3),如規(guī)定了輸入數(shù)據(jù)的一組值,且,,程序?qū)Σ煌斎胫底霾煌幚恚?,則每個允許的輸入值是一個有,,效等價類,并有一個無效等價類,,(所有不允許的輸入值的集合)。,,例:輸入條件說明學(xué)歷可為:,???、本科、,,碩士、博士,四種之一,則分別取這四,,個值作為,四個有效等價類,,另外把四,,種學(xué)歷之外的任何學(xué)歷作為無效等價類,劃分等價類的規(guī)則:,(4),如果規(guī)定了輸入數(shù)據(jù)必須遵循的規(guī),,則,可確定一個有效等價類(符合,,規(guī)則)和若干個無效等價類(從不,,同角度違反規(guī)則)。,,,(5),如已劃分的等價類各元素在程序中,,的處理方式不同,則應(yīng)將此等價,,類進一步劃分成更小的等價類。,用等價類劃分法設(shè)計測試用例步驟:,(1)形成等價類表,每一等價類規(guī)定,,一個唯一的編號;,,(2)設(shè)計一測試用例,使其盡可能多,,地覆蓋尚未覆蓋的有效等價類,,,重復(fù)這一步驟,直到所有有效等,,價類均被測試用例所覆蓋;,,(3)設(shè)計一新測試用例,使其只覆蓋,,一個無效等價類,重復(fù)這一步驟,,直到所有無效等價類均被覆蓋;,第一步:等價類劃分,輸入等價類 有效等價類 無效等價類,,報表日期的,,類型及長度,6位數(shù)字字符(1),有非數(shù)字字符 (4),,少于6個數(shù)字字符 (5),,多于6個數(shù)字字符 (6),年份范圍,在2001~2005,,之間 (2),小于2001 (7),,大于2005 (8),月份范圍,在1~12之間(3),“報表日期”輸入條件的等價類表,小于1 (9),,大于12 (10),第二步:,為有效等價類設(shè)計測試用例,,,對表中編號為1,2,3的3個有效等價類,,用一個測試用例覆蓋:,,測試數(shù)據(jù) 期望結(jié)果 覆蓋范圍,200105,,等價類(1)(2)(3),,輸入有效,第三步:為每一個無效等價類至少設(shè),,計一個測試用例,,,,測試數(shù)據(jù) 期望結(jié)果 覆蓋范圍,001,MAY,等價類(4),輸入無效,20015,等價類(5),輸入無效,2001005,等價類(6),輸入無效,2000,05,等價類(7),輸入無效,2008,05,等價類(8),輸入無效,2001,00,等價類(9),輸入無效,2001,13,等價類(10),輸入無效,不能出現(xiàn)相同,,的測試用例,本例的10個等價類至,,少需要8個測試用例,例:,對招干考試系統(tǒng)“輸入學(xué)生成績”,,子模塊設(shè)計測試用例,,招干考試分三個專業(yè),準考證號第一位,,為專業(yè)代號,如: 1-行政專業(yè),,,2-法律專業(yè),,,3-財經(jīng)專業(yè).,,,,行政專業(yè)準考證號碼為:110001~111215,,法律專業(yè)準考證號碼為:210001~212006,,財經(jīng)專業(yè)準考證號碼為:310001~314015,,例:,準考證號碼的等價類劃分,,,有效等價類:,,,(1) 110001 ~ 111215,,(2) 210001 ~ 212006,,(3) 310001 ~ 314015,,,無效等價類:,,,(4) -,?,,~ 110000,,(5) 111216 ~ 210000,,(6) 212007 ~ 310000,,(7) 314016 ~ +,?,例:,計算給定月份中天數(shù)的方法接口(java):,,Class MyGregorianCalender{,,……,,public static in getNumDaysInMonth(int,,month,int year){…},,……,,},,getNumDaysInMonth( ),方法有兩個參數(shù), 月和年,年份的有效輸入是從0到,maxInt.,,等價類劃分,即把,輸入空間分解成一系列子域,,軟件在一個子域內(nèi)的行為應(yīng)是等價的,。,,軟件錯誤分為兩類:,計算錯誤,,域錯誤,針對,計算錯誤的測試方法,,針對,域錯誤,的測試方法,:,測試,域邊界,,劃定的正確性,邊界值分析法,,邊界值分析法與等價類劃分法區(qū)別,,(1),邊界值分析不是從某等價類中,,隨便挑一個作為代表,而是使,,這個等價類的每個邊界都要作,,為測試條件。,,(2),邊界值分析不僅考慮輸入條件,,,還要考慮輸出空間產(chǎn)生的測試,,情況,被測試,,子 域,測試內(nèi)點,測試外點,軟件邊界與懸崖很類似,邊界條件類型,,,如果軟件測試問題,,包含確定的邊界,那,,么數(shù)據(jù)類型可能是:,,數(shù)值,,字符,,位置,,數(shù)量,,速度,,地址,,尺寸,,……,還要考慮數(shù)據(jù)類型的特征:,,第一個,/,最后一個,,最小值,/,最大值,,開始,/,完成,,空,/,滿,,最慢,/,最快,,相鄰,/,最遠,,超過,/,在內(nèi),,……,測試邊界線,,測試臨近邊界的合法數(shù)據(jù),以及剛超過邊界的非法數(shù)據(jù).,,越界測試通常簡單地加1或很小的數(shù),,(對于最大值)和減1或很小的數(shù)(對于最小值).,,,,,輸入,,條件,報表日,,期的類,,型及長,,度,1個數(shù)字字符,,5個數(shù)字字符,,7個數(shù)字字符,,有1個非數(shù)字字符,,全部是非數(shù)字字符,,6個數(shù)字字符,顯示出錯,,顯示出錯,,顯示出錯,,顯示出錯,,顯示出錯,,輸入有效,日期,,范圍,月份,,范圍,“報表日期”邊界值分析法測試用,例,測試用例說明,測試數(shù)據(jù),期望結(jié)果,選取理由,5,,20015,,2001005,,2001.5,,MAY---,,200105,月份為1月,,月份為12月,,月份<1,,月份>12,200101,,200112,,200100,,200113,200101,,200512,,200100,,200513,輸入有效,,輸入有效,,顯示出錯,,顯示出錯,輸入有效,,輸入有效,,顯示出錯,,顯示出錯,在有效范圍,,邊界上選取,,數(shù)據(jù),僅有1個合法字符,,比有效長度少1,,比有效長度多1,,只有1個非法字符,,6個非法字符,,類型及長度均有效,最小日期,,最大日期,,剛好小于最小日期,,剛好大于最大日期,最小月份,,最大月份,,剛好小于最小月份,,剛好大于最大月份,錯誤推測法,(error guessing),,根據(jù)經(jīng)驗來設(shè)計測試用例的方法。,,例如,數(shù)據(jù)測試中的:,,缺省值,,空白,,空值,,零值,,無,,,,狀態(tài)測試,,,軟件必須測試程序的狀態(tài)及其轉(zhuǎn)換。,,測試軟件的邏輯流程,,建立狀態(tài)轉(zhuǎn)換圖,,減少要測試的狀態(tài)及轉(zhuǎn)換的數(shù)量,空閑,等待用戶,,輸入命令,按下Esc鍵,,顯示口令框,口令錯誤,,消除,口令正確,,初始狀態(tài)消失,空閑,等待用戶,,輸入命令,按下Esc鍵,口令正確,口令錯誤,不同形式的狀態(tài)轉(zhuǎn)換圖,,,設(shè)置,2Bwatch,,上的時間的順序圖,:2Bwatch,用戶,按下按鈕1和2,:2Bwatch,輸入,:2Bwatch,顯示,:2Bwatch,時間,時間,按下按鈕1,按下按鈕2,按下按鈕1和2,閃爍小時,閃爍分鐘,增加分鐘,刷新,提交更新時間,停止閃爍,2Bwatch,,設(shè)置時間功能的狀態(tài)圖和測試結(jié)果,,,按左按鈕,,按右按鈕,按左按鈕,,按右按鈕,4.,2分鐘以后,測量時間,設(shè)置時間,電池沒電,3.,按下左右按鈕,5.,按下左右按鈕/蜂鳴,8.,20年以后,7.,20年以后,6.,2.,1.,激勵因素,空集合,測量時間,1.初始變遷,測試的變遷,預(yù)期結(jié)果狀態(tài),按下左邊按鈕,測量時間,2.,同時按下兩個按鈕,設(shè)置時間,3.,等2分鐘,測量時間,4.超時,……,……,……,失敗狀態(tài)測試,,找到測試軟件失敗的案例,。,,競爭條件和時序錯亂,,重復(fù),,壓迫,,重負,應(yīng)聯(lián)合使用,同時進行,有效等價類和用來測試,getNumDaysInMonth(),方法所選的有效輸入,,,有效,等價類,一個月有31天,非閏年,1901,7(七月),一個月有31天, 閏年,1904,7(七月),一個月有30天,非閏年,1901,6(六月),一個月有30天, 閏年,1904,6(六月),一個月為28或29天,非閏年,1901,2(二月),月份,,輸入值,年份,,輸入值,一個月為28或29天, 閏年,2(二月),1904,用來測試getNumDaysInMonth()方法的附加邊界值,,,等價類,可以被400整除的閏年,2000,2(二月),可以被100整除的非閏年,1900,2(二月),非正數(shù)無效月份,1291,0,正數(shù)無效月份,1315,13,月份,,輸入值,年份,,輸入值,因果圖法,,,因果圖適合于描述對于多種輸入條件的組合,相應(yīng)產(chǎn)生多個動作的形式來設(shè)計測試用例。,,因果圖方法最終生成的是判定表。,,因果圖方法實例,,某電力公司有A、B、C、D四類收費標準,,,并規(guī)定:,,居民用電 <100度/月 按,A,類收費,,≥100度/月按,B,類收費,,動力用電 <10000度/月,非高峰,,B,類收費,,≥10000度/月,非高峰,,C,類收費,,<10000度/月, 高峰,,C,類收費,,≥10000度/月, 高峰,,D,類收費,,用因果圖表明輸入和輸出間的邏輯關(guān)系,1,I,1,2,B,∨,∧,4,A,C,3,5,∧,D,I,4,I,3,I,2,∨,∧,∧,∧,∧,把因果圖轉(zhuǎn)換為判定表,組合條件,條件,,(,原因,),動作,,(,結(jié)果,),A,B,C,1,2,3,1,2,3,4,5,6,1,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,1,0,4,1,0,1,0,5,0,0,1,1,D,0,0,0,1,1,0,0,1,0,0,0,0,測試用例,為判定表每一列設(shè)計一個測試用例:,1列 居民電,90度/月 A,,2列 居民電,110度/月 B,,3列 動力電,非高峰,8000度/月 B,,4列 動力電,非高峰,1.2萬度/月 C,,5列 動力電, 高峰,0.9萬度/月 C,,6列 動力電, 高峰,1.1萬度/月 D,,,條件 測試用例 預(yù)期結(jié)果,,組合 (輸入數(shù)據(jù)) (輸出動作),軟件測試的過程,被測,,模塊,單元,,測試,設(shè)計,,信息,集成,,測試,被測,,模塊,單元,,測試,被測,,模塊,單元,,測試,測試過,,的模塊,確認,,測試,系統(tǒng),,測試,軟件,,需求,其它系,,統(tǒng)元素,裝配好的軟件,確認,,的軟件,可運,,行的,,軟件,軟件測試的步驟,軟件測試策略,單元測試,U,C,D,R,S,I,V,ST,集成測試,確認測試,系統(tǒng)測試,系統(tǒng)工程,軟件需求分析,軟件設(shè)計,代碼編寫,單元測試,,一.,單元測試的內(nèi)容,,主要對模塊的,五個基本特性,進行評價,,模塊,錯誤處理,模塊接口,局部數(shù),,據(jù)結(jié)構(gòu),重要的,,執(zhí)行路徑,邊界條件,1.常見錯誤類型,,,接口錯誤,,I/O,錯誤,,數(shù)據(jù)結(jié)構(gòu)錯誤,,算法錯誤,,比較及控制邏輯錯誤,,錯誤處理錯誤,2.,單元測試基本原則,,,,至少一次測試所有語句,,測試所有可能的執(zhí)行或邏輯路徑的組合,,測試每個模塊的所有入口和出口,,,,,3.,確定單元測試數(shù)據(jù)集,,,,值域,,值類,,離散值,,值的次序集,(,測試順序文件和,表,),,二.單元測試的方法,,單元測試一般為編碼步驟的附屬部分。,,模塊不是獨立的程序,自己不能運行,,,要靠其它部分來調(diào)用和驅(qū)動,要為每個,,單元測試開發(fā)兩個軟件:,,(1)驅(qū)動模塊(驅(qū)動程序),:,相當于主模塊,,(2)樁模塊(測試存根、連接程序),,:,代替所測模塊調(diào)用的子模塊,單元測試的測試環(huán)境舉例:,,,,B,A,C,D,E,待測試模塊,單元測試的測試環(huán)境舉例:,,,被測模塊,B,驅(qū)動模塊,,(模擬模塊,A,),樁模塊(測試存根),,(模擬模塊,E,),測試用例,測試結(jié)果,許多模塊不能用簡單的軟件進行充分的單元測試, 此時, 完全的測試可放到集成測試階段再進行。,,單元測試的測試環(huán)境舉例:,,,實際軟件,華氏到懾氏,,轉(zhuǎn)換模塊,溫度數(shù)據(jù),實際配置,測試用例數(shù)據(jù),結(jié)果,,測試驅(qū)動軟件,華氏到懾氏,,轉(zhuǎn)換模塊,結(jié)果,測試驅(qū)動際配置,單元測試的測試環(huán)境舉例,溫度顯示模塊,溫度接口,,模塊,實際配置,測試驅(qū)動實際配置,溫度顯示模塊,程序員編寫的樁模塊,,(測試存根),溫度值的測試文件,結(jié)構(gòu)性模式(structural,patterns,),,適配器模式,(,Adapter,)—,打包器,(,Wrapper,),,橋模式,(,Bridge,),—,句柄,(,Handle,),,組合模式,(,Composite,),,修飾模式,(,Decorator,)—,包裝器,(,Wrapper,),,外觀模式,(,Facade,),,輕量模式,,(,Flyweight,),,代理模式,—(,Proxy,),,,Implementor,OperationaImp( ),橋模式,(,Bridge,),,意圖:將抽象部分和實現(xiàn)部分分離,使他們都可以獨立地變化,,Abstraction,Contextinterface( ),,ConcreteImplementorA,OperationaImp( ),,ConcreteImplementorB,OperationaImp( ),,RefinedAbstraction,支持多種窗口系統(tǒng)的設(shè)計,—,窗口與窗口實現(xiàn)分離,,Window,Raise( ),,DrawRact(…),,ApplicationWindow,,IconWindow,,DialogWindow,,MacWindowlmp,DeviceRaise( ),,DeviceRect(… ),,……,,PMWindowlmp,DeviceRaise( ),,DeviceRect(… ),,……,,XWindowlmp,DeviceRaise( ),,DeviceRect(… ),,……,,Windowlmp,DeviceRaise( ),,DeviceRect(… ),,……,利用,Bridge設(shè)計,模式與未完成、未知或在測試,,另一組件時不可用組件的接口(UML類圖),,用戶接口,,數(shù)據(jù)庫戶接口,,數(shù)據(jù)庫戶接口,,測試存根,,數(shù)據(jù)庫,,可用,Bridge設(shè)計,模式實現(xiàn)測試存根,用戶接口子系統(tǒng)訪問測試不能訪問的數(shù)據(jù)庫子系統(tǒng)。,,將數(shù)據(jù)庫接口和數(shù)據(jù)庫實現(xiàn)分離開來。,集成測試(組裝測試),,集成測試需考慮的問題:,,數(shù)據(jù)穿越接口可能丟失,.,,一模塊可能破壞另一模塊功能,.,,子功能組裝可能未產(chǎn)生所要求的,,主功能,.,,全程數(shù)據(jù)結(jié)構(gòu)可能出問題,.,,誤差累積問題,.,集成測試方法,,通常采用黑盒測試技術(shù),,實施策略:,,非增量式系統(tǒng)集成,,,增量式系統(tǒng),,集成,,,,,,,深度優(yōu)先,,廣度優(yōu)先,自頂向下結(jié)合,,自底向上結(jié)合,一.非增量式系統(tǒng)集成,,一次就把所有通過了單元測試,,的模塊組合在一起進行全程序的測,,試。,,缺點:,發(fā)現(xiàn)錯誤難以診斷定位,,,又稱“莽撞測試”,。,,,二. 增量式系統(tǒng)集成,,,,從一個模塊開始,測一次添加一個模塊,邊組裝邊測試,以發(fā)現(xiàn)與接口相聯(lián)系的問題。,自頂向下結(jié)合方式舉例:,,A,D,B,E,模塊測試,,結(jié)合順序,C,F,深度優(yōu)先:,A,、,B,、,E,、,C,、,D,、,F,廣度優(yōu)先:,A,、,B,、,C,、,D,、,E,、,F,自頂向下結(jié)合方式舉例:,(,深度優(yōu)先),,A,測試,A,S2,S1,S3,A,加入,B,S2,B,S3,S4,A,加入,E,S2,B,S3,E,A,加入,C,C,B,S3,E,加入,D,C,B,D,E,加入,F,C,B,D,E,A,A,F,S5,自底向上結(jié)合方式舉例:,,A,C,B,D,F,E,E,d,1,C,d,3,F,d,4,B,d,2,E,D,d,5,F,自底向上結(jié)合方式舉例:,,M,c,D,1,M,a,M,b,D,2,D,3,簇1,簇2,簇3,自頂向下 自底向上,,優(yōu)點,,可在測試早期 設(shè)計測試用例容易,,實現(xiàn)并驗證系,,統(tǒng)主要功能,,不需驅(qū)動模塊 不需樁模塊,,缺點,需樁模塊 只有到最后程序才,,能作為一個整體,,3.,混合集成測試方法,,一般對軟件結(jié)構(gòu)的上層使用自頂向下,,結(jié)合的方法,;,,對下層使用自底向上結(jié)合的方法,;,接口測試,,接口測試的目的是檢查由于接口錯誤或者接口進行無效假設(shè)造成的系統(tǒng)缺陷。程序組件的接口有很多的類型,例如:,,參數(shù)接口。 主要是數(shù)據(jù)和函數(shù)指針等,它們由一個構(gòu)件傳遞到另一個構(gòu)件。,,共享內(nèi)存接口。 有一個被子系統(tǒng)共享的內(nèi)存塊。由一個子系統(tǒng)把數(shù)據(jù)放在該內(nèi)存中,然后被另一個子系統(tǒng)取出。,,程序接口。 由一個子系統(tǒng)封裝了的一組程序,這些程序可以被其他子系統(tǒng)調(diào)用。例如,對象(類)和抽象數(shù)據(jù)類型就存在這種接口。,,消息傳遞接口。 子系統(tǒng)通過消息傳遞來請求其他子系統(tǒng)的服務(wù),返回的消息也包含了該服務(wù)的運行結(jié)果。例如,一些面向?qū)ο笙到y(tǒng)、客戶機/服務(wù)器系統(tǒng)存在這種接口。,,,接口錯誤可以分成3類,:,,接口誤用。調(diào)用者(組件)在調(diào)用其他組件時,接口使用不當而產(chǎn)生錯誤,例如,在使用參數(shù)接口時,參數(shù)類型和傳遞順序以及參數(shù)個數(shù)不對等。,,接口誤解。調(diào)用者(組件)誤解了被調(diào)用組件的接口描述而產(chǎn)生錯誤,被調(diào)用組件沒有按照預(yù)期的行為執(zhí)行。,,計時錯誤。這類錯誤一般發(fā)生在實時控制系統(tǒng)中,系統(tǒng)使用了共享內(nèi)存接口或者消息傳遞接口而產(chǎn)生接口錯誤。例如,數(shù)據(jù)的生產(chǎn)和消費可能以不同的速度進行,由于生產(chǎn)者沒有及時更新共享接口的信息導(dǎo)致消費者訪問了過期的數(shù)據(jù)。,,,接口測試的一般準則:,,檢查代碼并明確地列出對外部構(gòu)件的調(diào)用。對傳給外部構(gòu)件的參數(shù)值,應(yīng)選擇取值范圍的邊緣值作為測試用例,這樣可能發(fā)現(xiàn)接口的不一致性。,,如果有指針從接口傳遞,應(yīng)該用空指針參數(shù)來進行測試。,,如果通過程序接口調(diào)用構(gòu)件,可以設(shè)計一些容易引起構(gòu)件失敗的測試。,,如果是通過消息傳遞到系統(tǒng)進行強度測試,應(yīng)該設(shè)計大量的消息,可能發(fā)現(xiàn)計時錯誤。,,當構(gòu)件之間是通過共享內(nèi)存進行交互時,設(shè)計測試用例時,改變激活構(gòu)件的次序,這樣可能發(fā)現(xiàn)共享數(shù)據(jù)的生產(chǎn)和消費的順序的錯誤。,,,集成測試的標準應(yīng)包括,:,,接口完整性。每一個模塊集成到整個系統(tǒng)結(jié)構(gòu)中,都要對它的內(nèi)部和外部接口進行測試。,,功能有效性。為發(fā)現(xiàn)功能性錯誤進行的測試。,,信息內(nèi)容。為發(fā)現(xiàn)與局部數(shù)據(jù)結(jié)構(gòu)或者全局數(shù)據(jù)結(jié)構(gòu)有關(guān)錯誤的測試。,,性能。為驗證軟件設(shè)計過程中建立的性能邊界的測試。,,,回歸測試,,在軟件集成測試的過程中,每當一個模塊加入到系統(tǒng)時,軟件就發(fā)生變化,模塊之間的影響也可能有改變。,,新的數(shù)據(jù)路徑被建立,也可能出現(xiàn)新的輸入/輸出操作。很有可能激活新的控制邏輯,所有這些改變的因素可能會導(dǎo)致原來工作正常的系統(tǒng)產(chǎn)生錯誤。,,回歸測試是對已經(jīng)進行過測試的子集(模塊)重新測試,以確保新添加的模塊不會對系統(tǒng)產(chǎn)生無法預(yù)料的副作用。,,確認測試,有效,,性,,測試,軟件,,配置,,審查,管理,,機構(gòu),,裁決,選擇測試人員,軟件計劃,用戶文檔,開發(fā)文檔,源程序文本,支持環(huán)境,交用戶,,,運行,,維護,測試,,報告,軟件,,配置,構(gòu)造測試用例,實際運行測試,專家,,鑒定,,會,,,,,,,,,有效性測試,,,通過,黑盒測試,,證實軟件功能與,,用戶需求是否一致.,,軟件配置審查與驗收,,,,確認,,測試,軟件配,,置審查,主管部,,門批準,集成的軟件,軟件需求,用戶文檔,設(shè)計文檔,源程序,測試文檔,交付的,,軟 件,確認的,,軟 件,確認的,,配 置,,確認測試結(jié)果,,,測試完成后可能出現(xiàn)兩種情況:,,(1)測試與預(yù)期相符, 可接受。,,(2)不相符,列出軟件缺陷表,與用戶協(xié)商解,,決。,α測試和β測試,,α測試(Alpha),,在開發(fā)者的場所由用戶進行,在開發(fā),,者關(guān)注和控制的環(huán)境下進行。,,β測試(Beta),,最終用戶在自己的場所進行,。,系統(tǒng)測試,,軟件只是計算機系統(tǒng)的一個,,元素,軟件最終要與其他系統(tǒng)元,,素(如新硬件、信息等)相結(jié)合,,,進行各種集成測試和確認測試.,,用于系統(tǒng)測試的測試類型:,,(1)恢復(fù)測試,,(2)安全性測試,,(3)強度測試,,(4)性能測試,(1)恢復(fù)測試,,以不同的方式強使軟件出現(xiàn)故障,檢測,,軟件能否恰當?shù)赝瓿苫謴?fù).,,,自動恢復(fù):,檢測重新初始化、,,檢測點設(shè)置、,,數(shù)據(jù)恢復(fù)、,,重新啟動等是否正確.,,人工干預(yù)恢復(fù):,檢測平均恢復(fù)時間是,,否在允許范圍內(nèi).,(2)安全性測試,,設(shè)計測試用例,突破軟件安全保護機構(gòu),,的安全保密措施,檢驗系統(tǒng)預(yù)防機制的,,漏洞.,,(3)強度測試,,設(shè)計測試用例, 檢驗系統(tǒng)能力最高能達到的實際限度, 讓系統(tǒng)處于資源的異常數(shù)量、異常頻率、異常批量的條件下測試系統(tǒng)的承受能力。一般比平常限度高5-10倍的限度做測試用例.,,,強度測試,是一種敏感性測試技術(shù)。在某種情況下, 包含在程序有效數(shù)據(jù)邊界內(nèi)的非常小范圍的數(shù)據(jù)變動可能導(dǎo)致,極端的, 甚至錯誤的處理, 會使系統(tǒng)性能嚴重下降。,,,(4)性能測試,設(shè)計測試用例,并記錄軟件運行性,,能,與性能要求比較,檢驗是否達到性,,能要求規(guī)格。,面向?qū)ο蟮能浖y試,測試,目標,:在現(xiàn)實的時間跨度內(nèi)應(yīng)用可管理,,的工作量去發(fā)現(xiàn)最大可能數(shù)量的,,錯誤,基本目標不變,但由于,OO,程序的性質(zhì)改變了,測試策略,,和測試戰(zhàn)術(shù),,更多的設(shè)計模式復(fù)用是否將減輕,OO,系統(tǒng)的繁重,測試?,,Binder,R.V.,在“,Object-Oriented Software Testing,”,中討論改問題,:,,“,每次復(fù)用是一個新的使用語境,,,并且重新測試是謹慎的,.,為了獲得面向?qū)ο笙到y(tǒng)的高可靠性,,,似乎可能需要更多而不是更少的測試,.”,OOA和OOD的 模型,測試,,每個階段的所有面向?qū)ο竽P投紤?yīng)被測試。,OOA和OOD的模型不能被執(zhí)行,對它們不能進行傳統(tǒng)意義上的測試。,可通過技術(shù)復(fù)審檢查,OOA和OOD的,,模型的正確性和一致性。,擴大測試的視角,面向?qū)ο鬁y試策略,信息隱蔽對測試的影響,,封裝和繼承對測試的影響,面向?qū)ο蟪绦虻奶攸c對軟件測試的影響:,單元和集成測試策略必須有很大的改變,,測試用例的設(shè)計必須考慮,OO,軟件的特征,1.,OO,的單元測試,一個類可以包含一組不同的操作,而一個特定,,的操作也可能存在于一組不同的類中。,不再孤,,立地測試單個操作,(,這是傳統(tǒng)單元測試的視角,),,OO,軟件的,類測試,等價于,傳統(tǒng)的單元測試,.,,傳統(tǒng)軟件的單元測試關(guān)注算法細節(jié)和模塊接口,,間流動的數(shù)據(jù),,,OO,軟件的類測試是由封裝在類中的操作和類的,,狀態(tài)行為驅(qū)動的,單元概念,的變化—封裝的類或?qū)ο笞鳛樽钚?,的可測試單位,2.,OO,的集成測試,,,OO,軟件沒有層次的控制結(jié)構(gòu),傳統(tǒng)的自頂向,,下和自底向上的集成策略沒有意義.,OO,軟件的集成兩種策略:,,基于線程的測試,(,thread-based testing,),,,集成響應(yīng)系統(tǒng)的一個輸入或事件所需的一組類,,,每個線程被個體地集成和測試,,,通過回歸測試保證沒有副作用產(chǎn)生,;,,基于使用的測試,(use,-based testing,),,,通過測試幾乎不使用服務(wù)器的類,(,獨立類,),來開始系統(tǒng)的構(gòu)造,,,測試完獨立類后,,,使用獨立類按層逐步完成依賴類的測試直至完整的系統(tǒng)被構(gòu)造,;,3.,OO,的確認測試,在確認和系統(tǒng)測試層次,類連接的細節(jié)消失.,和傳統(tǒng)的確認測試一樣,,,OO,軟件的確認關(guān)注,,用戶可見的動作和用戶可識別的系統(tǒng)輸出,.,,,為輔助確認測試的導(dǎo)出,,,應(yīng)利用分析模型中的,,用例圖提供的場景來提高交互需求中發(fā)現(xiàn)錯誤,,的可能性,,OO,軟件的測試用例設(shè)計,每個測試用例應(yīng)被唯一標識,并應(yīng)顯式地和與被,,測試類相關(guān)聯(lián),,測試的目的應(yīng)被陳述,,對每個測試應(yīng)開發(fā)一組測試步驟,包括:,,將被測試對象的一組,特定狀態(tài),,將被作為測試的結(jié)果使用的一組,消息和操作,,當對象被測試時可能產(chǎn)生的一組異常,,一組外部條件,(,進行測試必須的軟件外部環(huán)境的變化,),,將輔助理解或?qū)崿F(xiàn)測試的補充信息,OO,軟件的測試用例設(shè)計還處于成型期.,,Binder,R.V.在“,Essays on Object-Oriented Software Engineering,”,,中建議了對,OO,軟件的測試用例設(shè)計的整體方法:,1. OO,概念的測試用例設(shè)計的含義,封裝可能會成為測試的障礙,,,測試需要報告對象的具體和抽象狀態(tài),而封裝,,使得對象的狀態(tài)快照難于獲得。,,繼承,特別是多繼承使測試復(fù)雜化,子類繼承或重載的父類成員函數(shù)的測試問題,繼承的成員函數(shù)是否都不需要測試,?,,,對父類中已經(jīng)測試過的成員函數(shù),,,兩種情況需要,,在子類中重新測試,:,,,繼承的成員函數(shù)在子類中做了改動,;,,,成員函數(shù)調(diào)用了改動過的成員函數(shù)的部分,;,,例如,:,,,父類,Base,有,兩個成員函數(shù),Inherited(),和,Redefined(),,,,子類,Derived,只對,Redefined(),做了改動,.,,Derived,∷,Redefined(),—,需要重新測試,,,Derived,∷,Inherited(),—,如果它調(diào)用了,Redefined(),的,,語句,,,則需重新測試,,,否則不必,子類繼承或重載的父類成員函數(shù)的測試問題,對父類的測試是否能夠照搬到子類,?,,,上例中,:,,Base,∷,Redefined(),和,Derived,∷,Redefined(),已是,兩個不同的成員函數(shù),,,照理應(yīng)對,Derived,∷,Redefined(),重新進行測試分析,,,設(shè)計測試用例,,,但由于它們的,相似性,,,只需在,Base,∷,Redefined(),的,測試要求和測試用例上添加對,Derived,∷,Redefined(),的