實(shí)現(xiàn)數(shù)據(jù)庫原理_第1頁
實(shí)現(xiàn)數(shù)據(jù)庫原理_第2頁
實(shí)現(xiàn)數(shù)據(jù)庫原理_第3頁
實(shí)現(xiàn)數(shù)據(jù)庫原理_第4頁
實(shí)現(xiàn)數(shù)據(jù)庫原理_第5頁
已閱讀5頁,還剩125頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第一頁,共一百三十二頁,2022年,8月28日軟件測試基礎(chǔ)本章內(nèi)容7.2單元測試7.3集成測試7.4確認(rèn)測試7.5白盒測試技術(shù)7.67.1編碼7.7黑盒測試技術(shù)7.8調(diào)試第二頁,共一百三十二頁,2022年,8月28日編碼通常把編碼和測試統(tǒng)稱為實(shí)現(xiàn)?編碼就是把軟件設(shè)計(jì)結(jié)果翻譯成用某種程序設(shè)計(jì)語言書寫的程序編碼是對(duì)設(shè)計(jì)的進(jìn)一步具體化程序的質(zhì)量主要取決于軟件設(shè)計(jì)的質(zhì)量程序設(shè)計(jì)語言的特點(diǎn)及編碼風(fēng)格將影響程序的可靠性、可讀性、可測試性和可維護(hù)性編碼過程中還不可避免地會(huì)引入新的錯(cuò)誤測試主要是準(zhǔn)對(duì)編碼進(jìn)行的,測試和編碼反復(fù)進(jìn)行,而且單元測試和編碼還是同一個(gè)人完成的第三頁,共一百三十二頁,2022年,8月28日測試測試是在軟件投入生產(chǎn)性運(yùn)行之前,盡可能多地發(fā)現(xiàn)軟件中的錯(cuò)誤,調(diào)試的目:診斷并改正測試發(fā)現(xiàn)的錯(cuò)誤是保證軟件質(zhì)量的關(guān)鍵步驟對(duì)軟件規(guī)格說明、設(shè)計(jì)和編碼的最后復(fù)審軟件測試包括單元測試和整體測試兩個(gè)階段測試的工作量占軟件開發(fā)總工作量的40%以上第四頁,共一百三十二頁,2022年,8月28日7.1.1選擇程序設(shè)計(jì)語言編碼之前第一步要做的事情就是選擇程序設(shè)計(jì)語言通常用高級(jí)語言寫的程序容易閱讀,容易測試,容易調(diào)試,容易維護(hù)。(效率高)第五頁,共一百三十二頁,2022年,8月28日7.1.1選擇程序設(shè)計(jì)語言選擇程序設(shè)計(jì)語言的標(biāo)準(zhǔn):1、系統(tǒng)用戶的要求:由用戶負(fù)責(zé)維護(hù)的時(shí)候2、可以使用的編譯程序3、可以得到的軟件工具(開發(fā)工具和數(shù)據(jù)庫)4、工程規(guī)模5、程序員的知識(shí)6、軟件可移植性要求7、軟件的應(yīng)用領(lǐng)域Fortran合適科學(xué)計(jì)算,cobol合適商業(yè)領(lǐng)域,lisp合適組合問題,prolog合適人工智能第六頁,共一百三十二頁,2022年,8月28日7.1.2編碼風(fēng)格源代碼質(zhì)量標(biāo)準(zhǔn):邏輯簡明清晰、易讀易懂,為了做到這點(diǎn)應(yīng)該遵循的規(guī)則:程序內(nèi)部的文檔:數(shù)據(jù)說明:次序應(yīng)該標(biāo)準(zhǔn)化、字母順序語句構(gòu)造規(guī)則不要為了節(jié)省空間而把多個(gè)語句寫在同一行;盡量避免復(fù)雜的條件判斷;盡量減少對(duì)“非”條件的判斷;避免大量使用循環(huán)嵌套和條件嵌套;利用括號(hào)使邏輯表達(dá)式或算術(shù)表達(dá)式的運(yùn)算次序清晰直觀。標(biāo)識(shí)符、注解、程序視角組織第七頁,共一百三十二頁,2022年,8月28日編碼風(fēng)格4.

輸入輸出風(fēng)格的規(guī)則對(duì)所有輸入數(shù)據(jù)都進(jìn)行檢驗(yàn);檢查輸入項(xiàng)重要組合的合法性;保持輸入格式簡單;使用數(shù)據(jù)結(jié)束標(biāo)記,不要要求用戶指定數(shù)據(jù)的數(shù)目;明確提示交互式輸入的請求,詳細(xì)說明可用的選擇或邊界數(shù)值;當(dāng)程序設(shè)計(jì)語言對(duì)格式有嚴(yán)格要求時(shí),應(yīng)保持輸入格式一致;設(shè)計(jì)良好的輸出報(bào)表;給所有輸出數(shù)據(jù)加標(biāo)志。如果有多個(gè)輸入組合的話第八頁,共一百三十二頁,2022年,8月28日編碼風(fēng)格5.效率:處理機(jī)時(shí)間和存儲(chǔ)器容量和輸入輸出效率是性能要求,在需求分析階段確定效率是靠好設(shè)計(jì)來提高的不要犧牲程序的清晰性和可讀性來提高效率(1)程序運(yùn)行時(shí)間1、算法的復(fù)雜度2、寫程序的規(guī)則:第九頁,共一百三十二頁,2022年,8月28日編碼風(fēng)格(2)存儲(chǔ)器效率使用結(jié)構(gòu)化控制結(jié)構(gòu)、適當(dāng)?shù)木幾g程序和語言(3)輸入輸出的效率1、使用緩沖減少通信開銷;2、二級(jí)存儲(chǔ)器(硬盤)選用最簡單的訪問方法3、二級(jí)存儲(chǔ)器(硬盤)數(shù)據(jù)傳送以組為單位4、如果高效率輸入輸出不好被理解,則放棄第十頁,共一百三十二頁,2022年,8月28日7.2軟件測試基礎(chǔ)

7.2.1軟件測試的目標(biāo)軟件測試和其他階段的思路區(qū)別:“建設(shè)性”和“破壞性”。測試階段的根本目標(biāo):是盡可能多地發(fā)現(xiàn)并排除軟件中潛藏的錯(cuò)誤,最終把一個(gè)高質(zhì)量的軟件系統(tǒng)交給用戶使用。(1)測試是為了發(fā)現(xiàn)程序中的錯(cuò)誤而執(zhí)行程序的過程;(2)好的測試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測試方案;(3)成功的測試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測試。通常由第三方或測試機(jī)構(gòu)來完成測試工作測試決不能證明程序是正確的第十一頁,共一百三十二頁,2022年,8月28日7.2.2軟件測試準(zhǔn)則(1)所有測試都應(yīng)該能追溯到用戶需求。 對(duì)需求進(jìn)行確認(rèn)(p56)(2)應(yīng)該遠(yuǎn)在測試開始之前就制定出測試計(jì)劃。 設(shè)計(jì)階段制定詳細(xì)的測試方案(p93)(3)Pareto錯(cuò)誤集聚現(xiàn)象:測試發(fā)現(xiàn)的錯(cuò)誤中的80%很可能是由程序中20%的模塊造成的。(4)先進(jìn)行“小規(guī)?!睖y試,并逐步進(jìn)行“大規(guī)?!睖y試。(5)窮舉測試是不可能的。(6)由獨(dú)立的第三方從事測試工作。對(duì)所有的執(zhí)行路徑都檢查一遍的測試第十二頁,共一百三十二頁,2022年,8月28日例:Windows95有1000萬行代碼

Windows2000有5000萬行代碼Exchange2000和Windows2000開發(fā)人員結(jié)構(gòu)Exchange2000Windows2000項(xiàng)目經(jīng)理25人約250人開發(fā)人員140人約1700人測試人員350人約3200人第十三頁,共一百三十二頁,2022年,8月28日7.2.3測試方法黑盒測試法(功能測試):完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過程。只在程序接口進(jìn)行的測試,只檢查程序功能是否能按照規(guī)格說明書的規(guī)定正常使用,程序是否能適當(dāng)?shù)亟邮蛰斎霐?shù)據(jù)并產(chǎn)生正確的輸出信息,程序運(yùn)行過程中能否保持外部信息的完整性。白盒測試法(結(jié)構(gòu)測試):把程序看成裝在一個(gè)透明的白盒子里,程序的結(jié)構(gòu)和處理算法完全可見。按照程序內(nèi)部的邏輯測試程序,檢測程序中的主要執(zhí)行通路是否都能按預(yù)定要求正確工作。第十四頁,共一百三十二頁,2022年,8月28日7.2.4測試步驟大型軟件系統(tǒng)的測試過程由以下步驟組成:1.模塊測試模塊測試的目的是保證每個(gè)模塊作為一個(gè)單元能正確運(yùn)行,所以模塊測試通常又稱為單元測試該步驟中通常發(fā)現(xiàn)編碼和詳細(xì)設(shè)計(jì)的錯(cuò)誤2.子系統(tǒng)測試子系統(tǒng)測試是把經(jīng)過單元測試的模塊放在一起形成一個(gè)子系統(tǒng)來測試著重測試模塊接口間的協(xié)調(diào)和通信第十五頁,共一百三十二頁,2022年,8月28日測試步驟3.系統(tǒng)測試系統(tǒng)測試是把經(jīng)過測試的子系統(tǒng)裝配成一個(gè)完整的系統(tǒng)來測試應(yīng)該驗(yàn)證系統(tǒng)確實(shí)能提供需求說明書中指定的功能、性能、可靠性等要求往往發(fā)現(xiàn)軟件設(shè)計(jì)或需求說明中的錯(cuò)誤集成測試:子系統(tǒng)測試與系統(tǒng)測試第十六頁,共一百三十二頁,2022年,8月28日測試步驟4.驗(yàn)收測試(確認(rèn)測試)把軟件系統(tǒng)作為單一的實(shí)體進(jìn)行測試,測試內(nèi)容與系統(tǒng)測試基本類似在用戶積極參與下,使用實(shí)際數(shù)據(jù)(系統(tǒng)將來要處理的信息)進(jìn)行測試驗(yàn)收測試的目的是驗(yàn)證系統(tǒng)確實(shí)能夠滿足用戶的需要往往發(fā)現(xiàn)系統(tǒng)需求說明書中的錯(cuò)誤第十七頁,共一百三十二頁,2022年,8月28日測試步驟5.平行運(yùn)行同時(shí)運(yùn)行新開發(fā)出來的系統(tǒng)和將被它取代的舊系統(tǒng),以便比較新舊兩個(gè)系統(tǒng)的處理結(jié)果。具體目的有如下幾點(diǎn):(1)可以在準(zhǔn)生產(chǎn)環(huán)境中運(yùn)行新系統(tǒng)而又不冒風(fēng)險(xiǎn);(2)用戶能有一段熟悉新系統(tǒng)的時(shí)間;(3)可以驗(yàn)證用戶指南和使用手冊之類的文檔;(4)能夠以準(zhǔn)生產(chǎn)模式對(duì)新系統(tǒng)進(jìn)行全負(fù)荷測試,可以用測試結(jié)果驗(yàn)證性能指標(biāo)。第十八頁,共一百三十二頁,2022年,8月28日測試步驟第十九頁,共一百三十二頁,2022年,8月28日測試步驟第二十頁,共一百三十二頁,2022年,8月28日7.2.5測試階段的信息流測試階段輸入信息的信息流有兩類:(1)軟件配置,包括需求說明書、設(shè)計(jì)說明書和源程序清單等;(2)測試配置,包括測試計(jì)劃和測試方案。測試方案包括測試時(shí)使用的輸入數(shù)據(jù)(稱為測試用例)、每組輸入數(shù)據(jù)預(yù)定要檢驗(yàn)的功能以及每組輸入數(shù)據(jù)預(yù)期的正確輸出。最終提交的軟件配置應(yīng)該包括測試配置、測試的實(shí)際結(jié)果和調(diào)試的記錄第二十一頁,共一百三十二頁,2022年,8月28日測試階段的信息流第二十二頁,共一百三十二頁,2022年,8月28日經(jīng)驗(yàn)如果測試經(jīng)常出現(xiàn)要修改設(shè)計(jì),那軟件質(zhì)量和可靠性值得懷疑,不出現(xiàn)這樣的情況,則還有兩種可能:(1)軟件的可靠性是可以接受的;(2)所進(jìn)行的測試尚不足以發(fā)現(xiàn)嚴(yán)重的錯(cuò)誤。若測試沒有發(fā)現(xiàn)錯(cuò)誤,則很可能是因?yàn)闇y試不充分,無法暴露潛藏的錯(cuò)誤。隱藏的錯(cuò)誤最終將被用戶發(fā)現(xiàn),在維護(hù)階段改正它們,要付出高出許多倍的代價(jià)。第二十三頁,共一百三十二頁,2022年,8月28日7.3單元測試集中檢測軟件設(shè)計(jì)的最小單元——模塊單元測試和編碼屬于軟件過程的同一個(gè)階段可以應(yīng)用人工測試和計(jì)算機(jī)測試這樣兩種不同類型的測試方法,完成單元測試工作單元測試主要使用白盒測試技術(shù)并行地進(jìn)行第二十四頁,共一百三十二頁,2022年,8月28日7.3.1測試重點(diǎn)1.模塊接口檢查參數(shù)的數(shù)目、次序、屬性或單位系統(tǒng)與變元是否一致;是否修改了只作輸入用的變元;全局變量的定義和用法在各個(gè)模塊中是否一致。2.局部數(shù)據(jù)結(jié)構(gòu)主要發(fā)現(xiàn)局部數(shù)據(jù)說明、初始化、默認(rèn)值等方面的錯(cuò)誤。3.重要的執(zhí)行通路選擇最有代表性、最可能發(fā)現(xiàn)錯(cuò)誤的執(zhí)行通路進(jìn)行測試,用來發(fā)現(xiàn)由于錯(cuò)誤的計(jì)算、不正確的比較或不適當(dāng)?shù)目刂屏鞫斐傻腻e(cuò)誤。數(shù)據(jù)庫中最小存儲(chǔ)和處理單位數(shù)據(jù)庫中最小存儲(chǔ)和處理單位第二十五頁,共一百三十二頁,2022年,8月28日測試重點(diǎn)4.出錯(cuò)處理通路好的設(shè)計(jì)應(yīng)該能預(yù)見出現(xiàn)錯(cuò)誤的條件,設(shè)置適當(dāng)?shù)奶幚礤e(cuò)誤的通路。程序中應(yīng)包含出錯(cuò)處理通路,并認(rèn)真測試這種通路。評(píng)價(jià)出錯(cuò)處理通路時(shí),著重測試下述可能發(fā)生的錯(cuò)誤:(1)對(duì)錯(cuò)誤的描述是難以理解的;(2)記下的錯(cuò)誤與實(shí)際遇到的錯(cuò)誤不同;(3)在對(duì)錯(cuò)誤進(jìn)行處理之前,錯(cuò)誤條件已經(jīng)引起系統(tǒng)干預(yù);(4)對(duì)錯(cuò)誤的處理不正確;(5)描述錯(cuò)誤的信息不足以幫助確定造成錯(cuò)誤的位置。第二十六頁,共一百三十二頁,2022年,8月28日測試重點(diǎn)5.邊界條件邊界測試是單元測試中最后的也可能是最重要的任務(wù)。什么是邊界?軟件常常在它的邊界上失效。如:數(shù)組的循環(huán)使用剛好小于、剛好等于和剛好大于最大值或最小值的數(shù)據(jù)結(jié)構(gòu)、控制量和數(shù)據(jù)值的測試方案,容易發(fā)現(xiàn)錯(cuò)誤。第二十七頁,共一百三十二頁,2022年,8月28日7.3.2代碼審查由審查小組正式進(jìn)行人工測試源程序。是一種非常有效的程序驗(yàn)證技術(shù),通??梢圆槌?0%~70%的邏輯設(shè)計(jì)錯(cuò)誤和編碼錯(cuò)誤。審查小組最好由下述4人組成:(1)組長,應(yīng)該是一個(gè)很有能力的程序員,而且沒有直接參與這項(xiàng)工程;(2)程序的設(shè)計(jì)者;(3)程序的編寫者;(4)程序的測試者。第二十八頁,共一百三十二頁,2022年,8月28日審查會(huì)1、小組成員先研究設(shè)計(jì)說明書,力求理解這個(gè)設(shè)計(jì)。2、審查會(huì)上先由設(shè)計(jì)者扼要地介紹他的設(shè)計(jì)。3、由程序的編寫者逐句解釋他是怎樣用程序代碼實(shí)現(xiàn)這個(gè)設(shè)計(jì)的邏輯,小組其他成員仔細(xì)傾聽他的講解,并力圖發(fā)現(xiàn)其中的錯(cuò)誤。4、對(duì)照程序設(shè)計(jì)常見錯(cuò)誤清單,分析審查這個(gè)程序。5、當(dāng)發(fā)現(xiàn)錯(cuò)誤時(shí)由組長記錄下來,審查會(huì)繼續(xù)進(jìn)行(審查小組的任務(wù)是發(fā)現(xiàn)錯(cuò)誤而不是改正錯(cuò)誤)。代碼審查可以發(fā)現(xiàn)許多錯(cuò)誤,減少系統(tǒng)驗(yàn)證的總工作量。應(yīng)與計(jì)算機(jī)測試配合使用,提高查找錯(cuò)誤的效率。第二十九頁,共一百三十二頁,2022年,8月28日7.3.3計(jì)算機(jī)測試輔助模塊:驅(qū)動(dòng)軟件和(或)存根軟件。驅(qū)動(dòng)程序就是一個(gè)“主程序”,它接收測試數(shù)據(jù),把這些數(shù)據(jù)傳送給被測試的模塊,并且印出有關(guān)的結(jié)果。存根程序代替被測試的模塊所調(diào)用的模塊,也稱為“虛擬子程序”、“樁模塊”。做最少量的數(shù)據(jù)操作,印出對(duì)入口的檢驗(yàn)或操作結(jié)果,并且把控制歸還給調(diào)用它的模塊。不作為軟件產(chǎn)品的一部分交給用戶第三十頁,共一百三十二頁,2022年,8月28日驅(qū)動(dòng)模塊和樁模塊第三十一頁,共一百三十二頁,2022年,8月28日驅(qū)動(dòng)模塊和樁模塊例如,要測試其中編號(hào)為3.0的關(guān)鍵模塊——正文編輯模塊。需要有一個(gè)測試驅(qū)動(dòng)程序來調(diào)用它,說明必要的變量,接收測試數(shù)據(jù)——字符串,并且設(shè)置正文編輯模塊的編輯功能;正文編輯模塊3.0通過調(diào)用存根程序模擬下層模塊來完成簡化的編輯功能??梢栽O(shè)置的編輯功能只有修改(CHANGE)和添加(APPEND)兩種,用控制變量CFUNCT標(biāo)記要求的編輯功能。以下是用偽碼書寫的存根程序和驅(qū)動(dòng)程序。第三十二頁,共一百三十二頁,2022年,8月28日圖7.2正文加工系統(tǒng)的層次圖第三十三頁,共一百三十二頁,2022年,8月28日存根程序TESTSTUB(*測試正文編輯模塊用的存根程序*) 初始化; 輸出信息“進(jìn)入了正文編輯程序”; 輸出“輸入的控制信息是”CFUNCT; 輸出緩沖區(qū)中的字符串;

IFCFUNCT=CHANGE THEN 把緩沖區(qū)中第二個(gè)字改為***//測試修改

ELSE 在緩沖區(qū)的尾部加???//測試添加

END IF; 輸出緩沖區(qū)中的新字符串;ENDTESTSTUB第三十四頁,共一百三十二頁,2022年,8月28日驅(qū)動(dòng)程序TESTDRIVER(*測試正文編輯模塊用的驅(qū)動(dòng)程序*) 說明長度為2500個(gè)字符的一個(gè)緩沖區(qū); 把CFUNCT置為希望測試的狀態(tài); 輸入字符串; 調(diào)用正文編輯模塊; 停止或再次初啟;ENDTESTDRIVER第三十五頁,共一百三十二頁,2022年,8月28日7.4集成測試集成測試是測試和組裝軟件的系統(tǒng)化技術(shù)目標(biāo)是發(fā)現(xiàn)與接口有關(guān)的問題發(fā)現(xiàn)問題:數(shù)據(jù)穿過接口時(shí)可能丟失;把子功能組合起來可能不產(chǎn)生預(yù)期的主功能;個(gè)別看來是可以接受的誤差可能積累到不能接受的程度;全程數(shù)據(jù)結(jié)構(gòu)可能有問題。。。。。。第三十六頁,共一百三十二頁,2022年,8月28日組裝策略模塊組裝成程序有兩種方法:1、非漸增式測試:先分別測試每個(gè)模塊,再把所有模塊按設(shè)計(jì)要求放在一起結(jié)合成所要的程序;2、漸增式測試:把下一個(gè)要測試的模塊同已經(jīng)測試好的那些模塊結(jié)合起來進(jìn)行測試,測試完以后再把下一個(gè)應(yīng)該測試的模塊結(jié)合進(jìn)來測試。同時(shí)完成單元測試和集成測試。漸增方式下有自頂向下和自底向上兩種集成策略。第三十七頁,共一百三十二頁,2022年,8月28日非漸增式測試第三十八頁,共一百三十二頁,2022年,8月28日漸增式測試——自頂向下第三十九頁,共一百三十二頁,2022年,8月28日漸增式測試——自底向上第四十頁,共一百三十二頁,2022年,8月28日兩種集成策略優(yōu)缺點(diǎn)非漸增式測試一下子把所有模塊放在一起,并把龐大的程序作為一個(gè)整體來測試,難于診斷定位一個(gè)錯(cuò)誤;一旦改正一個(gè)錯(cuò)誤之后,馬上又會(huì)遇到新的錯(cuò)誤。漸增式測試把程序劃分成小段來構(gòu)造和測試,比較容易定位和改正錯(cuò)誤;對(duì)接口可以進(jìn)行更徹底的測試;可以使用系統(tǒng)化的測試方法。目前普遍采用漸增式測試方法。第四十一頁,共一百三十二頁,2022年,8月28日7.4.1自頂向下集成自頂向下集成方法:從主控制模塊開始,沿著程序的控制層次向下移動(dòng),逐漸把各個(gè)模塊結(jié)合起來。在把主控制模塊的附屬模塊組裝到程序結(jié)構(gòu)中去時(shí),它包括深度優(yōu)先和寬度優(yōu)先兩種組裝策略。深度優(yōu)先的結(jié)合方法先組裝在軟件結(jié)構(gòu)的一條主控制通路上的所有模塊。寬度優(yōu)先的結(jié)合方法是沿軟件結(jié)構(gòu)水平地移動(dòng),把處于同一個(gè)控制層次上的所有模塊組裝起來。第四十二頁,共一百三十二頁,2022年,8月28日自頂向下結(jié)合第四十三頁,共一百三十二頁,2022年,8月28日具體集成過程第一步,對(duì)主控制模塊進(jìn)行測試,測試時(shí)用存根程序代替所有直接附屬于主控制模塊的模塊;第二步,根據(jù)選定的結(jié)合策略(深度優(yōu)先或?qū)挾葍?yōu)先),每次用一個(gè)實(shí)際模塊代換一個(gè)存根程序(新結(jié)合進(jìn)來的模塊往往又需要新的存根程序);第三步,在結(jié)合進(jìn)一個(gè)模塊的同時(shí)進(jìn)行測試;第四步,為了保證加入模塊沒有引進(jìn)新的錯(cuò)誤,可能需要進(jìn)行回歸測試(即,全部或部分地重復(fù)以前做過的測試)。從第二步開始不斷地重復(fù)進(jìn)行上述過程,直到構(gòu)造起完整的軟件結(jié)構(gòu)為止。第四十四頁,共一百三十二頁,2022年,8月28日7.4.2自底向上集成這種組裝的方式是從程序模塊結(jié)構(gòu)的最底層的模塊開始組裝和測試。因?yàn)槟K是自底向上進(jìn)行組裝,對(duì)于一個(gè)給定層次的模塊,它的子模塊(包括子模塊的所有下屬模塊)已經(jīng)組裝并測試完成,所以不再需要樁模塊。在模塊的測試過程中需要從子模塊得到的信息可以直接運(yùn)行子模塊得到。第四十五頁,共一百三十二頁,2022年,8月28日自底向上集成的過程第一步,把低層模塊組合成實(shí)現(xiàn)某個(gè)特定軟件子功能的族;第二步,寫一個(gè)驅(qū)動(dòng)程序(用于測試的控制程序),協(xié)調(diào)測試數(shù)據(jù)的輸入和輸出;第三步,對(duì)由模塊組成的子功能族進(jìn)行測試;第四步,去掉驅(qū)動(dòng)程序,沿軟件結(jié)構(gòu)自下向上移動(dòng),把子功能族組合起來形成更大的子功能族。上述第二步到第四步實(shí)質(zhì)上構(gòu)成了一個(gè)循環(huán)。第四十六頁,共一百三十二頁,2022年,8月28日自底向上結(jié)合第四十七頁,共一百三十二頁,2022年,8月28日7.4.3不同集成測試策略的比較自頂向下測試方法的主要優(yōu)點(diǎn)是不需要測試驅(qū)動(dòng)程序,能夠在測試階段的早期實(shí)現(xiàn)并驗(yàn)證系統(tǒng)的主要功能,及早發(fā)現(xiàn)上層模塊的接口錯(cuò)誤。自頂向下測試方法的主要缺點(diǎn)是需要存根程序,可能產(chǎn)生測試?yán)щy,低層關(guān)鍵模塊中的錯(cuò)誤發(fā)現(xiàn)較晚,在早期不能充分展開人力。兩種方法的優(yōu)缺點(diǎn)剛好相反。第四十八頁,共一百三十二頁,2022年,8月28日混合集成策略改進(jìn)的自頂向下測試方法。

基本上使用自頂向下的測試方法,但是在早期使用自底向上的方法測試軟件中的少數(shù)關(guān)鍵模塊。具有自頂向下方法的優(yōu)點(diǎn),而且能在測試的早期發(fā)現(xiàn)關(guān)鍵模塊中的錯(cuò)誤;它的缺點(diǎn)是測試關(guān)鍵模塊時(shí)需要驅(qū)動(dòng)程序。(2)混合法。對(duì)軟件結(jié)構(gòu)中較上層使用的自頂向下方法與對(duì)軟件結(jié)構(gòu)中較下層使用的自底向上方法相結(jié)合。兼有兩種方法的優(yōu)點(diǎn)和缺點(diǎn),當(dāng)關(guān)鍵模塊比較多時(shí)是最好的折衷方法。第四十九頁,共一百三十二頁,2022年,8月28日回歸測試集回歸測試是指重新執(zhí)行已經(jīng)做過的測試的某個(gè)子集,以保證最新變化沒有帶來非預(yù)期的副作用。為限制回歸測試用例的數(shù)量,應(yīng)該把回歸測試集設(shè)計(jì)成只包括可以檢測程序每個(gè)主要功能中的一類或多類錯(cuò)誤的那樣一些測試用例。第五十頁,共一百三十二頁,2022年,8月28日7.5確認(rèn)測試確認(rèn)測試(驗(yàn)收測試),它的目標(biāo)是驗(yàn)證軟件的有效性。確認(rèn)(validation)指的是為了保證軟件確實(shí)滿足了用戶需求而進(jìn)行的一系列活動(dòng)。驗(yàn)證(verification)指的是保證軟件正確地實(shí)現(xiàn)了某個(gè)特定要求的一系列活動(dòng)。第五十一頁,共一百三十二頁,2022年,8月28日軟件有效性軟件有效性的簡單定義:如果軟件的功能和性能如同用戶所合理期待的那樣,軟件就是有效的。需求分析階段產(chǎn)生的軟件需求規(guī)格說明書,準(zhǔn)確地描述了用戶對(duì)軟件的合理期望,因此是軟件有效性的標(biāo)準(zhǔn),也是進(jìn)行確認(rèn)測試的基礎(chǔ)。第五十二頁,共一百三十二頁,2022年,8月28日7.5.1確認(rèn)測試的范圍確認(rèn)測試必須有用戶積極參與,或者以用戶為主進(jìn)行。用戶參與設(shè)計(jì)測試方案,使用用戶界面輸入測試數(shù)據(jù)并且分析評(píng)價(jià)測試的輸出結(jié)果。確認(rèn)測試通常使用黑盒測試法。應(yīng)該仔細(xì)設(shè)計(jì)測試計(jì)劃和測試過程通過測試和調(diào)試要確認(rèn)軟件能滿足所有功能和性能要求,文檔資料是準(zhǔn)確而完整的,還應(yīng)該保證軟件能滿足其他預(yù)定的要求(例如,安全性、可移植性、兼容性和可維護(hù)性等)。第五十三頁,共一百三十二頁,2022年,8月28日7.5.2軟件配置復(fù)查是確認(rèn)測試的一個(gè)重要內(nèi)容目的是保證軟件配置的所有成分都齊全,質(zhì)量符合要求,文檔與程序完全一致,具有完成軟件維護(hù)所必須的細(xì)節(jié),而且已經(jīng)編好目錄。還應(yīng)該檢驗(yàn)用戶指南及其他操作程序的完整性和正確性記錄發(fā)現(xiàn)的遺漏或錯(cuò)誤,并且適當(dāng)?shù)匮a(bǔ)充和改正。第五十四頁,共一百三十二頁,2022年,8月28日7.5.3Alpha和Beta測試驗(yàn)收測試是由最終用戶進(jìn)行,能夠發(fā)現(xiàn)隨著時(shí)間流逝降低系統(tǒng)質(zhì)量的累積錯(cuò)誤。產(chǎn)品軟件通常使用Alpha測試和Beta測試。Alpha測試由用戶在開發(fā)現(xiàn)場,在開發(fā)者的“指導(dǎo)”下進(jìn)行測試(受控環(huán)境)。開發(fā)者負(fù)責(zé)記錄發(fā)現(xiàn)的錯(cuò)誤和使用中遇到的問題。Beta測試由軟件的用戶在實(shí)際使用環(huán)境中進(jìn)行。開發(fā)者不在現(xiàn)場。用戶把遇到的一切問題記錄并定期報(bào)告。開發(fā)者根據(jù)報(bào)告的問題對(duì)軟件進(jìn)行修改,發(fā)布最終的軟件產(chǎn)品。第五十五頁,共一百三十二頁,2022年,8月28日7.6白盒測試技術(shù)設(shè)計(jì)測試方案是測試階段的關(guān)鍵技術(shù)問題。測試方案包括具體的測試目的(要測試的具體功能),應(yīng)該輸入的測試數(shù)據(jù)和預(yù)期的結(jié)果。通常又把測試數(shù)據(jù)和預(yù)期的輸出結(jié)果稱為測試用例。關(guān)鍵問題是設(shè)計(jì)測試用的輸入數(shù)據(jù)。選用少量“最有效的”測試數(shù)據(jù),做到盡可能完備的測試。第五十六頁,共一百三十二頁,2022年,8月28日7.6.1邏輯覆蓋測試選擇執(zhí)行程序中最有代表性的通路替代窮盡測試。邏輯覆蓋是對(duì)一系列測試過程的總稱,根據(jù)測試數(shù)據(jù)執(zhí)行(覆蓋)程序邏輯的程度劃分等級(jí),進(jìn)行越來越完整的通路測試。根據(jù)流程圖,分析下不同的覆蓋標(biāo)準(zhǔn)。第五十七頁,共一百三十二頁,2022年,8月28日例(A>1)

and

(B=0)(A=2)

or

(X>1)X=X/AX=X+1TTFFabdce第五十八頁,共一百三十二頁,2022年,8月28日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)

邏輯路徑第五十九頁,共一百三十二頁,2022年,8月28日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)邏輯路徑第六十頁,共一百三十二頁,2022年,8月28日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)邏輯路徑第六十一頁,共一百三十二頁,2022年,8月28日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)邏輯路徑第六十二頁,共一百三十二頁,2022年,8月28日1.語句覆蓋

語句覆蓋就是設(shè)計(jì)若干個(gè)測試用例,運(yùn)行被測程序,使得每一可執(zhí)行語句至少執(zhí)行一次。在圖例中,選擇路徑L1設(shè)計(jì)測試用例,就可以覆蓋所有的可執(zhí)行語句。為圖例設(shè)計(jì)滿足語句覆蓋的測試用例是:

【(2,0,4),(2,0,3)】覆蓋ace【L1】第六十三頁,共一百三十二頁,2022年,8月28日語句覆蓋的缺點(diǎn)語句覆蓋是很弱的邏輯覆蓋標(biāo)準(zhǔn)。例如:intfoo(inta,intb)

{

returna/b;

}假如我們的測試人員編寫如下測試案例:TeseCase:a=10,b=5測試人員的測試結(jié)果會(huì)告訴你,他的代碼覆蓋率達(dá)到了100%,并且所有測試案例都通過了。然而遺憾的是,我們的語句覆蓋率達(dá)到了所謂的100%,但是卻沒有發(fā)現(xiàn)最簡單的Bug,比如,當(dāng)我讓b=0時(shí),會(huì)拋出一個(gè)除零異常。第六十四頁,共一百三十二頁,2022年,8月28日判定覆蓋就是設(shè)計(jì)若干個(gè)測試用例,運(yùn)行被測程序,使得程序中每個(gè)判斷的取真分支和取假分支至少經(jīng)歷測試一次。對(duì)于圖例,如果選擇路徑L1和L2,就可得滿足要求的測試用例:2.判定覆蓋(分支覆蓋)【(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)第六十五頁,共一百三十二頁,2022年,8月28日如果選擇路徑L3和L4,還可得另一組可用的測試用例:

【(2,1,1),(2,1,2)】覆蓋abe【L3】

【(3,0,3),(3,0,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)判定覆蓋(分支覆蓋)沒有對(duì)每一個(gè)條件進(jìn)行檢查,如果判定2中的條件X>1誤寫成X>2,不一定能被發(fā)現(xiàn)。第六十六頁,共一百三十二頁,2022年,8月28日3.條件覆蓋條件覆蓋就是設(shè)計(jì)若干個(gè)測試用例,運(yùn)行被測程序,使得程序中每個(gè)判斷的每個(gè)條件的可能取值至少執(zhí)行一次。在圖例中,事先可對(duì)所有條件的取值加以標(biāo)記。對(duì)于第一個(gè)判斷:條件A>1取真,取假

條件B=0取真,取假對(duì)于第二個(gè)判斷:條件A=2取真,取假

條件X>1取真,取假第六十七頁,共一百三十二頁,2022年,8月28日測試用例

覆蓋分支

條件取值【(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)或【(1,0,3),(1,0,4)】L3(b,e)

【(2,1,1),(2,1,2)】L3(b,e)

滿足條件覆蓋,卻不一定滿足判定覆蓋。條件覆蓋第六十八頁,共一百三十二頁,2022年,8月28日判定-條件覆蓋就是設(shè)計(jì)足夠的測試用例,使得判斷中每個(gè)條件的所有可能取值至少執(zhí)行一次,每個(gè)判斷中的每個(gè)分支至少執(zhí)行一次。

測試用例

覆蓋分支

條件取值【(2,0,4),(2,0,3)】L1(c,e)【(1,1,1),(1,1,1)】L2(b,d)4、判定/條件覆蓋(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)第六十九頁,共一百三十二頁,2022年,8月28日5、條件組合覆蓋條件組合覆蓋就是設(shè)計(jì)足夠的測試用例,運(yùn)行被測程序,使得每個(gè)判斷的所有可能的條件取值組合至少執(zhí)行一次。記①A>1,B=0作

②A>1,B≠0作③A≯1,B=0作④A≯1,B≠0作

⑤A=2,X>1作

⑥A=2,X≯1作

⑦A≠2,X>1作

⑧A≠2,X≯1作第七十頁,共一百三十二頁,2022年,8月28日

測試用例

路徑

覆蓋條件

覆蓋組合【(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) ④,⑧是前述幾種覆蓋標(biāo)準(zhǔn)中最強(qiáng)的。滿足條件組合覆蓋標(biāo)準(zhǔn)的測試數(shù)據(jù)并不一定能使程序中的每條路徑都執(zhí)行到。5、條件組合覆蓋第七十一頁,共一百三十二頁,2022年,8月28日6.點(diǎn)覆蓋點(diǎn)覆蓋定義:如果連通圖G的子圖G′是連通的,而且包含G的所有結(jié)點(diǎn),則稱G′是G的點(diǎn)覆蓋。滿足點(diǎn)覆蓋標(biāo)準(zhǔn)要求選取足夠多的測試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過流圖(連通的有向圖)的每個(gè)結(jié)點(diǎn)(若干條語句)一次,顯然,點(diǎn)覆蓋標(biāo)準(zhǔn)和語句覆蓋標(biāo)準(zhǔn)是相同的。第七十二頁,共一百三十二頁,2022年,8月28日7.邊覆蓋邊覆蓋定義:如果連通圖G的子圖G″是連通的,而且包含G的所有邊,則稱G″是G的邊覆蓋。為了滿足邊覆蓋的測試標(biāo)準(zhǔn),要求選取足夠多測試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過流圖中每條邊一次。通常邊覆蓋和判定覆蓋是一致的。第七十三頁,共一百三十二頁,2022年,8月28日8.路徑覆蓋路徑測試就是設(shè)計(jì)足夠的測試用例,覆蓋程序中所有可能的路徑。

測試用例

通過路徑

覆蓋條件【(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)

滿足路徑覆蓋,未必滿足條件組合覆蓋,通常把兩種覆蓋結(jié)合起來測試。 第七十四頁,共一百三十二頁,2022年,8月28日7.6.2控制結(jié)構(gòu)測試1.基本路徑測試基本思想:在程序控制流圖的基礎(chǔ)上,首先計(jì)算程序的環(huán)形復(fù)雜度,并用該復(fù)雜度為指南定義基本可執(zhí)行路徑集合,從該基本集合導(dǎo)出的測試用例可以保證程序中的每條語句至少執(zhí)行一次,而且每個(gè)條件在執(zhí)行時(shí)都將分別取真、假兩種值。第七十五頁,共一百三十二頁,2022年,8月28日基本路徑測試的步驟設(shè)計(jì)測試用例的步驟如下:第一步,根據(jù)過程設(shè)計(jì)結(jié)果畫出相應(yīng)的流圖。第二步,計(jì)算流圖的環(huán)形復(fù)雜度。環(huán)形復(fù)雜度定量度量程序的邏輯復(fù)雜性??梢杂?種方法之一計(jì)算環(huán)形復(fù)雜度。圖7.6所示流圖的環(huán)形復(fù)雜度為6。第三步,確定線性獨(dú)立路徑的基本集合。第七十六頁,共一百三十二頁,2022年,8月28日第七十七頁,共一百三十二頁,2022年,8月28日獨(dú)立路徑是指至少引入程序的一個(gè)新處理語句集合或一個(gè)新條件的路徑,即獨(dú)立路徑至少包含一條在定義該路徑之前不曾用過的邊。程序的環(huán)形復(fù)雜度決定了程序中獨(dú)立路徑的數(shù)量,這個(gè)數(shù)是確保程序中所有語句至少被執(zhí)行一次所需的測試數(shù)量的上界。圖7.6所描述的求平均值過程共有6條獨(dú)立路徑。Path1:1-2-10-11-13Path2:1-2-10-12-13Path3:1-2-3-10-11-13Path4:1-2-3-4-5-8-9-2-…Path5:1-2-3-4-5-6-8-9-2-…Path6:1-2-3-4-5-6-7-8-9-2-…獨(dú)立路徑第七十八頁,共一百三十二頁,2022年,8月28日第四步,設(shè)計(jì)可強(qiáng)制執(zhí)行基本集合中每條路徑的測試用例。某些獨(dú)立路徑不能以獨(dú)立的方式測試(程序的正常流程不能形成獨(dú)立執(zhí)行該路徑所需要的數(shù)據(jù)組合),這些路徑必須作為另一個(gè)路徑的一部分來測試?;韭窂綔y試的步驟第七十九頁,共一百三十二頁,2022年,8月28日為每一條獨(dú)立路徑設(shè)計(jì)測試用例。假設(shè):n=5;minimum=0;maximum=100。路徑1:1-2-10-11-13測試數(shù)據(jù):value=[90,-999,0,0,0]預(yù)期結(jié)果:Average=90,total.input=1,total.valid=1路徑2:1-2-10-12-13測試數(shù)據(jù):value=[-999,0,0,0,0]預(yù)期結(jié)果:Average=-999,total.input=0,total.valid=0第八十頁,共一百三十二頁,2022年,8月28日路徑3:1-2-3-10-11-13測試數(shù)據(jù):value=[-1,90,70,-1,80]預(yù)期結(jié)果:Average=80,total.input=5,total.valid=3路徑4:1-2-3-4-5-8-9-2-10-12-13測試數(shù)據(jù):value=[-1,-2,-3,-4,-999]預(yù)期結(jié)果:Average=-999,total.input=4,total.valid=0第八十一頁,共一百三十二頁,2022年,8月28日路徑5:1-2-3-4-5-6-8-9-2-10-12-13測試數(shù)據(jù):value=[120,110,101,-999,0]預(yù)期結(jié)果:Average=-999,total.input=3,total.valid=0路徑6:1-2-3-4-5-6-7-8-9-2-10-11-13測試數(shù)據(jù):value=[95,90,70,65,-999]預(yù)期結(jié)果:Average=80,total.input=4,total.valid=4第八十二頁,共一百三十二頁,2022年,8月28日2.條件測試測試用例能夠檢查程序模塊中包含的邏輯條件。條件成分的類型包括布爾算符、布爾變量、布爾括?。ɡㄗ『唵螚l件或復(fù)合條件)、關(guān)系算符及算術(shù)表達(dá)式。如果條件不正確,則至少條件的一個(gè)成分不正確。1、布爾算符錯(cuò)2、布爾變量錯(cuò)3、布爾括弧錯(cuò)4、關(guān)系算符錯(cuò)5、算術(shù)表達(dá)式錯(cuò)第八十三頁,共一百三十二頁,2022年,8月28日條件測試策略1、分支測試:復(fù)合條件C的真分支和假分支中的每個(gè)簡單條件都至少執(zhí)行一次;2、域測試:每個(gè)關(guān)系表達(dá)式執(zhí)行3或4個(gè)測試,如果E1<關(guān)系算符>E2要執(zhí)行大于、等于和小于;3、布爾變量測試:有n個(gè)變量的布爾表達(dá)式要測試2n

個(gè)測試;4、BRO測試:利用條件C的條件約束來設(shè)計(jì)測試用例,如果布爾運(yùn)算符和關(guān)系運(yùn)算符只出現(xiàn)一次而且沒有公共變的條件下,BRO測試可以發(fā)現(xiàn)布爾運(yùn)算符和關(guān)系運(yùn)算符錯(cuò)誤。包括n個(gè)簡單條件的條件C的約束條件定義為(D1,D2,…DN),其中Di表示第i個(gè)簡單條件的輸出約束第八十四頁,共一百三十二頁,2022年,8月28日BRO測試舉例:例1:C1:B1&B2B1,B2為布爾變量。C1的條件約束形如(D1,D2),其中D1和D2的值是t或f。BRO測試策略要求約束集{(t,t),(f,t),(t,f)}由C1的執(zhí)行所覆蓋,如果C1由于布爾運(yùn)算符錯(cuò)誤而不正確,該約束集中至少有一個(gè)約束強(qiáng)制C1失敗。例2:C2:B1&(E3=E4){(t,=),(f,=),(t,<),(t,>)},此約束集的覆蓋率將保證檢測C2的布爾運(yùn)算符和關(guān)系運(yùn)算符錯(cuò)誤。例3:C3:(E1>E2)&(E3=E4){(>,=),(=,=),(<,=),(>,<),(>,>)}編程者經(jīng)?;煜齼山M運(yùn)算符:(&&,||,?。┖停?,|,^)。第一組是邏輯運(yùn)算符,它的操作數(shù)是布爾型,而第二組則是位運(yùn)算符,其操作數(shù)是位序列。第八十五頁,共一百三十二頁,2022年,8月28日3.循環(huán)測試重點(diǎn)測試循環(huán)結(jié)構(gòu)的有效性。在結(jié)構(gòu)化的程序中通常只有3種循環(huán),即簡單循環(huán)、串接循環(huán)和嵌套循環(huán)第八十六頁,共一百三十二頁,2022年,8月28日測試簡單循環(huán)(1)測試簡單循環(huán):其中n是允許通過循環(huán)的最大次數(shù)。測試一下內(nèi)容:跳過循環(huán)。只通過循環(huán)一次。通過循環(huán)兩次。通過循環(huán)m次,其中m<n-1。通過循環(huán)n-1,n,n+1次。第八十七頁,共一百三十二頁,2022年,8月28日測試嵌套循環(huán)(2)嵌套循環(huán)(直接應(yīng)用簡單循環(huán)測試方法,測試數(shù)會(huì)隨嵌套層數(shù)的增加按幾何級(jí)數(shù)增長)從最內(nèi)層循環(huán)開始測試,使用簡單循環(huán)測試方法,使外層循環(huán)的迭代參數(shù)(循環(huán)計(jì)數(shù)器)取最小值(為越界值或非法值進(jìn)行額外的測試)。由內(nèi)向外,對(duì)下一個(gè)循環(huán)進(jìn)行測試,但保持所有其他外層循環(huán)為最小值,其他嵌套循環(huán)為“典型”值。繼續(xù)進(jìn)行下去,直到測試完所有循環(huán)。第八十八頁,共一百三十二頁,2022年,8月28日測試串接循環(huán)(3)串接循環(huán):如果串接循環(huán)的各個(gè)循環(huán)都彼此獨(dú)立,則可以使用前述的測試簡單循環(huán)的方法來測試串接循環(huán)。如果兩個(gè)循環(huán)串接,而且第一個(gè)循環(huán)的循環(huán)計(jì)數(shù)器值是第二個(gè)循環(huán)的初始值,則這兩個(gè)循環(huán)并不是獨(dú)立的。當(dāng)循環(huán)不獨(dú)立時(shí),建議使用測試嵌套循環(huán)的方法來測試串接循環(huán)。第八十九頁,共一百三十二頁,2022年,8月28日7.7黑盒測試技術(shù)黑盒測試著重測試軟件功能。白盒測試在測試過程的早期進(jìn)行,而黑盒測試主要用于測試過程的后期。二者是互補(bǔ)的測試方法。力圖發(fā)現(xiàn)下述類型的錯(cuò)誤:①功能不正確或遺漏了功能;②界面錯(cuò)誤;③數(shù)據(jù)結(jié)構(gòu)錯(cuò)誤或外部數(shù)據(jù)庫訪問錯(cuò)誤;④性能錯(cuò)誤;⑤初始化和終止錯(cuò)誤。白盒測試也稱結(jié)構(gòu)測試或邏輯驅(qū)動(dòng)測試,它是按照程序內(nèi)部的結(jié)構(gòu)測試程序,通過測試來檢測產(chǎn)品內(nèi)部動(dòng)作是否按照設(shè)計(jì)規(guī)格說明書的規(guī)定正常進(jìn)行,檢驗(yàn)程序中的每條通路是否都能按預(yù)定要求正確工作。第九十頁,共一百三十二頁,2022年,8月28日黑盒測試用見方法等價(jià)類劃分邊界值分析錯(cuò)誤推測第九十一頁,共一百三十二頁,2022年,8月28日如何劃分等價(jià)類?有效等價(jià)類(合理等價(jià)類)無效等價(jià)類(不合理等價(jià)類)

劃分等價(jià)類的標(biāo)準(zhǔn):覆蓋不相交代表性7.7.1等價(jià)劃分第九十二頁,共一百三十二頁,2022年,8月28日劃分等價(jià)類的規(guī)則

(1)如果輸入條件規(guī)定了一個(gè)范圍,可定義一個(gè)有效等價(jià)類和兩個(gè)無效等價(jià)類。例

輸入值是學(xué)生成績,范圍是0~100第九十三頁,共一百三十二頁,2022年,8月28日

劃分等價(jià)類的規(guī)則(2)如果輸入條件規(guī)定了輸入數(shù)據(jù)值的集合或必須遵循的規(guī)則,則可以確定出一個(gè)有效的等價(jià)類和若干個(gè)無效的等價(jià)類;例如:Pascal語言規(guī)定“一個(gè)語句必須以分號(hào)‘;’結(jié)束”。這時(shí),可以確定一個(gè)有效等價(jià)類“以‘;’結(jié)束”,若干個(gè)無效等價(jià)類“以‘:’結(jié)束”、“以‘,’結(jié)束”、“以‘’結(jié)束”、“以LF結(jié)束”等。例如:在Pascal語言中對(duì)變量標(biāo)識(shí)符規(guī)定為“以字母打頭的……串”。那么所有以字母打頭的構(gòu)成有效等價(jià)類,而不在此集合內(nèi)(不以字母打頭)的歸于無效等價(jià)類。(3)如果輸入條件是一個(gè)布爾量,則可以確定一個(gè)有效等價(jià)類和一個(gè)無效等價(jià)類。

第九十四頁,共一百三十二頁,2022年,8月28日劃分等價(jià)類的規(guī)則(4)如果規(guī)定了輸入數(shù)據(jù)的一組值,而且程序要對(duì)每個(gè)輸入值分別進(jìn)行處理。這時(shí)可為每一個(gè)輸入值確立一個(gè)有效等價(jià)類,此外針對(duì)這組值確立一個(gè)無效等價(jià)類,它是所有不允許的輸入值的集合。例如,在教師上崗方案中規(guī)定對(duì)教授、副教授、講師和助教分別計(jì)算分?jǐn)?shù),做相應(yīng)的處理。因此可以確定4個(gè)有效等價(jià)類為教授、副教授、講師和助教;一個(gè)無效等價(jià)類,它是所有不符合以上身分的人員的輸入值的集合,如工程師、技術(shù)員、科長等。第九十五頁,共一百三十二頁,2022年,8月28日確立測試用例的原則建立等價(jià)類表,列出所有劃分出的等價(jià)類。再從劃分出的等價(jià)類中按以下原則選擇測試用例:

(1)

設(shè)計(jì)一個(gè)新的測試用例,使其盡可能多地覆蓋尚未被覆蓋的有效等價(jià)類,重復(fù)這一步,直到所有的有效等價(jià)類都被覆蓋為止;

(2)

設(shè)計(jì)一個(gè)新的測試用例,使其僅覆蓋一個(gè)尚未被覆蓋的無效等價(jià)類,重復(fù)這一步,直到所有的無效等價(jià)類都被覆蓋為止。第九十六頁,共一百三十二頁,2022年,8月28日

例:用在某一PASCAL語言版本中規(guī)定:“標(biāo)識(shí)符是由字母開頭,后跟字母或數(shù)字的任意組合構(gòu)成。有效字符數(shù)為8個(gè),最大字符數(shù)為80個(gè)。” 并且規(guī)定:“標(biāo)識(shí)符必須先說明,再使用?!薄霸谕徽f明語句中,標(biāo)識(shí)符至少必須有一個(gè)?!?/p>

等價(jià)類劃分法實(shí)例第九十七頁,共一百三十二頁,2022年,8月28日建立輸入等價(jià)類表第九十八頁,共一百三十二頁,2022年,8月28日下面選取了9個(gè)測試用例,它們覆蓋了所有的等價(jià)類。

①VARx,T1234567:REAL;

BEGINx:=3.414;

T1234567:=2.732;

...…(1),(2),(4),(8),(9),(12),(14)

②VAR:REAL;(3)

③VARx,:REAL;(5)

④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;等價(jià)類劃分法實(shí)例第九十九頁,共一百三十二頁,2022年,8月28日

例如:某一報(bào)表處理系統(tǒng),要求用戶輸入處理報(bào)表的日期。假設(shè)日期限制在1990年1月至1999年12月,即系統(tǒng)只能對(duì)該段時(shí)期內(nèi)的報(bào)表進(jìn)行處理。如果用戶輸入的日期不在此范圍內(nèi),則顯示輸入錯(cuò)誤信息。該系統(tǒng)規(guī)定日期由年、月的6位數(shù)字字符組成,前4位代表年,后兩位代表月?,F(xiàn)用等價(jià)類劃分法設(shè)計(jì)測試用例,來測試程序的“日期檢查功能”。等價(jià)類劃分法實(shí)例第一百頁,共一百三十二頁,2022年,8月28日①劃分等價(jià)類并編號(hào):劃分成3個(gè)有效等價(jià)類,7個(gè)無效等價(jià)類,如表5-3所示。②為合理等價(jià)類設(shè)計(jì)測試用例,對(duì)于表中編號(hào)為1,5,8對(duì)應(yīng)的3個(gè)合理等價(jià)類,用一個(gè)測試用例覆蓋。等價(jià)類劃分法實(shí)例第一百零一頁,共一百三十二頁,2022年,8月28日③為每一個(gè)不合理等價(jià)類至少設(shè)計(jì)一個(gè)測試用例:

測試數(shù)據(jù)期望結(jié)果覆蓋范圍

99MAY輸入無效219995輸入無效31999005輸入無效4198912輸入無效6200001輸入無效7199900輸入無效9199913輸入無效10等價(jià)類劃分法實(shí)例第一百零二頁,共一百三十二頁,2022年,8月28日7.7.2邊界值分析人們從長期的測試工作經(jīng)驗(yàn)得知,大量的錯(cuò)誤是發(fā)生在輸入或輸出范圍的邊界上,而不是在輸入范圍的內(nèi)部。如:下標(biāo)、循環(huán)的邊界設(shè)計(jì)使程序運(yùn)行在邊界情況附近的測試方案,暴露出程序錯(cuò)誤的可能性更大一些。第一百零三頁,共一百三十二頁,2022年,8月28日三角形的邊長例如:在做三角形計(jì)算時(shí),要輸入三角形的三個(gè)邊長: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ò)寫成大于等于號(hào)“≥”,那就不能構(gòu)成三角形。問題恰出現(xiàn)在容易被疏忽的邊界附近。第一百零四頁,共一百三十二頁,2022年,8月28日邊界值分析法測試方案首先確定邊界情況,通常輸入等價(jià)類和輸出等價(jià)類的邊界,就是應(yīng)該著重測試的程序邊界情況。選取剛好等于、稍小于和稍大于等價(jià)類邊界值的數(shù)據(jù)作為測試數(shù)據(jù)。通常聯(lián)合使用等價(jià)劃分和邊界值分析兩種技術(shù)。第一百零五頁,共一百三十二頁,2022年,8月28日

例如:若輸入值的范圍是[1,100],可取0,1,100,101等值作為測試數(shù)據(jù)。若一個(gè)輸入文件可包括1~255個(gè)記錄,則分別設(shè)計(jì)有1個(gè)記錄、255個(gè)記錄,以及0個(gè)記錄和256個(gè)記錄的輸入文件的測試用例。若只能查詢05~09級(jí)大學(xué)生的各科成績,測試用例應(yīng)查詢范圍內(nèi)的某一屆或五屆學(xué)生的學(xué)生成績,還需設(shè)計(jì)查詢04級(jí)、10級(jí)學(xué)生成績的測試用例(不合理輸出等價(jià)類)。

邊界值分析法測試方案第一百零六頁,共一百三十二頁,2022年,8月28日錯(cuò)誤推測法主要靠直覺和經(jīng)驗(yàn)進(jìn)行。依據(jù)常見錯(cuò)誤的清單,列出可能有的錯(cuò)誤和容易發(fā)生錯(cuò)誤的特殊情況,選擇測試方案。輸入或輸出數(shù)據(jù)為零個(gè)時(shí)往往容易發(fā)生錯(cuò)誤數(shù)據(jù)庫操作輸出結(jié)果為空時(shí),容易出錯(cuò)7.7.3錯(cuò)誤推測第一百零七頁,共一百三十二頁,2022年,8月28日例如,測試一個(gè)排序子程序,可考慮如下情況:輸入表為空;輸入表只有一個(gè)元素;輸入表的所有元素都相同;輸入表已排序。又如,測試二分法檢索子程序,可考慮如下情況:表中只有一個(gè)元素;表長為2n;表長為2n-1;表長為2n+1第一百零八頁,共一百三十二頁,2022年,8月28日其它方法判定表或判定樹:適合多個(gè)輸入數(shù)據(jù)組合的情況,列出輸入數(shù)據(jù)各種組合與程序應(yīng)作的動(dòng)作(及相應(yīng)的輸出結(jié)果)之間的對(duì)應(yīng)關(guān)系,然后為判定表的每一列至少設(shè)計(jì)一個(gè)測試用例。因果圖:適合描述在測試時(shí)必須考慮對(duì)于多種輸入條件的組合,相應(yīng)產(chǎn)生多個(gè)動(dòng)作的形式來設(shè)計(jì)測試用例,最終生成判定表??梢园延?jì)算機(jī)測試和人工檢查代碼結(jié)合起來選擇輸入組合。第一百零九頁,共一百三十二頁,2022年,8月28日第一百一十頁,共一百三十二頁,2022年,8月28日系統(tǒng)測試(SystemTesting)系統(tǒng)測試是對(duì)整個(gè)基于計(jì)算機(jī)的系統(tǒng)進(jìn)行的一系列測試。系統(tǒng)測試的種類很多,每種測試都有不同的目的,它們從不同的角度測試計(jì)算機(jī)系統(tǒng)是否被正常地集成,并完成相應(yīng)的功能。常用的系統(tǒng)測試包括:恢復(fù)測試(recoverytesting)安全測試(securitytesting)壓力測試(stresstesting)性能測試(performancetesting)第一百一十一頁,共一百三十二頁,2022年,8月28日恢復(fù)測試(recoverytesting)恢復(fù)測試是通過各種手段,強(qiáng)制軟件發(fā)生故障,然后來驗(yàn)證系統(tǒng)能否在指定的時(shí)間間隔內(nèi)恢復(fù)正常,包括修正錯(cuò)誤并重新啟動(dòng)系統(tǒng)。如果恢復(fù)是由系統(tǒng)自身來完成的,那么,需驗(yàn)證重新初始化、檢查點(diǎn)機(jī)制、數(shù)據(jù)恢復(fù)和重啟動(dòng)等的正確性。如果恢復(fù)需要人工干預(yù),那么要估算平均修復(fù)時(shí)間MTTR(meantimetorepair)是否在用戶可以接受的范圍內(nèi)。第一百一十二頁,共一百三十二頁,2022年,8月28日安全測試(securitytesting)安全測試用來驗(yàn)證集成在系統(tǒng)中的保護(hù)機(jī)制能否實(shí)際保護(hù)系統(tǒng)不受非法侵入。在安全測試過程中,測試者扮演一個(gè)試圖攻擊系統(tǒng)的角色,采用各種方式攻擊系統(tǒng)。例如,截取或碼譯密碼;借助特殊軟件攻擊系統(tǒng);“制服”系統(tǒng),使他人無法訪問;故意導(dǎo)致系統(tǒng)失效,企圖在系統(tǒng)恢復(fù)之機(jī)侵入系統(tǒng);通過瀏覽非保密數(shù)據(jù),從中找出進(jìn)入系統(tǒng)的鑰匙等等。一般來說,只要有足夠的時(shí)間和資源,好的完全測試一定能最終侵入系統(tǒng)。系統(tǒng)設(shè)計(jì)者的任務(wù)是把系統(tǒng)設(shè)計(jì)成:攻破系統(tǒng)所付出的代價(jià)大于攻破系統(tǒng)后得到信息的價(jià)值。第一百一十三頁,共一百三十二頁,2022年,8月28日壓力測試(stresstesting)壓力測試也稱強(qiáng)度測試,它是在一種需要非正常數(shù)量、頻率或容量的方式下執(zhí)行系統(tǒng),其目的是檢查系統(tǒng)對(duì)非正常情況的承受程度。例如:當(dāng)系統(tǒng)的中斷頻率是每秒1或2個(gè)時(shí),執(zhí)行每秒10個(gè)中斷的測試用例將輸入數(shù)據(jù)的數(shù)量提高一個(gè)數(shù)量級(jí)來測試輸入功能如何響應(yīng)執(zhí)行需要最大內(nèi)存或其它資源的測試用例執(zhí)行可能導(dǎo)致大量磁盤駐留數(shù)據(jù)的測試用例第一百一十四頁,共一百三十二頁,2022年,8月28日性能測試(performancetesting)性能測試用來測試軟件在集成的系統(tǒng)中的運(yùn)行性能。它對(duì)實(shí)時(shí)系統(tǒng)和嵌入式系統(tǒng)尤為重要。性能測試可以發(fā)生在測試過程的所有步驟中單元測試時(shí),主要測試一個(gè)獨(dú)立模塊的性能,如算法的執(zhí)行速度。軟件集成后,進(jìn)行軟件整體的性能測試。計(jì)算機(jī)系統(tǒng)集成后,進(jìn)行整個(gè)計(jì)算機(jī)系統(tǒng)的性能測試。性能測試常常需要與壓力測試結(jié)合起來進(jìn)行,而且常常需要一些硬件和軟件測試設(shè)備,以監(jiān)測系統(tǒng)的運(yùn)行情況。第一百一十五頁,共一百三十二頁,2022年,8月28日7.8調(diào)試(糾錯(cuò))調(diào)試是在測試發(fā)現(xiàn)錯(cuò)誤之后排除錯(cuò)誤的過程。調(diào)試過程有兩種結(jié)果:①找到了問題的原因并改正和排除了問題;②沒找出問題的原因。猜想原因,設(shè)計(jì)測試用例來驗(yàn)證假設(shè),重復(fù)此過程直至找到原因并改正了錯(cuò)誤。是把軟件錯(cuò)誤的癥狀和內(nèi)在原因聯(lián)系起來的智力過程,很大程度上依賴于軟件工程師的經(jīng)驗(yàn)和技巧。第一百一十六頁,共一百三十二頁,2022年,8月28日7.8.1調(diào)試過程第一百一十七頁,共一百三十二頁,2022年,8月28日軟件錯(cuò)誤的特征(1)癥狀所在的模塊和產(chǎn)生癥狀的原因模塊可能在程序中相距甚遠(yuǎn)。緊耦合時(shí)更加典型。(2)當(dāng)改正了另一個(gè)錯(cuò)誤之后,癥狀可能暫時(shí)消失。(3)癥狀可能實(shí)際上并不是由錯(cuò)誤引起的(如誤差)。(4)癥狀可能是由不易跟蹤的人為錯(cuò)誤引起的。(5)癥狀可能是由定時(shí)問題而不是由處理問題引起的。(6)可能很難重新產(chǎn)生完全一樣的輸入條件(例如,輸入順序不確定的實(shí)時(shí)應(yīng)用系統(tǒng))。(7)癥狀可能時(shí)有時(shí)無。在嵌入式系統(tǒng)中特別常見。(8)癥狀可能是由分布運(yùn)行在不同的處理機(jī)上的任務(wù)中的原因引起的。第一百一十八頁,共一百三十二頁,2022年,8月28日調(diào)試的困難調(diào)試是軟件開發(fā)過程中最艱巨的腦力勞動(dòng)。確定發(fā)生錯(cuò)誤的內(nèi)在原因和位置占整個(gè)調(diào)試工作量的90%左右。為什么調(diào)試這么困難?1、軟件錯(cuò)誤本身的特征2、心理方面的原因多于技術(shù)方面的原因3、與測試比較,調(diào)試技術(shù)缺乏系統(tǒng)的理論研究,調(diào)試方法多是實(shí)踐中的經(jīng)驗(yàn)積累。4、錯(cuò)誤的后果越嚴(yán)重,查找錯(cuò)誤原因的壓力也越大。導(dǎo)致軟件開發(fā)人員在改正一個(gè)錯(cuò)誤的同時(shí)引入兩個(gè)甚至更多個(gè)錯(cuò)誤。第一百一十九頁,共一百三十二頁,2022年,8月28日7.8.2調(diào)試途徑經(jīng)驗(yàn):在調(diào)試之前,首先進(jìn)行周密的思考,明確目的,盡量減少無關(guān)信息的數(shù)量。1.蠻干法1)在程序中插入打印語句比較容易檢查源程序的有關(guān)信息,但低效率,有偶然性。2)運(yùn)行部分程序把不需要執(zhí)行的語句段前和后加上注釋符,使這段程序不再執(zhí)行。調(diào)試過后,再將注釋符去掉。在不需要執(zhí)行的語句段前加判定值為“假”的IF語句或者加GOTO語句,使該程序不執(zhí)行。調(diào)試結(jié)束后,再撤銷這些語句,使程序復(fù)原。3)借助于調(diào)試工具追蹤子程序調(diào)用、循環(huán)與分支執(zhí)行路徑、特定變量的變化情況;利用“置斷點(diǎn)”可以執(zhí)行特定語句或改變特定變量值引起的程序中斷,以便檢查程序的當(dāng)前狀態(tài)。第一百二十頁,共一百三十二頁,2022年,8月28日調(diào)試途徑2.回溯法是一種相當(dāng)常用的調(diào)試方法,當(dāng)調(diào)試小程序時(shí)這種方法是有效的。從發(fā)現(xiàn)癥狀的地

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論