軟件測(cè)試

第五章第五章 軟件測(cè)試軟件測(cè)試n n測(cè)試的目的和原則測(cè)試的目的和原則n n測(cè)試方法與測(cè)試用例設(shè)計(jì)測(cè)試方法與測(cè)試用例設(shè)計(jì)n n軟件測(cè)試的策略軟件測(cè)試的策略n n軟件測(cè)試的種類(lèi)軟件測(cè)試的種類(lèi)n n程序的靜態(tài)測(cè)試程序的靜態(tài)測(cè)試n n程序調(diào)試程序調(diào)試1軟件測(cè)試的目的和原則軟件測(cè)試的目的和原則軟件測(cè)試的目的軟件測(cè)試的目的軟件測(cè)試的原則軟件測(cè)試的原則軟件測(cè)試的對(duì)象軟件測(cè)試的對(duì)象測(cè)試信息流測(cè)試信息流測(cè)試與軟件開(kāi)發(fā)各階段的關(guān)系測(cè)試與軟件開(kāi)發(fā)各階段的關(guān)系測(cè)試的充分性測(cè)試的充分性2軟件測(cè)試的目的軟件測(cè)試的目的基于不同的立場(chǎng),存在著兩種完全不同基于不同的立場(chǎng),存在著兩種完全不同的測(cè)試目的的測(cè)試目的從從用戶(hù)的角度用戶(hù)的角度出發(fā),普遍希望通過(guò)軟件出發(fā),普遍希望通過(guò)軟件測(cè)試測(cè)試暴露軟件中隱藏的錯(cuò)誤和缺陷暴露軟件中隱藏的錯(cuò)誤和缺陷,以,以考慮是否可接受該產(chǎn)品考慮是否可接受該產(chǎn)品從從軟件開(kāi)發(fā)者的角度軟件開(kāi)發(fā)者的角度出發(fā),則希望測(cè)試出發(fā),則希望測(cè)試成為成為表明軟件產(chǎn)品中不存在錯(cuò)誤表明軟件產(chǎn)品中不存在錯(cuò)誤的過(guò)程,的過(guò)程,驗(yàn)證該軟件已正確地實(shí)現(xiàn)了用戶(hù)的要求,驗(yàn)證該軟件已正確地實(shí)現(xiàn)了用戶(hù)的要求,確立人們對(duì)軟件質(zhì)量的信心確立人們對(duì)軟件質(zhì)量的信心。
3Myers軟件測(cè)試目的軟件測(cè)試目的(1)測(cè)試是測(cè)試是程序的執(zhí)行過(guò)程程序的執(zhí)行過(guò)程,目的在于,目的在于發(fā)現(xiàn)錯(cuò)誤發(fā)現(xiàn)錯(cuò)誤;(2)一個(gè)好的測(cè)試用例在于一個(gè)好的測(cè)試用例在于能發(fā)現(xiàn)至今能發(fā)現(xiàn)至今未發(fā)現(xiàn)的錯(cuò)誤未發(fā)現(xiàn)的錯(cuò)誤;(3)一個(gè)成功的測(cè)試是一個(gè)成功的測(cè)試是發(fā)現(xiàn)了至今未發(fā)發(fā)現(xiàn)了至今未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試現(xiàn)的錯(cuò)誤的測(cè)試4換言之,測(cè)試的目的是換言之,測(cè)試的目的是uu 想以最少的時(shí)間和人力,想以最少的時(shí)間和人力,系統(tǒng)地找系統(tǒng)地找出軟件中潛在的各種錯(cuò)誤和缺陷出軟件中潛在的各種錯(cuò)誤和缺陷如果我們成功地實(shí)施了測(cè)試,我們就能果我們成功地實(shí)施了測(cè)試,我們就能夠發(fā)現(xiàn)軟件中的錯(cuò)誤夠發(fā)現(xiàn)軟件中的錯(cuò)誤uu 測(cè)試的附帶收獲是,它測(cè)試的附帶收獲是,它能夠證明軟能夠證明軟件的功能和性能與需求說(shuō)明相符合件的功能和性能與需求說(shuō)明相符合uu 實(shí)施測(cè)試收集到的測(cè)試結(jié)果數(shù)據(jù)為實(shí)施測(cè)試收集到的測(cè)試結(jié)果數(shù)據(jù)為可靠性分析提供了依據(jù)可靠性分析提供了依據(jù)uu 測(cè)試不能表明軟件中不存在錯(cuò)誤,測(cè)試不能表明軟件中不存在錯(cuò)誤,它只能說(shuō)明軟件中存在錯(cuò)誤它只能說(shuō)明軟件中存在錯(cuò)誤5軟件測(cè)試的原則軟件測(cè)試的原則1.應(yīng)當(dāng)把應(yīng)當(dāng)把“盡早地和不斷地進(jìn)行軟件測(cè)試盡早地和不斷地進(jìn)行軟件測(cè)試”作為軟件開(kāi)發(fā)者的座右銘。
作為軟件開(kāi)發(fā)者的座右銘2.測(cè)試用例應(yīng)由測(cè)試用例應(yīng)由測(cè)試輸入數(shù)據(jù)測(cè)試輸入數(shù)據(jù)和對(duì)應(yīng)的和對(duì)應(yīng)的預(yù)預(yù)期輸出結(jié)果期輸出結(jié)果這兩部分組成這兩部分組成3.程序員應(yīng)避免檢查自己的程序程序員應(yīng)避免檢查自己的程序4.在設(shè)計(jì)測(cè)試用例時(shí),應(yīng)包括在設(shè)計(jì)測(cè)試用例時(shí),應(yīng)包括合理的輸入合理的輸入條件條件和和不合理的輸入條件不合理的輸入條件65.充分注意測(cè)試中的群集現(xiàn)象經(jīng)驗(yàn)表明,充分注意測(cè)試中的群集現(xiàn)象經(jīng)驗(yàn)表明,測(cè)試后測(cè)試后程序中殘存的錯(cuò)誤數(shù)目與該程序程序中殘存的錯(cuò)誤數(shù)目與該程序中已發(fā)現(xiàn)的錯(cuò)誤數(shù)目成正比中已發(fā)現(xiàn)的錯(cuò)誤數(shù)目成正比6.嚴(yán)格執(zhí)行測(cè)試計(jì)劃,嚴(yán)格執(zhí)行測(cè)試計(jì)劃,排除測(cè)試的隨意性排除測(cè)試的隨意性7.應(yīng)當(dāng)對(duì)每一個(gè)測(cè)試結(jié)果做全面檢查應(yīng)當(dāng)對(duì)每一個(gè)測(cè)試結(jié)果做全面檢查8.妥善保存測(cè)試計(jì)劃,測(cè)試用例,出錯(cuò)統(tǒng)妥善保存測(cè)試計(jì)劃,測(cè)試用例,出錯(cuò)統(tǒng)計(jì)和最終分析報(bào)告,為維護(hù)提供方便計(jì)和最終分析報(bào)告,為維護(hù)提供方便7軟件測(cè)試的對(duì)象軟件測(cè)試的對(duì)象軟件測(cè)試并不等于程序測(cè)試軟件測(cè)試并不等于程序測(cè)試軟件測(cè)試軟件測(cè)試應(yīng)貫穿于軟件定義與開(kāi)發(fā)的整個(gè)期間應(yīng)貫穿于軟件定義與開(kāi)發(fā)的整個(gè)期間需求分析需求分析、概要設(shè)計(jì)概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)以及程詳細(xì)設(shè)計(jì)以及程序編碼序編碼等各階段所得到的等各階段所得到的文檔文檔,包括需,包括需求規(guī)格說(shuō)明、概要設(shè)計(jì)規(guī)格說(shuō)明、詳細(xì)求規(guī)格說(shuō)明、概要設(shè)計(jì)規(guī)格說(shuō)明、詳細(xì)設(shè)計(jì)規(guī)格說(shuō)明以及源程序,設(shè)計(jì)規(guī)格說(shuō)明以及源程序,都應(yīng)成為軟都應(yīng)成為軟件測(cè)試的對(duì)象件測(cè)試的對(duì)象。
8為把握軟件開(kāi)發(fā)各個(gè)環(huán)節(jié)的正確性,需為把握軟件開(kāi)發(fā)各個(gè)環(huán)節(jié)的正確性,需要進(jìn)行各種要進(jìn)行各種確認(rèn)確認(rèn)和和驗(yàn)證驗(yàn)證工作確認(rèn)確認(rèn)(Validation),是一系列的活動(dòng)和是一系列的活動(dòng)和過(guò)程,目的是想證實(shí)在一個(gè)給定的外部過(guò)程,目的是想證實(shí)在一個(gè)給定的外部環(huán)境中軟件的邏輯正確性環(huán)境中軟件的邏輯正確性u(píng)u 需求規(guī)格說(shuō)明確認(rèn)需求規(guī)格說(shuō)明確認(rèn)uu 程序確認(rèn)程序確認(rèn)(靜態(tài)確認(rèn)、動(dòng)態(tài)確認(rèn)靜態(tài)確認(rèn)、動(dòng)態(tài)確認(rèn))驗(yàn)證驗(yàn)證(Verification),試圖證明在軟件試圖證明在軟件生存期各個(gè)階段,以及階段間的邏輯協(xié)生存期各個(gè)階段,以及階段間的邏輯協(xié)調(diào)性、完備性和正確性調(diào)性、完備性和正確性910測(cè)試信息流測(cè)試信息流可靠性可靠性分析分析測(cè)試測(cè)試軟件軟件配置配置測(cè)試測(cè)試配置配置測(cè)試測(cè)試工具工具結(jié)果結(jié)果分析分析測(cè)試結(jié)果測(cè)試結(jié)果預(yù)預(yù)期期結(jié)結(jié)果果出出錯(cuò)錯(cuò)率率數(shù)數(shù)據(jù)據(jù)預(yù)測(cè)的可靠性預(yù)測(cè)的可靠性錯(cuò)誤錯(cuò)誤調(diào)試調(diào)試修改后的軟件修改后的軟件11測(cè)試信息流測(cè)試信息流軟件配置軟件配置:軟件需求規(guī)格說(shuō)明、軟件設(shè):軟件需求規(guī)格說(shuō)明、軟件設(shè)計(jì)規(guī)格說(shuō)明、源代碼等;計(jì)規(guī)格說(shuō)明、源代碼等;測(cè)試配置測(cè)試配置:測(cè)試計(jì)劃、測(cè)試用例、測(cè)試:測(cè)試計(jì)劃、測(cè)試用例、測(cè)試程序等;程序等;測(cè)試工具測(cè)試工具:測(cè)試數(shù)據(jù)自動(dòng)生成程序、靜:測(cè)試數(shù)據(jù)自動(dòng)生成程序、靜態(tài)分析程序、動(dòng)態(tài)分析程序、測(cè)試結(jié)果態(tài)分析程序、動(dòng)態(tài)分析程序、測(cè)試結(jié)果分析程序、以及驅(qū)動(dòng)測(cè)試的測(cè)試數(shù)據(jù)庫(kù)分析程序、以及驅(qū)動(dòng)測(cè)試的測(cè)試數(shù)據(jù)庫(kù)等等。
等等12測(cè)試結(jié)果分析測(cè)試結(jié)果分析:比較實(shí)測(cè)結(jié)果與預(yù)期結(jié):比較實(shí)測(cè)結(jié)果與預(yù)期結(jié)果,評(píng)價(jià)錯(cuò)誤是否發(fā)生果,評(píng)價(jià)錯(cuò)誤是否發(fā)生排錯(cuò)排錯(cuò)(調(diào)試調(diào)試):對(duì)已經(jīng)發(fā)現(xiàn)的錯(cuò)誤進(jìn)行錯(cuò):對(duì)已經(jīng)發(fā)現(xiàn)的錯(cuò)誤進(jìn)行錯(cuò)誤定位和確定出錯(cuò)性質(zhì),并改正這些錯(cuò)誤定位和確定出錯(cuò)性質(zhì),并改正這些錯(cuò)誤,同時(shí)修改相關(guān)的文檔誤,同時(shí)修改相關(guān)的文檔修正后的文檔再測(cè)試修正后的文檔再測(cè)試:直到通過(guò)測(cè)試為:直到通過(guò)測(cè)試為止13通過(guò)收集和分析測(cè)試結(jié)果數(shù)據(jù),對(duì)軟件通過(guò)收集和分析測(cè)試結(jié)果數(shù)據(jù),對(duì)軟件建立可靠性模型建立可靠性模型利用可靠性分析,評(píng)價(jià)軟件質(zhì)量:利用可靠性分析,評(píng)價(jià)軟件質(zhì)量:軟件的質(zhì)量和可靠性達(dá)到可以接受的軟件的質(zhì)量和可靠性達(dá)到可以接受的程度;程度;所做的測(cè)試不足以發(fā)現(xiàn)嚴(yán)重的錯(cuò)誤;所做的測(cè)試不足以發(fā)現(xiàn)嚴(yán)重的錯(cuò)誤;如果測(cè)試發(fā)現(xiàn)不了錯(cuò)誤,可以肯定,測(cè)如果測(cè)試發(fā)現(xiàn)不了錯(cuò)誤,可以肯定,測(cè)試配置考慮得不夠細(xì)致充分,錯(cuò)誤仍然試配置考慮得不夠細(xì)致充分,錯(cuò)誤仍然潛伏在軟件中潛伏在軟件中14測(cè)試與軟件開(kāi)發(fā)各階段的關(guān)系測(cè)試與軟件開(kāi)發(fā)各階段的關(guān)系軟件開(kāi)發(fā)過(guò)程是一個(gè)自頂向下,逐步細(xì)軟件開(kāi)發(fā)過(guò)程是一個(gè)自頂向下,逐步細(xì)化的過(guò)程化的過(guò)程軟件計(jì)劃階段定義軟件范圍(作用域)軟件計(jì)劃階段定義軟件范圍(作用域)軟件需求分析階段建立軟件信息域、功軟件需求分析階段建立軟件信息域、功能和性能需求、約束等能和性能需求、約束等軟件設(shè)計(jì)階段建立軟件體系結(jié)構(gòu)、用戶(hù)軟件設(shè)計(jì)階段建立軟件體系結(jié)構(gòu)、用戶(hù)接口、數(shù)據(jù)結(jié)構(gòu)和細(xì)部設(shè)計(jì)接口、數(shù)據(jù)結(jié)構(gòu)和細(xì)部設(shè)計(jì)程序編碼階段把設(shè)計(jì)用某種程序設(shè)計(jì)語(yǔ)程序編碼階段把設(shè)計(jì)用某種程序設(shè)計(jì)語(yǔ)言轉(zhuǎn)換成程序代碼言轉(zhuǎn)換成程序代碼15測(cè)試過(guò)程是依相反順序安排的自底向上,測(cè)試過(guò)程是依相反順序安排的自底向上,逐步集成的過(guò)程。
逐步集成的過(guò)程需求分析需求分析設(shè)計(jì)設(shè)計(jì)程序編碼程序編碼單元測(cè)試單元測(cè)試集成測(cè)試集成測(cè)試確認(rèn)測(cè)試確認(rèn)測(cè)試詳細(xì)設(shè)計(jì)規(guī)格說(shuō)明詳細(xì)設(shè)計(jì)規(guī)格說(shuō)明概要設(shè)計(jì)規(guī)格說(shuō)明概要設(shè)計(jì)規(guī)格說(shuō)明需求規(guī)格說(shuō)明需求規(guī)格說(shuō)明16測(cè)試的充分性測(cè)試的充分性測(cè)試的充分性是測(cè)試的充分性是1975年由年由Goodenough和和Gerhart提出來(lái)的提出來(lái)的他們提出了一些軟件測(cè)試充分性準(zhǔn)則,他們提出了一些軟件測(cè)試充分性準(zhǔn)則,用以表明測(cè)試數(shù)據(jù)必須具備什么性質(zhì)才用以表明測(cè)試數(shù)據(jù)必須具備什么性質(zhì)才能算作是一個(gè)徹底的測(cè)試能算作是一個(gè)徹底的測(cè)試軟件測(cè)試的充分性從軟件在有限多個(gè)輸軟件測(cè)試的充分性從軟件在有限多個(gè)輸入數(shù)據(jù)的行為,判斷軟件在所有輸入數(shù)入數(shù)據(jù)的行為,判斷軟件在所有輸入數(shù)據(jù)上的行為據(jù)上的行為17Weyuker測(cè)試充分性準(zhǔn)則測(cè)試充分性準(zhǔn)則1.空測(cè)試對(duì)任何軟件都是不充分的空空測(cè)試對(duì)任何軟件都是不充分的空測(cè)試用例集合意味著軟件沒(méi)有測(cè)試測(cè)試用例集合意味著軟件沒(méi)有測(cè)試2.有限性有限性 對(duì)任何軟件都存在有限的充對(duì)任何軟件都存在有限的充分測(cè)試集合因?yàn)檐浖y(cè)試必須的有分測(cè)試集合因?yàn)檐浖y(cè)試必須的有限時(shí)間內(nèi)完成限時(shí)間內(nèi)完成3.單調(diào)性單調(diào)性 如果一個(gè)軟件系統(tǒng)在一個(gè)測(cè)如果一個(gè)軟件系統(tǒng)在一個(gè)測(cè)試用例集合上是的測(cè)試是充分的,那試用例集合上是的測(cè)試是充分的,那么,再多測(cè)試一些用例也應(yīng)是充分的。
么,再多測(cè)試一些用例也應(yīng)是充分的184.非非復(fù)合性復(fù)合性 即使對(duì)軟件所有成分都作即使對(duì)軟件所有成分都作了充分的測(cè)試,也不表明整個(gè)軟件的了充分的測(cè)試,也不表明整個(gè)軟件的測(cè)試已經(jīng)充分了測(cè)試已經(jīng)充分了5.非分解性非分解性 即使對(duì)軟件整體做了充分即使對(duì)軟件整體做了充分的測(cè)試,也不表明軟件系統(tǒng)中各個(gè)成的測(cè)試,也不表明軟件系統(tǒng)中各個(gè)成分都已得到充分的測(cè)試分都已得到充分的測(cè)試6.復(fù)雜性復(fù)雜性 軟件越復(fù)雜,需要的測(cè)試用軟件越復(fù)雜,需要的測(cè)試用例就越多例就越多7.回報(bào)遞減率回報(bào)遞減率 測(cè)試得越多,進(jìn)一步測(cè)測(cè)試得越多,進(jìn)一步測(cè)試所能得到的充分性增長(zhǎng)就越少試所能得到的充分性增長(zhǎng)就越少198.軟件測(cè)試的充分性與軟件需求和軟件軟件測(cè)試的充分性與軟件需求和軟件實(shí)現(xiàn)有關(guān)例如,實(shí)現(xiàn)有關(guān)例如,對(duì)于兩個(gè)結(jié)構(gòu)相同的程序,會(huì)有一對(duì)于兩個(gè)結(jié)構(gòu)相同的程序,會(huì)有一個(gè)測(cè)試用例集合,它對(duì)一個(gè)程序是個(gè)測(cè)試用例集合,它對(duì)一個(gè)程序是充分的,而對(duì)另一個(gè)程序系統(tǒng)則是充分的,而對(duì)另一個(gè)程序系統(tǒng)則是不充分的;不充分的;類(lèi)似地,存在兩個(gè)程序,它們的語(yǔ)類(lèi)似地,存在兩個(gè)程序,它們的語(yǔ)義是相同的,但存在一個(gè)測(cè)試用例義是相同的,但存在一個(gè)測(cè)試用例集合,它對(duì)于一個(gè)程序是充分的,集合,它對(duì)于一個(gè)程序是充分的,而對(duì)于另一個(gè)程序則是不充分的。
而對(duì)于另一個(gè)程序則是不充分的20測(cè)試方法與測(cè)試用例設(shè)計(jì)測(cè)試方法與測(cè)試用例設(shè)計(jì)黑盒測(cè)試黑盒測(cè)試uu等價(jià)類(lèi)劃分等價(jià)類(lèi)劃分uu邊界值分析邊界值分析uu錯(cuò)誤推測(cè)法錯(cuò)誤推測(cè)法uu因果圖因果圖白盒測(cè)試白盒測(cè)試uu邏輯覆蓋邏輯覆蓋uu判定結(jié)構(gòu)分析判定結(jié)構(gòu)分析uu循環(huán)結(jié)構(gòu)分析循環(huán)結(jié)構(gòu)分析u基本路徑覆蓋基本路徑覆蓋21黑盒測(cè)試黑盒測(cè)試這種方法是把這種方法是把測(cè)試對(duì)象測(cè)試對(duì)象看做看做一個(gè)黑盒一個(gè)黑盒,測(cè)試人員完全不考慮程序內(nèi)部的邏輯結(jié)測(cè)試人員完全不考慮程序內(nèi)部的邏輯結(jié)構(gòu)和內(nèi)部特性,只依據(jù)程序的需求和功構(gòu)和內(nèi)部特性,只依據(jù)程序的需求和功能規(guī)格說(shuō)明,檢查程序的功能是否符合能規(guī)格說(shuō)明,檢查程序的功能是否符合它的功能說(shuō)明它的功能說(shuō)明黑盒測(cè)試叫做黑盒測(cè)試叫做功能測(cè)試功能測(cè)試或或數(shù)據(jù)驅(qū)動(dòng)測(cè)試數(shù)據(jù)驅(qū)動(dòng)測(cè)試一種特殊的黑盒測(cè)試叫做一種特殊的黑盒測(cè)試叫做接口測(cè)試接口測(cè)試,它,它不管程序的需求和實(shí)現(xiàn)細(xì)節(jié),僅依據(jù)程不管程序的需求和實(shí)現(xiàn)細(xì)節(jié),僅依據(jù)程序與其外部環(huán)境的接口來(lái)選擇測(cè)試數(shù)據(jù)序與其外部環(huán)境的接口來(lái)選擇測(cè)試數(shù)據(jù)22黑盒測(cè)試方法是在程序接口上進(jìn)行測(cè)試,黑盒測(cè)試方法是在程序接口上進(jìn)行測(cè)試,主要是為了發(fā)現(xiàn)以下錯(cuò)誤主要是為了發(fā)現(xiàn)以下錯(cuò)誤:uu 是否有不正確或遺漏了的功能是否有不正確或遺漏了的功能?uu 在接口上,在接口上,輸入能否正確地接受輸入能否正確地接受?能否輸出正確的結(jié)果能否輸出正確的結(jié)果?uu 是否有數(shù)據(jù)結(jié)構(gòu)錯(cuò)誤或外部信息是否有數(shù)據(jù)結(jié)構(gòu)錯(cuò)誤或外部信息(例如數(shù)據(jù)文件例如數(shù)據(jù)文件)訪(fǎng)問(wèn)錯(cuò)誤訪(fǎng)問(wèn)錯(cuò)誤?uu 性能上是否能夠滿(mǎn)足要求性能上是否能夠滿(mǎn)足要求?uu 是否有初始化或終止性錯(cuò)誤是否有初始化或終止性錯(cuò)誤?23用黑盒測(cè)試發(fā)現(xiàn)程序錯(cuò)誤,必須在用黑盒測(cè)試發(fā)現(xiàn)程序錯(cuò)誤,必須在所有所有可能的輸入條件和輸出條件可能的輸入條件和輸出條件中確定測(cè)試中確定測(cè)試數(shù)據(jù),檢查程序能否產(chǎn)生正確的輸出。
數(shù)據(jù),檢查程序能否產(chǎn)生正確的輸出但這是但這是不可能不可能的例如,設(shè)一個(gè)的例如,設(shè)一個(gè)程序程序P有有輸入量輸入量X和和Y及及輸出量輸出量Z在字長(zhǎng)為在字長(zhǎng)為32位的計(jì)算機(jī)上運(yùn)行若位的計(jì)算機(jī)上運(yùn)行若X、Y取整數(shù),取整數(shù),按黑盒方法進(jìn)行窮舉測(cè)試:可能采用的按黑盒方法進(jìn)行窮舉測(cè)試:可能采用的測(cè)試數(shù)據(jù)組個(gè)數(shù)測(cè)試數(shù)據(jù)組個(gè)數(shù):232232264 如果測(cè)試一組數(shù)據(jù)需要如果測(cè)試一組數(shù)據(jù)需要1毫秒毫秒,一年工作一年工作36524小時(shí),完成所有測(cè)試需小時(shí),完成所有測(cè)試需5億年億年24白盒測(cè)試白盒測(cè)試此方法此方法把測(cè)試對(duì)象看做一個(gè)透明的盒子把測(cè)試對(duì)象看做一個(gè)透明的盒子,它允許測(cè)試人員利用程序內(nèi)部的邏輯結(jié)它允許測(cè)試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關(guān)信息,設(shè)計(jì)或選擇測(cè)試用例,構(gòu)及有關(guān)信息,設(shè)計(jì)或選擇測(cè)試用例,對(duì)程序所有邏輯路徑進(jìn)行測(cè)試對(duì)程序所有邏輯路徑進(jìn)行測(cè)試通過(guò)通過(guò)在不同點(diǎn)檢查程序的狀態(tài)在不同點(diǎn)檢查程序的狀態(tài),確定實(shí),確定實(shí)際的狀態(tài)是否與預(yù)期的狀態(tài)一致因此際的狀態(tài)是否與預(yù)期的狀態(tài)一致因此白盒測(cè)試又稱(chēng)為結(jié)構(gòu)測(cè)試或邏輯驅(qū)動(dòng)測(cè)白盒測(cè)試又稱(chēng)為結(jié)構(gòu)測(cè)試或邏輯驅(qū)動(dòng)測(cè)試25軟件人員使用白盒測(cè)試方法,主要想對(duì)軟件人員使用白盒測(cè)試方法,主要想對(duì)程序模塊進(jìn)行如下的檢查:程序模塊進(jìn)行如下的檢查:uu 對(duì)程序模塊的對(duì)程序模塊的所有獨(dú)立的執(zhí)行路徑所有獨(dú)立的執(zhí)行路徑至少測(cè)試一次至少測(cè)試一次 路徑覆蓋測(cè)試路徑覆蓋測(cè)試;uu 對(duì)對(duì)所有的邏輯判定所有的邏輯判定,取取“真真”與取與取“假假”的兩種情況都至少測(cè)試一次的兩種情況都至少測(cè)試一次 邏輯覆蓋測(cè)試邏輯覆蓋測(cè)試;uu 在循環(huán)的邊界和運(yùn)行界限內(nèi)執(zhí)行循在循環(huán)的邊界和運(yùn)行界限內(nèi)執(zhí)行循環(huán)體環(huán)體 控制流測(cè)試控制流測(cè)試;uu 測(cè)試測(cè)試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性?xún)?nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性 數(shù)數(shù)據(jù)流測(cè)試、領(lǐng)域測(cè)試據(jù)流測(cè)試、領(lǐng)域測(cè)試等。
等26對(duì)一個(gè)具有對(duì)一個(gè)具有多重選擇和循環(huán)嵌套多重選擇和循環(huán)嵌套的程序,的程序,不同的路徑數(shù)目可能是天文數(shù)字不同的路徑數(shù)目可能是天文數(shù)字給出一個(gè)小程序的流程圖,它包括了一個(gè)執(zhí)一個(gè)小程序的流程圖,它包括了一個(gè)執(zhí)行行20次的循環(huán)次的循環(huán)包含的不同執(zhí)行路徑數(shù)達(dá)包含的不同執(zhí)行路徑數(shù)達(dá) 520 條,對(duì)每條,對(duì)每一條路徑進(jìn)行測(cè)試需要一條路徑進(jìn)行測(cè)試需要1毫秒,假定一毫秒,假定一年工作年工作36524小時(shí),要想把所有路徑測(cè)小時(shí),要想把所有路徑測(cè)試完,需試完,需3170年2728邏輯覆蓋邏輯覆蓋 語(yǔ)句覆蓋語(yǔ)句覆蓋 判定覆蓋判定覆蓋 條件覆蓋條件覆蓋 判定條件覆蓋判定條件覆蓋 條件組合覆蓋條件組合覆蓋 路徑覆蓋路徑覆蓋邏輯覆蓋是以邏輯覆蓋是以程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)的設(shè)計(jì)測(cè)試用例的技術(shù)它屬白盒測(cè)試的設(shè)計(jì)測(cè)試用例的技術(shù)它屬白盒測(cè)試29(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1T TT TF FF Fabdce30L1(a c e)=(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)31L2(a b d)=not(A 1)and(B=0)and not(A=2)or(X 1)=not(A 1)or not(B=0)and not(A=2)and not(X1)=not(A 1)and not(A=2)and not(X 1)or not(B=0)and not(A=2)and not(X 1)32L3(a b e)=not(A 1)and(B=0)and (A=2)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)33L4(a c 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)34語(yǔ)句覆蓋語(yǔ)句覆蓋語(yǔ)句覆蓋就是設(shè)計(jì)若干個(gè)測(cè)試用例,運(yùn)語(yǔ)句覆蓋就是設(shè)計(jì)若干個(gè)測(cè)試用例,運(yùn)行被測(cè)程序,使得行被測(cè)程序,使得每一可執(zhí)行語(yǔ)句至少每一可執(zhí)行語(yǔ)句至少執(zhí)行一次執(zhí)行一次。
在圖例中,正好所有的可執(zhí)行語(yǔ)句都在在圖例中,正好所有的可執(zhí)行語(yǔ)句都在路徑路徑L1上,所以選擇上,所以選擇路徑路徑 L1設(shè)計(jì)測(cè)試用設(shè)計(jì)測(cè)試用例,就可以覆蓋所有的可執(zhí)行語(yǔ)句例,就可以覆蓋所有的可執(zhí)行語(yǔ)句35測(cè)試用例的設(shè)計(jì)格式如下測(cè)試用例的設(shè)計(jì)格式如下【輸入的【輸入的(A,B,X),輸出的輸出的(A,B,X)】為圖例設(shè)計(jì)滿(mǎn)足為圖例設(shè)計(jì)滿(mǎn)足語(yǔ)句覆蓋語(yǔ)句覆蓋的測(cè)試用例是的測(cè)試用例是:【(2,0,4),(2,0,3)】覆蓋覆蓋 ace【L1】(A=2)and(B=0)or (A1)and(B=0)and(X/A1)36 判定覆蓋判定覆蓋判定覆蓋就是設(shè)計(jì)若干個(gè)測(cè)試用例,運(yùn)判定覆蓋就是設(shè)計(jì)若干個(gè)測(cè)試用例,運(yùn)行被測(cè)程序,使得行被測(cè)程序,使得程序中每個(gè)判斷的取程序中每個(gè)判斷的取真分支和取假分支至少經(jīng)歷一次真分支和取假分支至少經(jīng)歷一次判定覆蓋又稱(chēng)為判定覆蓋又稱(chēng)為分支覆蓋分支覆蓋對(duì)于圖例,如果選擇對(duì)于圖例,如果選擇路徑路徑L1和和L2,就可就可得滿(mǎn)足要求的測(cè)試用例得滿(mǎn)足要求的測(cè)試用例:37【(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)and not(A=2)and not(X 1)or not(B=0)and not(A=2)and not(X 1)38如果選擇路徑如果選擇路徑L3和和L4,還可得另一組可還可得另一組可用的測(cè)試用例用的測(cè)試用例:【(2,1,1),(2,1,2)】覆蓋】覆蓋 abe【L3】【(3,0,3),(3,0,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 not(X/A 1)39條件覆蓋條件覆蓋條件覆蓋就是設(shè)計(jì)若干個(gè)測(cè)試用例,運(yùn)行條件覆蓋就是設(shè)計(jì)若干個(gè)測(cè)試用例,運(yùn)行被測(cè)程序,使得程序中被測(cè)程序,使得程序中每個(gè)判斷的每個(gè)條每個(gè)判斷的每個(gè)條件的可能取值至少執(zhí)行一次件的可能取值至少執(zhí)行一次。
在圖例中,我們事先可對(duì)所有條件的取值在圖例中,我們事先可對(duì)所有條件的取值加以標(biāo)記例如,加以標(biāo)記例如,對(duì)于第一個(gè)判斷:對(duì)于第一個(gè)判斷:uu 條件條件 A1 取真為取真為 ,取假為,取假為 條件條件 B0 取真為取真為 ,取假為,取假為40對(duì)于第二個(gè)判斷:對(duì)于第二個(gè)判斷:uu 條件條件A2 取真為取真為 ,取假為,取假為 條件條件X1 取真為取真為 ,取假為,取假為 測(cè)試用例測(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)或或41 測(cè)測(cè) 試試 用用 例例覆蓋分支覆蓋分支 條件取值條件取值【(1,0,3),(1,0,4)】L3(b,e)【(2,1,1),(2,1,2)】L3(b,e)判定條件覆蓋就是設(shè)計(jì)足夠的測(cè)試用判定條件覆蓋就是設(shè)計(jì)足夠的測(cè)試用例,使得例,使得判斷中每個(gè)條件的所有可能取判斷中每個(gè)條件的所有可能取值至少執(zhí)行一次值至少執(zhí)行一次,每個(gè)判斷中的每個(gè)分每個(gè)判斷中的每個(gè)分支至少執(zhí)行一次支至少執(zhí)行一次判定條件覆蓋判定條件覆蓋42 測(cè)測(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(X 1)or not(B=0)and not(A=2)and not(X 1)43 andorA1T TB=0T TX=X/AT TF FF FA=2T TF FX1F FX=X+144條件組合覆蓋條件組合覆蓋條件組合覆蓋就是設(shè)計(jì)足夠的測(cè)試用例,條件組合覆蓋就是設(shè)計(jì)足夠的測(cè)試用例,運(yùn)行被測(cè)程序,使得運(yùn)行被測(cè)程序,使得每個(gè)判斷的所有可每個(gè)判斷的所有可能的條件取值組合至少執(zhí)行一次能的條件取值組合至少執(zhí)行一次。
記記 A1,B0 作作 A1,B0 作作 A 1,B0 作作 A 1,B0 作作45 A2,X1 作作 A2,X 1 作作 A2,X1 作作 A2,X 1 作作 測(cè)測(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),46路徑測(cè)試路徑測(cè)試路徑測(cè)試就是設(shè)計(jì)足夠的測(cè)試用例,路徑測(cè)試就是設(shè)計(jì)足夠的測(cè)試用例,覆覆蓋程序中所有可能的路徑蓋程序中所有可能的路徑測(cè)測(cè) 試試 用用 例例 通過(guò)路徑通過(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)47判定結(jié)構(gòu)分析判定結(jié)構(gòu)分析當(dāng)程序中判定多于一個(gè)時(shí),形成的分支當(dāng)程序中判定多于一個(gè)時(shí),形成的分支結(jié)構(gòu)可以分為兩類(lèi):結(jié)構(gòu)可以分為兩類(lèi):嵌套型分支結(jié)構(gòu)嵌套型分支結(jié)構(gòu)和和連鎖型分支結(jié)構(gòu)連鎖型分支結(jié)構(gòu)對(duì)于嵌套型分支結(jié)構(gòu),若有對(duì)于嵌套型分支結(jié)構(gòu),若有n個(gè)判定語(yǔ)句,個(gè)判定語(yǔ)句,需要需要n+1個(gè)測(cè)試用例;個(gè)測(cè)試用例;對(duì)于連鎖型分支結(jié)構(gòu),對(duì)于連鎖型分支結(jié)構(gòu),若有若有n個(gè)判定語(yǔ)句,個(gè)判定語(yǔ)句,需要有需要有2n個(gè)測(cè)試用例,覆蓋它的個(gè)測(cè)試用例,覆蓋它的2n條路徑。
條路徑48嵌套型分支結(jié)構(gòu)嵌套型分支結(jié)構(gòu)連鎖型分支結(jié)構(gòu)連鎖型分支結(jié)構(gòu)s1s2s3s4p1p2p3s1s2s3s4s5s6p1p2p349對(duì)于連鎖型分支結(jié)構(gòu),當(dāng)對(duì)于連鎖型分支結(jié)構(gòu),當(dāng) n 較大時(shí)將無(wú)較大時(shí)將無(wú)法測(cè)試為減少測(cè)試用例的數(shù)目,可采用為減少測(cè)試用例的數(shù)目,可采用試驗(yàn)設(shè)試驗(yàn)設(shè)計(jì)法計(jì)法,抽取部分路徑進(jìn)行測(cè)試抽取部分路徑進(jìn)行測(cè)試由于抽樣服從均勻分布,因此,在假定由于抽樣服從均勻分布,因此,在假定各條路徑的重要性相同,或暫不明確各各條路徑的重要性相同,或暫不明確各條路徑的重要性的情況下可以做到均勻條路徑的重要性的情況下可以做到均勻抽樣如果明確了各條路徑的重要性,抽樣如果明確了各條路徑的重要性,還可以采取加權(quán)的辦法,篩選掉部分路還可以采取加權(quán)的辦法,篩選掉部分路徑,再用如下的措施進(jìn)行抽樣徑,再用如下的措施進(jìn)行抽樣50設(shè)設(shè)連鎖型分支結(jié)構(gòu)中有連鎖型分支結(jié)構(gòu)中有 n 個(gè)判定,計(jì)算個(gè)判定,計(jì)算滿(mǎn)足關(guān)系式滿(mǎn)足關(guān)系式 n+12m 的最小自然數(shù)的最小自然數(shù)m;設(shè)設(shè)t=2m,取正交表取正交表Lt,并利用它設(shè)計(jì)測(cè)并利用它設(shè)計(jì)測(cè)試數(shù)據(jù)例如,一個(gè)連鎖型分支結(jié)構(gòu)中有三個(gè)判例如,一個(gè)連鎖型分支結(jié)構(gòu)中有三個(gè)判定語(yǔ)句定語(yǔ)句p1,p2,p3。
全部路徑是全部路徑是238 條先計(jì)算先計(jì)算3+12m=t 的的 t,得得 t=4取正交取正交表表L4,把每一列當(dāng)做一個(gè)判定,每一行把每一列當(dāng)做一個(gè)判定,每一行當(dāng)做可取的測(cè)試用例,可得當(dāng)做可取的測(cè)試用例,可得4個(gè)測(cè)試用例個(gè)測(cè)試用例51用各個(gè)判定的用各個(gè)判定的取假分支取假分支取代正交表取代正交表L4中中的的“0”,用,用取真分支取真分支取代正交表中的取代正交表中的“1”,就建立起一個(gè)測(cè)試路徑矩陣這,就建立起一個(gè)測(cè)試路徑矩陣這樣,測(cè)試路徑數(shù)目從樣,測(cè)試路徑數(shù)目從238條減少到條減少到314條L40 0 01 0 10 1 11 1 01 2 31234用例用例s1 s3 s5s2 s3 s6s1 s4 s6s2 s4 s5p1 p2 p31234s1 s3 s5s2 s3 s6s1 s4 s6s2 s4 s5路路路路 徑徑徑徑52s1s3s5p1p2p3s2s3s6p1p2p3s1s4s6p1p2p3s2s4s5p1p2p353L201112L40 0 01 0 10 1 11 1 01 2 31234L80 0 0 0 0 0 01 0 1 0 1 0 10 1 1 0 0 1 111 0 0 1 1 00 0 0 1 1 1 110 1 1 0 1 00 1 1 1 1 0 01 1 0 1 0 0 11 2 3 4 5 6 712345678L2L454循環(huán)結(jié)構(gòu)分析循環(huán)結(jié)構(gòu)分析循環(huán)分為循環(huán)分為4種不同類(lèi)型:種不同類(lèi)型:簡(jiǎn)單循環(huán)簡(jiǎn)單循環(huán)、連鎖連鎖循環(huán)循環(huán)、嵌套循環(huán)嵌套循環(huán)和和非結(jié)構(gòu)循環(huán)非結(jié)構(gòu)循環(huán)。
1)簡(jiǎn)單循環(huán)簡(jiǎn)單循環(huán) 零次循環(huán)零次循環(huán):從循環(huán)入口到出口:從循環(huán)入口到出口 一次循環(huán)一次循環(huán):檢查循環(huán)初始值:檢查循環(huán)初始值 二次循環(huán)二次循環(huán):檢查多次循環(huán):檢查多次循環(huán) m次循環(huán):次循環(huán):檢查在多次循環(huán)檢查在多次循環(huán) 最大次數(shù)循環(huán)、比最大次數(shù)多一次、最大次數(shù)循環(huán)、比最大次數(shù)多一次、少一次的循環(huán)少一次的循環(huán)5556簡(jiǎn)單循環(huán)設(shè)計(jì)測(cè)試用例的例子:簡(jiǎn)單循環(huán)設(shè)計(jì)測(cè)試用例的例子:求最小值求最小值k=i;for(j=i+1;j=n;j+)if(Aj Ak)k=j;57k=i;j=i+1;j=n?AjAk?k=jj+fdcabe58測(cè)試用例選擇測(cè)試用例選擇59 對(duì)對(duì)最內(nèi)層循環(huán)做簡(jiǎn)單循環(huán)的全部測(cè)最內(nèi)層循環(huán)做簡(jiǎn)單循環(huán)的全部測(cè)試試所有其他層的循環(huán)變量置為最小值;所有其他層的循環(huán)變量置為最小值;逐步外推,對(duì)其逐步外推,對(duì)其外面一層循環(huán)進(jìn)行外面一層循環(huán)進(jìn)行測(cè)試測(cè)試測(cè)試時(shí)保持所有外層循環(huán)的循環(huán)變測(cè)試時(shí)保持所有外層循環(huán)的循環(huán)變量取最小值,所有其他嵌套內(nèi)層循環(huán)的循量取最小值,所有其他嵌套內(nèi)層循環(huán)的循環(huán)變量取環(huán)變量取“典型典型”值反復(fù)進(jìn)行,直到所有各層循環(huán)測(cè)試反復(fù)進(jìn)行,直到所有各層循環(huán)測(cè)試完畢2)嵌套循環(huán)嵌套循環(huán)60 對(duì)全部各層循環(huán)同時(shí)取最小循環(huán)次數(shù),對(duì)全部各層循環(huán)同時(shí)取最小循環(huán)次數(shù),或者同時(shí)取最大循環(huán)次數(shù)或者同時(shí)取最大循環(huán)次數(shù)(3)連鎖循環(huán)連鎖循環(huán)如果各個(gè)循環(huán)如果各個(gè)循環(huán)互相獨(dú)立互相獨(dú)立,則可以用與簡(jiǎn),則可以用與簡(jiǎn)單循環(huán)相同的方法進(jìn)行測(cè)試。
但如果幾單循環(huán)相同的方法進(jìn)行測(cè)試但如果幾個(gè)循環(huán)不個(gè)循環(huán)不是互相獨(dú)立是互相獨(dú)立的,則需要使用測(cè)的,則需要使用測(cè)試嵌套循環(huán)的辦法來(lái)處理試嵌套循環(huán)的辦法來(lái)處理4)非結(jié)構(gòu)循環(huán)非結(jié)構(gòu)循環(huán)這一類(lèi)循環(huán)應(yīng)該使用結(jié)構(gòu)化程序設(shè)計(jì)方這一類(lèi)循環(huán)應(yīng)該使用結(jié)構(gòu)化程序設(shè)計(jì)方法重新設(shè)計(jì)測(cè)試用例法重新設(shè)計(jì)測(cè)試用例61基本路徑測(cè)試基本路徑測(cè)試基本路徑測(cè)試方法把覆蓋的路徑數(shù)壓縮基本路徑測(cè)試方法把覆蓋的路徑數(shù)壓縮到一定限度內(nèi),到一定限度內(nèi),程序中的循環(huán)體最多只程序中的循環(huán)體最多只執(zhí)行一次執(zhí)行一次它是在程序控制流圖的基礎(chǔ)上,它是在程序控制流圖的基礎(chǔ)上,分析控分析控制構(gòu)造的環(huán)路復(fù)雜性制構(gòu)造的環(huán)路復(fù)雜性,導(dǎo)出基本可執(zhí)行導(dǎo)出基本可執(zhí)行路徑集合路徑集合,設(shè)計(jì)測(cè)試用例的設(shè)計(jì)測(cè)試用例的方法設(shè)計(jì)方法設(shè)計(jì)出的測(cè)試用例要保證在測(cè)試中,程序的出的測(cè)試用例要保證在測(cè)試中,程序的每一個(gè)可執(zhí)行語(yǔ)句至少要執(zhí)行一次每一個(gè)可執(zhí)行語(yǔ)句至少要執(zhí)行一次621.程序的控制流圖程序的控制流圖符號(hào)符號(hào)為控制流圖的一個(gè)結(jié)點(diǎn),表示一為控制流圖的一個(gè)結(jié)點(diǎn),表示一個(gè)或多個(gè)無(wú)分支的個(gè)或多個(gè)無(wú)分支的PDL語(yǔ)句或源程序語(yǔ)語(yǔ)句或源程序語(yǔ)句箭頭為邊,表示控制流的方向箭頭為邊,表示控制流的方向。
63在選擇或多分支結(jié)構(gòu)中,分支的匯聚處在選擇或多分支結(jié)構(gòu)中,分支的匯聚處應(yīng)有一個(gè)匯聚結(jié)點(diǎn)應(yīng)有一個(gè)匯聚結(jié)點(diǎn)邊和結(jié)點(diǎn)圈定的區(qū)域叫做區(qū)域邊和結(jié)點(diǎn)圈定的區(qū)域叫做區(qū)域,當(dāng)對(duì)區(qū),當(dāng)對(duì)區(qū)域計(jì)數(shù)時(shí),圖形外的區(qū)域也應(yīng)記為一個(gè)域計(jì)數(shù)時(shí),圖形外的區(qū)域也應(yīng)記為一個(gè)區(qū)域如果判斷中的條件表達(dá)式是由一個(gè)或多如果判斷中的條件表達(dá)式是由一個(gè)或多個(gè)邏輯運(yùn)算符個(gè)邏輯運(yùn)算符(OR,AND,.)連接的復(fù)連接的復(fù)合條件表達(dá)式,則需改為合條件表達(dá)式,則需改為 一系列一系列只有單只有單個(gè)條件的嵌套的判斷個(gè)條件的嵌套的判斷6465abyxxif a or b then procedure x else procedure y;.662.程序環(huán)路復(fù)雜性程序環(huán)路復(fù)雜性程序的環(huán)路復(fù)雜性給出了程序的環(huán)路復(fù)雜性給出了程序基本路徑程序基本路徑集中的獨(dú)立路徑條數(shù)集中的獨(dú)立路徑條數(shù),這是確保程序中,這是確保程序中每個(gè)可執(zhí)行語(yǔ)句至少執(zhí)行一次所必需的每個(gè)可執(zhí)行語(yǔ)句至少執(zhí)行一次所必需的測(cè)試用例數(shù)目的上界測(cè)試用例數(shù)目的上界從控制流圖來(lái)看,一條獨(dú)立路徑是至少?gòu)目刂屏鲌D來(lái)看,一條獨(dú)立路徑是至少包含有一條在其他獨(dú)立路徑中從未有過(guò)包含有一條在其他獨(dú)立路徑中從未有過(guò)的邊的路徑。
的邊的路徑67例如,在圖示的控制流圖中,一組獨(dú)立例如,在圖示的控制流圖中,一組獨(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-9-10-1-11路徑路徑 path1,path2,path3,path4組成組成了控制流圖的一個(gè)基本路徑集了控制流圖的一個(gè)基本路徑集683.導(dǎo)出測(cè)試用例導(dǎo)出測(cè)試用例導(dǎo)出測(cè)試用例,導(dǎo)出測(cè)試用例,確保基本路徑集中的每確?;韭窂郊械拿恳粭l路徑的執(zhí)行一條路徑的執(zhí)行根據(jù)判斷結(jié)點(diǎn)給出的條件,選擇適當(dāng)?shù)母鶕?jù)判斷結(jié)點(diǎn)給出的條件,選擇適當(dāng)?shù)臄?shù)據(jù)以保證某一條路徑可以被測(cè)試到數(shù)據(jù)以保證某一條路徑可以被測(cè)試到 用邏輯覆蓋方法用邏輯覆蓋方法每個(gè)每個(gè)測(cè)試用例執(zhí)行之后測(cè)試用例執(zhí)行之后,與預(yù)期結(jié)果進(jìn)與預(yù)期結(jié)果進(jìn)行比較行比較如果所有測(cè)試用例都執(zhí)行完畢,如果所有測(cè)試用例都執(zhí)行完畢,則可以確信程序中所有的可執(zhí)行語(yǔ)句至則可以確信程序中所有的可執(zhí)行語(yǔ)句至少被執(zhí)行了一次少被執(zhí)行了一次69必須注意,一些獨(dú)立的路徑必須注意,一些獨(dú)立的路徑(如例中的如例中的path1),往往不是完全孤立的,有時(shí)它往往不是完全孤立的,有時(shí)它是程序正常的控制流的一部分,這時(shí),是程序正常的控制流的一部分,這時(shí),這些路徑的測(cè)試可以是另一條路徑測(cè)試這些路徑的測(cè)試可以是另一條路徑測(cè)試的一部分。
的一部分70等價(jià)類(lèi)劃分等價(jià)類(lèi)劃分等價(jià)類(lèi)劃分是一種典型的黑盒測(cè)試方法,等價(jià)類(lèi)劃分是一種典型的黑盒測(cè)試方法,使用這一方法時(shí),使用這一方法時(shí),完全不考慮程序的內(nèi)完全不考慮程序的內(nèi)部結(jié)構(gòu)部結(jié)構(gòu),只依據(jù)程序的規(guī)格說(shuō)明來(lái)設(shè)計(jì)只依據(jù)程序的規(guī)格說(shuō)明來(lái)設(shè)計(jì)測(cè)試用例測(cè)試用例等價(jià)類(lèi)劃分方法等價(jià)類(lèi)劃分方法把所有可能的輸入數(shù)據(jù)把所有可能的輸入數(shù)據(jù),即程序的輸入域即程序的輸入域劃分成若干部分劃分成若干部分,然后,然后從每一部分中選取少數(shù)有代表性的數(shù)據(jù)從每一部分中選取少數(shù)有代表性的數(shù)據(jù)做為測(cè)試用例做為測(cè)試用例71使用這一方法設(shè)計(jì)測(cè)試用例要經(jīng)歷使用這一方法設(shè)計(jì)測(cè)試用例要經(jīng)歷劃分劃分等價(jià)類(lèi)等價(jià)類(lèi)(列出等價(jià)類(lèi)表)和(列出等價(jià)類(lèi)表)和選取測(cè)試用選取測(cè)試用例例兩步1)劃分等價(jià)類(lèi)劃分等價(jià)類(lèi)等價(jià)類(lèi)是指某個(gè)輸入域的子集合在該等價(jià)類(lèi)是指某個(gè)輸入域的子集合在該子集合中,子集合中,各個(gè)輸入數(shù)據(jù)對(duì)于揭露程序各個(gè)輸入數(shù)據(jù)對(duì)于揭露程序中的錯(cuò)誤都是等效的中的錯(cuò)誤都是等效的測(cè)試某等價(jià)類(lèi)的測(cè)試某等價(jià)類(lèi)的代表值就等價(jià)于對(duì)這一類(lèi)其他值的測(cè)試代表值就等價(jià)于對(duì)這一類(lèi)其他值的測(cè)試72等價(jià)類(lèi)的劃分有兩種不同的情況:等價(jià)類(lèi)的劃分有兩種不同的情況:有效等價(jià)類(lèi)有效等價(jià)類(lèi):是指對(duì)于程序的規(guī)格說(shuō):是指對(duì)于程序的規(guī)格說(shuō)明來(lái)說(shuō),是合理的,有意義的輸入數(shù)據(jù)明來(lái)說(shuō),是合理的,有意義的輸入數(shù)據(jù)構(gòu)成的集合。
構(gòu)成的集合無(wú)效等價(jià)類(lèi)無(wú)效等價(jià)類(lèi):是指對(duì)于程序的規(guī)格說(shuō):是指對(duì)于程序的規(guī)格說(shuō)明來(lái)說(shuō),是不合理的,無(wú)意義的輸入數(shù)明來(lái)說(shuō),是不合理的,無(wú)意義的輸入數(shù)據(jù)構(gòu)成的集合據(jù)構(gòu)成的集合在設(shè)計(jì)測(cè)試用例時(shí),要同時(shí)考慮有效等在設(shè)計(jì)測(cè)試用例時(shí),要同時(shí)考慮有效等價(jià)類(lèi)和無(wú)效等價(jià)類(lèi)的設(shè)計(jì)價(jià)類(lèi)和無(wú)效等價(jià)類(lèi)的設(shè)計(jì)73劃分等價(jià)類(lèi)等價(jià)類(lèi)的原則劃分等價(jià)類(lèi)等價(jià)類(lèi)的原則1)如果輸入條件規(guī)定了取值范圍,或值如果輸入條件規(guī)定了取值范圍,或值的個(gè)數(shù),則可以確立一個(gè)有效等價(jià)類(lèi)和的個(gè)數(shù),則可以確立一個(gè)有效等價(jià)類(lèi)和兩個(gè)無(wú)效等價(jià)類(lèi)兩個(gè)無(wú)效等價(jià)類(lèi)例如,在程序的規(guī)格說(shuō)明中,對(duì)輸入條例如,在程序的規(guī)格說(shuō)明中,對(duì)輸入條件有一句話(huà):件有一句話(huà):“項(xiàng)數(shù)可以從項(xiàng)數(shù)可以從1到到999”則有效等價(jià)類(lèi)是則有效等價(jià)類(lèi)是“1項(xiàng)數(shù)項(xiàng)數(shù)999”兩個(gè)無(wú)效等價(jià)類(lèi)是兩個(gè)無(wú)效等價(jià)類(lèi)是“項(xiàng)數(shù)項(xiàng)數(shù)1”或或“項(xiàng)數(shù)項(xiàng)數(shù)999”74在數(shù)軸上表示成在數(shù)軸上表示成:2)如果輸入條件規(guī)定了輸入值的集合,或如果輸入條件規(guī)定了輸入值的集合,或者是規(guī)定了者是規(guī)定了“必須如何必須如何”的條件,這時(shí)可的條件,這時(shí)可確立一個(gè)有效等價(jià)類(lèi)和一個(gè)無(wú)效等價(jià)類(lèi)確立一個(gè)有效等價(jià)類(lèi)和一個(gè)無(wú)效等價(jià)類(lèi)例如,在例如,在Pascal語(yǔ)言中對(duì)變量標(biāo)識(shí)符規(guī)定語(yǔ)言中對(duì)變量標(biāo)識(shí)符規(guī)定為為“以字母打頭的以字母打頭的串串”。
那么所有以那么所有以字母打頭的構(gòu)成有效等價(jià)類(lèi),而不在此集字母打頭的構(gòu)成有效等價(jià)類(lèi),而不在此集合內(nèi)(不以字母打頭)的歸于無(wú)效等價(jià)類(lèi)合內(nèi)(不以字母打頭)的歸于無(wú)效等價(jià)類(lèi)753)如果輸入條件是一個(gè)布爾量,則可以確如果輸入條件是一個(gè)布爾量,則可以確定一個(gè)有效等價(jià)類(lèi)和一個(gè)無(wú)效等價(jià)類(lèi)定一個(gè)有效等價(jià)類(lèi)和一個(gè)無(wú)效等價(jià)類(lèi)4)如果規(guī)定了輸入數(shù)據(jù)的一組值,而且程如果規(guī)定了輸入數(shù)據(jù)的一組值,而且程序要對(duì)每個(gè)輸入值分別進(jìn)行處理序要對(duì)每個(gè)輸入值分別進(jìn)行處理這時(shí)可這時(shí)可為為 每一個(gè)輸入值確立一個(gè)有效等價(jià)類(lèi),此每一個(gè)輸入值確立一個(gè)有效等價(jià)類(lèi),此外針對(duì)這組值確立一個(gè)無(wú)效等價(jià)類(lèi),它是外針對(duì)這組值確立一個(gè)無(wú)效等價(jià)類(lèi),它是所有不允許的輸入值的集合所有不允許的輸入值的集合76 例如,在教師上崗方案中規(guī)定對(duì)教授、例如,在教師上崗方案中規(guī)定對(duì)教授、副教授、講師和助教分別計(jì)算分?jǐn)?shù),做副教授、講師和助教分別計(jì)算分?jǐn)?shù),做相應(yīng)的處理因此可以確定相應(yīng)的處理因此可以確定4個(gè)有效等個(gè)有效等價(jià)類(lèi)為教授、副教授、講師和助教,一價(jià)類(lèi)為教授、副教授、講師和助教,一個(gè)無(wú)效等價(jià)類(lèi),它是所有不符合以上身個(gè)無(wú)效等價(jià)類(lèi),它是所有不符合以上身分的人員的輸入值的集合。
分的人員的輸入值的集合5)如果規(guī)定了輸入數(shù)據(jù)必須遵守的規(guī)則,如果規(guī)定了輸入數(shù)據(jù)必須遵守的規(guī)則,則可以確立一個(gè)有效等價(jià)類(lèi)(符合規(guī)則)則可以確立一個(gè)有效等價(jià)類(lèi)(符合規(guī)則)和若干個(gè)無(wú)效等價(jià)類(lèi)(從不同角度違反和若干個(gè)無(wú)效等價(jià)類(lèi)(從不同角度違反規(guī)則)77 例如,例如,Pascal語(yǔ)言規(guī)定語(yǔ)言規(guī)定“一個(gè)語(yǔ)句必須一個(gè)語(yǔ)句必須以分號(hào)以分號(hào);結(jié)束結(jié)束”這時(shí)可以確定一這時(shí)可以確定一個(gè)有效等價(jià)類(lèi)個(gè)有效等價(jià)類(lèi)“以以;結(jié)束結(jié)束”,若干,若干個(gè)無(wú)效等價(jià)類(lèi)個(gè)無(wú)效等價(jià)類(lèi)“以以:結(jié)束結(jié)束”、“以以,結(jié)束結(jié)束”、“以以 結(jié)束結(jié)束”、“以以L(fǎng)F結(jié)束結(jié)束”等2)確立測(cè)試用例確立測(cè)試用例在確立了等價(jià)類(lèi)之后,建立等價(jià)類(lèi)表,在確立了等價(jià)類(lèi)之后,建立等價(jià)類(lèi)表,列出所有劃分出的等價(jià)類(lèi)列出所有劃分出的等價(jià)類(lèi)78再?gòu)膭澐殖龅牡葍r(jià)類(lèi)中按以下原則選擇再?gòu)膭澐殖龅牡葍r(jià)類(lèi)中按以下原則選擇測(cè)試用例:測(cè)試用例:1)為每一個(gè)等價(jià)類(lèi)規(guī)定一個(gè)唯一編號(hào);為每一個(gè)等價(jià)類(lèi)規(guī)定一個(gè)唯一編號(hào);2)設(shè)計(jì)一個(gè)新的測(cè)試用例,使其設(shè)計(jì)一個(gè)新的測(cè)試用例,使其盡可能盡可能多地覆蓋尚未被覆蓋的有效等價(jià)類(lèi)多地覆蓋尚未被覆蓋的有效等價(jià)類(lèi),重,重復(fù)這一步,直到所有的有效等價(jià)類(lèi)都被復(fù)這一步,直到所有的有效等價(jià)類(lèi)都被覆蓋為止;覆蓋為止;3)設(shè)計(jì)一個(gè)新的測(cè)試用例,使其設(shè)計(jì)一個(gè)新的測(cè)試用例,使其僅覆蓋僅覆蓋一個(gè)尚未被覆蓋的無(wú)效等價(jià)類(lèi)一個(gè)尚未被覆蓋的無(wú)效等價(jià)類(lèi),重復(fù)這,重復(fù)這一步,直到所有的無(wú)效等價(jià)類(lèi)都被覆蓋一步,直到所有的無(wú)效等價(jià)類(lèi)都被覆蓋為止。
為止79用等價(jià)類(lèi)劃分法設(shè)計(jì)測(cè)試用例的實(shí)例用等價(jià)類(lèi)劃分法設(shè)計(jì)測(cè)試用例的實(shí)例 在某一在某一PASCAL語(yǔ)言版本中規(guī)定:語(yǔ)言版本中規(guī)定:“標(biāo)識(shí)符是由字母開(kāi)頭標(biāo)識(shí)符是由字母開(kāi)頭,后跟字母或數(shù)后跟字母或數(shù)字的任意組合構(gòu)成字的任意組合構(gòu)成有效字符數(shù)為有效字符數(shù)為8個(gè)個(gè),最大字符數(shù)為最大字符數(shù)為80個(gè)個(gè)并且規(guī)定:并且規(guī)定:“標(biāo)識(shí)符必須先說(shuō)明標(biāo)識(shí)符必須先說(shuō)明,再使再使用用在同一說(shuō)明語(yǔ)句中在同一說(shuō)明語(yǔ)句中,標(biāo)識(shí)符至標(biāo)識(shí)符至少必須有一個(gè)少必須有一個(gè)80用等價(jià)類(lèi)劃分方法,建立輸入等價(jià)類(lèi)表用等價(jià)類(lèi)劃分方法,建立輸入等價(jià)類(lèi)表:81下面選取了下面選取了 9 個(gè)測(cè)試用例,它們覆蓋了所個(gè)測(cè)試用例,它們覆蓋了所有的等價(jià)類(lèi)有的等價(jià)類(lèi)VAR x,T1234567:REAL;BEGIN x:=3.414;T1234567:=2.732;.(1),(2),(4),(8),(9),(12),(14)VAR :REAL;(3)VAR x,:,:REAL;(5)82 VAR T12345678:REAL;(6)VAR T12345.:REAL;(7)多于多于80個(gè)字符個(gè)字符 VAR T$:CHAR;(10)VAR GOTO:INTEGER;(11)VAR 2T:REAL;(13)VAR PAR:REAL;(15)BEGIN .PAP:=SIN(3.14*0.8)/6;83邊界值分析邊界值分析邊界值分析也是一種黑盒測(cè)試方法,是邊界值分析也是一種黑盒測(cè)試方法,是對(duì)等價(jià)類(lèi)劃分方法的補(bǔ)充。
對(duì)等價(jià)類(lèi)劃分方法的補(bǔ)充人們從長(zhǎng)期的測(cè)試工作經(jīng)驗(yàn)得知,人們從長(zhǎng)期的測(cè)試工作經(jīng)驗(yàn)得知,大量大量的錯(cuò)誤是發(fā)生在輸入或輸出范圍的邊界的錯(cuò)誤是發(fā)生在輸入或輸出范圍的邊界上,而不是在輸入范圍的內(nèi)部上,而不是在輸入范圍的內(nèi)部因此針因此針對(duì)各種邊界情況設(shè)計(jì)測(cè)試用例,對(duì)各種邊界情況設(shè)計(jì)測(cè)試用例,可以查可以查出更多的錯(cuò)誤出更多的錯(cuò)誤84比如,在做三角形計(jì)算時(shí),要輸入三角比如,在做三角形計(jì)算時(shí),要輸入三角形的三個(gè)邊長(zhǎng):形的三個(gè)邊長(zhǎng):A、B和和C我們應(yīng)注意我們應(yīng)注意到這三個(gè)數(shù)值應(yīng)當(dāng)滿(mǎn)足到這三個(gè)數(shù)值應(yīng)當(dāng)滿(mǎn)足 A0、B0、C0、ABC、ACB、BCA,才能才能構(gòu)成三角形但如果把六個(gè)不等式中的構(gòu)成三角形但如果把六個(gè)不等式中的任何一個(gè)大于號(hào)任何一個(gè)大于號(hào)“”錯(cuò)寫(xiě)成大于等于錯(cuò)寫(xiě)成大于等于號(hào)號(hào)“”,那就不能構(gòu)成三角形問(wèn)題,那就不能構(gòu)成三角形問(wèn)題恰出現(xiàn)在容易被疏忽的邊界附近恰出現(xiàn)在容易被疏忽的邊界附近85這里所說(shuō)的邊界是指,相當(dāng)于輸入等價(jià)這里所說(shuō)的邊界是指,相當(dāng)于輸入等價(jià)類(lèi)和輸出等價(jià)類(lèi)而言,稍高于其邊界值類(lèi)和輸出等價(jià)類(lèi)而言,稍高于其邊界值及稍低于其邊界值的一些特定情況及稍低于其邊界值的一些特定情況使用邊界值分析方法設(shè)計(jì)測(cè)試用例,首使用邊界值分析方法設(shè)計(jì)測(cè)試用例,首先應(yīng)確定邊界情況。
先應(yīng)確定邊界情況應(yīng)當(dāng)選取正好等于,應(yīng)當(dāng)選取正好等于,剛剛大于,或剛剛小于邊界的值做為測(cè)剛剛大于,或剛剛小于邊界的值做為測(cè)試數(shù)據(jù)試數(shù)據(jù),而不是選取等價(jià)類(lèi)中的典型值,而不是選取等價(jià)類(lèi)中的典型值或任意值做為測(cè)試數(shù)據(jù)或任意值做為測(cè)試數(shù)據(jù)86錯(cuò)誤推測(cè)法錯(cuò)誤推測(cè)法人們也可以靠經(jīng)驗(yàn)和直覺(jué)推測(cè)程序中可人們也可以靠經(jīng)驗(yàn)和直覺(jué)推測(cè)程序中可能存在的各種錯(cuò)誤,從而有針對(duì)性地編能存在的各種錯(cuò)誤,從而有針對(duì)性地編寫(xiě)檢查這些錯(cuò)誤的例子這就是錯(cuò)誤推寫(xiě)檢查這些錯(cuò)誤的例子這就是錯(cuò)誤推測(cè)法錯(cuò)誤推測(cè)法的基本想法是:錯(cuò)誤推測(cè)法的基本想法是:列舉出程序列舉出程序中所有可能有的錯(cuò)誤和容易發(fā)生錯(cuò)誤的中所有可能有的錯(cuò)誤和容易發(fā)生錯(cuò)誤的特殊情況,根據(jù)它們選擇測(cè)試用例特殊情況,根據(jù)它們選擇測(cè)試用例87因果圖因果圖因果圖的適用范圍因果圖的適用范圍 如果在測(cè)試時(shí)必須考慮如果在測(cè)試時(shí)必須考慮輸入條件的各種輸入條件的各種組合組合,可使用一種適合于描述,可使用一種適合于描述對(duì)于多種對(duì)于多種條件的組合條件的組合,相應(yīng)產(chǎn)生多個(gè)動(dòng)作相應(yīng)產(chǎn)生多個(gè)動(dòng)作的形式的形式來(lái)設(shè)計(jì)測(cè)試用例,這就需要利用因果圖來(lái)設(shè)計(jì)測(cè)試用例,這就需要利用因果圖因果圖方法最終生成的就是因果圖方法最終生成的就是判定表判定表。
它它適合于檢查程序輸入條件的各種組合情適合于檢查程序輸入條件的各種組合情況用因果圖生成測(cè)試用例的基本步驟用因果圖生成測(cè)試用例的基本步驟88 1)分析軟件規(guī)格說(shuō)明描述中,哪些是分析軟件規(guī)格說(shuō)明描述中,哪些是原原因因(即輸入條件或輸入條件的等價(jià)類(lèi)即輸入條件或輸入條件的等價(jià)類(lèi)),哪些是哪些是結(jié)果結(jié)果(即輸出條件即輸出條件),并給每個(gè)原,并給每個(gè)原因和結(jié)果賦予一個(gè)標(biāo)識(shí)符因和結(jié)果賦予一個(gè)標(biāo)識(shí)符2)分析軟件規(guī)格說(shuō)明描述的語(yǔ)義,找出分析軟件規(guī)格說(shuō)明描述的語(yǔ)義,找出原因與結(jié)果之間原因與結(jié)果之間,原因與原因之間原因與原因之間對(duì)應(yīng)對(duì)應(yīng)的關(guān)系的關(guān)系?根據(jù)這些關(guān)系,畫(huà)出因果圖根據(jù)這些關(guān)系,畫(huà)出因果圖3)由于語(yǔ)法或環(huán)境限制由于語(yǔ)法或環(huán)境限制,有些原因與原有些原因與原因之間,原因與結(jié)果之間的組合情況不因之間,原因與結(jié)果之間的組合情況不可能出現(xiàn)為表明這些特殊情況,在因可能出現(xiàn)為表明這些特殊情況,在因果圖上用一些記號(hào)果圖上用一些記號(hào)標(biāo)明約束或限制條件標(biāo)明約束或限制條件89 4)把因果圖轉(zhuǎn)換成判定表把因果圖轉(zhuǎn)換成判定表5)把判定表的每一列拿出來(lái)作為依據(jù),把判定表的每一列拿出來(lái)作為依據(jù),設(shè)計(jì)測(cè)試用例設(shè)計(jì)測(cè)試用例在因果圖中出現(xiàn)的基本符號(hào)在因果圖中出現(xiàn)的基本符號(hào) 通常在因果圖中用通常在因果圖中用Ci表示原因,用表示原因,用Ei表表示結(jié)果,各結(jié)點(diǎn)表示狀態(tài),可取值示結(jié)果,各結(jié)點(diǎn)表示狀態(tài),可取值“0”或或“1”。
0”表示某狀態(tài)不出現(xiàn),表示某狀態(tài)不出現(xiàn),“1”表示某狀態(tài)出現(xiàn)表示某狀態(tài)出現(xiàn)90主要的原因和結(jié)果之間的關(guān)系有主要的原因和結(jié)果之間的關(guān)系有:91表示約束條件的符號(hào)表示約束條件的符號(hào)為了表示原因與原因之間,結(jié)果與結(jié)果為了表示原因與原因之間,結(jié)果與結(jié)果之間可能存在的約束條件,在因果圖中之間可能存在的約束條件,在因果圖中可以附加一些表示約束條件的符號(hào)可以附加一些表示約束條件的符號(hào)92 例如,有一個(gè)處理單價(jià)為例如,有一個(gè)處理單價(jià)為5角錢(qián)的飲料的角錢(qián)的飲料的自動(dòng)售貨機(jī)軟件測(cè)試用例的設(shè)計(jì)其規(guī)格自動(dòng)售貨機(jī)軟件測(cè)試用例的設(shè)計(jì)其規(guī)格說(shuō)明如下:說(shuō)明如下:若若投入投入5角錢(qián)或角錢(qián)或1元錢(qián)的硬幣,元錢(qián)的硬幣,押下押下橙橙汁或啤酒的按鈕,則相應(yīng)的飲料就汁或啤酒的按鈕,則相應(yīng)的飲料就送出來(lái)若售貨機(jī)送出來(lái)若售貨機(jī)沒(méi)有零錢(qián)找沒(méi)有零錢(qián)找,則一個(gè)顯,則一個(gè)顯示零錢(qián)找完的紅燈亮,這時(shí)在投入示零錢(qián)找完的紅燈亮,這時(shí)在投入1元硬幣并押下按鈕后,飲料不送出來(lái)而且元硬幣并押下按鈕后,飲料不送出來(lái)而且1元硬幣也退出來(lái);若元硬幣也退出來(lái);若有零錢(qián)找有零錢(qián)找,則顯示,則顯示零錢(qián)找完的紅燈滅,在送出飲料的同零錢(qián)找完的紅燈滅,在送出飲料的同時(shí)退還時(shí)退還5角硬幣。
角硬幣931)分析這一段說(shuō)明,列出原因和結(jié)果分析這一段說(shuō)明,列出原因和結(jié)果原因原因:1.售貨機(jī)有零錢(qián)找售貨機(jī)有零錢(qián)找 2.投入投入1元硬幣元硬幣 3.投入投入5角硬幣角硬幣 4.押下橙汁按鈕押下橙汁按鈕 5.押下啤酒按鈕押下啤酒按鈕建立中間結(jié)點(diǎn),表示處理中間狀態(tài)建立中間結(jié)點(diǎn),表示處理中間狀態(tài)11.投入投入1元硬幣且押下飲料按鈕元硬幣且押下飲料按鈕12.押下橙汁或啤酒的按鈕押下橙汁或啤酒的按鈕13.應(yīng)當(dāng)找應(yīng)當(dāng)找5角零錢(qián)并且售貨機(jī)有零錢(qián)找角零錢(qián)并且售貨機(jī)有零錢(qián)找14.錢(qián)已付清錢(qián)已付清94 結(jié)果:結(jié)果:21.售貨機(jī)零錢(qián)找完燈亮售貨機(jī)零錢(qián)找完燈亮 22.退還退還1元硬幣元硬幣 23.退還退還5角硬幣角硬幣 24.送出橙汁飲料送出橙汁飲料 25.送出啤酒飲料送出啤酒飲料 2)畫(huà)出因果圖畫(huà)出因果圖所有原因結(jié)點(diǎn)列在左所有原因結(jié)點(diǎn)列在左邊,所有結(jié)果結(jié)點(diǎn)列在右邊邊,所有結(jié)果結(jié)點(diǎn)列在右邊3)由于由于 2 與與 3,4 與與 5 不能同時(shí)發(fā)生,不能同時(shí)發(fā)生,分別加上約束條件分別加上約束條件E4)因果圖因果圖 5)轉(zhuǎn)換成判定表轉(zhuǎn)換成判定表95 96 97使用各種測(cè)試方法的綜合策略使用各種測(cè)試方法的綜合策略n n在任何情況下都必須使用在任何情況下都必須使用邊界值分析法邊界值分析法。
用這種方法設(shè)計(jì)出測(cè)試用例發(fā)現(xiàn)程序錯(cuò)用這種方法設(shè)計(jì)出測(cè)試用例發(fā)現(xiàn)程序錯(cuò)誤的能力最強(qiáng)誤的能力最強(qiáng)n n必要時(shí)用必要時(shí)用等價(jià)類(lèi)劃分法等價(jià)類(lèi)劃分法補(bǔ)充一些測(cè)試用補(bǔ)充一些測(cè)試用例n n用用錯(cuò)誤推測(cè)法錯(cuò)誤推測(cè)法再追加一些測(cè)試用例再追加一些測(cè)試用例n n對(duì)照程序邏輯,檢查已有測(cè)試用例的邏對(duì)照程序邏輯,檢查已有測(cè)試用例的邏輯覆蓋程度如果未達(dá)到要求的覆蓋標(biāo)輯覆蓋程度如果未達(dá)到要求的覆蓋標(biāo)準(zhǔn),應(yīng)再補(bǔ)充足夠的測(cè)試用例準(zhǔn),應(yīng)再補(bǔ)充足夠的測(cè)試用例98n n如果程序的功能說(shuō)明中含有輸入條件的如果程序的功能說(shuō)明中含有輸入條件的組合情況,則一開(kāi)始就可選用組合情況,則一開(kāi)始就可選用因果圖法因果圖法99軟件測(cè)試的策略軟件測(cè)試的策略測(cè)試過(guò)程按測(cè)試過(guò)程按4個(gè)步驟進(jìn)行,即個(gè)步驟進(jìn)行,即單元測(cè)試單元測(cè)試、組裝測(cè)試組裝測(cè)試、確認(rèn)測(cè)試確認(rèn)測(cè)試和和系統(tǒng)測(cè)試系統(tǒng)測(cè)試開(kāi)始是開(kāi)始是單元測(cè)試單元測(cè)試,集中對(duì)用源代碼實(shí)現(xiàn),集中對(duì)用源代碼實(shí)現(xiàn)的每一個(gè)程序單元進(jìn)行測(cè)試,檢查各個(gè)的每一個(gè)程序單元進(jìn)行測(cè)試,檢查各個(gè)程序模塊是否正確地實(shí)現(xiàn)了規(guī)定的功能程序模塊是否正確地實(shí)現(xiàn)了規(guī)定的功能組裝測(cè)試組裝測(cè)試把已測(cè)試過(guò)的模塊組裝起來(lái),把已測(cè)試過(guò)的模塊組裝起來(lái),主要對(duì)與設(shè)計(jì)相關(guān)的軟件體系結(jié)構(gòu)的構(gòu)主要對(duì)與設(shè)計(jì)相關(guān)的軟件體系結(jié)構(gòu)的構(gòu)造進(jìn)行測(cè)試。
造進(jìn)行測(cè)試100被測(cè)被測(cè)模塊模塊單元單元測(cè)試測(cè)試集成集成測(cè)試測(cè)試被測(cè)被測(cè)模塊模塊單元單元測(cè)試測(cè)試被測(cè)被測(cè)模塊模塊單元單元測(cè)試測(cè)試確認(rèn)確認(rèn)測(cè)試測(cè)試系統(tǒng)系統(tǒng)測(cè)試測(cè)試系系統(tǒng)統(tǒng)其其他他元元素素軟軟件件需需求求設(shè)設(shè)計(jì)計(jì)信信息息已已集集成的成的軟件軟件已已確確認(rèn)的認(rèn)的軟件軟件可交可交付的付的軟件軟件已經(jīng)過(guò)已經(jīng)過(guò)測(cè)試的測(cè)試的模塊模塊101確認(rèn)測(cè)試確認(rèn)測(cè)試則是要檢查已實(shí)現(xiàn)的軟件是否則是要檢查已實(shí)現(xiàn)的軟件是否滿(mǎn)足了需求規(guī)格說(shuō)明中確定了的各種需滿(mǎn)足了需求規(guī)格說(shuō)明中確定了的各種需求,以及軟件配置是否完全、正確求,以及軟件配置是否完全、正確系統(tǒng)測(cè)試系統(tǒng)測(cè)試把已經(jīng)經(jīng)過(guò)確認(rèn)的軟件納入實(shí)把已經(jīng)經(jīng)過(guò)確認(rèn)的軟件納入實(shí)際運(yùn)行環(huán)境中,與其他系統(tǒng)成份組合在際運(yùn)行環(huán)境中,與其他系統(tǒng)成份組合在一起進(jìn)行測(cè)試一起進(jìn)行測(cè)試102單元測(cè)試單元測(cè)試(Unit Testing)單元測(cè)試又稱(chēng)模塊測(cè)試,單元測(cè)試又稱(chēng)模塊測(cè)試,是針對(duì)軟件設(shè)是針對(duì)軟件設(shè)計(jì)的最小單位計(jì)的最小單位 程序模塊程序模塊,進(jìn)行正確性進(jìn)行正確性檢驗(yàn)檢驗(yàn)的測(cè)試工作其目的在于發(fā)現(xiàn)各模的測(cè)試工作其目的在于發(fā)現(xiàn)各模塊內(nèi)部可能存在的各種差錯(cuò)塊內(nèi)部可能存在的各種差錯(cuò)單元測(cè)試需要單元測(cè)試需要從程序的內(nèi)部結(jié)構(gòu)出發(fā)設(shè)從程序的內(nèi)部結(jié)構(gòu)出發(fā)設(shè)計(jì)測(cè)試用例計(jì)測(cè)試用例。
多個(gè)模塊可以平行地獨(dú)立多個(gè)模塊可以平行地獨(dú)立進(jìn)行單元測(cè)試進(jìn)行單元測(cè)試1031.單元測(cè)試的內(nèi)容單元測(cè)試的內(nèi)容在單元測(cè)試時(shí),測(cè)試者需要依據(jù)詳細(xì)設(shè)在單元測(cè)試時(shí),測(cè)試者需要依據(jù)詳細(xì)設(shè)計(jì)說(shuō)明書(shū)和源程序清單,了解該模塊的計(jì)說(shuō)明書(shū)和源程序清單,了解該模塊的I/O條件和模塊的邏輯結(jié)構(gòu),主要采用白條件和模塊的邏輯結(jié)構(gòu),主要采用白盒測(cè)試的測(cè)試用例,輔之以黑盒測(cè)試的盒測(cè)試的測(cè)試用例,輔之以黑盒測(cè)試的測(cè)試用例,使之對(duì)任何合理的輸入和不測(cè)試用例,使之對(duì)任何合理的輸入和不合理的輸入,都能鑒別和響應(yīng)合理的輸入,都能鑒別和響應(yīng)104模塊模塊出錯(cuò)處理出錯(cuò)處理獨(dú)立路徑獨(dú)立路徑模塊接口模塊接口局部數(shù)據(jù)結(jié)構(gòu)局部數(shù)據(jù)結(jié)構(gòu)邊界條件邊界條件105(1)模塊接口測(cè)試模塊接口測(cè)試在單元測(cè)試的開(kāi)始,應(yīng)對(duì)在單元測(cè)試的開(kāi)始,應(yīng)對(duì)通過(guò)被測(cè)模塊通過(guò)被測(cè)模塊的數(shù)據(jù)流的數(shù)據(jù)流進(jìn)行測(cè)試測(cè)試項(xiàng)目包括:進(jìn)行測(cè)試測(cè)試項(xiàng)目包括:調(diào)用本模塊的輸入?yún)?shù)是否正確;調(diào)用本模塊的輸入?yún)?shù)是否正確;本模塊調(diào)用子模塊時(shí)輸入給子模塊的本模塊調(diào)用子模塊時(shí)輸入給子模塊的參數(shù)是否正確;參數(shù)是否正確;全局量的定義在各模塊中是否一致;全局量的定義在各模塊中是否一致;106在做在做內(nèi)外存交換內(nèi)外存交換時(shí)要考慮:時(shí)要考慮:文件屬性是否正確;文件屬性是否正確;OPEN與與CLOSE語(yǔ)句是否正確;語(yǔ)句是否正確;緩沖區(qū)容量與記錄長(zhǎng)度是否匹配;緩沖區(qū)容量與記錄長(zhǎng)度是否匹配;在進(jìn)行讀寫(xiě)操作之前是否打開(kāi)了文件;在進(jìn)行讀寫(xiě)操作之前是否打開(kāi)了文件。
