版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
軟件測(cè)試?yán)碚摵头椒?全面推薦)第一頁(yè),共575頁(yè)。軟件測(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è)試工作流第二頁(yè),共575頁(yè)。軟件測(cè)試的目的和原則軟件測(cè)試的目的軟件測(cè)試的原則軟件測(cè)試的對(duì)象測(cè)試信息流測(cè)試與軟件開(kāi)發(fā)各階段的關(guān)系第三頁(yè),共575頁(yè)。軟件測(cè)試的目的基于不同的立場(chǎng),存在著兩種完全不同的測(cè)試目的。從用戶的角度出發(fā),普遍希望通過(guò)軟件測(cè)試暴露軟件中隱藏的錯(cuò)誤和缺陷,以考慮是否可接受該產(chǎn)品。從軟件開(kāi)發(fā)者的角度出發(fā),則希望測(cè)試成為表明軟件產(chǎn)品中不存在錯(cuò)誤的過(guò)程,驗(yàn)證該軟件已正確地實(shí)現(xiàn)了用戶的要求,確立人們對(duì)軟件質(zhì)量的信心。第四頁(yè),共575頁(yè)。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è)試。第五頁(yè),共575頁(yè)。換言之,測(cè)試的目的是想以最少的時(shí)間和人力,系統(tǒng)地找出軟件中潛在的各種錯(cuò)誤和缺陷。如果我們成功地實(shí)施了測(cè)試,我們就能夠發(fā)現(xiàn)軟件中的錯(cuò)誤。測(cè)試的附帶收獲是,它能夠證明軟件的功能和性能與需求說(shuō)明相符合。實(shí)施測(cè)試收集到的測(cè)試結(jié)果數(shù)據(jù)為可靠性分析提供了依據(jù)。
測(cè)試不能表明軟件中不存在錯(cuò)誤,它只能說(shuō)明軟件中存在錯(cuò)誤。
第六頁(yè),共575頁(yè)。軟件測(cè)試的原則1.測(cè)試計(jì)劃可以在需求模型一完成就開(kāi)始,詳細(xì)的測(cè)試用例定義可以在設(shè)計(jì)模型被確定后立刻開(kāi)始。因此所有測(cè)試可以在任何代碼被產(chǎn)生前進(jìn)行計(jì)劃和設(shè)計(jì)。應(yīng)當(dāng)把“盡早地和不斷地進(jìn)行軟件測(cè)試”作為軟件開(kāi)發(fā)者的座右銘。2.所有的測(cè)試都應(yīng)追溯到用戶需求。軟件測(cè)試的目標(biāo)在于揭示錯(cuò)誤,而最嚴(yán)重的錯(cuò)誤(從用戶角度看)是那些導(dǎo)致程序無(wú)法滿足需求的錯(cuò)誤。第七頁(yè),共575頁(yè)。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è)試7。窮舉測(cè)試是不可能的,然而充分覆蓋程序邏輯,并確保程序設(shè)計(jì)中使用的所有條件是有可能的。軟件測(cè)試的原則第八頁(yè),共575頁(yè)。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è)試的隨意性。應(yīng)當(dāng)對(duì)每一個(gè)測(cè)試結(jié)果做全面檢查。妥善保存測(cè)試計(jì)劃,測(cè)試用例,出錯(cuò)統(tǒng)計(jì)和最終分析報(bào)告,為維護(hù)提供方便。軟件測(cè)試的原則第九頁(yè),共575頁(yè)。
軟件測(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ì)象。第十頁(yè),共575頁(yè)。為把握軟件開(kāi)發(fā)各個(gè)環(huán)節(jié)的正確性,需要進(jìn)行各種確認(rèn)和驗(yàn)證工作。確認(rèn)(Validation),是一系列的活動(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)性、完備性和正確性。第十一頁(yè),共575頁(yè)。第十二頁(yè),共575頁(yè)。測(cè)試信息流第十三頁(yè),共575頁(yè)。測(cè)試信息流軟件配置:軟件需求規(guī)格說(shuō)明、軟件設(shè)計(jì)規(guī)格說(shuō)明、源代碼等;測(cè)試配置:測(cè)試計(jì)劃、測(cè)試用例、測(cè)試程序等;測(cè)試工具:測(cè)試數(shù)據(jù)自動(dòng)生成程序、靜態(tài)分析程序、動(dòng)態(tài)分析程序、測(cè)試結(jié)果分析程序、以及驅(qū)動(dòng)測(cè)試的測(cè)試數(shù)據(jù)庫(kù)等等。第十四頁(yè),共575頁(yè)。測(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è)試為止。第十五頁(yè),共575頁(yè)。通過(guò)收集和分析測(cè)試結(jié)果數(shù)據(jù),對(duì)軟件建立可靠性模型利用可靠性分析,評(píng)價(jià)軟件質(zhì)量:
軟件的質(zhì)量和可靠性達(dá)到可以接受的程度;
所做的測(cè)試不足以發(fā)現(xiàn)嚴(yán)重的錯(cuò)誤;如果測(cè)試發(fā)現(xiàn)不了錯(cuò)誤,可以肯定,測(cè)試配置考慮得不夠細(xì)致充分,錯(cuò)誤仍然潛伏在軟件中。這些錯(cuò)誤最終不得不由用戶在使用中發(fā)現(xiàn),并在維護(hù)時(shí)由開(kāi)發(fā)者去改正。但那時(shí)改正錯(cuò)誤的費(fèi)用將比在開(kāi)發(fā)階段改正錯(cuò)誤的費(fèi)用要高出40倍到60倍。
第十六頁(yè),共575頁(yè)。測(cè)試與軟件開(kāi)發(fā)各階段的關(guān)系軟件開(kāi)發(fā)過(guò)程是一個(gè)自頂向下,逐步細(xì)化的過(guò)程軟件計(jì)劃階段定義軟件作用域軟件需求分析建立軟件信息域、功能和性能需求、約束等軟件設(shè)計(jì)把設(shè)計(jì)用某種程序設(shè)計(jì)語(yǔ)言轉(zhuǎn)換成程序代碼
第十七頁(yè),共575頁(yè)。測(cè)試過(guò)程是依相反順序安排的自底向上,逐步集成的過(guò)程。返第十八頁(yè),共575頁(yè)。傳統(tǒng)測(cè)試過(guò)程建立設(shè)計(jì)測(cè)試測(cè)試生命周期第十九頁(yè),共575頁(yè)。建立1建立2建立3建立4用戶改進(jìn)迭代測(cè)試測(cè)試測(cè)試測(cè)試測(cè)試需要盡早的開(kāi)始設(shè)計(jì)無(wú)須
“凍結(jié)”規(guī)格測(cè)試生命周期第二十頁(yè),共575頁(yè)。規(guī)格測(cè)試規(guī)格1建立2建立3建立4測(cè)試規(guī)格2測(cè)試規(guī)格3測(cè)試規(guī)格4建立1測(cè)試生命周期第二十一頁(yè),共575頁(yè)。開(kāi)發(fā)生命周期...
維護(hù)需求定義應(yīng)用定義應(yīng)用開(kāi)發(fā)修訂建立
建立測(cè)試生命周期第二十二頁(yè),共575頁(yè)。開(kāi)發(fā)生命周期...
維護(hù)需求定義應(yīng)用定義應(yīng)用開(kāi)發(fā)
修訂
建立
建立測(cè)試生命周期...執(zhí)行.執(zhí)行執(zhí)行.測(cè)試計(jì)劃缺陷跟蹤測(cè)試開(kāi)發(fā)測(cè)試設(shè)計(jì)評(píng)估測(cè)試生命周期第二十三頁(yè),共575頁(yè)。...執(zhí)行.執(zhí)行測(cè)試計(jì)劃缺陷跟蹤測(cè)試開(kāi)發(fā)測(cè)試設(shè)計(jì)評(píng)估建立
建立...執(zhí)行
建立測(cè)試生命周期測(cè)試計(jì)劃定義測(cè)試項(xiàng)目的過(guò)程,以便測(cè)試項(xiàng)目能被正確的度量和控制。包括測(cè)試需求,測(cè)試策略,測(cè)試資源和測(cè)試計(jì)劃第二十四頁(yè),共575頁(yè)。...執(zhí)行.執(zhí)行..測(cè)試計(jì)劃缺陷跟蹤測(cè)試開(kāi)發(fā)測(cè)試設(shè)計(jì)評(píng)估
建立建立...執(zhí)行..建立測(cè)試生命周期測(cè)試設(shè)計(jì)為了最有效的驗(yàn)證測(cè)試需求被覆蓋,定義自動(dòng)的測(cè)試第二十五頁(yè),共575頁(yè)。...執(zhí)行..執(zhí)行.測(cè)試計(jì)劃缺陷跟蹤測(cè)試開(kāi)發(fā)測(cè)試設(shè)計(jì)評(píng)估建立
建立...執(zhí)行..建立測(cè)試生命周期測(cè)試開(kāi)發(fā)在測(cè)試設(shè)計(jì)期間已被定義,創(chuàng)建或獲得自動(dòng)的測(cè)試過(guò)程.第二十六頁(yè),共575頁(yè)。...執(zhí)行..執(zhí)行..測(cè)試計(jì)劃缺陷跟蹤測(cè)試開(kāi)發(fā)測(cè)試設(shè)計(jì)評(píng)估建立建立...執(zhí)行..建立測(cè)試生命周期測(cè)試執(zhí)行運(yùn)行與被測(cè)試應(yīng)用的軟件構(gòu)造相對(duì)應(yīng)的測(cè)試過(guò)程集,并記錄結(jié)果日志,包括缺陷報(bào)告和測(cè)試日志。第二十七頁(yè),共575頁(yè)。...執(zhí)行.執(zhí)行.測(cè)試計(jì)劃缺陷跟蹤測(cè)試開(kāi)發(fā)測(cè)試設(shè)計(jì)評(píng)估建立建立...執(zhí)行.建立測(cè)試生命周期測(cè)試評(píng)估分析測(cè)試結(jié)果,確定是否測(cè)試標(biāo)準(zhǔn)被覆蓋的過(guò)程.第二十八頁(yè),共575頁(yè)。...執(zhí)行.執(zhí)行.測(cè)試計(jì)劃缺陷跟蹤測(cè)試開(kāi)發(fā)測(cè)試設(shè)計(jì)評(píng)估建立建立...執(zhí)行.建立測(cè)試生命周期缺陷跟蹤初始記錄測(cè)試故障或用戶問(wèn)題,檢查測(cè)試故障以及提供解決它們的結(jié)構(gòu)的過(guò)程。第二十九頁(yè),共575頁(yè)。測(cè)試人員項(xiàng)目持續(xù)時(shí)間
測(cè)試人員100%50%0%完成比率代碼實(shí)現(xiàn)消除缺陷質(zhì)量問(wèn)題延遲上市維護(hù)的費(fèi)用1x10x100x軟件測(cè)試重要性第三十頁(yè),共575頁(yè)。項(xiàng)目持續(xù)時(shí)間
100%50%0%完成比率消除缺陷消除缺陷保證軟件質(zhì)量縮短上市時(shí)間軟件測(cè)試重要性第三十一頁(yè),共575頁(yè)。系統(tǒng)性能應(yīng)用性能功能可靠性100%軟件測(cè)試重要性第三十二頁(yè),共575頁(yè)。風(fēng)險(xiǎn)代碼完成可靠性功能應(yīng)用性能系統(tǒng)性能風(fēng)險(xiǎn)越早測(cè)試越好自動(dòng)的測(cè)試測(cè)試每一個(gè)版本
傳統(tǒng)的測(cè)試是在代碼實(shí)現(xiàn)之后進(jìn)行
軟件測(cè)試重要性第三十三頁(yè),共575頁(yè)。程序錯(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)的行為因錯(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)的損失。第三十四頁(yè),共575頁(yè)。(2)按錯(cuò)誤的性質(zhì)和范圍分類。B.Beizer從軟件測(cè)試觀點(diǎn)出發(fā),把軟件錯(cuò)誤分為5類。①功能錯(cuò)誤
規(guī)格說(shuō)明錯(cuò)誤:規(guī)格說(shuō)明可能不完全,有二義性或自身矛盾。功能錯(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ò)的可能就大。第三十五頁(yè),共575頁(yè)。②系統(tǒng)錯(cuò)誤外部接口錯(cuò)誤:外部接口指如終端、打印機(jī)、通信線路等系統(tǒng)與外部環(huán)境通信的手段。所有外部接口之間,人與機(jī)器之間的通信都使用形式的或非形式的專門(mén)協(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ò)。第三十六頁(yè),共575頁(yè)。操作系統(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)部鎖;錯(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ì)列中等等。第三十七頁(yè),共575頁(yè)。③加工錯(cuò)誤算術(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)返回和終止的條件不正確;漏掉處理步驟或處理步驟有錯(cuò)等。靜態(tài)邏輯錯(cuò)誤:這類錯(cuò)誤主要包括:不正確地使用CASE語(yǔ)句;在表達(dá)式中使用不正確的否定(例如用“>”代替“<”的否定);對(duì)情況不適當(dāng)?shù)胤纸馀c組合;混淆“或”與“異或”等。第三十八頁(yè),共575頁(yè)。④數(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),因此要發(fā)現(xiàn)這類錯(cuò)誤比較困難。靜態(tài)數(shù)據(jù)錯(cuò)誤:靜態(tài)數(shù)據(jù)在內(nèi)容和格式上都是固定的。它們直接或間接地出現(xiàn)在程序或數(shù)據(jù)庫(kù)中。由編譯程序或其它專門(mén)程序?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ù)元素的大小和組織形式。在同一存儲(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ò)誤等。第三十九頁(yè),共575頁(yè)。⑤代碼錯(cuò)誤,主要包括語(yǔ)法錯(cuò)誤打字錯(cuò)誤對(duì)語(yǔ)句或指令不正確理解所產(chǎn)生的錯(cuò)誤。第四十頁(yè),共575頁(yè)。(3)按軟件生存期階段分類,Gerhart分類方法把軟件的邏輯錯(cuò)誤按生存期不同階段分為4類。①問(wèn)題定義(需求分析)錯(cuò)誤:它們是在軟件定義階段,分析員研究用戶的要求后所編寫(xiě)的文檔中出現(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)題定義相比是多余的。不完整性錯(cuò)誤:規(guī)格說(shuō)明中缺少某些必要的功能說(shuō)明。不可行錯(cuò)誤:規(guī)格說(shuō)明中有些功能要求是不可行的。不可測(cè)試錯(cuò)誤:有些功能的測(cè)試要求是不現(xiàn)實(shí)的。第四十一頁(yè),共575頁(yè)。③設(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ò)誤:模塊結(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ō)明要求。第四十二頁(yè),共575頁(yè)。④編碼錯(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è)。第四十三頁(yè),共575頁(yè)。測(cè)試用例設(shè)計(jì)兩種常用的測(cè)試方法黑盒測(cè)試白盒測(cè)試第四十四頁(yè),共575頁(yè)。黑盒測(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è)試。第四十五頁(yè),共575頁(yè)。黑盒測(cè)試方法是在程序接口上進(jìn)行測(cè)試,主要是為了發(fā)現(xiàn)以下錯(cuò)誤:
是否有不正確或遺漏了的功能?
在接口上,輸入能否正確地接受?能否輸出正確的結(jié)果?
是否有數(shù)據(jù)結(jié)構(gòu)錯(cuò)誤或外部信息(例如數(shù)據(jù)文件)訪問(wèn)錯(cuò)誤?
性能上是否能夠滿足要求?
是否有初始化或終止性錯(cuò)誤?
第四十六頁(yè),共575頁(yè)。用黑盒測(cè)試發(fā)現(xiàn)程序中的錯(cuò)誤,必須在所有可能的輸入條件和輸出條件中確定測(cè)試數(shù)據(jù),來(lái)檢查程序是否都能產(chǎn)生正確的輸出。但這是不可能的。第四十七頁(yè),共575頁(yè)。假設(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ù)需要1毫秒,一年工作365×24小時(shí),完成所有測(cè)試需5億年。第四十八頁(yè),共575頁(yè)。白盒測(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è)試。第四十九頁(yè),共575頁(yè)。軟件人員使用白盒測(cè)試方法,主要想對(duì)程序模塊進(jìn)行如下的檢查:對(duì)程序模塊的所有獨(dú)立的執(zhí)行路徑至少測(cè)試一次;對(duì)所有的邏輯判定,取“真”與取“假”的兩種情況都至少測(cè)試一次;在循環(huán)的邊界和運(yùn)行界限內(nèi)執(zhí)行循環(huán)體;測(cè)試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性,等。第五十頁(yè),共575頁(yè)。對(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年。第五十一頁(yè),共575頁(yè)。第五十二頁(yè),共575頁(yè)。為什么進(jìn)行白盒測(cè)試?一個(gè)合理的問(wèn)題:“我們應(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ù)流的一些無(wú)意識(shí)的假設(shè)可能導(dǎo)致設(shè)計(jì)錯(cuò)誤,只有路徑測(cè)試能發(fā)現(xiàn)這種錯(cuò)誤。;印刷上的錯(cuò)誤是隨機(jī)的。程序員可能會(huì)產(chǎn)生某些拼寫(xiě)錯(cuò)誤,絕大多數(shù)可以在編譯時(shí)被發(fā)現(xiàn),但是,有些在測(cè)試時(shí)才會(huì)被發(fā)現(xiàn)。黑盒測(cè)試,不管它多全面,都可能忽略前面提到的某些類型的錯(cuò)誤“錯(cuò)誤潛伏在角落里,聚集在邊界上”。白盒測(cè)試更可能發(fā)現(xiàn)它們!第五十三頁(yè),共575頁(yè)。邏輯覆蓋
語(yǔ)句覆蓋
判定覆蓋條件覆蓋
判定-條件覆蓋
條件組合覆蓋
路徑覆蓋。邏輯覆蓋是以程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)的設(shè)計(jì)測(cè)試用例的技術(shù)。它屬白盒測(cè)試。第五十四頁(yè),共575頁(yè)。例(A>1)
and
(B=0)(A=2)
or
(X>1)X=X/AX=X+1TTFFabdce第五十五頁(yè),共575頁(yè)。L1(ace)={(A>1)and(B=0)}and{(A=2)or(X/A>1)}=(A>1)and(B=0)and(A=2)or(A>1)and(B=0)and(X/A>1)=(A=2)and(B=0)
or
(A>1)and(B=0)and(X/A>1)
第五十六頁(yè),共575頁(yè)。L2(abd)=not{(A>1)and(B=0)}
andnot{(A=2)or(X>1)}={not(A>1)ornot(B=0)}and
{not(A=2)andnot(X>1)}=
not(A>1)andnot(A=2)andnot(X>1)
or
not(B=0)and
not(A=2)andnot(X>1)第五十七頁(yè),共575頁(yè)。L3(abe)=not{(A>1)and(B=0)}and
{(A=2)or(X>1)}={not(A>1)ornot(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)第五十八頁(yè),共575頁(yè)。L4(acd)={(A>1)and(B=0)}
andnot
{(A=2)or(X/A>1)}=(A>1)and(B=0)andnot(A=2)and
not(X/A>1)第五十九頁(yè),共575頁(yè)。語(yǔ)句覆蓋
語(yǔ)句覆蓋就是設(shè)計(jì)若干個(gè)測(cè)試用例,運(yùn)行被測(cè)程序,使得每一可執(zhí)行語(yǔ)句至少執(zhí)行一次。這種覆蓋又稱為點(diǎn)覆蓋,它使得程序中每個(gè)可執(zhí)行語(yǔ)句都得到執(zhí)行,但它是最弱的邏輯覆蓋準(zhǔn),效果有限,必須與其它方法交互使用。在圖例中,正好所有的可執(zhí)行語(yǔ)句都在路徑L1上,所以選擇路徑L1設(shè)計(jì)測(cè)試用例,就可以覆蓋所有的可執(zhí)行語(yǔ)句。
第六十頁(yè),共575頁(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>1)
第六十一頁(yè),共575頁(yè)。
判定覆蓋判定覆蓋就是設(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è)試用例:第六十二頁(yè),共575頁(yè)?!?2,0,4),(2,0,3)】覆蓋ace【L1】
【(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)andnot(A=2)andnot(X>1)
ornot(B=0)and
not(A=2)andnot(X>1)第六十三頁(yè),共575頁(yè)。如果選擇路徑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)
ornot(B=0)and
(A=2)
ornot(B=0)and(X>1)(A>1)and(B=0)andnot(A=2)and
not(X/A>1)第六十四頁(yè),共575頁(yè)。條件覆蓋條件覆蓋就是設(shè)計(jì)若干個(gè)測(cè)試用例,運(yùn)行被測(cè)程序,使得程序中每個(gè)判斷的每個(gè)條件的可能取值至少執(zhí)行一次。條件覆蓋深入到判定中的每個(gè)條件,但可能不能滿足判定覆蓋的要求。
在圖例中,我們事先可對(duì)所有條件的取值加以標(biāo)記。例如,對(duì)于第一個(gè)判斷:條件A>1取真為,取假為
條件B=0取真為,取假為
第六十五頁(yè),共575頁(yè)。對(duì)于第二個(gè)判斷:條件A=2取真為,取假為
條件X>1取真為,取假為測(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)或第六十六頁(yè),共575頁(yè)。
測(cè)試用例
覆蓋分支
條件取值【(1,0,3),(1,0,4)】L3(b,e)【(2,1,1),(2,1,2)】L3(b,e)
第六十七頁(yè),共575頁(yè)。判定-條件覆蓋判定-條件覆蓋就是設(shè)計(jì)足夠的測(cè)試用例,使得判斷中每個(gè)條件的所有可能取值至少執(zhí)行一次,每個(gè)判斷中的每個(gè)條件的可能取值至少執(zhí)行一次。換言之,即是要求各個(gè)判斷的所有可能的條件取值組合至少執(zhí)行一次。
判定-條件覆蓋有缺陷。從表面上來(lái)看,它測(cè)試了所有條件的取值。但是事實(shí)并非如此。往往某些條件掩蓋了另一些條件。會(huì)遺漏某些條件取值錯(cuò)誤的情況。為徹底地檢查所有條件的取值,需要將判定語(yǔ)句中給出的復(fù)合條件表達(dá)式進(jìn)行分解,形成由多個(gè)基本判定嵌套的流程圖。這樣就可以有效地檢查所有的條件是否正確了。
第六十八頁(yè),共575頁(yè)。
測(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)andnot(A=2)andnot(X>1)
ornot(B=0)and
not(A=2)andnot(X>1)第六十九頁(yè),共575頁(yè)。
andorA>1TB=0TX=X/ATFFA=2TFX>1FX=X+1
改為單個(gè)條件判定的嵌套結(jié)構(gòu)第七十頁(yè),共575頁(yè)。條件組合覆蓋條件組合覆蓋就是設(shè)計(jì)足夠的測(cè)試用例,運(yùn)行被測(cè)程序,使得每個(gè)判斷的所有可能的條件取值組合至少執(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作第七十一頁(yè),共575頁(yè)。
⑤A=2,X>1作
⑥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,0,3),(1,0,4)】(L3) ③,⑦【(1,1,1),(1,1,1)】(L2) ④,⑧L4被漏掉了!第七十二頁(yè),共575頁(yè)。路徑測(cè)試路徑測(cè)試就是設(shè)計(jì)足夠的測(cè)試用例,覆蓋程序中所有可能的路徑。這是最強(qiáng)的覆蓋準(zhǔn)則。但在路徑數(shù)目很大時(shí),真正做到完全覆蓋是很困難的,必須把覆蓋路徑數(shù)目壓縮到一定限度。
測(cè)試用例
通過(guò)路徑
覆蓋條件【(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)
第七十三頁(yè),共575頁(yè)。
條件測(cè)試路徑選擇
當(dāng)程序中判定多于一個(gè)時(shí),形成的分支結(jié)構(gòu)可以分為兩類:嵌套型分支結(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條路徑。第七十四頁(yè),共575頁(yè)。第七十五頁(yè),共575頁(yè)。
條件測(cè)試路徑選擇
為減少測(cè)試用例的數(shù)目,可采用試驗(yàn)設(shè)計(jì)法,抽取部分路徑進(jìn)行測(cè)試。由于抽樣服從均勻分布,因此,在假定各條路徑的重要性相同,或暫不明確各條路徑的重要性的情況下可以做到均勻抽樣。如果明確了各條路徑的重要性,還可以采取加權(quán)的辦法,篩選掉部分路徑,再用如下的措施進(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ù)。第七十六頁(yè),共575頁(yè)。
條件測(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,P3。判定P1,P2,P3的取假分支和取真分支分別記作S1、S2;S3、S4;S5、S6,用各個(gè)判定的取假分支取代正交表L4中的“0”,用取真分支取代正交表中的“1”,就建立起一個(gè)測(cè)試路徑矩陣,如圖所示。測(cè)試路徑數(shù)目從23=8條減少到3+1=4條。
第七十七頁(yè),共575頁(yè)。
條件測(cè)試路徑選擇
正交表L4路徑抽樣矩陣第七十八頁(yè),共575頁(yè)。
條件測(cè)試的策略
程序中的條件分為簡(jiǎn)單條件和復(fù)合條件。簡(jiǎn)單條件是一個(gè)布爾變量或一個(gè)關(guān)系表達(dá)式(可加前綴NOT)復(fù)合條件由簡(jiǎn)單條件通過(guò)邏輯運(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ò)誤。第七十九頁(yè),共575頁(yè)。
條件測(cè)試的策略
BRO策略引入條件約束的概念。設(shè)有n個(gè)簡(jiǎn)單條件的復(fù)合條件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),在此,D1和D2或?yàn)閠或?yàn)閒。則(t,f)是C1可能的一個(gè)約束。覆蓋此約束的測(cè)試(一次運(yùn)行)將令B1為t,B2為f。第八十頁(yè),共575頁(yè)。
條件測(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是算術(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,=),(t,<),(t,>)}。據(jù)此設(shè)計(jì)4組測(cè)試用例,檢查C2中可能的布爾或關(guān)系運(yùn)算符中的錯(cuò)誤。第八十一頁(yè),共575頁(yè)。
條件測(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,<),(t,>)},導(dǎo)出C3的約束集合。因?yàn)樵?E1>E2)中,"t"相當(dāng)于">","f"相當(dāng)于"<"或"=",則C3的約束集合為{(>,=),(<,=),(=,=),(>,<),(>,>)}。根據(jù)這個(gè)約束集合設(shè)計(jì)測(cè)試用例,就能夠檢測(cè)C3中的關(guān)系運(yùn)算符中的錯(cuò)誤。第八十二頁(yè),共575頁(yè)。循環(huán)測(cè)試路徑選擇循環(huán)分為4種不同類型:簡(jiǎn)單循環(huán)連鎖循環(huán)嵌套循環(huán)非結(jié)構(gòu)循環(huán)。
第八十三頁(yè),共575頁(yè)。第八十四頁(yè),共575頁(yè)。(1)簡(jiǎn)單循環(huán)對(duì)于簡(jiǎn)單循環(huán),測(cè)試應(yīng)包括以下幾種。其中的n
表示循環(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)。第八十五頁(yè),共575頁(yè)。例:求最小值k=i;for(j=i+1;j<=n;j++)
if(A[j]<A[k])k=j;
第八十六頁(yè),共575頁(yè)。k=i;j=i+1;j<=n?A[j]<A[k]?k=jj++fdcabe第八十七頁(yè),共575頁(yè)。測(cè)試用例選擇第八十八頁(yè),共575頁(yè)。
對(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)變量置為最小值;②逐步外推,對(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)第八十九頁(yè),共575頁(yè)。要區(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è)循環(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)第九十頁(yè),共575頁(yè)。基本路徑測(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í)行一次。
第九十一頁(yè),共575頁(yè)。1.程序的控制流圖符號(hào)○為控制流圖的一個(gè)結(jié)點(diǎn),表示一個(gè)或多個(gè)無(wú)分支的PDL語(yǔ)句或源程序語(yǔ)句。箭頭為邊,表示控制流的方向。第九十二頁(yè),共575頁(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è)條件的嵌套的判斷。第九十三頁(yè),共575頁(yè)。第九十四頁(yè),共575頁(yè)。第九十五頁(yè),共575頁(yè)。2.程序環(huán)路復(fù)雜性程序的環(huán)路復(fù)雜性給出了程序基本路徑集中的獨(dú)立路徑條數(shù),這是確保程序中每個(gè)可執(zhí)行語(yǔ)句至少執(zhí)行一次所必需的測(cè)試用例數(shù)目的上界。從控制流圖來(lái)看,一條獨(dú)立路徑是至少包含有一條在其它獨(dú)立路徑中從未有過(guò)的邊的路徑。第九十六頁(yè),共575頁(yè)。例如,在圖示的控制流圖中,一組獨(dú)立的路徑是
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路徑path1,path2,path3,path4組成了控制流圖的一個(gè)基本路徑集。只要設(shè)計(jì)出的測(cè)試用例能夠確保這些基本路徑的執(zhí)行,就可以使得程序中的每個(gè)可執(zhí)行語(yǔ)句至少執(zhí)行一次,每個(gè)條件的取真和取假分支也能得到測(cè)試?;韭窂郊皇俏ㄒ坏?,對(duì)于給定的控制流圖,可以得到不同的基本路徑集。第九十七頁(yè),共575頁(yè)。第九十八頁(yè),共575頁(yè)。通常環(huán)路復(fù)雜性可用以下三種方法求得:將環(huán)路復(fù)雜性定義為控制流圖中的區(qū)域數(shù)。設(shè)E為控制流圖的邊數(shù),N為圖的結(jié)點(diǎn)數(shù),則定義環(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ù)目。第九十九頁(yè),共575頁(yè)。3.導(dǎo)出測(cè)試用例導(dǎo)出測(cè)試用例,確?;韭窂郊械拿恳粭l路徑的執(zhí)行。根據(jù)判斷結(jié)點(diǎn)給出的條件,選擇適當(dāng)?shù)臄?shù)據(jù)以保證某一條路徑可以被測(cè)試到—用邏輯覆蓋方法。第一百頁(yè),共575頁(yè)。每個(gè)測(cè)試用例執(zhí)行之后,與預(yù)期結(jié)果進(jìn)行比較。如果所有測(cè)試用例都執(zhí)行完畢,則可以確信程序中所有的可執(zhí)行語(yǔ)句至少被執(zhí)行了一次。必須注意,一些獨(dú)立的路徑(如例中的路徑1),往往不是完全孤立的,有時(shí)它是程序正常的控制流的一部分,這時(shí),這些路徑的測(cè)試可以是另一條路徑測(cè)試的一部分。
第一百零一頁(yè),共575頁(yè)。黑盒測(cè)試的測(cè)試用例設(shè)計(jì)
等價(jià)類劃分
邊界值分析
錯(cuò)誤推測(cè)法
因果圖第一百零二頁(yè),共575頁(yè)。等價(jià)類劃分等價(jià)類劃分是一種典型的黑盒測(cè)試方法,使用這一方法時(shí),完全不考慮程序的內(nèi)部結(jié)構(gòu),只依據(jù)程序的規(guī)格說(shuō)明來(lái)設(shè)計(jì)測(cè)試用例。由于不可能用所有可以輸入的數(shù)據(jù)來(lái)測(cè)試程序,而只能從全部可供輸入的數(shù)據(jù)中選擇一個(gè)子集進(jìn)行測(cè)試。如何選擇適當(dāng)?shù)淖蛹?,使其盡可能多地發(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à)類中取一個(gè)數(shù)據(jù)做為測(cè)試的輸入條件,就可用少量代表性測(cè)試數(shù)據(jù),取得較好的測(cè)試效果。第一百零三頁(yè),共575頁(yè)。使用這一方法設(shè)計(jì)測(cè)試用例要經(jīng)歷劃分等價(jià)類(列出等價(jià)類表)和選取測(cè)試用例兩步。劃分等價(jià)類
等價(jià)類是指某個(gè)輸入域的子集合。在該子集合中,各個(gè)輸入數(shù)據(jù)對(duì)于揭露程序中的錯(cuò)誤都是等效的。測(cè)試某等價(jià)類的代表值就等價(jià)于對(duì)這一類其它值的測(cè)試。第一百零四頁(yè),共575頁(yè)。等價(jià)類的劃分有兩種不同的情況:
①
有效等價(jià)類:是指對(duì)于程序的規(guī)格說(shuō)明來(lái)說(shuō),是合理的,有意義的輸入數(shù)據(jù)構(gòu)成的集合。
②
無(wú)效等價(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ù),這樣獲得的軟件才能具有較高的可靠性。
第一百零五頁(yè),共575頁(yè)。劃分等價(jià)類等價(jià)類的原則。(1)按區(qū)間劃分:如果輸入條件規(guī)定了取值范圍,或值的個(gè)數(shù),則可以確立一個(gè)有效等價(jià)類和兩個(gè)無(wú)效等價(jià)類。第一百零六頁(yè),共575頁(yè)。例如,在程序的規(guī)格說(shuō)明中,對(duì)輸入條件有一句話:
“……項(xiàng)數(shù)可以從1到999……”
則有效等價(jià)類是“1≤項(xiàng)數(shù)≤999”兩個(gè)無(wú)效等價(jià)類是“項(xiàng)數(shù)<1”或“項(xiàng)數(shù)>999”。在數(shù)軸上表示成:第一百零七頁(yè),共575頁(yè)。
(2)按數(shù)值集合劃分:如果輸入條件規(guī)定了輸入值的集合,或者是規(guī)定了“必須如何”的條件,這時(shí)可確立一個(gè)有效等價(jià)類和一個(gè)無(wú)效等價(jià)類。例如,在Pascal語(yǔ)言中對(duì)變量標(biāo)識(shí)符規(guī)定為“以字母打頭的……串”。那么所有以字母打頭的構(gòu)成有效等價(jià)類,而不在此集合內(nèi)(不以字母打頭)的歸于無(wú)效等價(jià)類。第一百零八頁(yè),共575頁(yè)。
(3)按數(shù)值劃分:如果規(guī)定了輸入數(shù)據(jù)的一組值,而且程序要對(duì)每個(gè)輸入值分別進(jìn)行處理。這時(shí)可為每一個(gè)輸入值確立一個(gè)有效等價(jià)類,此外針對(duì)這組值確立一個(gè)無(wú)效等價(jià)類,它是所有不允許的輸入值的集合。第一百零九頁(yè),共575頁(yè)。例如,在教師上崗方案中規(guī)定對(duì)教授、副教授、講師和助教分別計(jì)算分?jǐn)?shù),做相應(yīng)的處理。因此可以確定4個(gè)有效等價(jià)類為教授、副教授、講師和助教,一個(gè)無(wú)效等價(jià)類,它是所有不符合以上身分的人員的輸入值的集合。
(4)按限制條件或規(guī)則劃分:如果規(guī)定了輸入數(shù)據(jù)必須遵守的規(guī)則,則可以確立一個(gè)有效等價(jià)類(符合規(guī)則)和若干個(gè)無(wú)效等價(jià)類(從不同角度違反規(guī)則)。第一百一十頁(yè),共575頁(yè)。例如,Pascal語(yǔ)言規(guī)定“一個(gè)語(yǔ)句必須以分號(hào)‘;’結(jié)束”。這時(shí),可以確定一個(gè)有效等價(jià)類“以‘;’結(jié)束”,若干個(gè)無(wú)效等價(jià)類“以‘:’結(jié)束”、“以‘,’結(jié)束”、“以‘’結(jié)束”、“以LF結(jié)束”等。確立測(cè)試用例
在確立了等價(jià)類之后,建立等價(jià)類表,列出所有劃分出的等價(jià)類。
第一百一十一頁(yè),共575頁(yè)。再?gòu)膭澐殖龅牡葍r(jià)類中按以下原則選擇測(cè)試用例:
(1)
為每一個(gè)等價(jià)類規(guī)定一個(gè)唯一編號(hào);
(2)
設(shè)計(jì)一個(gè)新的測(cè)試用例,使其盡可能多地覆蓋尚未被覆蓋的有效等價(jià)類,重復(fù)這一步,直到所有的有效等價(jià)類都被覆蓋為止;
(3)
設(shè)計(jì)一個(gè)新的測(cè)試用例,使其僅覆蓋一個(gè)尚未被覆蓋的無(wú)效等價(jià)類,重復(fù)這一步,直到所有的無(wú)效等價(jià)類都被覆蓋為止。第一百一十二頁(yè),共575頁(yè)。
用等價(jià)類劃分法設(shè)計(jì)測(cè)試用例的實(shí)例
在某一PASCAL語(yǔ)言版本中規(guī)定:“標(biāo)識(shí)符是由字母開(kāi)頭,后跟字母或數(shù)字的任意組合構(gòu)成。有效字符數(shù)為8個(gè),最大字符數(shù)為80個(gè)?!?并且規(guī)定:“標(biāo)識(shí)符必須先說(shuō)明,再使用?!薄霸谕徽f(shuō)明語(yǔ)句中,標(biāo)識(shí)符至少必須有一個(gè)?!?/p>
第一百一十三頁(yè),共575頁(yè)。用等價(jià)類劃分方法,建立輸入等價(jià)類表:第一百一十四頁(yè),共575頁(yè)。下面選取了9個(gè)測(cè)試用例,它們覆蓋了所有的等價(jià)類。
①VARx,T1234567:REAL;
BEGINx:=3.414;
T1234567:=2.732;
...…(1),(2),(4),(8),(9),(12),(14)
②VAR:REAL;
(3)
③VARx,:REAL;(5)
第一百一十五頁(yè),共575頁(yè)。④VART12345678:REAL;
(6)⑤VART12345......:REAL;
(7)
多于80個(gè)字符⑥VART$:CHAR;
(10)⑦VARGOTO:INTEGER;
(11)⑧VAR2T:REAL;
(13)⑨VARPAR:REAL;
(15)
BEGIN......
PAP:=SIN(3.14*0.8)/6;第一百一十六頁(yè),共575頁(yè)。邊界值分析邊界值分析也是一種黑盒測(cè)試方法,是對(duì)等價(jià)類劃分方法的補(bǔ)充。人們從長(zhǎng)期的測(cè)試工作經(jīng)驗(yàn)得知,大量的錯(cuò)誤是發(fā)生在輸入或輸出范圍的邊界上,而不是在輸入范圍的內(nèi)部。因此針對(duì)各種邊界情況設(shè)計(jì)測(cè)試用例,可以查出更多的錯(cuò)誤。
第一百一十七頁(yè),共575頁(yè)。比如,在做三角形計(jì)算時(shí),要輸入三角形的三個(gè)邊長(zhǎng):A、B和C。我們應(yīng)注意到這三個(gè)數(shù)值應(yīng)當(dāng)滿足
A>0、B>0、C>0、
A+B>C、A+C>B、B+C>A,才能構(gòu)成三角形。但如果把六個(gè)不等式中的任何一個(gè)大于號(hào)“>”錯(cuò)寫(xiě)成大于等于號(hào)“≥”,那就不能構(gòu)成三角形。問(wèn)題恰出現(xiàn)在容易被疏忽的邊界附近。第一百一十八頁(yè),共575頁(yè)。這里所說(shuō)的邊界是指,相當(dāng)于輸入等價(jià)類和輸出等價(jià)類而言,稍高于其邊界值及稍低于其邊界值的一些特定情況。使用邊界值分析方法設(shè)計(jì)測(cè)試用例,首先應(yīng)確定邊界情況。應(yīng)當(dāng)選取正好等于,剛剛大于,或剛剛小于邊界的值做為測(cè)試數(shù)據(jù),而不是選取等價(jià)類中的典型值或任意值做為測(cè)試數(shù)據(jù)。邊界值分析方法是最有效的黑盒測(cè)試方法,但當(dāng)邊界情況很復(fù)雜的時(shí)候,要找出適當(dāng)?shù)臏y(cè)試用例還需針對(duì)問(wèn)題的輸入域、輸出域邊界,耐心細(xì)致地逐個(gè)考慮。
第一百一十九頁(yè),共575頁(yè)。錯(cuò)誤推測(cè)法人們也可以靠經(jīng)驗(yàn)和直覺(jué)推測(cè)程序中可能存在的各種錯(cuò)誤,從而有針對(duì)性地編寫(xiě)檢查這些錯(cuò)誤的例子。這就是錯(cuò)誤推測(cè)法。錯(cuò)誤推測(cè)法的基本想法是:列舉出程序中所有可能有的錯(cuò)誤和容易發(fā)生錯(cuò)誤的特殊情況,根據(jù)它們選擇測(cè)試用例。第一百二十頁(yè),共575頁(yè)。例如,輸入數(shù)據(jù)為0,或輸出數(shù)據(jù)為0是容易發(fā)生錯(cuò)誤的情形,因此可選擇輸入數(shù)據(jù)為0,或使輸出數(shù)據(jù)為0的例子作為測(cè)試用例。又例如,輸入表格為空或輸入表格只有一行,也是容易發(fā)生錯(cuò)誤的情況。可選擇表示這種情況的例子作為測(cè)試用例。再例如,可以針對(duì)一個(gè)排序程序,輸入空的值(沒(méi)有數(shù)據(jù))、輸入一個(gè)數(shù)據(jù)、讓所有的輸入數(shù)據(jù)都相等、讓所有輸入數(shù)據(jù)有序排列、讓所有輸入數(shù)據(jù)逆序排列等,進(jìn)行錯(cuò)誤推測(cè)。
第一百二十一頁(yè),共575頁(yè)。因果圖前面介紹的等價(jià)類劃分方法和邊界值分析方法,都是著重考慮輸入條件,但未考慮輸入條件之間的聯(lián)系。如果在測(cè)試時(shí)必須考慮輸入條件的各種組合,可能的組合數(shù)將是天文數(shù)字。因此必須考慮使用一種適合于描述對(duì)于多種條件的組合,相應(yīng)產(chǎn)生多個(gè)動(dòng)作的形式來(lái)考慮設(shè)計(jì)測(cè)試用例,這就需要利用因果圖。因果圖方法最終生成的就是判定表。它適合于檢查程序輸入條件的各種組合情況。第一百二十二頁(yè),共575頁(yè)。用因果圖生成測(cè)試用例的基本步驟
(1)
分析軟件規(guī)格說(shuō)明描述中,哪些是原因(即輸入條件或輸入條件的等價(jià)類),哪些是結(jié)果(即輸出條件),并給每個(gè)原因和結(jié)果賦予一個(gè)標(biāo)識(shí)符。
(2)
分析軟件規(guī)格說(shuō)明描述中的語(yǔ)義,找出原因與結(jié)果之間,原因與原因之間對(duì)應(yīng)的是什么關(guān)系?根據(jù)這些關(guān)系,畫(huà)出因果圖。
第一百二十三頁(yè),共575頁(yè)。
(3)
由于語(yǔ)法或環(huán)境限制,有些原因與原因之間,原因與結(jié)果之間的組合情況不可能出現(xiàn)。為表明這些特殊情況,在因果圖上用一些記號(hào)標(biāo)明約束或限制條件。
(4)
把因果圖轉(zhuǎn)換成判定表。
(5)
把判定表的每一列拿出來(lái)作為依據(jù),設(shè)計(jì)測(cè)試用例。
第一百二十四頁(yè),共575頁(yè)。在因果圖中出現(xiàn)的基本符號(hào)
通常在因果圖中用Ci表示原因,用Ei表示結(jié)果,各結(jié)點(diǎn)表示狀態(tài),可取值“0”或“1”?!?”表示某狀態(tài)不出現(xiàn),“1”表示某狀態(tài)出現(xiàn)。主要的原因和結(jié)果之間的關(guān)系有:第一百二十五頁(yè),共575頁(yè)。表示約束條件的符號(hào)
為了表示原因與原因之間,結(jié)果與結(jié)果之間可能存在的約束條件,在因果圖中可以附加一些表示約束條件的符號(hào)。第一百二十六頁(yè),共575頁(yè)。
例如,有一個(gè)處理單價(jià)為5角錢(qián)的飲料的自動(dòng)售貨機(jī)軟件測(cè)試用例的設(shè)計(jì)。其規(guī)格說(shuō)明如下:若投入5角錢(qián)或1元錢(qián)的硬幣,押下〖橙汁〗或〖啤酒〗的按鈕,則相應(yīng)的飲料就送出來(lái)。若售貨機(jī)沒(méi)有零錢(qián)找,則一個(gè)顯示〖零錢(qián)找完〗的紅燈亮,這時(shí)在投入1元硬幣并押下按鈕后,飲料不送出來(lái)而且1元硬幣也退出來(lái);若有零錢(qián)找,則顯示〖零錢(qián)找完〗的紅燈滅,在送出飲料的同時(shí)退還5角硬幣?!钡谝话俣唔?yè),共575頁(yè)。(1)分析這一段說(shuō)明,列出原因和結(jié)果
原因:1.
售貨機(jī)有零錢(qián)找
2.
投入1元硬幣
3.
投入5角硬幣
4.
押下橙汁按鈕
5.
押下啤酒按鈕
建立中間結(jié)點(diǎn),表示處理中間狀態(tài)
11.
投入1元硬幣且押下飲料按鈕
12.
押下〖橙汁〗或〖啤酒〗的按鈕
13.
應(yīng)當(dāng)找5角零錢(qián)并且售貨機(jī)有零錢(qián)找
14.
錢(qián)已付清
第一百二十八頁(yè),共575頁(yè)。
結(jié)果:21.
售貨機(jī)〖零錢(qián)找完〗燈亮
22.
退還1元硬幣
23.
退還5角硬幣
24.
送出橙汁飲料
25.
送出啤酒飲料
(2)畫(huà)出因果圖。所有原因結(jié)點(diǎn)列在左 邊,所有結(jié)果結(jié)點(diǎn)列在右邊。
(3)
由于2與3,4與5不能同時(shí)發(fā)生,
分別加上約束條件E。
(4)因果圖
(5)轉(zhuǎn)換成判定表第一百二十九頁(yè),共575頁(yè)。
第一百三十頁(yè),共575頁(yè)。由因果圖得到的判定表第一百三十一頁(yè),共575頁(yè)。在判定表中,陰影部分表示因違反約束條件的不可能出現(xiàn)的情況,刪去。第16列與第32列因什么動(dòng)作也沒(méi)做,也刪去。最后可根據(jù)剩下的16列作為確定測(cè)試用例的依據(jù)。因果圖方法是一個(gè)非常有效的黑盒測(cè)試方法,它能夠生成沒(méi)有重復(fù)性的且發(fā)現(xiàn)錯(cuò)誤能力強(qiáng)的測(cè)試用例,而且對(duì)輸入、輸出同時(shí)進(jìn)行了分析。第一百三十二頁(yè),共575頁(yè)。黑盒測(cè)試方法選擇的綜合策略Myers提出了使用各種測(cè)試方法的綜合策略:在任何情況下都必須使用邊界值分析方法。經(jīng)驗(yàn)表明用這種方法設(shè)計(jì)出測(cè)試用例發(fā)現(xiàn)程序錯(cuò)誤的能力最強(qiáng)。必要時(shí)用等價(jià)類劃分方法補(bǔ)充一些測(cè)試用例用錯(cuò)誤推測(cè)法再追加一些測(cè)試用例。對(duì)照程序邏輯,檢查已設(shè)計(jì)出的測(cè)試用例的邏輯覆蓋程度。如果沒(méi)有達(dá)到要求的覆蓋標(biāo)準(zhǔn),應(yīng)當(dāng)再補(bǔ)充足夠的測(cè)試用例。如果程序的功能說(shuō)明中含有輸入條件的組合情況,則一開(kāi)始就可選用因果圖法。第一百三十三頁(yè),共575頁(yè)。軟件測(cè)試的過(guò)程與策略測(cè)試過(guò)程按4個(gè)步驟進(jìn)行:開(kāi)始是單元測(cè)試,集中對(duì)用源代碼實(shí)現(xiàn)的每一個(gè)程序單元進(jìn)行測(cè)試,檢查各個(gè)程序模塊是否正確地實(shí)現(xiàn)了規(guī)定的功能。組裝測(cè)試把已測(cè)試過(guò)的模塊組裝起來(lái),主要對(duì)與設(shè)計(jì)相關(guān)的軟件體系結(jié)構(gòu)的構(gòu)造進(jìn)行測(cè)試。確認(rèn)測(cè)試則是要檢查已實(shí)現(xiàn)的軟件是否滿足了需求規(guī)格說(shuō)明中確定了的各種需求,以及軟件配置是否完全、正確。系統(tǒng)測(cè)試把已經(jīng)經(jīng)過(guò)確認(rèn)的軟件納入實(shí)際運(yùn)行環(huán)境中,與其它系統(tǒng)成份組合在一起進(jìn)行測(cè)試。嚴(yán)格地說(shuō),系統(tǒng)測(cè)試已超出了軟件工程的范圍第一百三十四頁(yè),共575頁(yè)。第一百三十五頁(yè),共575頁(yè)。單元測(cè)試(UnitTesting)單元測(cè)試又稱模塊測(cè)試,是針對(duì)軟件設(shè)計(jì)的最小單位─程序模塊,進(jìn)行正確性檢驗(yàn)的測(cè)試工作。其目的在于發(fā)現(xiàn)各模塊內(nèi)部可能存在的各種差錯(cuò)。單元測(cè)試需要從程序的內(nèi)部結(jié)構(gòu)出發(fā)設(shè)計(jì)測(cè)試用例。多個(gè)模塊可以平行地獨(dú)立進(jìn)行單元測(cè)試。第一百三十六頁(yè),共575頁(yè)。1.單元測(cè)試的內(nèi)容在單元測(cè)試時(shí),測(cè)試者需要依據(jù)詳細(xì)設(shè)計(jì)說(shuō)明書(shū)和源程序清單,了解該模塊的I/O條件和模塊的邏輯結(jié)構(gòu),主要采用白盒測(cè)試的測(cè)試用例,輔之以黑盒測(cè)試的測(cè)試用例,使之對(duì)任何合理的輸入和不合理的輸入,都能鑒別和響應(yīng)。
第一百三十七頁(yè),共575頁(yè)。第一百三十八頁(yè),共575頁(yè)。(1)模塊接口測(cè)試在單元測(cè)試的開(kāi)始,應(yīng)對(duì)通過(guò)被測(cè)模塊的數(shù)據(jù)流進(jìn)行測(cè)試。測(cè)試項(xiàng)目包括:調(diào)用本模塊的輸入?yún)?shù)是否正確;本模塊調(diào)用子模塊時(shí)輸入給子模塊的參數(shù)是否正確;全局量的定義在各模塊中是否一致;
第一百三十九頁(yè),共575頁(yè)。在做內(nèi)外存交換時(shí)要考慮:文件屬性是否正確;
OPEN與CLOSE語(yǔ)句是否正確;緩沖區(qū)容量與記錄長(zhǎng)度是否匹配;在進(jìn)行讀寫(xiě)操作之前是否打開(kāi)了文件;在結(jié)束文件處理時(shí)是否關(guān)閉了文件;正文書(shū)寫(xiě)/輸入錯(cuò)誤,
I/O錯(cuò)誤是否檢查并做了處理。
第一百四十頁(yè),共575頁(yè)。(2)局部數(shù)據(jù)結(jié)構(gòu)測(cè)試不正確或不一致的數(shù)據(jù)類型說(shuō)明使用尚未賦值或尚未初始化的變量錯(cuò)誤的初始值或錯(cuò)誤的缺省值變量名拼寫(xiě)錯(cuò)或書(shū)寫(xiě)錯(cuò)不一致的數(shù)據(jù)類型全局?jǐn)?shù)據(jù)對(duì)模塊的影響
第一百四十一頁(yè),共575頁(yè)。(3)路徑測(cè)試選擇適當(dāng)?shù)臏y(cè)試用例,對(duì)模塊中重要的執(zhí)行路徑進(jìn)行測(cè)試。應(yīng)當(dāng)設(shè)計(jì)測(cè)試用例查找由于錯(cuò)誤的計(jì)算、不正確的比較或不正常的控制流而導(dǎo)致的錯(cuò)誤。對(duì)基本執(zhí)行路徑和循環(huán)進(jìn)行測(cè)試可以發(fā)現(xiàn)大量的路徑錯(cuò)誤。第一百四十二頁(yè),共575頁(yè)。(4)錯(cuò)誤處理測(cè)試出錯(cuò)的描述是否難以理解出錯(cuò)的描述是否能夠?qū)﹀e(cuò)誤定位顯示的錯(cuò)誤與實(shí)際的錯(cuò)誤是否相符對(duì)錯(cuò)誤條件的處理正確與否在對(duì)錯(cuò)誤進(jìn)行處理之前,錯(cuò)誤條件是否已經(jīng)引起系統(tǒng)的干預(yù)等第一百四十三頁(yè),共575頁(yè)。(5)邊界測(cè)試注意數(shù)據(jù)流、控制流中剛好等于、大于或小于確定的比較值時(shí)出錯(cuò)的可能性。對(duì)這些地方要仔細(xì)地選擇測(cè)試用例,認(rèn)真加以測(cè)試。如果對(duì)模塊運(yùn)行時(shí)間有要求的話,還要專門(mén)進(jìn)行關(guān)鍵路徑測(cè)試,以確定最壞情況下和平均意義下影響模塊運(yùn)行時(shí)間的因素。
第一百四十四頁(yè),共575頁(yè)。2.單元測(cè)試的步驟通常單元測(cè)試在編碼階段進(jìn)行。在源程序代碼編制完成,經(jīng)過(guò)評(píng)審和驗(yàn)證,確認(rèn)沒(méi)有語(yǔ)法錯(cuò)誤之后,就開(kāi)始進(jìn)行單元測(cè)試的測(cè)試用例設(shè)計(jì)。利用設(shè)計(jì)文檔,設(shè)計(jì)可以驗(yàn)證程序功能、找出程序錯(cuò)誤的多個(gè)測(cè)試用例。對(duì)于每一組輸入,應(yīng)有預(yù)期的正確結(jié)果。模塊并不是一個(gè)獨(dú)立的程序,在考慮測(cè)試模塊時(shí),同時(shí)要考慮它和外界的聯(lián)系,用一些輔助模塊去模擬與被測(cè)模塊相聯(lián)系的其它模塊。
驅(qū)動(dòng)模塊(driver)
:相當(dāng)于被測(cè)模塊的主程序。它接收測(cè)試數(shù)據(jù),把這些數(shù)據(jù)傳送給被測(cè)模塊,最后輸出實(shí)測(cè)結(jié)果。
樁模塊(stub)──存根模塊:用以代替被測(cè)模塊調(diào)用的子模塊。樁模塊可以做少量的數(shù)據(jù)操作,不需要把子模塊所有功能都帶進(jìn)來(lái),但不允許什么事情也不做。
第一百四十五頁(yè),共575頁(yè)。單元測(cè)試的測(cè)試環(huán)境第一百四十六頁(yè),共575頁(yè)。如果一個(gè)模塊要完成多種功能,且以程序包或?qū)ο箢惖男问匠霈F(xiàn),例如Ada中的包,MODULA中的模塊,C++中的類??梢詫⑦@個(gè)模塊看成由幾個(gè)小程序組成。必須對(duì)其中的每個(gè)小程序先進(jìn)行單元測(cè)試要做的工作,對(duì)關(guān)鍵模塊還要做性能測(cè)試。對(duì)支持某些標(biāo)準(zhǔn)例程的程序,更要著手進(jìn)行互聯(lián)測(cè)試。有人把這種情況特別稱為模塊測(cè)試,以區(qū)別單元測(cè)試。第一百四十七頁(yè),共575頁(yè)。組裝測(cè)試(IntegratedTesting)組裝測(cè)試(集成測(cè)試、聯(lián)合測(cè)試)通常,在單元測(cè)試的基礎(chǔ)上,需要將所有模塊按照設(shè)計(jì)要求組裝成為系統(tǒng)。這時(shí)需要考慮的問(wèn)題是:在把各個(gè)模塊連接起來(lái)的時(shí)侯,穿越模塊接口的數(shù)據(jù)是否會(huì)丟失;一個(gè)模塊的功能是否會(huì)對(duì)另一個(gè)模塊的功能產(chǎn)生不利的影響;各個(gè)子功能組合起來(lái),能否達(dá)到預(yù)期要求的父功能;全局?jǐn)?shù)據(jù)結(jié)構(gòu)是否有問(wèn)題;單個(gè)模塊的誤差累積起來(lái),是否會(huì)放大,從而達(dá)到不能接受的程度。在單元測(cè)試的同時(shí)可進(jìn)行組裝測(cè)試,發(fā)現(xiàn)并排除在模塊連接中可能出現(xiàn)的問(wèn)題,最終構(gòu)成要求的系統(tǒng)。第一百四十八頁(yè),共575頁(yè)。
子系統(tǒng)的組裝測(cè)試特別稱為部件測(cè)試,它所做的工作是要找出組裝后的子系統(tǒng)與系統(tǒng)需求規(guī)格說(shuō)明之間的不一致。通常,把模塊組裝成為系統(tǒng)的方式有兩種一次性組裝方式增殖式組裝方式
第一百四十九頁(yè),共575頁(yè)。1一次性組裝方式(bigbang)它是一種非增殖式組裝方式。也叫做整體拼裝。使用這種方式,首先對(duì)每個(gè)模塊分別進(jìn)行模塊測(cè)試,然后再把所有模塊組裝在一起進(jìn)行測(cè)試,最終得到要求的軟件系統(tǒng)。由于程序中不可避免地存在涉及模塊間接口、全局?jǐn)?shù)據(jù)結(jié)構(gòu)等方面的問(wèn)題,所以一次試運(yùn)行成功的可能性并不很大。第一百五十頁(yè),共575頁(yè)。第一百五十一頁(yè),共575頁(yè)。2.增殖式組裝方式這種組裝方式又稱漸增式組裝首先對(duì)一個(gè)個(gè)模塊進(jìn)行模塊測(cè)試,然后將這些模塊逐步組裝成較大的系統(tǒng)在組裝的過(guò)程中邊連接邊測(cè)試,以發(fā)現(xiàn)連接過(guò)程中產(chǎn)生的問(wèn)題通過(guò)增殖逐步組裝成為要求的軟件系統(tǒng)。
第一百五十二頁(yè),共575頁(yè)。(1)自頂向下的增殖方式這種組裝方式將模塊按系統(tǒng)程序結(jié)構(gòu),沿控制層次自頂向下進(jìn)行組裝。自頂向下的增殖方式在測(cè)試過(guò)程中較早地驗(yàn)證了主要的控制和判斷點(diǎn)。在一個(gè)功能劃分合理的程序結(jié)構(gòu)中,判斷常出現(xiàn)在較高的層次,較早就能遇到。如果主要控制有問(wèn)題,盡早發(fā)現(xiàn)它能夠減少以后的返工。選用按深度方向組裝的方式,可以首先實(shí)現(xiàn)和驗(yàn)證一個(gè)完整的軟件功能。第一百五十三頁(yè),共575頁(yè)。第一百五十四頁(yè),共575頁(yè)。(2)自底向上的增殖方式這種組裝的方式是從程序模塊結(jié)構(gòu)的最底層的模塊開(kāi)始組裝和測(cè)試。因?yàn)槟K是自底向上進(jìn)行組裝,對(duì)于一個(gè)給定層次的模塊,它的子模塊(包括子模塊的所有下屬模塊)已經(jīng)組裝并測(cè)試完成,所以不再需要樁模塊。在模塊的測(cè)試過(guò)程中需要從子模塊得到的信息可以直接運(yùn)行子模塊得到。
第一百五十五頁(yè),共575頁(yè)。第一百五十六頁(yè),共575頁(yè)。自頂向下增殖方式的缺點(diǎn)是需要建立樁模塊。要使樁模塊能夠模擬實(shí)際子模塊的功能將是十分困難的。同時(shí)涉及復(fù)雜算法和真正輸入/輸出的模塊一般在底層,它們是最容易出問(wèn)題的模塊,到組裝和測(cè)試的后期才遇到這些模塊,一旦發(fā)現(xiàn)問(wèn)題,導(dǎo)致過(guò)多的回歸測(cè)試。自頂向下增殖方式的優(yōu)點(diǎn)是能夠較早地發(fā)現(xiàn)在主要控制方面的問(wèn)題。自底向上增殖方式的缺點(diǎn)是“程序一直未能做為一個(gè)實(shí)體存在,直到最后一個(gè)模塊加上去后才形成一個(gè)實(shí)體”。就是說(shuō),在自底向上組裝和測(cè)試的過(guò)程中,對(duì)主要的控制直到最后才接觸到。自底向上增殖方式的優(yōu)點(diǎn)是不需要樁模塊,而建立驅(qū)動(dòng)模塊一般比建立樁模塊容易,同時(shí)由于涉及到復(fù)雜算法和真正輸入/輸出的模塊最先得到組裝和測(cè)試,可以把最容易出問(wèn)題的部分在早期解決。此外自底向上增殖的方式可以實(shí)施多個(gè)模塊的并行測(cè)試。第一百五十七頁(yè),共575頁(yè)。(3)混合增殖式測(cè)試衍變的自頂向下的增殖測(cè)試首先對(duì)輸入/輸出模塊和引入新算法模塊進(jìn)行測(cè)試;
再自底向上組裝成為功能相當(dāng)完整且相對(duì)獨(dú)立的子系統(tǒng);
然后由主模塊開(kāi)始自頂向下進(jìn)行增殖測(cè)試。第一百五十八頁(yè),共575頁(yè)。自底向上自頂向下的增殖測(cè)試首先對(duì)含讀操作的子系統(tǒng)自底向上直至根結(jié)點(diǎn)模塊進(jìn)行組裝和測(cè)試;
然后對(duì)含寫(xiě)操作的子系統(tǒng)做自頂向下的組裝與測(cè)試?;貧w測(cè)試這種方式采取自頂向下的方式測(cè)試被修改的模塊及其子模塊;
然后將這一部分視為子系統(tǒng),再自底向上測(cè)試。以檢查該子系統(tǒng)與其上級(jí)模塊的接口是否適配。第一百五十九頁(yè),共575頁(yè)。關(guān)鍵模塊問(wèn)題在組裝測(cè)試時(shí),應(yīng)當(dāng)確定關(guān)鍵模塊,對(duì)這些關(guān)鍵模塊及早進(jìn)行測(cè)試。關(guān)鍵模塊的特征:
①滿足某些軟件需求;
②在程序的模塊結(jié)構(gòu)中位于較高的層次(高層控制模塊);
③較復(fù)雜、較易發(fā)生錯(cuò)誤;
④有明確定義的性能要求。
第一百六十頁(yè),共575頁(yè)。確認(rèn)測(cè)試(ValidationTesting)確認(rèn)測(cè)試又稱有效性測(cè)試。任務(wù)是驗(yàn)證軟件的功能和性能及其它特性是否與用戶的要求一致。對(duì)軟件的功能和性能要求在軟件需求規(guī)格說(shuō)明書(shū)中已經(jīng)明確規(guī)定。它包含的信息就是軟件確認(rèn)測(cè)試的基礎(chǔ)。第一百六十一頁(yè),共575頁(yè)。第一百六十二頁(yè),共575頁(yè)。1.進(jìn)行有效性測(cè)試(黑盒測(cè)試)有效性測(cè)試是在模擬的環(huán)境(可能就是開(kāi)發(fā)的環(huán)境)下,運(yùn)用黑盒測(cè)試的方法,驗(yàn)證被測(cè)軟件是否滿足需求規(guī)格說(shuō)明書(shū)列出的需求。首先制定測(cè)試計(jì)劃,規(guī)定要做測(cè)試的種類。還需要制定一組測(cè)試步驟,描述具體的
溫馨提示
- 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ù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025在校學(xué)生實(shí)習(xí)合同范本
- 空運(yùn)紅酒出口運(yùn)輸合同
- 影視制作合同書(shū)
- 盤(pán)扣腳手架租賃合同
- 瑪雅房屋租賃合同范本
- 電力設(shè)備采購(gòu)及安裝合同
- 教育普及與提高家庭式血透服務(wù)質(zhì)量的探討
- 家用智能機(jī)器人對(duì)提升環(huán)境衛(wèi)生的作用
- 家庭親子關(guān)系在醫(yī)療救助中的作用
- 教育投資如何為小學(xué)生提供更好的科學(xué)教育資源
- 2024年高標(biāo)準(zhǔn)農(nóng)田建設(shè)土地承包服務(wù)協(xié)議3篇
- 閱讀理解(專項(xiàng)訓(xùn)練)-2024-2025學(xué)年湘少版英語(yǔ)六年級(jí)上冊(cè)
- 2024-2025學(xué)年人教版數(shù)學(xué)六年級(jí)上冊(cè) 期末綜合試卷(含答案)
- 無(wú)創(chuàng)通氣基本模式
- 飛行原理(第二版) 課件 第4章 飛機(jī)的平衡、穩(wěn)定性和操縱性
- 暨南大學(xué)珠海校區(qū)財(cái)務(wù)辦招考財(cái)務(wù)工作人員易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 羊水少治療護(hù)理查房
- 管道坡口技術(shù)培訓(xùn)
- 2024年全國(guó)統(tǒng)一高考英語(yǔ)試卷(新課標(biāo)Ⅰ卷)含答案
- OQC培訓(xùn)資料教學(xué)課件
- 2024年8月CCAA國(guó)家注冊(cè)審核員OHSMS職業(yè)健康安全管理體系基礎(chǔ)知識(shí)考試題目含解析
評(píng)論
0/150
提交評(píng)論