軟件測(cè)試?yán)碚摵头椒ㄈ嫱扑])資料_第1頁(yè)
已閱讀1頁(yè),還剩579頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、軟件測(cè)試,軟件測(cè)試的目的和原則軟件測(cè)試的重要性錯(cuò)誤的分類軟件測(cè)試用例設(shè)計(jì)軟件測(cè)試的過(guò)程與策略軟件測(cè)試種類程序的靜態(tài)測(cè)試程序調(diào)試,GUI測(cè)試文檔測(cè)試面向?qū)ο笙到y(tǒng)的測(cè)試客戶/服務(wù)器系統(tǒng)的測(cè)試WEB系統(tǒng)的測(cè)試RUP中的測(cè)試工作流,軟件測(cè)試的目的和原則,軟件測(cè)試的目的軟件測(cè)試的原則軟件測(cè)試的對(duì)象測(cè)試信息流測(cè)試與軟件開(kāi)發(fā)各階段的關(guān)系,,軟件測(cè)試的目的,基于不同的立場(chǎng),存在著兩種完全不同的測(cè)試目的。從用戶的角度出發(fā)

2、,普遍希望通過(guò)軟件測(cè)試暴露軟件中隱藏的錯(cuò)誤和缺陷,以考慮是否可接受該產(chǎn)品。從軟件開(kāi)發(fā)者的角度出發(fā),則希望測(cè)試成為表明軟件產(chǎn)品中不存在錯(cuò)誤的過(guò)程,驗(yàn)證該軟件已正確地實(shí)現(xiàn)了用戶的要求,確立人們對(duì)軟件質(zhì)量的信心。,Myers軟件測(cè)試目的,(1) 測(cè)試是程序的執(zhí)行過(guò)程,目的在于發(fā)現(xiàn)錯(cuò)誤;(2) 一個(gè)好的測(cè)試用例在于能發(fā)現(xiàn)至今未發(fā)現(xiàn)的錯(cuò)誤;(3) 一個(gè)成功的測(cè)試是發(fā)現(xiàn)了至今未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試。,換言之,測(cè)試的目的是 想以最少的時(shí)間和人力,

3、系統(tǒng)地找出軟件中潛在的各種錯(cuò)誤和缺陷。如果我們成功地實(shí)施了測(cè)試,我們就能夠發(fā)現(xiàn)軟件中的錯(cuò)誤。 測(cè)試的附帶收獲是,它能夠證明軟件的功能和性能與需求說(shuō)明相符合。 實(shí)施測(cè)試收集到的測(cè)試結(jié)果數(shù)據(jù)為可靠性分析提供了依據(jù)。 測(cè)試不能表明軟件中不存在錯(cuò)誤,它只能說(shuō)明軟件中存在錯(cuò)誤。,,軟件測(cè)試的原則,1. 測(cè)試計(jì)劃可以在需求模型一完成就開(kāi)始,詳細(xì)的測(cè)試用例定義可以在設(shè)計(jì)模型被確定后立刻開(kāi)始。因此所有測(cè)試可以在任何代碼被產(chǎn)生前進(jìn)行計(jì)劃和設(shè)計(jì)。 應(yīng)

4、當(dāng)把“盡早地和不斷地進(jìn)行軟件測(cè)試”作為軟件開(kāi)發(fā)者的座右銘。2. 所有的測(cè)試都應(yīng)追溯到用戶需求。軟件測(cè)試的目標(biāo)在于揭示錯(cuò)誤,而最嚴(yán)重的錯(cuò)誤(從用戶角度看)是那些導(dǎo)致程序無(wú)法滿足需求的錯(cuò)誤。,3. 測(cè)試用例應(yīng)由測(cè)試輸入數(shù)據(jù)和對(duì)應(yīng)的預(yù)期輸出結(jié)果這兩部分組成。4. 程序員應(yīng)避免檢查自己的程序。5. 在設(shè)計(jì)測(cè)試用例時(shí),應(yīng)包括合理的輸入條件和不合理的輸入條件。6. 測(cè)試應(yīng)從“小規(guī)?!遍_(kāi)始,逐步轉(zhuǎn)向“大規(guī)?!?。從單元測(cè)試到組裝測(cè)試再到系統(tǒng)測(cè)試

5、7。窮舉測(cè)試是不可能的,然而充分覆蓋程序邏輯,并確保程序設(shè)計(jì)中使用的所有條件是有可能的。,,軟件測(cè)試的原則,8. Pareto原則應(yīng)用于軟件測(cè)試。Pareto原則暗示著測(cè)試發(fā)現(xiàn)的錯(cuò)誤中80%很可能起源于程序模塊中20%。因此應(yīng)集中精力孤立有疑點(diǎn)的模塊,對(duì)其進(jìn)行徹底測(cè)試,這對(duì)測(cè)試的安排很重要。9. 充分注意測(cè)試中的群集現(xiàn)象。經(jīng)驗(yàn)表明,測(cè)試后程序中殘存的錯(cuò)誤數(shù)目與該程序中已發(fā)現(xiàn)的錯(cuò)誤數(shù)目成正比。10. 嚴(yán)格執(zhí)行測(cè)試計(jì)劃,排除測(cè)試的隨

6、意性。應(yīng)當(dāng)對(duì)每一個(gè)測(cè)試結(jié)果做全面檢查。妥善保存測(cè)試計(jì)劃,測(cè)試用例,出錯(cuò)統(tǒng)計(jì)和最終分析報(bào)告,為維護(hù)提供方便。,,軟件測(cè)試的原則,軟件測(cè)試的對(duì)象,軟件測(cè)試并不等于程序測(cè)試。軟件測(cè)試應(yīng)貫穿于軟件定義與開(kāi)發(fā)的整個(gè)期間。需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)以及程序編碼等各階段所得到的文檔,包括需求規(guī)格說(shuō)明、概要設(shè)計(jì)規(guī)格說(shuō)明、詳細(xì)設(shè)計(jì)規(guī)格說(shuō)明以及源程序,都應(yīng)成為軟件測(cè)試的對(duì)象。,為把握軟件開(kāi)發(fā)各個(gè)環(huán)節(jié)的正確性,需要進(jìn)行各種確認(rèn)和驗(yàn)證工作。確認(rèn)(Vali

7、dation),是一系列的活動(dòng)和過(guò)程,目的是想證實(shí)在一個(gè)給定的外部環(huán)境中軟件的邏輯正確性。 需求規(guī)格說(shuō)明確認(rèn) 程序確認(rèn) (靜態(tài)確認(rèn)、動(dòng)態(tài)確認(rèn)) 驗(yàn)證(Verification),試圖證明在軟件生存期各個(gè)階段,以及階段間的邏輯協(xié)調(diào)性、完備性和正確性。,,測(cè)試信息流,測(cè)試信息流,軟件配置:軟件需求規(guī)格說(shuō)明、軟件設(shè)計(jì)規(guī)格說(shuō)明、源代碼等;測(cè)試配置:測(cè)試計(jì)劃、測(cè)試用例、測(cè)試程序等;測(cè)試工具:測(cè)試數(shù)據(jù)自動(dòng)生成程序、靜態(tài)分析程序、動(dòng)態(tài)分析程

8、序、測(cè)試結(jié)果分析程序、以及驅(qū)動(dòng)測(cè)試的測(cè)試數(shù)據(jù)庫(kù)等等。,測(cè)試結(jié)果分析:比較實(shí)測(cè)結(jié)果與預(yù)期結(jié)果,評(píng)價(jià)錯(cuò)誤是否發(fā)生。排錯(cuò)(調(diào)試):對(duì)已經(jīng)發(fā)現(xiàn)的錯(cuò)誤進(jìn)行錯(cuò)誤定位和確定出錯(cuò)性質(zhì),并改正這些錯(cuò)誤,同時(shí)修改相關(guān)的文檔。修正后的文檔再測(cè)試:直到通過(guò)測(cè)試為止。,通過(guò)收集和分析測(cè)試結(jié)果數(shù)據(jù),對(duì)軟件建立可靠性模型利用可靠性分析,評(píng)價(jià)軟件質(zhì)量: 軟件的質(zhì)量和可靠性達(dá)到可以接受的程度; 所做的測(cè)試不足以發(fā)現(xiàn)嚴(yán)重的錯(cuò)誤;如果測(cè)試發(fā)現(xiàn)不了錯(cuò)誤,可以肯定,

9、測(cè)試配置考慮得不夠細(xì)致充分,錯(cuò)誤仍然潛伏在軟件中。這些錯(cuò)誤最終不得不由用戶在使用中發(fā)現(xiàn),并在維護(hù)時(shí)由開(kāi)發(fā)者去改正。但那時(shí)改正錯(cuò)誤的費(fèi)用將比在開(kāi)發(fā)階段改正錯(cuò)誤的費(fèi)用要高出40倍到60倍。,,測(cè)試與軟件開(kāi)發(fā)各階段的關(guān)系,軟件開(kāi)發(fā)過(guò)程是一個(gè)自頂向下,逐步細(xì)化的過(guò)程軟件計(jì)劃階段定義軟件作用域軟件需求分析建立軟件信息域、功能和性能需求、約束等軟件設(shè)計(jì)把設(shè)計(jì)用某種程序設(shè)計(jì)語(yǔ)言轉(zhuǎn)換成程序代碼,測(cè)試過(guò)程是依相反順序安排的自底向上,逐步集成的過(guò)程

10、。,,返,傳統(tǒng)測(cè)試過(guò)程,,建立,設(shè)計(jì),測(cè)試,,,測(cè)試生命周期,建立 1,,建立 2,建立 3,建立 4,用戶改進(jìn)迭代,測(cè)試,測(cè)試,測(cè)試,測(cè)試,,,,測(cè)試需要盡早的開(kāi)始,,設(shè)計(jì),無(wú)須 “凍結(jié)” 規(guī)格,測(cè)試生命周期,,測(cè)試生命周期,測(cè)試生命周期,測(cè)試生命周期,測(cè)試生命周期,測(cè)試計(jì)劃定義測(cè)試項(xiàng)目的過(guò)程,以便測(cè)試項(xiàng)目能被正確的度量和控制。包括測(cè)試需求,測(cè)試策略,測(cè)試資源和測(cè)試計(jì)劃,測(cè)試生命周期,測(cè)試設(shè)計(jì)為了最有效的驗(yàn)證測(cè)試需求被覆蓋,

11、定義自動(dòng)的測(cè)試,測(cè)試生命周期,測(cè)試開(kāi)發(fā)在測(cè)試設(shè)計(jì)期間已被定義,創(chuàng)建或獲得自動(dòng)的測(cè)試過(guò)程.,測(cè)試生命周期,測(cè)試執(zhí)行運(yùn)行與被測(cè)試應(yīng)用的軟件構(gòu)造相對(duì)應(yīng)的測(cè)試過(guò)程集,并記錄結(jié)果日志,包括缺陷報(bào)告和測(cè)試日志。,測(cè)試生命周期,測(cè)試評(píng)估分析測(cè)試結(jié)果,確定是否測(cè)試標(biāo)準(zhǔn)被覆蓋的過(guò)程.,測(cè)試生命周期,缺陷跟蹤初始記錄測(cè)試故障或用戶問(wèn)題,檢查測(cè)試故障以及提供解決它們的結(jié)構(gòu)的過(guò)程。,,測(cè)試人員,項(xiàng)目持續(xù)時(shí)間,測(cè)試人員,代碼實(shí)現(xiàn),消除缺陷,維護(hù)的費(fèi)用1

12、x 10x 100x,軟件測(cè)試重要性,,項(xiàng)目持續(xù)時(shí)間,消除缺陷,消除缺陷,軟件測(cè)試重要性,100%,軟件測(cè)試重要性,,越早測(cè)試越好自動(dòng)的測(cè)試測(cè)試每一個(gè)版本,傳統(tǒng)的測(cè)試是在代碼實(shí)現(xiàn)之后進(jìn)行,軟件測(cè)試重要性,程序錯(cuò)誤分類,(1) 按錯(cuò)誤的影響和后果分類較小錯(cuò)誤:只對(duì)系統(tǒng)輸出有一些非實(shí)質(zhì)性影響。如,輸出的數(shù)據(jù)格式不合要求等。中等錯(cuò)誤:對(duì)系統(tǒng)的運(yùn)行有局部影響。如輸出的某些數(shù)據(jù)有錯(cuò)誤或出現(xiàn)冗余。較嚴(yán)重錯(cuò)誤:系統(tǒng)的

13、行為因錯(cuò)誤的干擾而出現(xiàn)明顯不合情理的現(xiàn)象。比如開(kāi)出了0.00元的支票,系統(tǒng)的輸出完全不可信賴。嚴(yán)重錯(cuò)誤:系統(tǒng)運(yùn)行不可跟蹤,一時(shí)不能掌握其規(guī)律,時(shí)好時(shí)壞。非常嚴(yán)重的錯(cuò)誤:系統(tǒng)運(yùn)行中突然停機(jī),其原因不明,無(wú)法軟啟動(dòng)。最嚴(yán)重的錯(cuò)誤:系統(tǒng)運(yùn)行導(dǎo)致環(huán)境破壞,或是造成事故,引起生命、財(cái)產(chǎn)的損失。,(2) 按錯(cuò)誤的性質(zhì)和范圍分類。B.Beizer從軟件測(cè)試觀點(diǎn)出發(fā),把軟件錯(cuò)誤分為5類。① 功能錯(cuò)誤 規(guī)格說(shuō)明錯(cuò)誤:規(guī)格說(shuō)明可能不完全,有二義性

14、或自身矛盾。功能錯(cuò)誤:程序?qū)崿F(xiàn)的功能與用戶要求的不一致。這常常是由于規(guī)格說(shuō)明中包含錯(cuò)誤的功能、多余的功能或遺漏的功能所致。測(cè)試錯(cuò)誤:軟件測(cè)試的設(shè)計(jì)與實(shí)施發(fā)生錯(cuò)誤。軟件測(cè)試自身也可能發(fā)生錯(cuò)誤。測(cè)試標(biāo)準(zhǔn)引起的錯(cuò)誤:對(duì)軟件測(cè)試的標(biāo)準(zhǔn)要選擇適當(dāng),若測(cè)試標(biāo)準(zhǔn)太復(fù)雜,則導(dǎo)致測(cè)試過(guò)程出錯(cuò)的可能就大。,② 系統(tǒng)錯(cuò)誤外部接口錯(cuò)誤:外部接口指如終端、打印機(jī)、通信線路等系統(tǒng)與外部環(huán)境通信的手段。所有外部接口之間,人與機(jī)器之間的通信都使用形式的或非形式

15、的專門協(xié)議。如果協(xié)議有錯(cuò),或太復(fù)雜,難以理解,致使在使用中出錯(cuò)。此外還包括對(duì)輸入/輸出格式錯(cuò)誤理解,對(duì)輸入數(shù)據(jù)不合理的容錯(cuò)等等。內(nèi)部接口錯(cuò)誤:內(nèi)部接口指程序之間的聯(lián)系。它所發(fā)生的錯(cuò)誤與程序內(nèi)實(shí)現(xiàn)的細(xì)節(jié)有關(guān)。例如,設(shè)計(jì)協(xié)議錯(cuò)、輸入/輸出格式錯(cuò)、數(shù)據(jù)保護(hù)不可靠、子程序訪問(wèn)錯(cuò)等。硬件結(jié)構(gòu)錯(cuò)誤:這類錯(cuò)誤在于不能正確地理解硬件如何工作。例如,忽視或錯(cuò)誤地理解分頁(yè)機(jī)構(gòu)、地址生成、通道容量、I/O指令、中斷處理、設(shè)備初始化和啟動(dòng)等而導(dǎo)致的出錯(cuò)。,

16、操作系統(tǒng)錯(cuò)誤:這類錯(cuò)誤主要是由于不了解操作系統(tǒng)的工作機(jī)制而導(dǎo)致出錯(cuò)。當(dāng)然,操作系統(tǒng)本身也有錯(cuò)誤,但是一般用戶很難發(fā)現(xiàn)這種錯(cuò)誤。軟件結(jié)構(gòu)錯(cuò)誤:由于軟件結(jié)構(gòu)不合理或不清晰而引起的錯(cuò)誤。這種錯(cuò)誤通常與系統(tǒng)的負(fù)載有關(guān),而且往往在系統(tǒng)滿載時(shí)才出現(xiàn)。這是最難發(fā)現(xiàn)的一類錯(cuò)誤。例如,錯(cuò)誤地設(shè)置局部參數(shù)或全局參數(shù);錯(cuò)誤地假定寄存器與存儲(chǔ)器單元初始化了;錯(cuò)誤地假定不會(huì)發(fā)生中斷而導(dǎo)致不能封鎖或開(kāi)中斷;錯(cuò)誤地假定程序可以繞過(guò)數(shù)據(jù)的內(nèi)部鎖而導(dǎo)致不能關(guān)閉或打開(kāi)內(nèi)

17、部鎖;錯(cuò)誤地假定被調(diào)用子程序常駐內(nèi)存或非常駐內(nèi)存等等,都將導(dǎo)致軟件出錯(cuò)??刂婆c順序錯(cuò)誤:這類錯(cuò)誤包括:忽視了時(shí)間因素而破壞了事件的順序;猜測(cè)事件出現(xiàn)在指定的序列中;等待一個(gè)不可能發(fā)生的條件;漏掉先決條件;規(guī)定錯(cuò)誤的優(yōu)先級(jí)或程序狀態(tài);漏掉處理步驟;存在不正確的處理步驟或多余的處理步驟等。資源管理錯(cuò)誤:這類錯(cuò)誤是由于不正確地使用資源而產(chǎn)生的。例如,使用未經(jīng)獲準(zhǔn)的資源;使用后未釋放資源;資源死鎖;把資源鏈接在錯(cuò)誤的隊(duì)列中等等。,③ 加工錯(cuò)

18、誤算術(shù)與操作錯(cuò)誤:指在算術(shù)運(yùn)算、函數(shù)求值和一般操作過(guò)程中發(fā)生的錯(cuò)誤。包括:數(shù)據(jù)類型轉(zhuǎn)換錯(cuò);除法溢出;錯(cuò)誤地使用關(guān)系比較符;用整數(shù)與浮點(diǎn)數(shù)做比較等。初始化錯(cuò)誤:典型的錯(cuò)誤有:忘記初始化工作區(qū),忘記初始化寄存器和數(shù)據(jù)區(qū);錯(cuò)誤地對(duì)循環(huán)控制變量賦初值;用不正確的格式,數(shù)據(jù)或類型進(jìn)行初始化等等。 控制和次序錯(cuò)誤:這類錯(cuò)誤與系統(tǒng)級(jí)同名錯(cuò)誤類似,但它是局部錯(cuò)誤。包括:遺漏路徑;不可達(dá)到的代碼;不符合語(yǔ)法的循環(huán)嵌套;循環(huán)返回和終止的條件不正確;漏

19、掉處理步驟或處理步驟有錯(cuò)等。靜態(tài)邏輯錯(cuò)誤:這類錯(cuò)誤主要包括:不正確地使用CASE語(yǔ)句;在表達(dá)式中使用不正確的否定(例如用“>”代替“<”的否定);對(duì)情況不適當(dāng)?shù)胤纸馀c組合;混淆“或”與“異或”等。,④ 數(shù)據(jù)錯(cuò)誤動(dòng)態(tài)數(shù)據(jù)錯(cuò)誤:動(dòng)態(tài)數(shù)據(jù)是在程序執(zhí)行過(guò)程中暫時(shí)存在的數(shù)據(jù)。各種不同類型的動(dòng)態(tài)數(shù)據(jù)在程序執(zhí)行期間將共享一個(gè)共同的存儲(chǔ)區(qū)域,若程序啟動(dòng)時(shí)對(duì)這個(gè)區(qū)域未初始化,就會(huì)導(dǎo)致數(shù)據(jù)出錯(cuò)。由于動(dòng)態(tài)數(shù)據(jù)被破壞的位置可能與出錯(cuò)的位置在距離上相差很遠(yuǎn),

20、因此要發(fā)現(xiàn)這類錯(cuò)誤比較困難。靜態(tài)數(shù)據(jù)錯(cuò)誤:靜態(tài)數(shù)據(jù)在內(nèi)容和格式上都是固定的。它們直接或間接地出現(xiàn)在程序或數(shù)據(jù)庫(kù)中。由編譯程序或其它專門程序?qū)λ鼈冏鲱A(yù)處理。這是在程序執(zhí)行前防止靜態(tài)錯(cuò)誤的好辦法,但預(yù)處理也會(huì)出錯(cuò)。數(shù)據(jù)內(nèi)容錯(cuò)誤:數(shù)據(jù)內(nèi)容是指存儲(chǔ)于存儲(chǔ)單元或數(shù)據(jù)結(jié)構(gòu)中的位串、字符串或數(shù)字。數(shù)據(jù)內(nèi)容本身沒(méi)有特定的含義,除非通過(guò)硬件或軟件給予解釋。數(shù)據(jù)內(nèi)容錯(cuò)誤就是由于內(nèi)容被破壞或被錯(cuò)誤地解釋而造成的錯(cuò)誤。數(shù)據(jù)結(jié)構(gòu)錯(cuò)誤:數(shù)據(jù)結(jié)構(gòu)是指數(shù)據(jù)元素的

21、大小和組織形式。在同一存儲(chǔ)區(qū)域中可以定義不同的數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)錯(cuò)誤主要包括結(jié)構(gòu)說(shuō)明錯(cuò)誤及把一個(gè)數(shù)據(jù)結(jié)構(gòu)誤當(dāng)做另一類數(shù)據(jù)結(jié)構(gòu)使用的錯(cuò)誤。這是更危險(xiǎn)的錯(cuò)誤。數(shù)據(jù)屬性錯(cuò)誤:數(shù)據(jù)屬性是指數(shù)據(jù)內(nèi)容的含義或語(yǔ)義。例如,整數(shù)、字符串、子程序等等。數(shù)據(jù)屬性錯(cuò)誤主要包括:對(duì)數(shù)據(jù)屬性不正確地解釋,比如錯(cuò)把整數(shù)當(dāng)實(shí)數(shù),允許不同類型數(shù)據(jù)混合運(yùn)算而導(dǎo)致的錯(cuò)誤等。,⑤ 代碼錯(cuò)誤,主要包括語(yǔ)法錯(cuò)誤打字錯(cuò)誤對(duì)語(yǔ)句或指令不正確理解所產(chǎn)生的錯(cuò)誤。,(3) 按軟件

22、生存期階段分類,Gerhart分類方法把軟件的邏輯錯(cuò)誤按生存期不同階段分為4類。① 問(wèn)題定義(需求分析)錯(cuò)誤:它們是在軟件定義階段,分析員研究用戶的要求后所編寫的文檔中出現(xiàn)的錯(cuò)誤。換句話說(shuō),這類錯(cuò)誤是由于問(wèn)題定義不滿足用戶的要求而導(dǎo)致的錯(cuò)誤。② 規(guī)格說(shuō)明錯(cuò)誤:這類錯(cuò)誤是指規(guī)格說(shuō)明與問(wèn)題定義不一致所產(chǎn)生的錯(cuò)誤。它們又可以細(xì)分成:不一致性錯(cuò)誤:規(guī)格說(shuō)明中功能說(shuō)明與問(wèn)題定義發(fā)生矛盾。冗余性錯(cuò)誤:規(guī)格說(shuō)明中某些功能說(shuō)明與問(wèn)題定義相比是

23、多余的。不完整性錯(cuò)誤:規(guī)格說(shuō)明中缺少某些必要的功能說(shuō)明。不可行錯(cuò)誤:規(guī)格說(shuō)明中有些功能要求是不可行的。 不可測(cè)試錯(cuò)誤:有些功能的測(cè)試要求是不現(xiàn)實(shí)的。,③ 設(shè)計(jì)錯(cuò)誤:這是在設(shè)計(jì)階段產(chǎn)生的錯(cuò)誤,它使系統(tǒng)的設(shè)計(jì)與需求規(guī)格說(shuō)明中的功能說(shuō)明不相符。它們又可以細(xì)分為:設(shè)計(jì)不完全錯(cuò)誤:某些功能沒(méi)有被設(shè)計(jì),或設(shè)計(jì)得不完全。算法錯(cuò)誤:算法選擇不合適。主要表現(xiàn)為算法的基本功能不滿足功能要求、算法不可行或者算法的效率不符合要求。模塊接口錯(cuò)誤:模塊

24、結(jié)構(gòu)不合理;模塊與外部數(shù)據(jù)庫(kù)的界面不一致,模塊之間的界面不一致??刂七壿嬪e(cuò)誤:控制流程與規(guī)格說(shuō)明不一致;控制結(jié)構(gòu)不合理。數(shù)據(jù)結(jié)構(gòu)錯(cuò)誤:數(shù)據(jù)設(shè)計(jì)不合理;與算法不匹配;數(shù)據(jù)結(jié)構(gòu)不滿足規(guī)格說(shuō)明要求。,④ 編碼錯(cuò)誤:編碼過(guò)程中的錯(cuò)誤是多種多樣的,大體可歸為以下幾種:數(shù)據(jù)說(shuō)明錯(cuò)、數(shù)據(jù)使用錯(cuò)、計(jì)算錯(cuò)、比較錯(cuò)、控制流錯(cuò)、界面錯(cuò)、輸入/輸出錯(cuò),及其它的錯(cuò)誤。在不同的開(kāi)發(fā)階段,錯(cuò)誤的類型和表現(xiàn)形式是不同的,故應(yīng)當(dāng)采用不同的方法和策略來(lái)進(jìn)行檢測(cè)。,

25、測(cè)試用例設(shè)計(jì),兩種常用的測(cè)試方法 黑盒測(cè)試 白盒測(cè)試,,黑盒測(cè)試,這種方法是把測(cè)試對(duì)象看做一個(gè)黑盒子,測(cè)試人員完全不考慮程序內(nèi)部的邏輯結(jié)構(gòu)和內(nèi)部特性,只依據(jù)程序的需求規(guī)格說(shuō)明書(shū),檢查程序的功能是否符合它的功能說(shuō)明。黑盒測(cè)試又叫做功能測(cè)試或數(shù)據(jù)驅(qū)動(dòng)測(cè)試。,黑盒測(cè)試方法是在程序接口上進(jìn)行測(cè)試,主要是為了發(fā)現(xiàn)以下錯(cuò)誤: 是否有不正確或遺漏了的功能? 在接口上,輸入能否正確地接受? 能否輸出正確的結(jié)果? 是否有數(shù)據(jù)結(jié)構(gòu)錯(cuò)誤或外部信息

26、(例如數(shù)據(jù)文件)訪問(wèn)錯(cuò)誤? 性能上是否能夠滿足要求? 是否有初始化或終止性錯(cuò)誤?,用黑盒測(cè)試發(fā)現(xiàn)程序中的錯(cuò)誤,必須在所有可能的輸入條件和輸出條件中確定測(cè)試數(shù)據(jù),來(lái)檢查程序是否都能產(chǎn)生正確的輸出。但這是不可能的。,假設(shè)一個(gè)程序P有輸入量X和Y及輸出量Z。在字長(zhǎng)為32位的計(jì)算機(jī)上運(yùn)行。若X、Y取整數(shù),按黑盒方法進(jìn)行窮舉測(cè)試:可能采用的 測(cè)試數(shù)據(jù)組: 232×232 =264 如果測(cè)試一組數(shù)據(jù)

27、需要1毫秒,一年工作365× 24小時(shí),完成所有測(cè)試需5億年。,白盒測(cè)試,此方法把測(cè)試對(duì)象看做一個(gè)透明的盒子,它允許測(cè)試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關(guān)信息,設(shè)計(jì)或選擇測(cè)試用例,對(duì)程序所有邏輯路徑進(jìn)行測(cè)試。通過(guò)在不同點(diǎn)檢查程序的狀態(tài),確定實(shí)際的狀態(tài)是否與預(yù)期的狀態(tài)一致。因此白盒測(cè)試又稱為結(jié)構(gòu)測(cè)試或邏輯驅(qū)動(dòng)測(cè)試。,軟件人員使用白盒測(cè)試方法,主要想對(duì)程序模塊進(jìn)行如下的檢查: 對(duì)程序模塊的所有獨(dú)立的執(zhí)行路徑至少測(cè)試一次; 對(duì)所

28、有的邏輯判定,取“真”與取“假”的兩種情況都至少測(cè)試一次; 在循環(huán)的邊界和運(yùn)行界限內(nèi)執(zhí)行循環(huán)體; 測(cè)試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性,等。,對(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年。,為什么進(jìn)行白盒測(cè)試?,一個(gè)合理的問(wèn)題:

29、“我們應(yīng)該更注重于保證程序需求的實(shí)現(xiàn),為什么要花費(fèi)時(shí)間和精力來(lái)?yè)?dān)心(和測(cè)試)邏輯細(xì)節(jié)?”,換一種說(shuō)法,我們?yōu)槭裁床粚⑺械木τ糜诤诤袦y(cè)試呢?答案在于軟件的自身缺陷:邏輯錯(cuò)誤和不正確的假設(shè)與一條程序路徑被運(yùn)行的可能性成反比。當(dāng)我們?cè)O(shè)計(jì)和實(shí)現(xiàn)主流之外的功能、條件或控制時(shí),錯(cuò)誤往往開(kāi)始出現(xiàn)在我們的工作中。我們經(jīng)常相信某邏輯路徑不可能被執(zhí)行,而事實(shí)上,它可能在正常的基礎(chǔ)上被執(zhí)行。程序的邏輯流有時(shí)是違反直覺(jué)的,這意味著我們關(guān)于控制流和數(shù)據(jù)

30、流的一些無(wú)意識(shí)的假設(shè)可能導(dǎo)致設(shè)計(jì)錯(cuò)誤,只有路徑測(cè)試能發(fā)現(xiàn)這種錯(cuò)誤。;印刷上的錯(cuò)誤是隨機(jī)的。程序員可能會(huì)產(chǎn)生某些拼寫錯(cuò)誤,絕大多數(shù)可以在編譯時(shí)被發(fā)現(xiàn),但是,有些在測(cè)試時(shí)才會(huì)被發(fā)現(xiàn)。黑盒測(cè)試,不管它多全面,都可能忽略前面提到的某些類型的錯(cuò)誤,“錯(cuò)誤潛伏在角落里,聚集在邊界上”。白盒測(cè)試更可能發(fā)現(xiàn)它們!,邏輯覆蓋,語(yǔ)句覆蓋 判定覆蓋 條件覆蓋,判定-條件覆蓋 條件組合覆蓋 路徑覆蓋。,邏輯覆蓋是以程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)的設(shè)計(jì)測(cè)

31、試用例的技術(shù)。它屬白盒測(cè)試。,,,,,例,,,(A>1) and (B=0),(A=2) or (X>1),,,,,X=X/A,,,,,,,X=X+1,,,T,T,F,F,a,b,d,c,e,L1 ( a ? c ? e )= {(A>1) and (B=0)} and {(A=2) or (X/A>1)}= (A>1) and (B=0) and (A=2) or

32、 (A>1) and (B=0) and (X/A>1)= (A=2) and (B=0) or (A>1) and (B=0) and (X/A>1),L2 ( a? b ? d )= not{(A>1) and (B=0)} and not{(A=2) or (X>1)}= { not (A>1) or not (B=0) } and

33、 { not (A=2) and not (X>1) }= not (A>1) and not (A=2) and not (X>1) or not (B=0) and not (A=2) and not (X>1),L3 ( a? b? e)= not {(A>1) and (B=0)} and {(A=2

34、) or (X>1)}= { not (A>1) or not (B=0)} and {(A=2) or (X>1)}= not (A>1) and (A=2) or not (A>1) and (X>1) or not (B=0) and (A=2) or not (B=0) and (X>1),,L4 ( a? c ?

35、d )= {(A>1) and (B=0)} and not {(A=2) or (X/A>1)}= (A>1) and (B=0) and not (A=2) and not (X/A>1),語(yǔ)句覆蓋,語(yǔ)句覆蓋就是設(shè)計(jì)若干個(gè)測(cè)試用例,運(yùn)行被測(cè)程序,使得每一可執(zhí)行語(yǔ)句至少執(zhí)行一次。這種覆蓋又稱為點(diǎn)覆蓋,它使得程序中每個(gè)可執(zhí)行語(yǔ)句都得到執(zhí)行,但它是最弱的邏輯覆蓋準(zhǔn),效果有

36、限,必須與其它方法交互使用。在圖例中,正好所有的可執(zhí)行語(yǔ)句都在路徑L1上,所以選擇路徑 L1設(shè)計(jì)測(cè)試用例,就可以覆蓋所有的可執(zhí)行語(yǔ)句。,測(cè)試用例的設(shè)計(jì)格式如下【輸入的(A, B, X),輸出的(A, B, X)】為圖例設(shè)計(jì)滿足語(yǔ)句覆蓋的測(cè)試用例是:【(2, 0, 4),(2, 0, 3)】  覆蓋 ace【L1】,,(A=2) and (B=0) or (A>1) and (B=0) and (X/A&

37、gt;1),,判定覆蓋,判定覆蓋就是設(shè)計(jì)若干個(gè)測(cè)試用例,運(yùn)行被測(cè)程序,使得程序中每個(gè)判斷的取真分支和取假分支至少經(jīng)歷一次。判定覆蓋又稱為分支覆蓋。判定覆蓋只比語(yǔ)句覆蓋稍強(qiáng)一些,但實(shí)際效果表明,只是判定覆蓋,還不能保證一定能查出在判斷的條件中存在的錯(cuò)誤。因此,還需要更強(qiáng)的邏輯覆蓋準(zhǔn)則去檢驗(yàn)判斷內(nèi)部條件。 對(duì)于圖例,如果選擇路徑L1和L2,就可得滿足要求的測(cè)試用例:,【(2, 0, 4),(2, 0, 3)】覆蓋 ace【L1】【(

38、1, 1, 1),(1, 1, 1)】覆蓋 abd【L2】,(A=2) and (B=0) or (A>1) and (B=0) and (X/A>1),not (A>1) and not (A=2) and not (X>1) or not (B=0) and not (A=2) and not (X>1),,,如果選擇

39、路徑L3和L4,還可得另一組可用的測(cè)試用例:【(2, 1, 1),(2, 1, 2)】覆蓋 abe【L3】【(3, 0, 3),(3, 1, 1)】覆蓋 acd【L4】,,not (A>1) and (X>1) or not (B=0) and (A=2) or not (B=0) and (X>1),(A>1) and (B=0) and not (A=2) and no

40、t (X/A>1),,,條件覆蓋,條件覆蓋就是設(shè)計(jì)若干個(gè)測(cè)試用例,運(yùn)行被測(cè)程序,使得程序中每個(gè)判斷的每個(gè)條件的可能取值至少執(zhí)行一次。條件覆蓋深入到判定中的每個(gè)條件,但可能不能滿足判定覆蓋的要求。 在圖例中,我們事先可對(duì)所有條件的取值加以標(biāo)記。例如,對(duì)于第一個(gè)判斷: 條件 A>1 取真為 ,取假為 條件 B=0 取真為 ,取假為,對(duì)于第二個(gè)判斷: 條件A=2 取真為 ,取假為 條件X>1 取真為

41、 ,取假為 測(cè)試用例 覆蓋分支 條件取值【(2, 0, 4),(2, 0, 3)】 L1(c, e) 【(1, 0, 1),(1, 0, 1)】 L2(b, d) 【(2, 1, 1),(2, 1, 2)】 L3(b, e)或,測(cè) 試 用 例覆蓋分支 條件取值【(1, 0, 3),(1, 0, 4)】 L3(b, e) 【(2, 1, 1),(2, 1, 2)】 L3(b

42、, e),,判定-條件覆蓋,判定-條件覆蓋就是設(shè)計(jì)足夠的測(cè)試用例,使得判斷中每個(gè)條件的所有可能取值至少執(zhí)行一次,每個(gè)判斷中的每個(gè)條件的可能取值至少執(zhí)行一次。換言之,即是要求各個(gè)判斷的所有可能的條件取值組合至少執(zhí)行一次。 判定-條件覆蓋有缺陷。從表面上來(lái)看,它測(cè)試了所有條件的取值。但是事實(shí)并非如此。往往某些條件掩蓋了另一些條件。會(huì)遺漏某些條件取值錯(cuò)誤的情況。為徹底地檢查所有條件的取值,需要將判定語(yǔ)句中給出的復(fù)合條件表達(dá)式進(jìn)行分解,形成由

43、多個(gè)基本判定嵌套的流程圖。這樣就可以有效地檢查所有的條件是否正確了。,測(cè) 試 用 例覆蓋分支 條件取值【(2, 0, 4),(2, 0, 3)】L1(c, e)【(1, 1, 1),(1, 1, 1)】L2(b, d),(A=2) and (B=0) or (A>1) and (B=0) and (X/A>1),,,not (A>1) and not (A=2) and not

44、 (X>1) or not (B=0) and not (A=2) and not (X>1),,,,and,or,,A>1,,T,B=0,,T,,X=X/A,,T,,,,,,F,F,A=2,,T,,F,X>1,F,,,X=X+1,,,,,改為單個(gè)條件判定的嵌套結(jié)構(gòu),條件組合覆蓋,條件組合覆蓋就是設(shè)計(jì)足夠的測(cè)試用例,運(yùn)行被測(cè)程序,使得每個(gè)判斷的所有可能的條件取

45、值組合至少執(zhí)行一次。這是一種相當(dāng)強(qiáng)的覆蓋準(zhǔn)則,可以有效地檢查各種可能的條件取值的組合是否正確。它不但可覆蓋所有條件的可能取值的組合,還可覆蓋所有判斷的可取分支,但可能有的路徑會(huì)遺漏掉。測(cè)試還不完全。 記 ① A>1, B=0 作 ② A>1, B≠0 作 ③ A≯1, B=0 作 ④ A≯1, B≠0 作,,⑤ A=2, X>1

46、 作 ⑥ A=2, X≯1 作 ⑦ A≠2, X>1 作 ⑧ A≠2, X≯1 作 測(cè) 試 用 例 覆蓋條件 覆蓋組合【(2, 0, 4), (2, 0, 3)】(L1) ①, ⑤【(2, 1, 1), (2, 1, 2)】(L3) ②, ⑥【(1,

47、0, 3), (1, 0, 4)】(L3) ③, ⑦【(1, 1, 1), (1, 1, 1)】(L2) ④, ⑧,,L4被漏掉了!,路徑測(cè)試,路徑測(cè)試就是設(shè)計(jì)足夠的測(cè)試用例,覆蓋程序中所有可能的路徑。這是最強(qiáng)的覆蓋準(zhǔn)則。但在路徑數(shù)目很大時(shí),真正做到完全覆蓋是很困難的,必須把覆蓋路徑數(shù)目壓縮到一定限度。 測(cè) 試 用 例 通過(guò)路徑

48、 覆蓋條件【(2, 0, 4), (2, 0, 3)】 ace (L1) 【(1, 1, 1), (1, 1, 1)】 abd (L2) 【(1, 1, 2), (1, 1, 3)】 abe (L3) 【(3, 0, 3), (3, 0, 1)】 acd (L4),,條件測(cè)試路徑選擇,當(dāng)程序中判定多于一個(gè)時(shí),形成的分支結(jié)構(gòu)可以分為兩類:嵌套型

49、分支結(jié)構(gòu)和連鎖型分支結(jié)構(gòu)。對(duì)于嵌套型分支結(jié)構(gòu),若有n個(gè)判定語(yǔ)句,需要n+1個(gè)測(cè)試用例;對(duì)于連鎖型分支結(jié)構(gòu), 若有n個(gè)判定語(yǔ)句,需要有2n個(gè)測(cè)試用例,覆蓋它的2n條路徑。,條件測(cè)試路徑選擇,為減少測(cè)試用例的數(shù)目,可采用試驗(yàn)設(shè)計(jì)法,抽取部分路徑進(jìn)行測(cè)試。由于抽樣服從均勻分布,因此,在假定各條路徑的重要性相同,或暫不明確各條路徑的重要性的情況下可以做到均勻抽樣。如果明確了各條路徑的重要性,還可以采取加權(quán)的辦法,篩選掉部分路徑,再用如下的措

50、施進(jìn)行抽樣。具體步驟如下:?。┰O(shè)連鎖型分支結(jié)構(gòu)中有n個(gè)判定,計(jì)算滿足關(guān)系式 n+1≤2m 的最小自然數(shù)m;ⅱ)設(shè)t = 2m,取正交表Lt,并利用它設(shè)計(jì)測(cè)試數(shù)據(jù)。,條件測(cè)試路徑選擇,例如,一個(gè)連鎖型分支結(jié)構(gòu)中有三個(gè)判定語(yǔ)句P1,P2,P3。它全部路徑是23=8 條。先計(jì)算3+1≤2m = t的t,得t = 4。取正交表L4,如圖 所示把每一列當(dāng)做一個(gè)判定,每一行當(dāng)做可取的測(cè)試用例,則正交表L4最多可取三個(gè)判定,分別代之以P1,P2

51、,P3。判定P1,P2,P3的取假分支和取真分支分別記作S1、S2;S3、S4;S5、S6,用各個(gè)判定的取假分支取代正交表L4中的“0”,用取真分支取代正交表中的“1”,就建立起一個(gè)測(cè)試路徑矩陣,如圖 所示。測(cè)試路徑數(shù)目從23=8條減少到3+1=4條。,條件測(cè)試路徑選擇,,正交表L4,路徑抽樣矩陣,條件測(cè)試的策略,程序中的條件分為簡(jiǎn)單條件和復(fù)合條件。簡(jiǎn)單條件是一個(gè)布爾變量或一個(gè)關(guān)系表達(dá)式(可加前綴NOT)復(fù)合條件由簡(jiǎn)單條件通過(guò)邏輯

52、運(yùn)算符(AND、OR、NOT)和括號(hào)連接而成。如果條件出錯(cuò),至少是條件中某一成分有錯(cuò)。條件中可能的出錯(cuò)類型有:布爾運(yùn)算符錯(cuò)、布爾變量錯(cuò)、布爾括號(hào)錯(cuò)、關(guān)系運(yùn)算符錯(cuò)、算術(shù)表達(dá)式錯(cuò)。如果在一個(gè)判定的復(fù)合條件表達(dá)式中每個(gè)布爾變量和關(guān)系運(yùn)算符最多只出現(xiàn)一次,而且沒(méi)有公共變量,應(yīng)用一種稱之為BRO(分支與關(guān)系運(yùn)算符)的測(cè)試法可以發(fā)現(xiàn)多個(gè)布爾運(yùn)算符或關(guān)系運(yùn)算符錯(cuò),以及其它錯(cuò)誤。,條件測(cè)試的策略,BRO策略引入條件約束的概念。設(shè)有n個(gè)簡(jiǎn)單條件的復(fù)合

53、條件C,其條件約束為D =(D1, D2, …, Dn),其中Di(1≤i≤n)是條件C中第i個(gè)簡(jiǎn)單條件的輸出約束。如果在C的執(zhí)行過(guò)程中,其每個(gè)簡(jiǎn)單條件的輸出都滿足D中對(duì)應(yīng)的約束,則稱條件C的條件約束D由C的執(zhí)行所覆蓋。特別地,布爾變量或布爾表達(dá)式的輸出約束必須是真(t)或假(f);關(guān)系表達(dá)式的輸出約束為符號(hào)>、=、<。設(shè)條件為 C1 : B1 & B2,其中B1、B2是布爾變量,C1的輸出約束為(D1, D2),

54、在此,D1和D2或?yàn)閠或?yàn)閒。則(t, f)是C1可能的一個(gè)約束。覆蓋此約束的測(cè)試(一次運(yùn)行)將令B1為t,B2為f。,條件測(cè)試的策略,BRO策略要求對(duì)C1的可能約束集合 { ( t, t ), ( f, t ), ( t, f ) } 中的每一個(gè),分別設(shè)計(jì)一組測(cè)試用例。如果布爾運(yùn)算符有錯(cuò),這三組測(cè)試用例的運(yùn)行結(jié)果必有一組導(dǎo)致C1失敗。設(shè)條件為C2 : B1 & ( E3 = E4 ),其中B1是布爾表達(dá)式,E3和E4是算

55、術(shù)表達(dá)式,C2 的輸出約束為(D1, D2),在此,D1或?yàn)閠或?yàn)閒;D2則是 。因此,只有D2與C1中D2的不同,可以修改C1的約束集合 { ( t, t ), ( f, t ), ( t, f ) },導(dǎo)出C2的約束集合。因?yàn)樵?( E3 = E4 ) 中,"t" 相當(dāng)于 "=","f" 相當(dāng)于 "",則C2的約束集合為 { ( t, = ), ( f,

56、 = ), ( t, ) }。據(jù)此設(shè)計(jì)4組測(cè)試用例,檢查C2中可能的布爾或關(guān)系運(yùn)算符中的錯(cuò)誤。,條件測(cè)試的策略,設(shè)條件為C3 : ( E1 > E2 ) & ( E3 = E4 ),其中E1、E2、E3、E4都是算術(shù)表達(dá)式,C3的輸出約束為(D1, D2),在此,D1和D2的約束均為 。C3 中只有D1與C2中的D1不同,可以修改C2的約束集合 { ( t, = ), ( f, = ), ( t, ) },導(dǎo)出C3的

57、約束集合。因?yàn)樵?( E1 > E2 ) 中,"t" 相當(dāng)于 ">","f" 相當(dāng)于 ", = ), ( , , > ) }。根據(jù)這個(gè)約束集合設(shè)計(jì)測(cè)試用例,就能夠檢測(cè)C3中的關(guān)系運(yùn)算符中的錯(cuò)誤。,循環(huán)測(cè)試路徑選擇,循環(huán)分為4種不同類型:簡(jiǎn)單循環(huán)連鎖循環(huán)嵌套循環(huán)非結(jié)構(gòu)循環(huán)。,(1) 簡(jiǎn)單循環(huán),對(duì)于簡(jiǎn)單循環(huán),測(cè)試應(yīng)包括以下幾種。其中的 n 表示循

58、環(huán)允許的最大次數(shù)。 ① 零次循環(huán):從循環(huán)入口到出口② 一次循環(huán):查找循環(huán)初始值方面的錯(cuò)誤 ③ 二次循環(huán):檢查在多次循環(huán)時(shí)才能暴露的錯(cuò)誤。④ m次循環(huán):此時(shí)的m<n,也是檢查在多次循環(huán)時(shí)才能暴露的錯(cuò)誤。⑤ 最大次數(shù)循環(huán)、比最大次數(shù)多一次、少一次的循環(huán)。,例:求最小值,k = i;for ( j = i+1; j <= n; j++ ) if ( A[j] < A[k] ) k = j;,k = i

59、; j = i+1;,,,,,j <= n?,,,,,,A[j]<A[k]?,,,,,k = j,,,j ++,,,,,,,,,f,d,c,a,b,e,測(cè)試用例選擇,,對(duì)于嵌套循環(huán),不能將簡(jiǎn)單循環(huán)的測(cè)試方法簡(jiǎn)單地?cái)U(kuò)大到嵌套循環(huán),因?yàn)榭赡艿臏y(cè)試數(shù)目將隨嵌套層次的增加呈幾何倍數(shù)增長(zhǎng)。這可能導(dǎo)致一個(gè)天文數(shù)字的測(cè)試數(shù)目。下面給出一種有助于減少測(cè)試數(shù)目的測(cè)試方法。 ① 對(duì)最內(nèi)層循環(huán)做簡(jiǎn)單循環(huán)的全部測(cè)試。所有其它層的循環(huán)變量置為最小

60、值;② 逐步外推,對(duì)其外面一層循環(huán)進(jìn)行測(cè)試。測(cè)試時(shí)保持所有外層循環(huán)的循環(huán)變量取最小值,所有其它嵌套內(nèi)層循環(huán)的循環(huán)變量取“典型”值。③ 反復(fù)進(jìn)行,直到所有各層循環(huán)測(cè)試完畢。④ 對(duì)全部各層循環(huán)同時(shí)取最小循環(huán)次數(shù),或者同時(shí)取最大循環(huán)次數(shù),(2) 嵌套循環(huán),要區(qū)別兩種情況:如果各個(gè)循環(huán)互相獨(dú)立,則連鎖循環(huán)可以用與簡(jiǎn)單循環(huán)相同的方法進(jìn)行測(cè)試。例如,有兩個(gè)循環(huán)處于連鎖狀態(tài),則前一個(gè)循環(huán)的循環(huán)變量的值就可以做為后一個(gè)循環(huán)的初值。但如果幾個(gè)循

61、環(huán)不是互相獨(dú)立的,則需要使用測(cè)試嵌套循環(huán)的辦法來(lái)處理。對(duì)于非結(jié)構(gòu)循環(huán),應(yīng)該使用結(jié)構(gòu)化程序設(shè)計(jì)方法重新設(shè)計(jì)測(cè)試用例。,(3) 連鎖循環(huán),基本路徑測(cè)試,基本路徑測(cè)試方法把覆蓋的路徑數(shù)壓縮到一定限度內(nèi),程序中的循環(huán)體最多只執(zhí)行一次。它是在程序控制流圖的基礎(chǔ)上,分析控制構(gòu)造的環(huán)路復(fù)雜性,導(dǎo)出基本可執(zhí)行路徑集合,設(shè)計(jì)測(cè)試用例的方法。設(shè)計(jì)出的測(cè)試用例要保證在測(cè)試中,程序的每一個(gè)可執(zhí)行語(yǔ)句至少要執(zhí)行一次。,1. 程序的控制流圖,符號(hào)○為控制流

62、圖的一個(gè)結(jié)點(diǎn),表示一個(gè)或多個(gè)無(wú)分支的PDL語(yǔ)句或源程序語(yǔ)句。箭頭為邊,表示控制流的方向。,在選擇或多分支結(jié)構(gòu)中,分支的匯聚處應(yīng)有一個(gè)匯聚結(jié)點(diǎn)。邊和結(jié)點(diǎn)圈定的區(qū)域叫做區(qū)域,當(dāng)對(duì)區(qū)域計(jì)數(shù)時(shí),圖形外的區(qū)域也應(yīng)記為一個(gè)區(qū)域。如果判斷中的條件表達(dá)式是由一個(gè)或多個(gè)邏輯運(yùn)算符 (OR, AND, ...) 連接的復(fù)合條件表達(dá)式,則需改為 一系列只有單個(gè)條件的嵌套的判斷。,,2. 程序環(huán)路復(fù)雜性,程序的環(huán)路復(fù)雜性給出了程序基本路徑集中的獨(dú)立路徑

63、條數(shù),這是確保程序中每個(gè)可執(zhí)行語(yǔ)句至少執(zhí)行一次所必需的測(cè)試用例數(shù)目的上界。從控制流圖來(lái)看,一條獨(dú)立路徑是至少包含有一條在其它獨(dú)立路徑中從未有過(guò)的邊的路徑。,例如,在圖示的控制流圖中,一組獨(dú)立的路徑是path1:1 - 11path2:1 - 2 - 3 - 4 - 5 - 10 - 1 - 11path3:1 - 2 - 3 - 6 - 8 - 9 - 10 - 1 - 11path4:1 - 2 - 3 - 6 - 7 -

64、9 - 10 - 1 - 11路徑 path1,path2,path3,path4組成了控制流圖的一個(gè)基本路徑集。只要設(shè)計(jì)出的測(cè)試用例能夠確保這些基本路徑的執(zhí)行,就可以使得程序中的每個(gè)可執(zhí)行語(yǔ)句至少執(zhí)行一次,每個(gè)條件的取真和取假分支也能得到測(cè)試?;韭窂郊皇俏ㄒ坏?,對(duì)于給定的控制流圖,可以得到不同的基本路徑集。,,通常環(huán)路復(fù)雜性可用以下三種方法求得:將環(huán)路復(fù)雜性定義為控制流圖中的區(qū)域數(shù)。設(shè)E為控制流圖的邊數(shù),N為圖的結(jié)點(diǎn)數(shù)

65、,則定義環(huán)路復(fù)雜性為 V(G)=E-N+2。若設(shè)P為控制流圖中的判定結(jié)點(diǎn)數(shù),則有 V(G)=P+1。因?yàn)閳D所示控制流圖有4個(gè)區(qū)域。其環(huán)路復(fù)雜性為4。它是構(gòu)成基本路徑集的獨(dú)立路徑數(shù)的上界??梢該?jù)此得到應(yīng)該設(shè)計(jì)的測(cè)試用例的數(shù)目。,3. 導(dǎo)出測(cè)試用例,導(dǎo)出測(cè)試用例,確保基本路徑集中的每一條路徑的執(zhí)行。 根據(jù)判斷結(jié)點(diǎn)給出的條件,選擇適當(dāng)?shù)臄?shù)據(jù)以保證某一條路徑可以被測(cè)試到 — 用邏輯覆蓋方法。,每個(gè)測(cè)試用例執(zhí)行之后,與預(yù)期結(jié)果進(jìn)行比較。如

66、果所有測(cè)試用例都執(zhí)行完畢,則可以確信程序中所有的可執(zhí)行語(yǔ)句至少被執(zhí)行了一次。必須注意,一些獨(dú)立的路徑(如例中的路徑1),往往不是完全孤立的,有時(shí)它是程序正常的控制流的一部分,這時(shí),這些路徑的測(cè)試可以是另一條路徑測(cè)試的一部分。,黑盒測(cè)試的測(cè)試用例設(shè)計(jì),等價(jià)類劃分 邊界值分析 錯(cuò)誤推測(cè)法 因果圖,等價(jià)類劃分,等價(jià)類劃分是一種典型的黑盒測(cè)試方法,使用這一方法時(shí),完全不考慮程序的內(nèi)部結(jié)構(gòu),只依據(jù)程序的規(guī)格說(shuō)明來(lái)設(shè)計(jì)測(cè)試用例。由于不可能用

67、所有可以輸入的數(shù)據(jù)來(lái)測(cè)試程序,而只能從全部可供輸入的數(shù)據(jù)中選擇一個(gè)子集進(jìn)行測(cè)試。如何選擇適當(dāng)?shù)淖蛹蛊浔M可能多地發(fā)現(xiàn)錯(cuò)誤。解決的辦法之一就是等價(jià)類劃分。首先把數(shù)目極多的輸入數(shù)據(jù)(有效的和無(wú)效的)劃分為若干等價(jià)類。所謂等價(jià)類是指某個(gè)輸入域的子集合。在該子集合中,各個(gè)輸入數(shù)據(jù)對(duì)于揭露程序中的錯(cuò)誤都是等效的。并合理地假定:測(cè)試某等價(jià)類的代表值就等價(jià)于對(duì)這一類其它值的測(cè)試。因此,我們可以把全部輸入數(shù)據(jù)合理劃分為若干等價(jià)類,在每一個(gè)等價(jià)

68、類中取一個(gè)數(shù)據(jù)做為測(cè)試的輸入條件,就可用少量代表性測(cè)試數(shù)據(jù),取得較好的測(cè)試效果。,使用這一方法設(shè)計(jì)測(cè)試用例要經(jīng)歷劃分等價(jià)類(列出等價(jià)類表)和選取測(cè)試用例兩步。劃分等價(jià)類等價(jià)類是指某個(gè)輸入域的子集合。在該子集合中,各個(gè)輸入數(shù)據(jù)對(duì)于揭露程序中的錯(cuò)誤都是等效的。測(cè)試某等價(jià)類的代表值就等價(jià)于對(duì)這一類其它值的測(cè)試。,等價(jià)類的劃分有兩種不同的情況:① 有效等價(jià)類:是指對(duì)于程序的規(guī)格說(shuō)明來(lái)說(shuō),是合理的,有意義的輸入數(shù)據(jù)構(gòu)成的集合。 ② 無(wú)

69、效等價(jià)類:是指對(duì)于程序的規(guī)格說(shuō)明來(lái)說(shuō),是不合理的,無(wú)意義的輸入數(shù)據(jù)構(gòu)成的集合。在設(shè)計(jì)測(cè)試用例時(shí),要同時(shí)考慮有效等價(jià)類和無(wú)效等價(jià)類的設(shè)計(jì)。軟件不能都只接收合理的數(shù)據(jù),還要經(jīng)受意外的考驗(yàn),接受無(wú)效的或不合理的數(shù)據(jù),這樣獲得的軟件才能具有較高的可靠性。,劃分等價(jià)類等價(jià)類的原則。(1)按區(qū)間劃分:如果輸入條件規(guī)定了取值范圍,或值的個(gè)數(shù),則可以確立一個(gè)有效等價(jià)類和兩個(gè)無(wú)效等價(jià)類。,例如,在程序的規(guī)格說(shuō)明中,對(duì)輸入條件有一句話: “…… 項(xiàng)數(shù)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論