版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第7章軟件測試技術(shù)7.1軟件測試基礎(chǔ)7.2白盒測試技術(shù)7.3黑盒測試技術(shù)7.4軟件測試計(jì)劃和測試分析報(bào)告7.5軟件測試策略7.6小結(jié)第7章軟件測試技術(shù)7.1軟件測試基礎(chǔ)17.1軟件測試基礎(chǔ)7.1.1軟件測試的概念、目的和原則1.軟件測試的概念軟件測試是在軟件投入運(yùn)行前對(duì)軟件需求分析、軟件設(shè)計(jì)規(guī)格說明和軟件編碼進(jìn)行查錯(cuò)和糾錯(cuò)(包括代碼執(zhí)行活動(dòng)與人工活動(dòng))。找錯(cuò)的活動(dòng)稱測試,糾錯(cuò)的活動(dòng)稱調(diào)試??梢哉f,軟件測試是為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序的過程。或者說,軟件測試是根據(jù)軟件開發(fā)各階段的規(guī)格說明和程序的內(nèi)部結(jié)構(gòu)而精心設(shè)計(jì)一批測試用例(即輸入數(shù)據(jù)及其預(yù)期的輸出結(jié)果),并利用這些測試用例去運(yùn)行程序,以發(fā)現(xiàn)程序錯(cuò)誤的過程。7.1軟件測試基礎(chǔ)7.1.1軟件測試的概念、目的和原則2
2.軟件測試的目的GlenMyers在他的軟件測試著作中就軟件測試的目的提出下列觀點(diǎn):(1)測試是一個(gè)為了尋找錯(cuò)誤而運(yùn)行程序的過程。(2)一個(gè)好的測試用例是指很可能找到迄今為止尚未發(fā)現(xiàn)的錯(cuò)誤的用例。(3)一個(gè)成功的測試是指揭示了迄今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測試。2.軟件測試的目的3正確認(rèn)識(shí)測試的目的是十分重要的,只有這樣,才能設(shè)計(jì)出最能暴露錯(cuò)誤的測試方案。測試的目的應(yīng)從用戶角度出發(fā),通過軟件測試暴露軟件中潛在的錯(cuò)誤和缺陷,而不是從軟件開發(fā)者的角度出發(fā),希望測試成為表明軟件產(chǎn)品不存在錯(cuò)誤,驗(yàn)證軟件已正確實(shí)現(xiàn)用戶的要求的過程。否則,開發(fā)者測試時(shí)會(huì)選擇不易測試出錯(cuò)誤和缺陷的用例,這與上述測試目的相違背。一個(gè)成功的測試是指揭示了迄今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測試。測試的目標(biāo)是能夠以耗費(fèi)最少時(shí)間與最小工作量找出軟件系統(tǒng)中潛在的各種錯(cuò)誤與缺陷。另外,我們應(yīng)該認(rèn)識(shí)到:測試只能證明程序中錯(cuò)誤的存在,但不能證明程序中沒有錯(cuò)誤。因?yàn)榧词箤?shí)施了最嚴(yán)格的測試,仍然可能還有尚未被發(fā)現(xiàn)的錯(cuò)誤或缺陷存在于程序當(dāng)中,因而測試不能證明程序沒有錯(cuò)誤,但可能查出程序中的錯(cuò)誤。正確認(rèn)識(shí)測試的目的是十分重要的,只有這樣,才能設(shè)計(jì)出4
3.軟件測試的基本原則人們?yōu)榱颂岣邷y試的效率,在長期測試實(shí)驗(yàn)中積累了不少經(jīng)驗(yàn),下面列出了人們在實(shí)踐中總結(jié)的主要基本原則:(1)盡早地并不斷地進(jìn)行軟件測試。實(shí)際問題的復(fù)雜性、軟件本身的復(fù)雜性與抽象性以及開發(fā)期各層人員工作的配合關(guān)系等各種錯(cuò)綜復(fù)雜的因素使得軟件開發(fā)的各個(gè)階段都可能存在錯(cuò)誤及潛在的缺陷。所以,軟件開發(fā)的各階段都應(yīng)當(dāng)進(jìn)行測試。錯(cuò)誤發(fā)現(xiàn)得越早,后階段耗費(fèi)的人力、財(cái)力就越少,軟件質(zhì)量相對(duì)就高一些。3.軟件測試的基本原則5(2)程序員或程序設(shè)計(jì)機(jī)構(gòu)應(yīng)避免測試自己設(shè)計(jì)的程序。測試是為了找錯(cuò),而程序員大多對(duì)自己所編的程序存有偏見,總認(rèn)為自己編的程序問題不大或無錯(cuò)誤存在,因此很難查出錯(cuò)誤。此外,設(shè)計(jì)機(jī)構(gòu)在測試自己程序時(shí),由于開發(fā)周期和經(jīng)費(fèi)等問題的限制,要采用客觀的態(tài)度是十分困難的。從工作效率來講,最好由與原程序無關(guān)的程序員和程序設(shè)計(jì)機(jī)構(gòu)進(jìn)行測試。(2)程序員或程序設(shè)計(jì)機(jī)構(gòu)應(yīng)避免測試自己設(shè)計(jì)的程序6(3)測試用例中不僅要有輸入數(shù)據(jù),還要有與之對(duì)應(yīng)的預(yù)期結(jié)果。測試前應(yīng)當(dāng)設(shè)定合理的測試用例。測試用例不僅要有輸入數(shù)據(jù),而且還要有與之對(duì)應(yīng)的預(yù)期結(jié)果。如果在程序執(zhí)行前無法確定預(yù)期的測試結(jié)果,由于人們的心理作用,可能把實(shí)際上是錯(cuò)誤的結(jié)果當(dāng)成是正確的。(3)測試用例中不僅要有輸入數(shù)據(jù),還要有與之對(duì)應(yīng)的7(4)測試用例的設(shè)計(jì)不僅要有合法的輸入數(shù)據(jù),還要有非法的輸入數(shù)據(jù)。在設(shè)計(jì)測試用例時(shí),不僅要有合法的輸入測試用例,還要有非法的輸入測試用例。在測試程序時(shí),人們常忽視不合法的和預(yù)想不到的輸入條件,傾向于考慮合法的和預(yù)期的輸入條件。而在軟件的實(shí)際使用過程中,由于各種因素的存在,用戶可能會(huì)使用一些非法的輸入,比如常會(huì)按錯(cuò)鍵或使用不合法的命令。對(duì)于一個(gè)功能較完善的軟件來說,不僅當(dāng)輸入是合法的時(shí)候能正確運(yùn)行,而且當(dāng)有非法輸入時(shí),也應(yīng)當(dāng)能對(duì)非法的輸入拒絕接受,同時(shí)給出對(duì)應(yīng)的提示信息,使得軟件便于使用。(4)測試用例的設(shè)計(jì)不僅要有合法的輸入數(shù)據(jù),還要有8(5)在對(duì)程序修改之后要進(jìn)行回歸測試。在修改程序的同時(shí)時(shí)常又會(huì)引進(jìn)新的錯(cuò)誤,因而在對(duì)程序修改完之后,還應(yīng)用以前的測試用例進(jìn)行回歸測試,有助于發(fā)現(xiàn)因修改程序而引進(jìn)的新的錯(cuò)誤。(5)在對(duì)程序修改之后要進(jìn)行回歸測試。9(6)程序中尚未發(fā)現(xiàn)的錯(cuò)誤的數(shù)量通常與該程序中已發(fā)現(xiàn)的錯(cuò)誤的數(shù)量成正比。經(jīng)驗(yàn)表明:一段程序中若發(fā)現(xiàn)錯(cuò)誤的數(shù)目越多,則此段程序中殘存的錯(cuò)誤數(shù)目也較多。例如:在美國的IBM/370的一個(gè)操作系統(tǒng)中,47%的錯(cuò)誤(由用戶發(fā)現(xiàn)的錯(cuò)誤)僅與該系統(tǒng)的4%的程序模塊有關(guān)。據(jù)此規(guī)律,在實(shí)際測驗(yàn)時(shí),為了提高測試效率,要花較多的時(shí)間和代價(jià)來測試那些容易出錯(cuò)即出錯(cuò)多的程序段。而不要以為找到了幾個(gè)錯(cuò)誤,就認(rèn)為問題已解決,不再需要繼續(xù)測試了。(6)程序中尚未發(fā)現(xiàn)的錯(cuò)誤的數(shù)量通常與該程序中已發(fā)10(7)妥善保留測試計(jì)劃、全部測試用例、出錯(cuò)統(tǒng)計(jì)和最終分析報(bào)告,并把它們作為軟件的組成部分之一,為維護(hù)提供方便。設(shè)計(jì)測試用例要耗費(fèi)相當(dāng)大的工作量,若測試完隨意丟棄,以后一旦程序改錯(cuò)后需重新測試時(shí),將重復(fù)設(shè)計(jì)測試用例,這會(huì)造成很大的浪費(fèi),因而妥善保留與測試有關(guān)的資料,能為后期的維護(hù)工作帶來方便。(8)應(yīng)當(dāng)對(duì)每一個(gè)測試結(jié)果做全面檢查。這條重要的原則時(shí)常被人們忽視。不仔細(xì)、全面地檢查測試結(jié)果,就會(huì)使得有錯(cuò)誤征兆的輸出結(jié)果被漏掉。(7)妥善保留測試計(jì)劃、全部測試用例、出錯(cuò)統(tǒng)計(jì)和最11(9)嚴(yán)格執(zhí)行測試計(jì)劃,排除測試的隨意性。測試計(jì)劃內(nèi)容應(yīng)包括:所測軟件的功能、輸入和輸出、測試內(nèi)容、各項(xiàng)測試的進(jìn)度安排、資源要求、測試資料、測試工具、測試用例的選擇、測試的控制方式和過程、系統(tǒng)組裝方式、跟蹤規(guī)程、調(diào)試規(guī)程、回歸測試的規(guī)定以及評(píng)價(jià)標(biāo)準(zhǔn)等。(9)嚴(yán)格執(zhí)行測試計(jì)劃,排除測試的隨意性。127.1.2軟件測試的過程圖7.1測試的過程7.1.2軟件測試的過程圖7.1測試的過程13測試過程有三類輸入:軟件配置、測試配置和測試工具。軟件配置包括軟件需求說明書、設(shè)計(jì)說明書、源程序清單等文檔。測試配置包括測試方案、測試計(jì)劃、測試用例、測試驅(qū)動(dòng)程序等文檔。測試工具包括支持測試的軟件。輸出信息有修正軟件的文件和預(yù)測可靠性或得出糾錯(cuò)后可交付使用的正確軟件。測試的信息流是不斷遞歸的過程,也是相對(duì)有限的測試過程,而不是無限的過程。(1)軟件配置:指被測試軟件的文件,如軟件需求規(guī)格說明書、軟件設(shè)計(jì)說明書和源程序清單等文檔。測試過程有三類輸入:軟件配置、測試配置和測試工具。軟14(2)測試配置:指測試方案、測試計(jì)劃、測試用例、測試驅(qū)動(dòng)程序等文檔。實(shí)際上,在整個(gè)軟件工程過程中,測試配置只是軟件配置的一個(gè)子集。(3)測試工具:是為了提高測試效率而設(shè)計(jì)的支持軟件測試的軟件。例如,測試數(shù)據(jù)自動(dòng)生成程序、靜態(tài)分析程序、動(dòng)態(tài)分析程序、測試結(jié)果分析程序以及驅(qū)動(dòng)測試的測試數(shù)據(jù)庫等。(4)測試評(píng)價(jià):由測試出的錯(cuò)誤跡象,分析、找出錯(cuò)誤的原因和位置,以便糾正和積累軟件設(shè)計(jì)的經(jīng)驗(yàn)。(2)測試配置:指測試方案、測試計(jì)劃、測試用例、測15(5)糾錯(cuò)(調(diào)試):是指找到出錯(cuò)的原因與位置并糾錯(cuò),包括修正文件直到軟件正確為止。糾錯(cuò)過程是測試過程中最無法預(yù)料的部分。為了診斷和糾正一個(gè)錯(cuò)誤,可能需要一小時(shí)、一天、甚至幾個(gè)月的時(shí)間。正是因?yàn)榧m錯(cuò)本身所具有的不確定性,常常難以準(zhǔn)確地安排測試日程表。(5)糾錯(cuò)(調(diào)試):是指找到出錯(cuò)的原因與位置并糾錯(cuò)16(6)可靠性模型:通過對(duì)測試出的軟件出錯(cuò)率的分析,建立模型,得出可靠的數(shù)據(jù),指導(dǎo)軟件的設(shè)計(jì)與維護(hù)。對(duì)測試結(jié)果進(jìn)行收集和評(píng)價(jià)后,軟件可靠性能夠達(dá)到的質(zhì)量指標(biāo)也就清楚了。若出現(xiàn)一些有規(guī)律的、嚴(yán)重的、要求修改設(shè)計(jì)的錯(cuò)誤,軟件的質(zhì)量和可靠性值得懷疑,應(yīng)作進(jìn)一步測試。另外,若軟件功能看來完成得很好且遇到錯(cuò)誤也容易糾正,從而可以得到兩種不同的結(jié)論:一種是軟件質(zhì)量和可靠性是可以接受的;另一種是所進(jìn)行的測試尚不足以發(fā)現(xiàn)嚴(yán)重的錯(cuò)誤。若沒有發(fā)現(xiàn)任何錯(cuò)誤,可能是由于測試配置不夠周到,依然有潛在的錯(cuò)誤存在。若將錯(cuò)誤放過,在維護(hù)階段被用戶發(fā)現(xiàn)時(shí)再糾正的話,所需費(fèi)用將可能是開發(fā)階段的40~60倍。(6)可靠性模型:通過對(duì)測試出的軟件出錯(cuò)率的分析,177.1.3軟件測試的方法軟件測試的目的是以最少的測試用例集合測試出更多的程序中潛在錯(cuò)誤。如何測試的徹底,怎樣設(shè)計(jì)測試用例是測試的關(guān)鍵技術(shù)。依據(jù)測試過程是否在實(shí)際應(yīng)用環(huán)境中來分,軟件測試技術(shù)分為靜態(tài)分析技術(shù)與動(dòng)態(tài)測試技術(shù)兩種。測試方法有分析方法(包括靜態(tài)分析法與白盒法)與非分析方法(稱黑盒法)之分。有關(guān)白盒法與黑盒法的內(nèi)容將在后兩節(jié)中介紹,在此節(jié)中僅介紹靜態(tài)分析技術(shù)與動(dòng)態(tài)測試技術(shù)。7.1.3軟件測試的方法18
1.靜態(tài)分析技術(shù)靜態(tài)分析技術(shù)不執(zhí)行被測試軟件,可對(duì)需求分析說明書、軟件設(shè)計(jì)說明書、源程序做結(jié)構(gòu)檢查、流圖分析、符號(hào)執(zhí)行等來找出軟件錯(cuò)誤。可以人工進(jìn)行分析,也可以用測試工具靜態(tài)分析程序來進(jìn)行,被測試程序的正文作為輸入,經(jīng)靜態(tài)分析程序分析得出分析結(jié)果。(1)結(jié)構(gòu)檢查是手工分析技術(shù),由一組人員對(duì)程序設(shè)計(jì)、需求分析、編碼測試工作進(jìn)行評(píng)議,虛擬執(zhí)行程序,并在評(píng)議中作錯(cuò)誤檢驗(yàn)。此方法能找出典型程序30%~70%有關(guān)邏輯設(shè)計(jì)與編碼的錯(cuò)誤。1.靜態(tài)分析技術(shù)19(2)流圖分析是通過分析程序流程圖的代碼結(jié)構(gòu),來檢查程序的語法錯(cuò)誤信息、語句中標(biāo)識(shí)符引用狀況、子程序和函數(shù)調(diào)用狀況及無法執(zhí)行到的代碼段。此方法便于分析編碼實(shí)現(xiàn)與測試結(jié)果分析。(3)符號(hào)執(zhí)行是一種符號(hào)化定義數(shù)據(jù),并為程序每條路徑給出符號(hào)表達(dá)式,對(duì)特定路徑輸入符號(hào),經(jīng)處理輸出符號(hào),從而判斷程序行為是否錯(cuò)誤,達(dá)到分析錯(cuò)誤目的的方法。這種方法比數(shù)值計(jì)算復(fù)雜得多,易出錯(cuò),又不適于非數(shù)值計(jì)算,故使用較少。(2)流圖分析是通過分析程序流程圖的代碼結(jié)構(gòu),來檢查20
2.動(dòng)態(tài)測試技術(shù)動(dòng)態(tài)分析是執(zhí)行被測程序,由執(zhí)行結(jié)果分析程序可能出現(xiàn)的錯(cuò)誤??梢匀斯ぴO(shè)計(jì)程序測試用例,也可以由測試工具動(dòng)態(tài)分析程序來做檢查與分析。動(dòng)態(tài)測試包括功能測試和結(jié)構(gòu)測試。它把程序看作為一個(gè)函數(shù),輸入的全體稱為函數(shù)的定義域,輸出的全體稱為函數(shù)的值域,函數(shù)則描述了輸入的定義域與輸出值域的關(guān)系。這樣動(dòng)態(tài)測試的算法可歸納為2.動(dòng)態(tài)測試技術(shù)21(1)選取定義域中的有效值,或定義域外無效值。(2)對(duì)已選取值決定預(yù)期的結(jié)果。(3)用選取值執(zhí)行程序。(4)觀察程序行為,記錄執(zhí)行結(jié)果。(5)將(4)的結(jié)果與(2)的結(jié)果相比較,不吻合則程序有錯(cuò)。動(dòng)態(tài)測試既可以采用白盒法對(duì)模塊進(jìn)行邏輯結(jié)構(gòu)的測試,又可以用黑盒法做功能結(jié)構(gòu)的測試。接口的測試,都是以執(zhí)行程序并分析執(zhí)行結(jié)果來查錯(cuò)的。(1)選取定義域中的有效值,或定義域外無效值。227.2白盒測試技術(shù)7.2.1白盒測試概念如果已知產(chǎn)品的內(nèi)部活動(dòng)方式,就可以測試它的內(nèi)部活動(dòng)是否都符合設(shè)計(jì)要求。這種方法稱白盒測試(White-boxTesting),它是對(duì)軟件的過程性細(xì)節(jié)做細(xì)致的檢查。白盒測試又稱為結(jié)構(gòu)測試或邏輯驅(qū)動(dòng)測試,此方法是將測試對(duì)象比作一個(gè)打開的盒子,它允許測試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)和相關(guān)信息來設(shè)計(jì)或選擇測試用例,對(duì)穿過軟件的邏輯路徑進(jìn)行測試,可以在不同點(diǎn)檢查程序的狀態(tài),以確定實(shí)際狀態(tài)與預(yù)期狀態(tài)是否一致。7.2白盒測試技術(shù)7.2.1白盒測試概念23軟件人員使用白盒方法測試程序模塊的檢查點(diǎn)主要包括:對(duì)程序模塊的所有獨(dú)立的執(zhí)行路徑應(yīng)至少測試一次;對(duì)所有的邏輯判定,取“真”與取“假”兩種情況都能至少測試一次;在循環(huán)的邊界和運(yùn)行界限內(nèi)執(zhí)行循環(huán)體;測試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性等。表面看來,白盒測試是可以進(jìn)行完全的測試的,從理論上講也應(yīng)該如此。只要能確定測試模塊的所有邏輯路徑,并為每一條邏輯路徑設(shè)計(jì)測試用例,并評(píng)價(jià)所得到的結(jié)果,就可得到100%正確的程序。但實(shí)際測試中,這種窮舉法是無法實(shí)現(xiàn)的,因?yàn)榧词故呛苄〉某绦颍部赡軙?huì)出現(xiàn)數(shù)目驚人的邏輯路徑。如圖7-2所示是一個(gè)小程序的流程圖。軟件人員使用白盒方法測試程序模塊的檢查點(diǎn)主要包括:對(duì)24圖中,一個(gè)圓圈代表一行源程序代碼(或一個(gè)語句塊)。其中有五條通路,左邊曲線箭頭表示執(zhí)行次數(shù)不超過20次循環(huán)。這樣的執(zhí)行路徑就有520個(gè),近似為1014個(gè)可能的路徑。如果1ms完成一個(gè)測試,由此測試程序需3170年。由此看出,即使精確地實(shí)現(xiàn)了白盒測試,也不能斷言測試過的程序全正確,因?yàn)閷?shí)行窮舉測試,由于工作量過大,需用時(shí)間過長,實(shí)施起來是不現(xiàn)實(shí)的。這就是程序測試的經(jīng)濟(jì)學(xué)問題。既然在測試階段窮舉法測試是不可行的,那么為了節(jié)省時(shí)間和資源,提高測試效率,就必須精心設(shè)計(jì)測試用例。需從大量的可用測試用例中精選出少量的測試數(shù)據(jù),使得采用這些測試數(shù)據(jù)能夠達(dá)到最佳的測試效果,即能高效地、盡可能多地發(fā)現(xiàn)隱藏的錯(cuò)誤。測試只能發(fā)現(xiàn)錯(cuò)誤,并不能保證程序沒有錯(cuò)誤。圖中,一個(gè)圓圈代表一行源程序代碼(或一個(gè)語句塊)。其25圖7.2白盒測試中的窮舉測試圖7.2白盒測試中的窮舉測試267.2.2白盒測試的測試用例設(shè)計(jì)測試用例設(shè)計(jì)的基本目的是確定一組最有可能發(fā)現(xiàn)某個(gè)錯(cuò)誤或某類錯(cuò)誤的測試數(shù)據(jù)。無論是黑盒測試(下節(jié)內(nèi)容介紹),還是白盒測試都不可能進(jìn)行窮舉測試,所以測試用例的設(shè)計(jì)只能在周期和經(jīng)費(fèi)允許的條件下,使用最少數(shù)目的測試用例,發(fā)現(xiàn)最大數(shù)目可能的錯(cuò)誤。實(shí)際工作中,采用黑盒與白盒相結(jié)合的技術(shù)是較為合理的做法,可以選取并測試數(shù)量有限的重要邏輯路徑,對(duì)一些重要數(shù)據(jù)結(jié)構(gòu)的正確性進(jìn)行完全的檢查。這樣不僅能證實(shí)軟件接口的正確性,同時(shí)在某種程度上能保證軟件內(nèi)部工作也是正確的。7.2.2白盒測試的測試用例設(shè)計(jì)27現(xiàn)在已經(jīng)提出了許多測試用例的設(shè)計(jì)技術(shù)。下面只對(duì)白盒測試的重要測試方法進(jìn)行介紹,黑盒測試的方法將在下節(jié)內(nèi)容中介紹。邏輯覆蓋是以程序內(nèi)部邏輯為基礎(chǔ)的測試技術(shù),屬白盒測試。這一測試考慮測試用例對(duì)程序內(nèi)部邏輯覆蓋的程度。當(dāng)然,最徹底的覆蓋是覆蓋程序中的每一條路徑,但是由于程序中可能會(huì)含有循環(huán),路徑的數(shù)目將極大,要執(zhí)行每一條路徑是不可能的,所以只希望覆蓋的程度盡可能高些。目前常用的一些覆蓋技術(shù)有以下八種。現(xiàn)在已經(jīng)提出了許多測試用例的設(shè)計(jì)技術(shù)。下面只對(duì)白盒測28
1.語句覆蓋語句覆蓋的含義是選擇足夠多的測試用例,使得被測程序中的每條語句至少執(zhí)行一次。圖7.3是測試的一段程序的流程圖對(duì)應(yīng)的C源程序(用C語言書寫)。floatA,B,X;
if(A>1&&B==0)X=X/A;if(A==2||X>1)X=X+1;……1.語句覆蓋……29為了使每條語句都執(zhí)行一次,程序應(yīng)該按sacbed路徑執(zhí)行,為實(shí)現(xiàn)此路徑而選取下面的一組輸入數(shù)據(jù)(實(shí)際上X可以是任意實(shí)數(shù)):A=2,B=0,X=2為了使每條語句都執(zhí)行一次,程序應(yīng)該按sacbed路徑30通過上例可以看出,這組數(shù)據(jù)只測試了條件為真的情況,若實(shí)際輸入的條件為假時(shí)有錯(cuò)誤顯然測試不出來。事實(shí)上,語句覆蓋對(duì)程序的邏輯覆蓋很少,語句覆蓋只關(guān)心判定表達(dá)式的值,而沒有分別測試判定表達(dá)式中每個(gè)條件取不同值的情況。在上例中,為了執(zhí)行sacbed路徑以測試每個(gè)語句,只需兩個(gè)判定表達(dá)(A>1)AND(B=0)和(A=2)OR(X>1)都取真值,上例中測試數(shù)據(jù)足夠滿足要求。但是,若程序中第一個(gè)判斷表達(dá)式中的邏輯運(yùn)算符“AND”錯(cuò)寫成“OR”,或把第二個(gè)判定表達(dá)式中的條件“X>1”誤寫成“X<1”,上組測試數(shù)據(jù)則不符要求,不能查出這些錯(cuò)誤。與后面所介紹的其他覆蓋相比,語句覆蓋是最弱的邏輯覆蓋準(zhǔn)則。通過上例可以看出,這組數(shù)據(jù)只測試了條件為真的情況,若31
2.判定覆蓋判定覆蓋就是設(shè)計(jì)若干個(gè)測試用例,運(yùn)行所測程序,使得程序中每個(gè)判斷的取真分支和取假分支至少經(jīng)歷一次。判定覆蓋又稱為分支覆蓋。判定覆蓋的每個(gè)語句至少經(jīng)歷一次。例如對(duì)于圖7.3來說,能夠分別覆蓋路徑sacbed和sabd的一組測試數(shù)據(jù),或者覆蓋路徑sacbd和sabed的兩組測試數(shù)據(jù)均可滿足判定覆蓋標(biāo)準(zhǔn)。例如,以兩組測試數(shù)據(jù)就可做到判定覆蓋:(1)A=4,B=0,X=1(覆蓋sacbd);(2)A=2,B=1,X=3(覆蓋sabed)。判定覆蓋的缺點(diǎn)仍然是覆蓋的不全,只覆蓋了路徑的一半,如將X>1誤寫成X<1,上組(1)數(shù)據(jù)仍覆蓋sacbd,可見判定覆蓋仍然很弱,但比語句覆蓋強(qiáng)。2.判定覆蓋32圖7.3語句覆蓋圖7.3語句覆蓋33
3.條件覆蓋條件覆蓋就是設(shè)計(jì)若干個(gè)測試用例,運(yùn)行所測程序,使得程序中每個(gè)判斷的每個(gè)條件的可能取值至少執(zhí)行一次。條件覆蓋使得每個(gè)語句至少執(zhí)行一次。例如對(duì)于圖7.3來說,共有兩個(gè)判定表達(dá)式,每個(gè)表達(dá)式中有兩個(gè)條件。為滿足條件覆蓋,在a點(diǎn)有以下幾種情況出現(xiàn):A>1,A≤1,B=0,B≠0;在b點(diǎn)有以下幾種情況出現(xiàn):A=2,A≠2,X>1,X≤1。因而,只需要使用下面兩組測試數(shù)據(jù)就可達(dá)到上述覆蓋標(biāo)準(zhǔn)。3.條件覆蓋34(1)A=2,B=0,X=3(滿足A>1,B=0,A=2和X>1的條件,執(zhí)行路徑sacbed);(2)A=0,B=1,X=0(滿足A≤1,B≠0,A≠2和X≤1的條件執(zhí)行路徑sabd)。(1)A=2,B=0,X=3(滿足A>1,B=035條件覆蓋一般比判定覆蓋強(qiáng),因?yàn)闂l件覆蓋使判定表達(dá)式中每個(gè)條件都取到了兩個(gè)不同的結(jié)果,判定覆蓋卻只關(guān)心整個(gè)判定表達(dá)式的值。上例兩組測試數(shù)據(jù)也同時(shí)滿足判定覆蓋標(biāo)準(zhǔn)。但是,也可能有相反情況:雖然每個(gè)條件都取到了兩個(gè)不同的結(jié)果,判定表達(dá)式卻始終只取一個(gè)值。例如,若使用以下兩組測試數(shù)據(jù),則只滿足條件覆蓋標(biāo)準(zhǔn)并不滿足判定覆蓋標(biāo)準(zhǔn)。(1)A=2,B=0,X=1(滿足A>1,B=0,A=2和X≤1的條件,執(zhí)行路徑sacbed);(2)A=1,B=1,X=2(滿足A≤1,B≠0,A≠2和X>1的條件,執(zhí)行路徑sabed)。上述例子的第二個(gè)判定表達(dá)式的值總為真,不滿足判定覆蓋的要求,為解決這一矛盾,需要對(duì)條件和分支兼顧。條件覆蓋一般比判定覆蓋強(qiáng),因?yàn)闂l件覆蓋使判定表達(dá)式中36
4.判定/條件覆蓋判定/條件覆蓋就是設(shè)計(jì)足夠的測試用例,使得判斷中每個(gè)條件的所有可能取值至少執(zhí)行一次,同時(shí)每個(gè)判斷的所有可能判斷結(jié)果至少執(zhí)行一次。即要求各個(gè)判斷的所有可能的條件取值組合至少執(zhí)行一次。對(duì)于圖7.3的例子而言,下述兩組測試數(shù)據(jù)滿足判定/條件覆蓋標(biāo)準(zhǔn)。(1)A=2,B=0,X=4;(2)A=1,B=1,X=1。4.判定/條件覆蓋37判定/條件覆蓋也有缺陷。從表面來看,它測試了所有條件的取值。但實(shí)際并不是這樣。因?yàn)橐恍l件往往掩蓋了另一些條件。對(duì)于條件表達(dá)式(A>1)AND(B=0)來說,只要(A>1)的測試為真,才需測試(B=0)的值來確定此表達(dá)式的值,但是若(A>1)的測試值為假時(shí),不需再測(B=0)的值就可確定此表達(dá)式的值為假,因而B=0沒有被檢查。同理,對(duì)于(A=2)OR(X>1)這個(gè)表達(dá)式來說,只要(A=2)測試結(jié)果為真,不必測試(X>1)的結(jié)果就可確定表達(dá)式的值為真。所以對(duì)于判定/條件覆蓋來說,邏輯表達(dá)式中的錯(cuò)誤不一定能夠查得出來。判定/條件覆蓋也有缺陷。從表面來看,它測試了所有條件38
5.條件組合覆蓋條件組合覆蓋就是設(shè)計(jì)足夠的測試用例,運(yùn)行所測程序,使得每個(gè)判斷的所有可能的條件取值組合至少執(zhí)行一次。對(duì)于圖7.3的例子來說,共有以下八種可能的條件組合:(1)A>1,B=0屬第一個(gè)判斷的取真分支;(2)A>1,B≠0屬第一個(gè)判斷的取假分支;(3)A≤1,B=0屬第一個(gè)判斷的取假分支;5.條件組合覆蓋39(4)A≤1,B≠0屬第一個(gè)判斷的取假分支;(5)A=2,X>1屬第二個(gè)判斷的取真分支;(6)A=2,X≤1屬第二個(gè)判斷的取真分支;(7)A≠2,X>1屬第二個(gè)判斷的取真分支;(8)A≠2,X≤1屬第二個(gè)判斷的取假分支。(4)A≤1,B≠0屬第一個(gè)判斷的取假分支;40對(duì)于每個(gè)判斷,要求所有可能的條件的取值組合都必須取到。在圖7.3中,每個(gè)判斷各有兩個(gè)條件,所以各有四個(gè)條件取值的組合。下面的四組測試數(shù)據(jù)可以使上面列出的八種組合每種至少出現(xiàn)一次:(1)A=2,B=0,X=4(針對(duì)(1),(5)兩種組合,執(zhí)行路徑sacbed);(2)A=2,B=1,X=1(針對(duì)(2),(6)兩種組合,執(zhí)行路徑sabed);(3)A=1,B=0,X=2(針對(duì)(3),(7)兩種組合,執(zhí)行路徑sabed);(4)A=1,B=1,X=1(針對(duì)(4),(8)兩種組合,執(zhí)行路徑sabd)。對(duì)于每個(gè)判斷,要求所有可能的條件的取值組合都必須取到41必須明確:在此例中條件組合覆蓋并未要求第一個(gè)判定的四個(gè)組合與第二個(gè)判定的四個(gè)組合再進(jìn)行組合,要那樣的話,就需42=16個(gè)測試用例了。顯然,滿足條件組合覆蓋標(biāo)準(zhǔn)的測試數(shù)據(jù),也一定滿足判定覆蓋、條件覆蓋和判定/條件覆蓋標(biāo)準(zhǔn)。因此,條件組合覆蓋是前述幾種覆蓋標(biāo)準(zhǔn)中最強(qiáng)的。但是,滿足條件覆蓋標(biāo)準(zhǔn)的測試數(shù)據(jù)并不一定能使程序中的每條路徑都執(zhí)行到,如上述四組測試數(shù)據(jù)都沒有測試到路徑sacbd。以上簡單介紹了幾種邏輯覆蓋標(biāo)準(zhǔn)。在上述過程中,實(shí)現(xiàn)了多次涉及到測試數(shù)據(jù)執(zhí)行的路徑測試。顯然,測試數(shù)據(jù)可檢測的程序路徑的多少也反映了對(duì)程序測試的詳盡程度。從對(duì)程序路徑的覆蓋程度分析,下面提出一些主要的邏輯覆蓋標(biāo)準(zhǔn)。必須明確:在此例中條件組合覆蓋并未要求第一個(gè)判定的四42
6.點(diǎn)覆蓋點(diǎn)覆蓋是設(shè)計(jì)足夠的測試數(shù)據(jù),使程序執(zhí)行時(shí)至少經(jīng)過程序圖中每個(gè)節(jié)點(diǎn)一次。圖論中,點(diǎn)覆蓋的概念定義如下:如果連通圖G的子圖G"是連通的,且包含G的所有節(jié)點(diǎn),則稱G"是G的點(diǎn)覆蓋。在正常情況下,程序圖是連通的有向圖,圖中每個(gè)節(jié)點(diǎn)相當(dāng)于程序流程圖中的一框(一個(gè)或多個(gè)語句),所以點(diǎn)覆蓋相當(dāng)于語句覆蓋。6.點(diǎn)覆蓋43
7.邊覆蓋邊覆蓋是設(shè)計(jì)足夠的測試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過程序圖中每一個(gè)邊一次,相應(yīng)的圖論中的定義是:如果連通圖G和子圖G"是連通的,而且G"包含G的所有邊,則稱G"是G的邊覆蓋。圖7.4是由圖7.3得出的程序圖。為了使程序執(zhí)行路徑經(jīng)過程序圖的邊覆蓋(1,2,3,4,5,6,7),至少需要兩組測試數(shù)據(jù)(分別執(zhí)行路徑1-2-3和1-4-5-6-7,或分別執(zhí)行路徑1-4-5-3和1-2-6-7)。7.邊覆蓋44一般情況下,邊覆蓋和判定覆蓋是一致的。例如,上述中滿足判定覆蓋標(biāo)準(zhǔn)的測試數(shù)據(jù)同時(shí)滿足邊覆蓋的標(biāo)準(zhǔn)。(1)A=4,B=0,X=1(執(zhí)行路徑1-4-5-3,即覆蓋sacbd);(2)A=2,B=1,X=3(執(zhí)行路徑1-2-6-7,即覆蓋sacbd)。一般情況下,邊覆蓋和判定覆蓋是一致的。例如,上述中滿45圖7.4和圖7.3對(duì)應(yīng)的程序圖圖7.4和圖7.3對(duì)應(yīng)的程序圖46
8.路徑覆蓋路徑覆蓋是選取足夠多測試數(shù)據(jù),使程序的每條可能路徑都至少執(zhí)行一次(若程序圖中存在環(huán),則要求每個(gè)環(huán)至少經(jīng)過一次)。對(duì)于圖7.4而言,共有四條可執(zhí)行的路徑:1-2-3;1-2-6-7;1-4-5-3和1-4-5-6-7。對(duì)應(yīng)于這四條路徑,下面四組測試數(shù)據(jù)可以滿足路徑覆蓋標(biāo)準(zhǔn):(1)A=1,B=1,X=1(執(zhí)行路徑1-2-3);(2)A=1,B=1,X=2(執(zhí)行路徑1-2-6-7);(3)A=3,B=0,X=1(執(zhí)行路徑1-4-5-3);(4)A=2,B=0,X=4(執(zhí)行路徑1-4-5-6-7)。8.路徑覆蓋47路徑覆蓋相對(duì)來說是相當(dāng)強(qiáng)的邏輯覆蓋標(biāo)準(zhǔn)。測試數(shù)據(jù)暴露程序錯(cuò)誤的能力比較強(qiáng),有一定的代表性,它能夠保證程序中每條可能的路徑都至少執(zhí)行一次。但是路徑覆蓋并沒有檢驗(yàn)表達(dá)式中條件的各種組合情況,而只考慮每個(gè)判定表達(dá)式的取值。若把路徑覆蓋和條件覆蓋組合起來,可以設(shè)計(jì)出檢錯(cuò)能力更強(qiáng)的測試數(shù)據(jù)。路徑覆蓋相對(duì)來說是相當(dāng)強(qiáng)的邏輯覆蓋標(biāo)準(zhǔn)。測試數(shù)據(jù)暴露487.3黑盒測試技術(shù)7.3.1黑盒測試概念黑盒測試方法是在已知產(chǎn)品應(yīng)該具有的功能的情況下,通過測試來檢驗(yàn)是否每個(gè)功能都能正常使用的測試方法。對(duì)于軟件測試而言,黑盒測試法把程序看成一個(gè)黑盒子,完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過程。黑盒測試是在程序接口進(jìn)行的測試,它只檢查程序功能是否能按照規(guī)格說明書的規(guī)定正常使用,程序是否能適當(dāng)?shù)亟邮蛰斎霐?shù)據(jù)產(chǎn)生正確的輸出信息,并且保持外部信息(如數(shù)據(jù)庫或文件)的完整性。黑盒測試又稱功能測試。使用黑盒測試法,為了做到窮盡測試,至少必須對(duì)所有輸入數(shù)據(jù)的各種可能值的排列組合都進(jìn)行測試。與白盒法相似,由此得到的應(yīng)測試的情況數(shù)往往大到實(shí)際上根本無法測試的程度,即黑盒測試使用所有有效和無效的輸入數(shù)據(jù)來測試程序是不現(xiàn)實(shí)的。所以,黑盒測試同樣不能做到窮盡測試,只能選取少量最有代表性的輸入數(shù)據(jù),以期用較少的代價(jià)暴露出較多的程序錯(cuò)誤。7.3黑盒測試技術(shù)7.3.1黑盒測試概念497.3.2黑盒測試的測試用例設(shè)計(jì)1.等價(jià)類劃分1)劃分等價(jià)類等價(jià)類劃分是黑盒法設(shè)計(jì)測試方案的一種典型的、實(shí)用的重要測試方法。等價(jià)類劃分是根據(jù)數(shù)據(jù)測試的等效性原理來進(jìn)行劃分的。數(shù)據(jù)測試的等效性是指將分類的數(shù)據(jù)取其子集中一個(gè)數(shù)據(jù)做測試與子集中其他數(shù)據(jù)測試的效果是等效的,即子集中的一個(gè)數(shù)據(jù)能測出軟件錯(cuò)誤,那么子集中的其余數(shù)據(jù)也能測出錯(cuò)誤;相反,子集中的一個(gè)數(shù)據(jù)測試不出程序錯(cuò)誤,子集中的其余數(shù)據(jù)也測不出錯(cuò)誤。7.3.2黑盒測試的測試用例設(shè)計(jì)50等價(jià)類劃分是把程序的輸入數(shù)據(jù)集合按輸入條件劃分為若干個(gè)等價(jià)類,每一個(gè)等價(jià)類相對(duì)于輸入條件表示為一組有效或無效的輸入,然后為每一等價(jià)類設(shè)計(jì)一個(gè)測試用例。如果某個(gè)等價(jià)類中的一個(gè)輸入條件作為測試數(shù)據(jù)查出了錯(cuò)誤,那么使用這一等價(jià)類中的其他輸入條件,也會(huì)查出同樣的錯(cuò)誤;反之,若使用某個(gè)等價(jià)類中的一個(gè)輸入條件作為數(shù)據(jù)進(jìn)行測試沒有查出錯(cuò)誤,則使用這個(gè)等價(jià)類中的其他輸入條件也同樣查不出錯(cuò)誤。簡單地講,有效等價(jià)類是指程序的合理輸入數(shù)據(jù),利用它可檢驗(yàn)程序是否能實(shí)現(xiàn)預(yù)期的功能和性能。無效等價(jià)類是指其他不合理、無意義的數(shù)據(jù),利用它可檢查程序中功能和性能的實(shí)現(xiàn)是否不符合規(guī)格說明要求。在確定輸入等價(jià)類時(shí)還需要分析輸出數(shù)據(jù)的等價(jià)類,以便根據(jù)輸出數(shù)據(jù)的等價(jià)類導(dǎo)出對(duì)應(yīng)的輸入等價(jià)類。等價(jià)類的劃分在很大程度上是一個(gè)探索性的過程,主要依靠的是測試人員的經(jīng)驗(yàn),下面幾點(diǎn)僅供參考。等價(jià)類劃分是把程序的輸入數(shù)據(jù)集合按輸入條件劃分為若干51(1)如果某個(gè)輸入條件規(guī)定了輸入值的范圍(其數(shù)值為1~999),則可劃分為一個(gè)合理等價(jià)類(大于等于1而小于等于999的數(shù))和兩個(gè)不合理的等價(jià)類(小于1和大于999的數(shù))。(2)如果某個(gè)輸入條件規(guī)定了輸入數(shù)據(jù)的個(gè)數(shù)(如每名學(xué)生一學(xué)期內(nèi)只能選修1~3門課程),則可劃分為一個(gè)高效等價(jià)類(選修1~3門課程)和兩個(gè)無效等價(jià)類(不選修和選修超過3門)。(3)如果某個(gè)輸入條件規(guī)定了一組可能的值,而且程序可以對(duì)每個(gè)輸入值分別進(jìn)行處理(如出差時(shí)交通工具的類型必須是火車、汽車或輪船),那么可以為每一組確定一個(gè)有效等價(jià)類(如火車、汽車和輪船三種),同時(shí)對(duì)一組值確定一個(gè)無效等價(jià)類(如飛機(jī))。(1)如果某個(gè)輸入條件規(guī)定了輸入值的范圍(其數(shù)值為52(4)如果某個(gè)輸入條件規(guī)定了必須成立的條件(比如標(biāo)識(shí)符的第一個(gè)字符必須是字母),則可劃分為一個(gè)有效等價(jià)類(第一個(gè)字符是字母)和一個(gè)無效等價(jià)類(第一個(gè)字符不是字母)。(5)如果認(rèn)為程序?qū)床煌姆绞絹硖幚砟硞€(gè)等價(jià)類中的各種測試用例,則應(yīng)將這個(gè)等價(jià)類再分成幾個(gè)更小的等價(jià)類。如上面第③點(diǎn)就將一個(gè)有效的等價(jià)類又分成火車、汽車和輪船三個(gè)等價(jià)類。(6)如果輸入條件是一個(gè)布爾量,則可以確定一個(gè)有效等價(jià)類和一個(gè)無效等價(jià)類。(7)如果規(guī)定了輸入數(shù)據(jù)為整數(shù),則可以劃分為正整數(shù)、零和負(fù)整數(shù)三個(gè)有效等價(jià)類為測試數(shù)據(jù)。(4)如果某個(gè)輸入條件規(guī)定了必須成立的條件(比如標(biāo)532)確定測試用例根據(jù)等價(jià)類來設(shè)計(jì)測試用例,其過程如下:(1)為每個(gè)等價(jià)類規(guī)定一個(gè)惟一的編號(hào)。(2)設(shè)計(jì)一個(gè)新的測試用例,使其盡可能多地覆蓋未被覆蓋的有效等價(jià)類,此項(xiàng)工作重復(fù)進(jìn)行,直到所有的有效等價(jià)類都被覆蓋為止。(3)設(shè)計(jì)一個(gè)新的測試用例,使其覆蓋一個(gè)(而且僅僅一個(gè))尚未被覆蓋的無效等價(jià)類,此項(xiàng)工作重復(fù)進(jìn)行,直到所有的無效等價(jià)類都被覆蓋為止。2)確定測試用例54之所以要這樣做,是因?yàn)槟承┏绦蛑袑?duì)某一輸入錯(cuò)誤的檢查往往會(huì)屏蔽對(duì)其他輸入錯(cuò)誤的檢查,因此,必須針對(duì)每一個(gè)無效等價(jià)類,分別設(shè)計(jì)測試用例。例如,某程序的功能說明規(guī)定:輸入書的類型分別為精裝本、平裝本或線裝本,書的數(shù)量為1~999冊。若測試用例的輸入數(shù)據(jù)類型為“活頁”,且書目的數(shù)量為“0”,此情況覆蓋了兩個(gè)不合理的條件(類型和數(shù)量都是錯(cuò)誤的)。當(dāng)程序檢查到書的類型錯(cuò)誤時(shí),就可能不再去檢查數(shù)量是否也是錯(cuò)誤的。之所以要這樣做,是因?yàn)槟承┏绦蛑袑?duì)某一輸入錯(cuò)誤的檢查553)用等價(jià)類劃分法設(shè)計(jì)測試用例的案例某Pascal語言將數(shù)字串轉(zhuǎn)換為整數(shù)的函數(shù)說明如下:Functionstroint(dstr:shorstr):integer;typeshorstr=array[1··]ofchar其中,參數(shù)為shorstr,被處理的數(shù)字串是右對(duì)齊的,也就是說,當(dāng)數(shù)字串比六個(gè)字符短,則在它的左邊補(bǔ)空格;如果數(shù)字串是負(fù)的,則負(fù)號(hào)和最高位數(shù)字緊相鄰,負(fù)號(hào)在最高位數(shù)字左邊一列?!?)用等價(jià)類劃分法設(shè)計(jì)測試用例的案例…56由于Pascal編譯程序有檢測字符串超界的功能,所以數(shù)字串不等于六的數(shù)組可不設(shè)計(jì)測試用例,又由于Pascal編譯能檢測數(shù)組類型,所以也不需要為非字符數(shù)組類型做測試數(shù)據(jù)。由于所用計(jì)算機(jī)字長16位,所以用二進(jìn)制數(shù)表示的范圍為-32768~32767。依據(jù)輸入/輸出的有效與無效等價(jià)類劃分如下。由于Pascal編譯程序有檢測字符串超界的功能,所以57有效輸入等價(jià)類有:①1~6個(gè)數(shù)字組成的數(shù)字串(最高位數(shù)字不是零)②最高位數(shù)字是零的數(shù)字串③最高位數(shù)字左鄰是負(fù)號(hào)的數(shù)字串有效輸出的等價(jià)類:①在計(jì)算機(jī)能表示的最小負(fù)整數(shù)和零之間的負(fù)整數(shù)②零③在零和計(jì)算機(jī)能表示的最大正整數(shù)之間的正整數(shù)有效輸入等價(jià)類有:58無效輸入等價(jià)類:①空字符串(全是空格)②左部填充的字符,既不是零也不是空格③最高位數(shù)后面,由數(shù)字和空格混合組成④負(fù)號(hào)與取高位數(shù)之間的空格⑤最高位數(shù)字右面,由數(shù)字和其他字符混合組成無效輸入等價(jià)類:59無效輸出的等價(jià)類:①比計(jì)算機(jī)能表示的最小負(fù)數(shù)還小的負(fù)整數(shù)②比計(jì)算機(jī)能表示的最大正整數(shù)還大的正整數(shù)依據(jù)上面劃分出的等價(jià)類,可以設(shè)計(jì)下述測試方案(每個(gè)測試方案由三部分內(nèi)容組成):(1)輸入是1~6個(gè)數(shù)字組成的數(shù)字串,輸出是合法的正整數(shù)。例如:輸入:‘1’預(yù)期的輸出:1(2)輸入是最高位數(shù)字為零的數(shù)字串,輸出是合法的正整數(shù)。例如:輸入:‘000001’預(yù)期的輸出:1無效輸出的等價(jià)類:60(3)輸入是負(fù)號(hào)與最高位數(shù)字緊相鄰的數(shù)字串,輸出是合法的負(fù)整數(shù)。例如:輸入:‘-00001’預(yù)期的輸出:-1(4)輸入是計(jì)算機(jī)能表示的最小負(fù)整數(shù)與零之間的負(fù)整數(shù),輸出為合法的負(fù)整數(shù)。例如:輸入‘-02768’預(yù)期的輸出:-2768(5)輸入是零字符串,輸出為零。例如:輸入:‘000000’預(yù)期的輸出:0(3)輸入是負(fù)號(hào)與最高位數(shù)字緊相鄰的數(shù)字串,輸出是61(6)輸入是在零和計(jì)算機(jī)能表示的最大正整數(shù)之間的正整數(shù),輸出為合法的正整數(shù)。例如:輸入:‘032754’預(yù)期的輸出:32754(7)輸入為空字符串。例如:輸入:‘’預(yù)期的輸出:“錯(cuò)誤——無效輸入”(8)輸入的左部非零非空格。例如:輸入:‘?????1’預(yù)期的輸出:“錯(cuò)誤——填充錯(cuò)”(9)輸入的最高位數(shù)字右面由數(shù)字與空格混合。例如:輸入:‘12’預(yù)期的輸出:“錯(cuò)誤——無效輸入”(6)輸入是在零和計(jì)算機(jī)能表示的最大正整數(shù)之間的正62(10)輸入的負(fù)號(hào)與最高位有空格。例如:輸入:‘-13’預(yù)期的輸出:“錯(cuò)誤——負(fù)號(hào)位錯(cuò)”(11)輸入的最高位數(shù)字右面由數(shù)字與其他字符混合。例如:輸入:‘12?x3’預(yù)期的輸出:“錯(cuò)誤——無效輸入”(12)輸入為比最小負(fù)整數(shù)小的負(fù)整數(shù)。例如:輸入:‘-56889’預(yù)期的輸出:“錯(cuò)誤--無效輸入”(13)輸入為比最大正整數(shù)還大的正整數(shù)。例如:輸入:‘133867’預(yù)期的輸出:“錯(cuò)誤——無效輸入”(10)輸入的負(fù)號(hào)與最高位有空格。例如:63
2.邊界值分析1)邊界值分析從長期的實(shí)踐中得知,處理邊界情況時(shí),程序最容易發(fā)生錯(cuò)誤。所以,在設(shè)計(jì)測試用例時(shí),應(yīng)該選擇一些邊界值,這就是邊界值分析的測試技術(shù)。邊界值分析也是一種黑盒測試方法,是對(duì)等價(jià)類劃分方法的補(bǔ)充。2.邊界值分析64使用邊界值分析方法設(shè)計(jì)測試用例時(shí),首先要確定邊界情況,這需要經(jīng)驗(yàn)和創(chuàng)造性。通常,輸入等價(jià)類和輸出等價(jià)類的邊界就是應(yīng)該著重測試的程序邊界情況。選取的測試數(shù)據(jù)應(yīng)該剛好等于、剛好小于和剛好大于邊界值,而不是先取每個(gè)等價(jià)類內(nèi)的典型值或任意值作為測試數(shù)據(jù)。例如,對(duì)于上述將數(shù)串轉(zhuǎn)換為整數(shù)的例子來說,從邊界值角度考慮應(yīng)再補(bǔ)加下述測試方案。使用邊界值分析方法設(shè)計(jì)測試用例時(shí),首先要確定邊界情況65(1)使輸出剛好等于最小的負(fù)整數(shù)。例如:輸入:‘-32768’預(yù)期的輸出:-32768(2)使輸出剛好等于最大的正整數(shù)。例如:輸入:‘32767’預(yù)期的輸出:32767(3)使輸出剛好小于最小的負(fù)整數(shù)。例如:輸入:‘-32769’預(yù)期的輸出:“錯(cuò)誤——無效輸入”(4)使輸出剛好大于最大的正整數(shù)。例如:輸入:‘32768’預(yù)期的輸出:“錯(cuò)誤——無效輸入”(1)使輸出剛好等于最小的負(fù)整數(shù)。例如:66另外,依據(jù)邊界值分析法的要求,應(yīng)該分別使用長度為0,1和6的數(shù)字串作為測試數(shù)據(jù)。通常,設(shè)計(jì)測試方案時(shí)總是把等價(jià)類劃分和邊界值分析兩種技術(shù)聯(lián)合起來使用,使得測試用例有所減少。另外,依據(jù)邊界值分析法的要求,應(yīng)該分別使用長度為0,672)確定測試用例(1)邊界值分析不是從等價(jià)類中隨便選一個(gè)數(shù)據(jù)作為代表,而是選一個(gè)或幾個(gè)特定值,使這個(gè)等價(jià)類的每個(gè)邊界都作為測試的目標(biāo)。(2)邊界值分析不僅要考慮輸入條件,而且要考慮輸出情況(即輸出等價(jià)類)。邊界值分析法選擇測試用例的原則如下:2)確定測試用例68●如果某個(gè)輸入條件規(guī)定了數(shù)據(jù)的大小,可以選擇正好等于邊界值的數(shù)據(jù)作為合理的測試用例,同時(shí)還要選擇正好越過邊界值的數(shù)據(jù)作為不合理的測試用例。例如,若輸入值的范圍是“-1.0~1.0”,則可選取“-1.0”,“1.0”,“-1.001”,“1.001”作為測試輸入數(shù)據(jù)?!袢绻硞€(gè)輸入條件規(guī)定了數(shù)據(jù)的個(gè)數(shù),則可分別設(shè)計(jì)邊界值和超過邊界值的測試用例。如某輸入文件有1~255個(gè)記錄,則可選擇0個(gè),1個(gè),255個(gè)和256個(gè)記錄作為測試的輸入數(shù)據(jù)?!袢绻硞€(gè)輸入條件規(guī)定了數(shù)據(jù)的大小,可以選擇正好等69●根據(jù)規(guī)格說明的每個(gè)輸出條件,使用前面的原則(1)。例如,設(shè)計(jì)每月工資的折扣數(shù)程序,最低額為0元,最高額為500元,這時(shí)可選擇0元、500元、負(fù)值和大于500元的測試用例。●根據(jù)規(guī)格說明的每個(gè)輸出條件,使用前面的原則(2)。例如,某一情報(bào)檢索系統(tǒng),根據(jù)某一輸入的請(qǐng)求,要求顯示幾項(xiàng)最新報(bào)道,但不能多于5條,這時(shí)可選擇使程序分別顯示0、1和5項(xiàng)報(bào)道作為測試用例,另外還要設(shè)計(jì)使程序顯示6項(xiàng)報(bào)導(dǎo)的錯(cuò)誤測試用例?!袢绻绦虻妮斎牖蜉敵鍪怯行蚣?如有序表、線性表),則應(yīng)把注意力放在集合內(nèi)的第一個(gè)和最后一個(gè)元素上?!窀鶕?jù)規(guī)格說明的每個(gè)輸出條件,使用前面的原則(1)70●如果程序中使用了一個(gè)內(nèi)部數(shù)據(jù)結(jié)構(gòu),則應(yīng)當(dāng)選擇這個(gè)內(nèi)部數(shù)據(jù)結(jié)構(gòu)的邊界上的值作為測試用例。例如,程序中定義了一個(gè)數(shù)組,其元素下標(biāo)的上界和下界分別為200和0,則應(yīng)選擇0與200作為測試用例?!穹治鲆?guī)格說明,找出其他可能的邊界條件。●如果程序中使用了一個(gè)內(nèi)部數(shù)據(jù)結(jié)構(gòu),則應(yīng)當(dāng)選擇這個(gè)71
3.因果圖法因果圖是設(shè)計(jì)測試用例的一種工具,它主要檢查各種輸入條件的組合。等價(jià)類劃分、邊界值分析的測試用例設(shè)計(jì)方法還不能考慮到組合輸入條件可能引起軟件錯(cuò)誤,而因果圖法則彌補(bǔ)了這個(gè)不足之處。3.因果圖法721)設(shè)計(jì)測試用例因果圖的測試用例設(shè)計(jì)步驟如下:(1)分析規(guī)格說明中的輸入作為因,輸出作為果。(2)依據(jù)因果的處理語義畫出因果圖。(3)標(biāo)出因果圖的約束條件。(4)將因果圖轉(zhuǎn)換為因果圖所對(duì)應(yīng)的判定表。(5)根據(jù)判定表設(shè)計(jì)測試用例。1)設(shè)計(jì)測試用例73圖7.5因果圖定義符號(hào)恒等;(b)非;(c)或;(d)與;(e)異約束;(f)或約束;(g)惟一約束;(h)要求約束;(i)強(qiáng)制約束圖7.5因果圖定義符號(hào)74其中,(a)圖表示恒等:表示原因與結(jié)果之間是一對(duì)一的對(duì)應(yīng)關(guān)系。若原因出現(xiàn),則結(jié)果出現(xiàn)。若原因不出現(xiàn),則結(jié)果也不出現(xiàn)。(b)圖表示非:表示原因與結(jié)果之間的一種否定關(guān)系。若原因出現(xiàn),則結(jié)果不出現(xiàn)。若原因不出現(xiàn),則結(jié)果出現(xiàn)。(c)圖表示或(∨):表示若幾個(gè)原因中有一個(gè)出現(xiàn),則結(jié)果出現(xiàn),只有當(dāng)這幾個(gè)原因都不出現(xiàn)時(shí),結(jié)果才不出現(xiàn)。(d)圖表示與(∧):表示若幾個(gè)原因都出現(xiàn),結(jié)果才出現(xiàn)。若幾個(gè)原因中有一個(gè)不出現(xiàn),結(jié)果就不出現(xiàn)。(e)圖表示異約束:表示a,b兩個(gè)原因不會(huì)同時(shí)成立,兩個(gè)中最多有一個(gè)可能成立。(f)圖表示或約束:表示a,b,c三個(gè)原因中至少有一個(gè)必須成立。(g)圖表示惟一約束:表示a和b原因當(dāng)中必須有一個(gè),且僅有一個(gè)成立。(h)圖表示要求約束:表示當(dāng)a出現(xiàn)時(shí),b必須也出現(xiàn),不可能a出現(xiàn),b不出現(xiàn)。(i)圖表示強(qiáng)制約束:它表示當(dāng)a是1時(shí),b必須是0,而當(dāng)a為0時(shí),b的值不定。其中,(a)圖表示恒等:表示原因與結(jié)果之間是一對(duì)一的752)利用因果圖設(shè)計(jì)測試用例的實(shí)例某規(guī)格說明:“第一列字符必須是A或者B,第二列字符必須是一個(gè)數(shù)字,第一、二兩列都滿足時(shí)修改文件,第一列不正確時(shí)給出信息L,第二列不正確時(shí)給出信息M。”(1)分析規(guī)格說明并編號(hào)。因:第一列字符是A①第一列字符是B②約束①②只有一個(gè)為1,不能同時(shí)為12)利用因果圖設(shè)計(jì)測試用例的實(shí)例約束①②只有一個(gè)為76第二列字符是數(shù)字③果:一列正確E①②1111=①∨②∨修改文件=∧③即(①∨②)∧③給出L信息=即①∨②給出M信息=③2111112223第二列字符是數(shù)字③果:一列正確E①②1111=①∨②∨修77圖7.6因果圖例圖7.6因果圖例78(3)將因果圖轉(zhuǎn)換為判定表(如表7.1所示):遇到E約束記為X;條件和輸出結(jié)果編號(hào)成立時(shí)記為1,否則記為0;表中每一列視為測試規(guī)則。表7.1判定表?③組合條件12345678?①條件原因②
111X110X101110010111010100100000XXXXXX010001010001100X0X③11動(dòng)作結(jié)果222123(3)將因果圖轉(zhuǎn)換為判定表(如表7.1所示):遇到79(4)根據(jù)判定表的3~8列編寫測試用例如下:根據(jù)3列輸入:A3,A8輸出:修改文件根據(jù)5列輸入:B4,B5輸出:修改文件根據(jù)4列輸入:AM,A?給出信息M根據(jù)6列輸入:BB,BC給出信息M根據(jù)7列輸入:M1,X6給出信息L根據(jù)8列輸入:XY,MN給出信息M與L(4)根據(jù)判定表的3~8列編寫測試用例如下:80
4.錯(cuò)誤推測法測試工作是一項(xiàng)十分艱巨和復(fù)雜的工作,它具有創(chuàng)造性。通過對(duì)程序出錯(cuò)的共性分析,黑盒法中的等價(jià)類劃分、邊界值分析、因果圖法已經(jīng)可以達(dá)到用較少用例測試較多軟件錯(cuò)誤的目的。但是,各種程序由于其自身特點(diǎn)(如開發(fā)環(huán)境的不同及應(yīng)用環(huán)境的不同等),通常又有各自特定的容易出錯(cuò)的地方。例如,財(cái)務(wù)管理系統(tǒng)和工廠的機(jī)床控制系統(tǒng)由于其各自的開發(fā)工具、應(yīng)用環(huán)境的不同,因而程序中容易出錯(cuò)的地方也不相同。因而,在設(shè)計(jì)測試用例時(shí),需考慮程序自身的特點(diǎn),設(shè)計(jì)出相應(yīng)的測試用例。當(dāng)然,這主要依靠測試人員的經(jīng)驗(yàn)和直覺。人們在長期的軟件測試中積累了許多豐富的測試經(jīng)驗(yàn),已掌握了那些最容易測出軟件的錯(cuò)誤的數(shù)據(jù),用這樣的數(shù)據(jù)測試效率會(huì)更快。這種根據(jù)經(jīng)驗(yàn)來設(shè)計(jì)程序測試用例的方法稱錯(cuò)誤推測法。常用的方法如下:4.錯(cuò)誤推測法81(1)零作為測試數(shù)據(jù)往往容易使程序發(fā)生錯(cuò)誤。(2)分析規(guī)格說明書中的漏洞,編寫測試數(shù)據(jù)。(3)根據(jù)尚未發(fā)現(xiàn)的軟件錯(cuò)誤與已發(fā)現(xiàn)軟件錯(cuò)誤成正比的統(tǒng)計(jì)規(guī)律,進(jìn)一步測試時(shí)重點(diǎn)測試已發(fā)現(xiàn)錯(cuò)誤的程序段。(4)等價(jià)類劃分與邊界值分析容易忽略組合的測試數(shù)據(jù),因而,可采用判定表或判定樹列出測試數(shù)據(jù)。(5)與人工代碼審查相結(jié)合,兩個(gè)模塊中共享的變量已被做修改的,可用來做測試用例。因?yàn)閷?duì)一個(gè)模塊測試出錯(cuò),同樣會(huì)引起另一模塊的錯(cuò)誤。(1)零作為測試數(shù)據(jù)往往容易使程序發(fā)生錯(cuò)誤。827.4軟件測試計(jì)劃和測試分析報(bào)告軟件測試是軟件生命周期中一個(gè)非常重要的階段,是保證程序質(zhì)量的必不可少的操作步驟。為了提高軟件的測試效率,必須使軟件測試有計(jì)劃的、有條不紊地進(jìn)行,因而須編制相應(yīng)的測試文檔。測試文檔主要由測試計(jì)劃和測試分析報(bào)告組成。根據(jù)GB8567-88《計(jì)算機(jī)軟件產(chǎn)品開發(fā)文件編制指南書》中的《測試計(jì)劃》、《測試分析報(bào)告》以及GB9386-88《計(jì)算機(jī)軟件測試文件編制規(guī)范》,測試計(jì)劃可細(xì)化為測試計(jì)劃、測試設(shè)計(jì)說明、測試用例說明和測試規(guī)格說明。測試分析報(bào)告可細(xì)化為測試項(xiàng)傳遞報(bào)告、測試日志、測試事件報(bào)告和測試總結(jié)報(bào)告。7.4軟件測試計(jì)劃和測試分析報(bào)告軟件測試是軟件生命83軟件測試計(jì)劃的內(nèi)容如下:1.引言1.1編寫目的1.2背景1.3定義1.4參考資料軟件測試計(jì)劃的內(nèi)容如下:842.計(jì)劃2.1軟件說明2.2測試內(nèi)容2.3測試1(標(biāo)識(shí)符)2.3.1進(jìn)度安排2.3.2條件a.設(shè)備b.軟件c.人員2.計(jì)劃852.3.3測試資料a.有關(guān)本項(xiàng)任務(wù)的文件b.被測試程序及其所在的媒體c.測試的輸入和輸出舉例d.有關(guān)控制此項(xiàng)測試的方法、過程的圖表2.3.4測試培訓(xùn)2.4測試2(標(biāo)識(shí)符)2.3.3測試資料863.測試設(shè)計(jì)說明3.1測試1(標(biāo)識(shí)符)3.1.1控制3.1.2輸入3.1.3輸出3.2測試2(標(biāo)識(shí)符)…3.測試設(shè)計(jì)說明…874.評(píng)價(jià)準(zhǔn)則4.1范圍4.2數(shù)據(jù)整理4.3尺寸4.評(píng)價(jià)準(zhǔn)則88測試分析報(bào)告的內(nèi)容如下:1.引言1.1編寫目的1.2背景1.3定義1.4參考資料2.測試概要3.測試結(jié)果及發(fā)現(xiàn)3.1測試1(標(biāo)識(shí)符)3.2測試2(標(biāo)識(shí)符)測試分析報(bào)告的內(nèi)容如下:894.對(duì)軟件功能的結(jié)論4.1功能1(標(biāo)識(shí)符)4.1.1能力4.1.2限制4.2功能2(標(biāo)識(shí)符)
5.分析摘要5.1能力5.2缺限和限制5.3建議a.各項(xiàng)修改可采用的修改方法程度b.各項(xiàng)修改的緊迫程度c.各項(xiàng)修改預(yù)定的工作量d.各項(xiàng)修改的負(fù)責(zé)人5.4評(píng)價(jià)6.測試資源消耗4.對(duì)軟件功能的結(jié)論907.5軟件測試策略前面幾節(jié)內(nèi)容簡述了設(shè)計(jì)測試方法的各種技術(shù)。實(shí)踐表明,使用每種方法均可設(shè)計(jì)出一組有用的測試方案,但沒有一種方法足以產(chǎn)生一組完善的測試方案。對(duì)每種方法而言,均有自身特長,因而用一種方法設(shè)計(jì)出的測試方案對(duì)某些類型的錯(cuò)誤可能容易發(fā)現(xiàn),但對(duì)另一些類型的錯(cuò)誤不一定容易發(fā)現(xiàn)。所以,在實(shí)際工作中,總是把它們結(jié)合起來使用,形成綜合的測試策略,以滿足不同測試階段和不同程序的需要。一般的做法是,用黑盒法設(shè)計(jì)基本的測試方案,再利用白盒法補(bǔ)充一些必要的測試方案。具體地說,可用以下策略結(jié)合各種方法:7.5軟件測試策略前面幾節(jié)內(nèi)容簡述了設(shè)計(jì)測試方法的91(1)在任何情況下都應(yīng)該使用邊界值分析的方法。(2)必要時(shí)用等價(jià)劃分法補(bǔ)充測試方案。(3)必要時(shí)用錯(cuò)誤推測法補(bǔ)充測試方案。(4)如果在程序的功能說明中含有輸入條件的組合,最好在一開始就用因果圖法,然后再按以上(1)、(2)、(3)步聚進(jìn)行。(5)對(duì)照程序邏輯,檢查已設(shè)計(jì)出的設(shè)計(jì)方案。可以根據(jù)對(duì)程序可靠性的要求采用不同的邏輯覆蓋標(biāo)準(zhǔn),如果現(xiàn)有測試方案的邏輯覆蓋程度沒達(dá)到要求的覆蓋標(biāo)準(zhǔn),則應(yīng)再補(bǔ)充一些測試方案。(1)在任何情況下都應(yīng)該使用邊界值分析的方法。92以上的綜合策略在實(shí)際應(yīng)用當(dāng)中,相對(duì)來說較為有效,但它依然不能保證測試時(shí)發(fā)現(xiàn)一切程序錯(cuò)誤,因?yàn)檐浖y試是一項(xiàng)十分艱巨復(fù)雜的工作。軟件測試過程必須分步驟進(jìn)行,每個(gè)步驟在邏輯上是前一個(gè)步驟的繼續(xù)。大型軟件系統(tǒng)通常由若干個(gè)子系統(tǒng)組成,每個(gè)子系統(tǒng)又由許多模塊組成。大型軟件系統(tǒng)的測試步驟基本由以下四個(gè)步驟組成:單元測試、集成測試(組裝測試)、確認(rèn)測試和系統(tǒng)測試,如圖7.7所示。以上的綜合策略在實(shí)際應(yīng)用當(dāng)中,相對(duì)來說較為有效,但它93圖7.7測試步驟圖7.7測試步驟947.5.1單元測試單元測試的目的在于發(fā)現(xiàn)各模塊內(nèi)部可能存在的各種差錯(cuò)。單元測試又稱模塊測試、邏輯測試或結(jié)構(gòu)測試。測試的方法一般采用白盒法,以路徑覆蓋為最佳準(zhǔn)則,且系統(tǒng)內(nèi)多個(gè)模塊可以并行地進(jìn)行測試。單元測試在編碼中就進(jìn)行了,其測試策略包括:單元測試設(shè)計(jì)測試用例要測試哪幾方面的問題,針對(duì)這幾方面問題各自測試什么內(nèi)容,測試的具體步驟及實(shí)用測試策略。7.5.1單元測試951.單元測試的內(nèi)容單元測試主要是對(duì)模塊的五個(gè)基本特性進(jìn)行評(píng)價(jià)。1)模塊接口在其他測試開始之前,首先要對(duì)通過模塊接口的數(shù)據(jù)進(jìn)行測試。若數(shù)據(jù)不能正確地輸入和輸出,則所有其他測試都是不切實(shí)際的。1.單元測試的內(nèi)容96Myers提出了接口測試要點(diǎn):(1)實(shí)際參數(shù)與形式參數(shù)的個(gè)數(shù)是否相等。(2)實(shí)際參數(shù)與形式參數(shù)的屬性是否匹配。(3)實(shí)際參數(shù)與形式參數(shù)的單位是否匹配。(4)調(diào)用其他模塊時(shí)所給實(shí)際參數(shù)的個(gè)數(shù)是否與被調(diào)模塊的形參數(shù)個(gè)數(shù)相等。(5)調(diào)用其他模塊時(shí)所給實(shí)際參數(shù)的屬性是否與被調(diào)模塊的形參屬性匹配。Myers提出了接口測試要點(diǎn):97(6)調(diào)用其他模塊時(shí)所給實(shí)際參數(shù)的單位是否與被調(diào)模塊的形參單位匹配。(7)調(diào)用內(nèi)部函數(shù)所用參數(shù)的個(gè)數(shù)、屬性和次序是否正確。(8)是否存在與當(dāng)前入口點(diǎn)無關(guān)的參數(shù)引用。(9)輸入是否僅改變了形式參數(shù)。(10)全程變量在各模塊中的定義是否一致。(11)常數(shù)是否當(dāng)作變量傳送。(6)調(diào)用其他模塊時(shí)所給實(shí)際參數(shù)的單位是否與被調(diào)模98若一個(gè)模塊需要完成外部的輸入或輸出時(shí),還應(yīng)檢查下述各點(diǎn):(1)文件屬性是否正確。(2)OPEN/CLOSE語句是否正確。(3)格式說明與I/O語句是否匹配。(4)緩沖器大小與記錄長度是否匹配。(5)文件是否先打開后使用。(6)文件結(jié)束的條件是否處理過。(7)I/O的錯(cuò)誤是否處理過。(8)輸出信息中是否有正文的錯(cuò)誤。若一個(gè)模塊需要完成外部的輸入或輸出時(shí),還應(yīng)檢查下述各點(diǎn):992)局部數(shù)據(jù)結(jié)構(gòu)檢查局部數(shù)據(jù)結(jié)構(gòu)是為了保證臨時(shí)存儲(chǔ)在模塊內(nèi)的數(shù)據(jù)在程序執(zhí)行過程中完整、正確。局部數(shù)據(jù)結(jié)構(gòu)往往是錯(cuò)誤的根源。應(yīng)仔細(xì)設(shè)計(jì)測試用例,力求發(fā)現(xiàn)下面幾類錯(cuò)誤:(1)不正確或不一致的說明。(2)錯(cuò)誤的初始化或錯(cuò)誤的缺省值。(3)拼寫錯(cuò)或截短的變量名。(4)不一致的數(shù)據(jù)類型。(5)上溢、下溢和地址錯(cuò)誤。除了局部數(shù)據(jù)結(jié)構(gòu)外,如有可能,單元測試期間還應(yīng)考慮全局?jǐn)?shù)據(jù)(例如FORTRAN的公用區(qū))對(duì)模塊的影響。2)局部數(shù)據(jù)結(jié)構(gòu)1003)重要的執(zhí)行路徑在模塊中應(yīng)對(duì)每一條獨(dú)立的執(zhí)行路徑進(jìn)行測試,單元測試的基本任務(wù)是保證模塊中每條語句至少執(zhí)行一次。此時(shí),設(shè)計(jì)測試用例是為了發(fā)現(xiàn)因錯(cuò)誤計(jì)算、不正確的比較和不適當(dāng)?shù)目刂屏髟斐傻腻e(cuò)誤。此時(shí),基本路徑測試和循環(huán)測試是最常用、最有效的測試技術(shù)。計(jì)算中常見的錯(cuò)誤如下:(1)算術(shù)運(yùn)算優(yōu)先次序不正確或理解錯(cuò)誤。(2)運(yùn)算方式不正確。(3)初始化不正確。(4)精度不夠。(5)表達(dá)式的符號(hào)表示錯(cuò)誤。3)重要的執(zhí)行路徑101比較判斷與控制流常常緊密相關(guān),因而,測試用例還應(yīng)致力于發(fā)現(xiàn)下列錯(cuò)誤:(1)不同的數(shù)據(jù)類型比較。(2)邏輯運(yùn)算不正確或優(yōu)先次序錯(cuò)誤。(3)因?yàn)榫日`差造成本應(yīng)相等的量不相等。(4)比較不正確,或變量不正確。(5)循環(huán)不終止或循環(huán)終止不正確。(6)當(dāng)遇到分支循環(huán)時(shí),出口錯(cuò)誤。(7)錯(cuò)誤地修改循環(huán)變量。比較判斷與控制流常常緊密相關(guān),因而,測試用例還應(yīng)致力1024)錯(cuò)誤處理一個(gè)好的設(shè)計(jì)應(yīng)能預(yù)見各種出錯(cuò)條件,并預(yù)設(shè)各種出錯(cuò)處理通路。出錯(cuò)處理通路同樣需要認(rèn)真測試,測試應(yīng)著重檢查下列問題:(1)錯(cuò)誤描述難以理解。(2)錯(cuò)誤提示與實(shí)際錯(cuò)誤不相符。(3)在程序自定義的出錯(cuò)處理段運(yùn)行之前,系統(tǒng)已介入。(4)對(duì)錯(cuò)誤的處理不正確。(5)提供的錯(cuò)誤信息不足,無法確定錯(cuò)誤位置和查錯(cuò)。4)錯(cuò)誤處理1035)邊界測試邊界測試是單元測試步驟中的最后一步,也是最重要的一項(xiàng)任務(wù)。眾所周知,軟件通常容易在邊界上失效,因而,采用邊界值分析技術(shù),針對(duì)邊界值及其左、右值設(shè)計(jì)測試用例,很有可能發(fā)現(xiàn)新的錯(cuò)誤。5)邊界測試104
2.單元測試步驟單元測試的步驟如下:(1)按照?qǐng)D7.8配置測試環(huán)境,設(shè)計(jì)輔助測試模塊。驅(qū)動(dòng)模塊相當(dāng)于所測模塊的主程序,主要用來接收測試數(shù)據(jù),啟動(dòng)被測模塊,打印測試結(jié)果。樁模塊(也稱存根模塊)接收被測試模塊的調(diào)用和輸出數(shù)據(jù),是被測模塊的調(diào)用模塊。驅(qū)動(dòng)模塊類似子程序模塊,是單元測試中重要的成本開銷。2.單元測試步驟105圖7.8單元模塊測試環(huán)境圖7.8單元模塊測試環(huán)境106(2)編寫測試數(shù)據(jù)。根據(jù)邏輯覆蓋及上述關(guān)于單元測試要解決的測試問題的考慮原則,設(shè)計(jì)測試用例。(3)進(jìn)行多個(gè)單元的并行測試。經(jīng)過編譯之后,先做靜態(tài)代碼復(fù)審,由人工測試模塊中的錯(cuò)誤,由程序設(shè)計(jì)者、程序編寫者和程序測試者參與,由軟件設(shè)計(jì)能力很強(qiáng)的高級(jí)程序員任組長,在研究軟件設(shè)計(jì)文檔基礎(chǔ)上召開審查會(huì),分析程序邏輯與錯(cuò)誤清單,測試預(yù)演,人工測試,代碼復(fù)審后再進(jìn)入計(jì)算機(jī)代碼執(zhí)行活動(dòng)的動(dòng)態(tài)測試,最后做單元測試報(bào)告。(2)編寫測試數(shù)據(jù)。根據(jù)邏輯覆蓋及上述關(guān)于單元測試1077.5.2集成測試集成測試也稱組裝測試,綜合測試或聯(lián)合測試。集成測試是按設(shè)計(jì)要求把通過單元測試的各個(gè)模塊組裝在一起之后進(jìn)行測試,以便發(fā)現(xiàn)與接口有關(guān)的各種錯(cuò)誤。在進(jìn)行集成測試時(shí),常需考慮的有關(guān)問題有:數(shù)據(jù)經(jīng)過接口是否會(huì)丟失;一個(gè)模塊對(duì)另一模塊是否造成不應(yīng)有的影響;幾個(gè)子功能組合起來能否實(shí)現(xiàn)主功能;誤差不斷積累是否達(dá)到不可接受的程度;全局?jǐn)?shù)據(jù)結(jié)構(gòu)是否有問題。集成測試分為非漸增式測試和漸增式測試。7.5.2集成測試108
1.非漸增式測試非漸增式測試方法是先分別測試每個(gè)模塊,再把所有模塊按設(shè)計(jì)要求放在一起,結(jié)合成所要的程序再進(jìn)行測試。
2.漸增式測試漸增式測試是把下一個(gè)要測試的模塊同已經(jīng)測試好的那些模塊結(jié)合起來進(jìn)行測試,測試完以后再把下下一個(gè)應(yīng)該測試的模塊結(jié)合進(jìn)來測試,這種測試每次增加一個(gè)模塊。這種方法實(shí)際上同時(shí)完成單元測試和集成測試。1.非漸增式測試1091)自頂向下結(jié)合自頂向下結(jié)合是一種遞增的裝配軟件結(jié)構(gòu)的方法。這種方法被日益廣泛地采用,它需要連接程序,但不需要驅(qū)動(dòng)程序。它是從主控制模塊(“主程序”)開始,沿著軟件的控制層次向下移動(dòng),從而逐漸把各個(gè)模塊結(jié)合起來。把主控模塊所屬的那些模塊都裝配到結(jié)構(gòu)中去時(shí),有兩種方法可供選擇。
深度優(yōu)先策略參看圖7.9,深度優(yōu)先策略先組裝在軟件結(jié)構(gòu)的一條主控制通路上的所有模塊。主控路徑的選擇決定于軟件的應(yīng)用特性。如,選取最左邊的路徑,先結(jié)合模塊M1、M2和M5,接著是M8,如果M2的某個(gè)功能需要,可結(jié)合M6,然后再構(gòu)造中央和右側(cè)的控制通路。1)自頂向下結(jié)合110圖7.9自頂向下結(jié)合圖7.9自頂向下結(jié)合111
寬度優(yōu)先策略寬度優(yōu)先策略是沿軟件結(jié)構(gòu)水平地移動(dòng),把處于同一個(gè)控制層次上的所有模塊組裝起來。對(duì)于圖7.9來說,先結(jié)合模塊M2、M3和M4(代替存根程序S4),接著是M5、M6和M7(代替存根程序S7)這一層,如此繼續(xù)進(jìn)行下去,直到所有模塊都被結(jié)合進(jìn)來為止。寬度優(yōu)先策略112自頂向下綜合測試可歸納為以下五個(gè)步驟:(1)用主控制模塊做測試驅(qū)動(dòng)程序,用連接程序代替所有直接附屬于主控制模塊的模塊。(2)依據(jù)所選的集成策略(深度優(yōu)先或?qū)挾葍?yōu)先),每次只用一個(gè)實(shí)際模塊替換一個(gè)樁模塊。(3)每集成一個(gè)模塊立即測試一遍。(4)只有每組測試完成后,才用實(shí)際模塊替換下一個(gè)樁模塊。(5)為避免引入新錯(cuò)誤,須不斷進(jìn)行回歸測試(即全部或部分地重復(fù)已做過的測試)。自頂向下綜合測試可歸納為以下五個(gè)步驟:113這一過程從第二步開始就不斷進(jìn)行,直到整個(gè)程序結(jié)構(gòu)構(gòu)造完畢。在圖7.9中,實(shí)線表示已部分完成的結(jié)構(gòu),若采用深度優(yōu)先策略,下一步就要用M7來替代樁模塊S7。S7本身可能又帶樁模塊,隨后將被對(duì)應(yīng)的實(shí)際模塊一一替代。自頂向下集成的優(yōu)點(diǎn)在于能盡早地對(duì)程序的主要控制和決策機(jī)制進(jìn)行檢驗(yàn),因而能較早發(fā)現(xiàn)錯(cuò)誤。其缺點(diǎn)在于測試較高層模塊時(shí),低層處理采用樁模塊替代,這并不能夠反映實(shí)際情況,重要數(shù)據(jù)不能及時(shí)回送到上層模塊,因而測試并不充分和完善。所以這種方法有它的局限性,若遇到此類問題,測試人員可選擇以下幾種方法解決之:這一過程從第二步開始就不斷進(jìn)行,直到整個(gè)程序結(jié)構(gòu)構(gòu)造114(1)把某些測試推遲到用真實(shí)模塊替代樁模塊之后進(jìn)行。這將使我們對(duì)一些特定的測試和特定模塊的裝配之間的對(duì)應(yīng)關(guān)系失去某些控制,在確定錯(cuò)誤原因時(shí)會(huì)比較困難。(2)開發(fā)能模擬真實(shí)模塊的樁模塊。此法無疑要大大增加開銷。(3)從層次結(jié)構(gòu)的底部向上裝配軟件。此種方法較切實(shí)可行,下面專門介紹。(1)把某些測試推遲到用真實(shí)模塊替代樁模塊之后進(jìn)行1152)自底向上結(jié)合自底向上測試是從軟件結(jié)構(gòu)最低層的模塊開始組裝和測試,當(dāng)測試到較高層模塊時(shí),所需的下層模塊均已具備,因而不再需要樁模塊。自底向上綜合測試可歸納為以下四個(gè)步驟:(1)把低層模塊組合成實(shí)現(xiàn)一個(gè)特定軟件子功能的族,見圖7.10中模塊族1、2、3。2)自底向上結(jié)合116圖7.10自底向上結(jié)合圖7.10自底向上結(jié)合117(2)為每個(gè)族設(shè)計(jì)一個(gè)驅(qū)動(dòng)軟件,作為測試的控制程序,以協(xié)調(diào)測試用例的輸入和輸出。圖7.10中,虛線接的框D1、D2、D3是各個(gè)族的驅(qū)動(dòng)程序。(3)對(duì)模塊族進(jìn)行測試。(4)按結(jié)構(gòu)向上次序,用實(shí)際模塊替換驅(qū)動(dòng)程序,將模塊族結(jié)合起來組裝成新的模塊族,再進(jìn)行測試,直至全部完成。例如,在圖7.10中,族1、族2上屬于Ma,因而去掉D1和D2將這兩個(gè)族直接與Ma接口;同樣族3與Mb接口前將D3去掉;Ma與Mb最后與Mc接口。(2)為每個(gè)族設(shè)計(jì)一個(gè)驅(qū)動(dòng)軟件,作為測試的控制程序118采用自底向上方法,越向上層分別測試,所需驅(qū)動(dòng)程序越少。而且,若軟件結(jié)構(gòu)的最上兩層用自頂向下結(jié)合的方法進(jìn)行裝配,則將大大減少驅(qū)動(dòng)程序的數(shù)目,同時(shí)族的組裝也會(huì)大大簡化。自頂向下方法不需驅(qū)動(dòng)模塊的設(shè)計(jì),可在程序測試的早期實(shí)現(xiàn)并驗(yàn)證系統(tǒng)的主要功能,及早發(fā)現(xiàn)上層模塊的接口錯(cuò)誤。但自頂向下方法必須設(shè)計(jì)存根模塊,使低層關(guān)鍵模塊中錯(cuò)誤發(fā)現(xiàn)較晚,并且不能在早期很快且充分地展開測試的人力。自底向上方法與自頂向下方法相比較,它的優(yōu)缺點(diǎn)與自頂向下方法恰恰相反。一般在實(shí)際應(yīng)用中,采用兩種方法相結(jié)合的混合法,即對(duì)軟件結(jié)構(gòu)的較上層使用自頂向下的結(jié)合方法,對(duì)下層使用自底向上的結(jié)合方法,以充分發(fā)揮兩種方法的優(yōu)點(diǎn),盡量避免其缺點(diǎn)。采用自底向上方法,越向上層分別測試,所需驅(qū)動(dòng)程序越少1197.5.3確認(rèn)測試確認(rèn)測試又稱有效性測試、合格測試或驗(yàn)收測試。模塊組裝后已成為完整的軟件包,消除了接口的錯(cuò)誤。確認(rèn)測試主要由使用用戶參加測試,檢驗(yàn)軟件規(guī)格說明的技術(shù)標(biāo)準(zhǔn)的符合程度,是保證軟件質(zhì)量的最后關(guān)鍵環(huán)節(jié)。7.5.3確認(rèn)測試120
1.確認(rèn)測試標(biāo)準(zhǔn)軟件確認(rèn)測試是通過一系列黑盒測試來證實(shí)軟件功能與用戶需求是否一致的。在測試計(jì)劃中,規(guī)定了測試的種類和測試進(jìn)度,測試過程定義了用于證實(shí)與需求一致的具體測試用例。測試計(jì)劃和測試過程的設(shè)計(jì)都應(yīng)考慮軟件是否符合所有功能和性能的要求,文檔資料是否正確完整以及人機(jī)界面和其他方面(如可移植性、兼容性、錯(cuò)誤恢復(fù)能力和可維護(hù)性等)是否令用戶滿意。確認(rèn)測試有兩種可能結(jié)果:一種是功能與性能規(guī)格說明一致,用戶可以接受;另一種是軟件不滿足軟件需求的要求,用戶無法接受。若要在此時(shí)進(jìn)行修改,工作量很大,因而必須與用戶協(xié)商,尋找一個(gè)妥善解決問題的辦法。1.確認(rèn)測試標(biāo)準(zhǔn)121
2.配置復(fù)審配置復(fù)審是確認(rèn)測試的另一個(gè)重要環(huán)節(jié)。復(fù)審的目的在于保證程序和文檔配置齊全、分類有序,兩者要一致,并且包括軟件維護(hù)所必須的細(xì)節(jié)。2.配置復(fù)審122
3.測試實(shí)際上,對(duì)于軟件開發(fā)人員來說,不可能完全預(yù)見用戶實(shí)際使用程序的情況。如,用戶可能曲解指令,可能常使用一些奇怪的數(shù)據(jù)組合,也可能對(duì)設(shè)計(jì)者自認(rèn)為明確的輸出信息難以理解等等。因而,當(dāng)開發(fā)者為用戶建立起軟件后,還要由用戶進(jìn)行一系列的驗(yàn)收測試,以確保用戶的所有需求有效。驗(yàn)收測試既可以是非正式的測試,也可是有計(jì)劃、有系統(tǒng)進(jìn)行的測試。有時(shí),驗(yàn)收測試從數(shù)周可達(dá)數(shù)月,不斷暴露出錯(cuò)誤,使得開發(fā)期延長。讓每個(gè)用戶都進(jìn)行測試是不實(shí)際的。大多數(shù)軟件產(chǎn)品的開發(fā)者使用一種稱為測試和測試(Alpha-testingandBefa-testing)的過程來發(fā)現(xiàn)只有用戶才能發(fā)現(xiàn)的錯(cuò)誤。3.測試123測試是由一個(gè)用戶在開發(fā)環(huán)境下進(jìn)行測試,也可以是開發(fā)機(jī)構(gòu)內(nèi)部的人員在模擬實(shí)際操作環(huán)境下進(jìn)行的測試。測試的關(guān)鍵在于盡可能逼真地模擬實(shí)際運(yùn)行環(huán)境和對(duì)用戶軟件產(chǎn)品的操作,并盡最大努力涵蓋所有可能的用戶操作方式。測試是在一個(gè)受控制環(huán)境下的測試。測試是由一個(gè)用戶在開發(fā)環(huán)境下進(jìn)行測試,也可以是開124測試是由軟件的多個(gè)用戶在一個(gè)或多個(gè)用戶的實(shí)際使用環(huán)境下進(jìn)行的測試。與測試不同的是,開發(fā)者一般不在現(xiàn)場。因此,測試是軟件不在開發(fā)者控制的環(huán)境下的“活的”應(yīng)用。用戶記錄在測試過程中遇到的所有問題,包括真實(shí)的以及主觀認(rèn)定的,定期向開發(fā)者報(bào)告。開發(fā)者在綜合用戶報(bào)告之后,必須做出相應(yīng)的修改,然后才能將軟件產(chǎn)品交付給全體用戶使用。測試是由軟件的多個(gè)用戶在一個(gè)或多個(gè)用戶的實(shí)際使用1257.5.4系統(tǒng)測試系統(tǒng)測試是將通過確認(rèn)測試的軟件,作為整個(gè)基于計(jì)算機(jī)系統(tǒng)的一個(gè)元素,與計(jì)算機(jī)硬件、外設(shè)、某些支持軟件、數(shù)據(jù)和人員等其他系統(tǒng)元素結(jié)合在一起,在實(shí)際運(yùn)行(使用)環(huán)境下,對(duì)計(jì)算機(jī)系統(tǒng)進(jìn)行一系列的組裝測試和確認(rèn)測試。對(duì)這些測試的詳細(xì)討論已超過軟件工程范圍,這些測試也不可能僅由軟件開發(fā)人員完成。在系統(tǒng)測試實(shí)施之前,軟件工程師應(yīng)完成以下工作:為測試軟件系統(tǒng)的輸入信息設(shè)計(jì)出錯(cuò)處理通路;設(shè)計(jì)測試用例,模擬錯(cuò)誤數(shù)據(jù)和軟件界面可能發(fā)生的錯(cuò)誤,記錄測試結(jié)果,為系統(tǒng)測試提供經(jīng)驗(yàn)和幫助;參與系統(tǒng)測試的規(guī)劃和設(shè)計(jì),保證軟件測試的合理性。7.5.4系統(tǒng)測試126系統(tǒng)測試實(shí)質(zhì)上是由一系列不同測試組成的,其主要目的是充分運(yùn)行系統(tǒng),驗(yàn)證系統(tǒng)各個(gè)部件是否都能正常工作并完成所分配的功能。以下,我們將討論用于系統(tǒng)的幾種軟件系統(tǒng)測試類型。系統(tǒng)測試實(shí)質(zhì)上是由一系列不同測試組成的,其主要目的是127
1.恢復(fù)測試恢復(fù)測試主要檢查系統(tǒng)的容錯(cuò)能力。當(dāng)系統(tǒng)出錯(cuò)時(shí),能否在指定的時(shí)間間隔內(nèi)修正錯(cuò)誤并重新啟動(dòng)系統(tǒng)?;謴?fù)測試首先要采用不同的方式強(qiáng)迫系統(tǒng)出現(xiàn)故障,然后驗(yàn)證系統(tǒng)是否能盡快恢復(fù)。如果恢復(fù)是自動(dòng)的(由系統(tǒng)自身完成),則重新初始化、檢測點(diǎn)設(shè)置、數(shù)據(jù)恢復(fù)以
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年技術(shù)服務(wù)合同協(xié)議模板
- 2024年影視作品版權(quán)轉(zhuǎn)讓與授權(quán)許可合同
- 2024年新農(nóng)村土地流轉(zhuǎn)合同范本
- 2024年新品銷售合同條款精要
- 2024年技術(shù)保密義務(wù)合同
- 2024云計(jì)算平臺(tái)建設(shè)與運(yùn)營協(xié)議
- 2024年建筑施工框架承包協(xié)議
- 2024年改進(jìn)版:房主通過中介出租房屋的委托協(xié)議
- 2024年玻璃儀器及實(shí)驗(yàn)、醫(yī)療用玻璃器皿項(xiàng)目綜合評(píng)估報(bào)告
- 2024年教育基金會(huì)教師資助協(xié)議
- 醫(yī)科大學(xué)2024年12月精神科護(hù)理學(xué)作業(yè)考核試題答卷
- 論青少年合理懷疑精神的培育
- 2024-2025學(xué)年浙教版八年級(jí)上冊科學(xué)期中模擬卷
- (正式版)HGT 6313-2024 化工園區(qū)智慧化評(píng)價(jià)導(dǎo)則
- 智能制造工程生涯發(fā)展報(bào)告
- 二級(jí)公立醫(yī)院績效考核三級(jí)手術(shù)目錄(2020版)
- 品牌授權(quán)工廠生產(chǎn)授權(quán)書合同
- 6人小品《沒有學(xué)習(xí)的人不傷心》臺(tái)詞完整版
- 銷售配合與帶動(dòng)-培訓(xùn)PPT課件
- MATLAB語言課程論文 基于MATLAB的電磁場數(shù)值圖像分析
- 暗挖隧道帷幕注漿專項(xiàng)方案[優(yōu)秀工程方案]
評(píng)論
0/150
提交評(píng)論