如何進(jìn)行白盒測(cè)試[谷風(fēng)軟件]_第1頁
如何進(jìn)行白盒測(cè)試[谷風(fēng)軟件]_第2頁
如何進(jìn)行白盒測(cè)試[谷風(fēng)軟件]_第3頁
如何進(jìn)行白盒測(cè)試[谷風(fēng)軟件]_第4頁
如何進(jìn)行白盒測(cè)試[谷風(fēng)軟件]_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、摘要:?jiǎn)卧獪y(cè)試是軟件測(cè)試的基礎(chǔ),本文詳細(xì)的論述了單元測(cè)試的兩個(gè)步驟人工靜態(tài)檢查法與動(dòng)態(tài)執(zhí)行跟蹤法,所需執(zhí)行的工作項(xiàng)目及相關(guān)的策略和方法。通過對(duì)這兩個(gè)步驟的描述作者將多年的單元測(cè)試經(jīng)驗(yàn)及測(cè)試?yán)碚撟⑷胗谌?。關(guān)鍵詞:?jiǎn)卧獪y(cè)試、人工檢查、白盒測(cè)試、測(cè)試用例、跟蹤調(diào)試1 概述單元測(cè)試是針對(duì)軟件設(shè)計(jì)的最小單位程序模塊,進(jìn)行正確性檢驗(yàn)的測(cè)試工作。其目的在于發(fā)現(xiàn)每個(gè)程序模塊內(nèi)部可能存在的差錯(cuò)。單元測(cè)試也是程序員的一項(xiàng)基本職責(zé),程序員必須對(duì)自己所編寫的代碼保持認(rèn)真負(fù)責(zé)的態(tài)度,這是也程序員的基本職業(yè)素質(zhì)之一。同時(shí)單元測(cè)試能力也是程序員的一項(xiàng)基本能力,能力的高低直接影響到程序員的工作效率與軟件的質(zhì)量。在編碼的過程

2、中作單元測(cè)試,其花費(fèi)是最小的,而回報(bào)卻特別優(yōu)厚的。在編碼的過程中考慮測(cè)試問題,得到的將是更優(yōu)質(zhì)的代碼,因?yàn)樵谶@時(shí)您對(duì)代碼應(yīng)該做些什么 了解得最清楚。如果不這樣做,而是一直等到某個(gè)模塊崩潰了,到那時(shí)您可能已經(jīng)忘記了代碼是怎樣工作的。即使是在強(qiáng)大的工作壓力下,您也還必須重新把它弄清 楚,這又要花費(fèi)許多時(shí)間。進(jìn)一步說,這樣做出的更正往往不會(huì)那么徹底,可能更脆弱,因?yàn)槟鷨净氐睦斫饪赡懿荒敲赐耆?。通常合格的代碼應(yīng)該具備以下性質(zhì):正確性、清晰性、規(guī)范性、一致性、高效性等(根據(jù)優(yōu)先級(jí)別排序)。1. 正確性是指代碼邏輯必須正確,能夠?qū)崿F(xiàn)預(yù)期的功能。2. 清晰性是指代碼必須簡(jiǎn)明、易懂,注釋準(zhǔn)確沒有歧義。3. 規(guī)

3、范性是指代碼必須符合企業(yè)或部門所定義的共同規(guī)范包括命名規(guī)則,代碼風(fēng)格等等。4. 一致性是指代碼必須在命名上(如:相同功能的變量盡量采用相同的標(biāo)示符)、風(fēng)格上都保持統(tǒng)一。5. 高效性是指代碼不但要滿足以上性質(zhì),而且需要盡可能降低代碼的執(zhí)行時(shí)間。2 單元測(cè)試步驟在代碼編寫完成后的單元測(cè)試工作主要分為兩個(gè)步驟人工靜態(tài)檢查和動(dòng)態(tài)執(zhí)行跟蹤。人工靜態(tài)檢查是測(cè)試的第一步,這個(gè)階段工作主要是保證代碼算法的邏輯正確性(盡量通過人工檢查發(fā)現(xiàn)代碼的邏輯錯(cuò)誤)、清晰性、規(guī)范性、一致性、算法高效性。并盡可能的發(fā)現(xiàn)程序中沒有發(fā)現(xiàn)的錯(cuò)誤。第二步是通過設(shè)計(jì)測(cè)試用例,執(zhí)行待測(cè)程序來跟蹤比較實(shí)際結(jié)果與預(yù)期結(jié)果來發(fā)現(xiàn)錯(cuò)誤。經(jīng)驗(yàn)表明

4、,使用人工靜態(tài)檢查法能夠有效的發(fā)現(xiàn)30%到70%的邏輯設(shè)計(jì) 和編碼錯(cuò)誤。但是代碼中仍會(huì)有大量的隱性錯(cuò)誤無法通過視覺檢查發(fā)現(xiàn),必須通過跟蹤調(diào)試法細(xì)心分析才能夠捕捉到。所以,動(dòng)態(tài)跟蹤調(diào)試方法也成了單元測(cè)試的重 點(diǎn)與難點(diǎn)。3 人工檢查通常在人工檢查階段必須執(zhí)行以下項(xiàng)目的活動(dòng):第一、 檢查算法的邏輯正確性;確定所編寫的代碼算法、數(shù)據(jù)結(jié)構(gòu)定義(如:隊(duì)列、堆棧等)是否實(shí)現(xiàn)了模塊或方法所要求的功能。第二、 模塊接口的正確性檢查;確定形式參數(shù)個(gè)數(shù)、數(shù)據(jù)類型、順序是否正確;確定返回值類型及返回值的正確性。第三、 輸入?yún)?shù)有沒有作正確性檢查;如果沒有作正確性檢查,確定該參數(shù)是否的確無需做參數(shù)正確性檢查,否則請(qǐng)?zhí)砑?/p>

5、上參數(shù)的正確性檢查。經(jīng)驗(yàn)表明,缺少參數(shù)正確性檢查的代碼是造成軟件系統(tǒng)不穩(wěn)定的主要原因之一。第四、 調(diào)用其他方法接口的正確性;檢查實(shí)參類型正確與否、傳入的參數(shù)值正確與否、個(gè)數(shù)正確與否,特別是具有多態(tài)的方法。返回值正確與否,有沒有誤解返回值所表示 的意思。最好對(duì)每個(gè)被調(diào)用的方法的返回值用顯濕代碼作正確性檢查,如果被調(diào)用方法出現(xiàn)異常或錯(cuò)誤程序應(yīng)該給予反饋,并添加適當(dāng)?shù)某鲥e(cuò)處理代碼。第五、 出錯(cuò)處理;模塊代碼要求能預(yù)見出錯(cuò)的條件,并設(shè)置適當(dāng)?shù)某鲥e(cuò)處理,以便在一旦程序出錯(cuò)時(shí),能對(duì)出錯(cuò)程序重做安排,保證其邏輯的正確性,這種出錯(cuò)處理應(yīng)當(dāng)是 模塊功能的一部分。若出現(xiàn)下列情況之一,則表明模塊的錯(cuò)誤處理功能包含有

6、錯(cuò)誤或缺陷:出錯(cuò)的描述難以理解;出錯(cuò)的描述不足以對(duì)錯(cuò)誤定位,不足以確定出錯(cuò)的 原因;顯示的錯(cuò)誤信息與實(shí)際的錯(cuò)誤原因不符;對(duì)錯(cuò)誤條件的處理不正確;在對(duì)錯(cuò)誤進(jìn)行處理之前,錯(cuò)誤條件已經(jīng)引起系統(tǒng)的干預(yù)等。第六、 保證表達(dá)式、SQL語句的正確性;檢查所編寫的SQL語句的語法、邏輯的正確性。對(duì)表達(dá)式應(yīng)該保證不含二義性,對(duì)于容易產(chǎn)生歧義的表達(dá)式或運(yùn)算符優(yōu)先級(jí) (如: 、=、 、 &、|、+、 -等)可以采用擴(kuò)號(hào)“()”運(yùn)算符避免二義性,這樣一方面能夠保證代碼的正確可靠,同時(shí)也能夠提高代碼的可讀性。第七、 檢查常量或全局變量使用的正確性;確定所使用的常量或全局變量的取值和數(shù)值、數(shù)據(jù)類型;保證常量每次引用同它的

7、取值、數(shù)值和類型的一致性。第八、 表示符定義的規(guī)范一致性;保證變量命名能夠見名知意,并且簡(jiǎn)潔但不宜過長(zhǎng)或過短、規(guī)范、容易記憶、最好能夠拼讀。并盡量保證用相同的表示符代表相同功能,不要將不同的功能用相同的表示符表示;更不要用相同的表示符代表不同的功能意義。第九、 程序風(fēng)格的一致性、規(guī)范性;代碼必須能保證符合企業(yè)規(guī)范,保證所有成員的代碼風(fēng)格一致、規(guī)范、工整。例如對(duì)數(shù)組做循環(huán),不要一會(huì)兒采用下標(biāo)變量從下到上的 方式(如:for(I=0;I+;I0);應(yīng)該盡量采用統(tǒng) 一的方式,或則統(tǒng)一從下到上,或則統(tǒng)一從上到下。建議采用for循環(huán)和While循環(huán),不要采用dowhile循環(huán)等。第十、 檢查程序中使用到

8、的神秘?cái)?shù)字是否采用了表示符定義。神秘的數(shù)字包括各種常數(shù)、數(shù)組的大小、字符位置、變換因子以及程序中出現(xiàn)的其他以文字形式寫出的數(shù)值。 在程序源代碼里,一個(gè)具有原本形式的數(shù)對(duì)其本身的重要性或作用沒提供任何指示性信息,它們也導(dǎo)致程序難以理解和修改。對(duì)于這類神秘?cái)?shù)字必須采用相應(yīng)的標(biāo)量 來表示;如果該數(shù)字在整個(gè)系統(tǒng)中都可能使用到務(wù)必將它定義為全局常量;如果該神秘?cái)?shù)字在一個(gè)類中使用可將其定義為類的屬性(Attribute),如果該 神秘?cái)?shù)字只在一個(gè)方法中出現(xiàn)務(wù)必將其定義為局部變量或常量。第十一、 檢查代碼是否可以優(yōu)化、算法效率是否最高。如:SQL語句是否可以優(yōu)化,是否可以用1條SQL語句代替程序中的多條SQ

9、L語句的功能,循環(huán)是否必要,循環(huán)中的語句是否可以抽出到循環(huán)之外等。第十二、 檢查您的程序是否清晰簡(jiǎn)潔容易理解。注意:冗長(zhǎng)的程序并不一定不是清晰的。第十三、 檢查方法內(nèi)部注釋是否完整;是否清晰簡(jiǎn)潔;是否正確的反映了代碼的功能,錯(cuò)誤的注釋比沒有注釋更糟;是否做了多余的注釋;對(duì)于簡(jiǎn)單的一看就懂的代碼沒有必要注釋。第十四、 檢查注釋文檔是否完整;對(duì)包、類、屬性、方法功能、參數(shù)、返回值的注釋是否正確且容易理解;是否會(huì)落了或多了某個(gè)參數(shù)的注釋,參數(shù)類型是否正確,參數(shù)的限 定值是否正確。特別是對(duì)于形式參數(shù)與返回值中關(guān)于神秘?cái)?shù)值的注釋,如:類型參數(shù) 應(yīng)該指出 1.代表什么,2.代表什么,3.代表什么等。對(duì)于返

10、回結(jié)果集(Result Set)的注釋,應(yīng)該注釋結(jié)果集中包含那些字段及字段類型、字段順序等。4 動(dòng)態(tài)執(zhí)行跟蹤動(dòng)態(tài)執(zhí)行測(cè)試通常分為黑盒測(cè)試與白盒測(cè)試。黑盒測(cè)試指已知產(chǎn)品的功能設(shè)計(jì)規(guī)格,可以進(jìn)行測(cè)試證明每個(gè)實(shí)現(xiàn)了的功能是否符合要求。白盒測(cè)試指已知產(chǎn)品的內(nèi)部工作過程,可以通過測(cè)試證明每種內(nèi)部操作是否符合設(shè)計(jì)規(guī)格的要求,所有內(nèi)部成分是否已經(jīng)經(jīng)過檢查。對(duì)于單元測(cè)試來說主要應(yīng)該采用白盒測(cè)試法對(duì)每個(gè)模塊的內(nèi)部作跟蹤檢查測(cè)試。對(duì)于單元白盒測(cè)試,應(yīng)該對(duì)程序模塊進(jìn)行如下檢查:1. 對(duì)模塊內(nèi)所有獨(dú)立的執(zhí)行路徑至少測(cè)試一次;2. 對(duì)所有的邏輯判定,取“真”與“假”的兩種情況都至少執(zhí)行一次;3. 在循環(huán)的邊界和運(yùn)行界限

11、內(nèi)執(zhí)行循環(huán)體;4. 測(cè)試內(nèi)部數(shù)據(jù)的有效性等等。單元白盒跟蹤測(cè)試,通常需要做如下三項(xiàng)工作:1. 設(shè)計(jì)測(cè)試用例;2. 設(shè)計(jì)測(cè)試類模塊;3. 跟蹤調(diào)試。4.1 測(cè)試用例設(shè)計(jì)通常動(dòng)態(tài)執(zhí)行跟蹤調(diào)試是在編碼階段進(jìn)行的。在對(duì)源程序作靜態(tài)人工檢查之后就可以開始進(jìn)行單元測(cè)試的測(cè)試用例設(shè)計(jì)。利用設(shè)計(jì)文檔,設(shè)計(jì)可以驗(yàn)證程序功能、找出程序錯(cuò)誤的多個(gè)測(cè)試用例。4.1.1 測(cè)試用例的設(shè)計(jì)基本原則設(shè)計(jì)測(cè)試用例基本的原則是:1. 一個(gè)好的測(cè)試用例在于能夠發(fā)現(xiàn)至今沒有發(fā)現(xiàn)的錯(cuò)誤;2. 測(cè)試用例應(yīng)由測(cè)試輸入數(shù)據(jù)和與之對(duì)應(yīng)的預(yù)期輸出結(jié)果這兩部分組成;3. 在測(cè)試用例設(shè)計(jì)時(shí),應(yīng)當(dāng)包含合理的輸入條件和不合理的輸入條件。4.1.2 白盒

12、測(cè)試的測(cè)試用例設(shè)計(jì)白盒測(cè)試測(cè)試用例一般采用邏輯覆蓋法和基本路徑法進(jìn)行設(shè)計(jì)。一、邏輯覆蓋法邏輯覆蓋是以程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)的測(cè)試用例設(shè)計(jì)技術(shù),這一方法要求測(cè)試人員對(duì)程序的邏輯結(jié)構(gòu)有清楚的了解。邏輯覆蓋可分為:語句覆蓋、判定覆蓋、條件覆蓋、判定-條件覆蓋、條件組合覆蓋與路徑覆蓋。1. 語句覆蓋就是設(shè)計(jì)若干個(gè)測(cè)試用例,運(yùn)行所測(cè)程序,使得每一可執(zhí)行語句至少執(zhí)行一次。2. 判定覆蓋就是設(shè)計(jì)若干個(gè)測(cè)試用例,運(yùn)行所測(cè)程序,使得程序中每個(gè)判斷的取真分支和取假分支至少經(jīng)歷一次。3. 條件覆蓋就是設(shè)計(jì)若干個(gè)測(cè)試用例,運(yùn)行所測(cè)程序,使得程序中每個(gè)判斷的每個(gè)條件的可能取值至少執(zhí)行一次。4. 判定-條件覆蓋就是設(shè)計(jì)

13、足夠的測(cè)試用例,使得判斷中每個(gè)條件的所有可能取值至少執(zhí)行一次,同時(shí)每個(gè)判斷的所有可能判斷結(jié)果也至少執(zhí)行一次。5. 條件組合覆蓋就是設(shè)計(jì)足夠的測(cè)試用例,運(yùn)行所測(cè)程序,使得每個(gè)判斷的所有可能的條件取值組合至少執(zhí)行一次。6. 路徑測(cè)試就是設(shè)計(jì)足夠的測(cè)試用例,覆蓋程序中所有可能的路徑。每一種覆蓋方法都有其優(yōu)缺點(diǎn),這6種覆蓋方法關(guān)系,如圖1:圖1通常在設(shè)計(jì)測(cè)試用例時(shí)應(yīng)該根據(jù)代碼模塊的復(fù)雜度,選擇覆蓋方法。一般的代碼的復(fù)雜度與測(cè)試用例設(shè)計(jì)的復(fù)雜度成正比。因此,設(shè)計(jì)人員必須做到模塊或方法功能 的單一性、高內(nèi)聚性,使得方法或函數(shù)代碼盡可能的簡(jiǎn)單;這樣將可大大提高測(cè)試用例設(shè)計(jì)的容易度,提高測(cè)試用例的覆蓋程度。二

14、、基本路徑法基本路徑測(cè)試法是在程序控制流圖的基礎(chǔ)上,通過分析控制構(gòu)造的環(huán)路復(fù)雜性,導(dǎo)出基本可執(zhí)行路徑集合,從而設(shè)計(jì)測(cè)試用例的方法。設(shè)計(jì)出的測(cè)試用例要保證在測(cè)試中程序的每個(gè)可執(zhí)行語句至少執(zhí)行一次?;韭窂綔y(cè)試法包括以下5個(gè)方面:1. 程序的控制流圖:描述程序控制流的一種圖示方法。2. 程序環(huán)境復(fù)雜性:McCabe復(fù)雜性度量;從程序的環(huán)路復(fù)雜性可導(dǎo)出程序基本路徑集合中的獨(dú)立路徑條數(shù),這是確定程序中每個(gè)可執(zhí)行語句至少執(zhí)行依次所必須的測(cè)試用例數(shù)目的上界。3. 導(dǎo)出測(cè)試用例。4. 準(zhǔn)備測(cè)試用例,確?;韭窂郊械拿恳粭l路徑的執(zhí)行。5. 圖形矩陣:是在基本路徑測(cè)試中起輔助作用的軟件工具,利用它可以實(shí)現(xiàn)自動(dòng)

15、地確定一個(gè)基本路徑集。另外,對(duì)于測(cè)試用例的選擇除了滿足所選擇的覆蓋程度(或覆蓋標(biāo)準(zhǔn))外還需要盡可能的采用邊界值分析法、錯(cuò)誤推測(cè)法等常用地設(shè)計(jì)方法。采用邊界值分析法設(shè)計(jì) 合理的輸入條件與不合理的輸入條件;條件邊界測(cè)試用例應(yīng)該包括輸入?yún)?shù)的邊界與條件邊界(if,while,for,switch ,SQL Where子句等)。錯(cuò)誤推測(cè)法,列舉出程序中所有可能的錯(cuò)誤和容易發(fā)生錯(cuò)誤的特殊情況,根據(jù)它們選擇測(cè)試用例;在編碼、單元測(cè)試階段可以發(fā)現(xiàn)很多常見的 錯(cuò)誤和疑似錯(cuò)誤,對(duì)于這些錯(cuò)誤應(yīng)該作重點(diǎn)測(cè)試,并設(shè)計(jì)相應(yīng)的測(cè)試用例。4.1.3 單元測(cè)試計(jì)劃表格在設(shè)計(jì)測(cè)試用例時(shí)可以參考如下表格,擬定對(duì)每個(gè)類(或模塊或包

16、)的測(cè)試計(jì)劃。表1,是對(duì)每個(gè)類(或模塊或包)作測(cè)試計(jì)劃的表頭,它指明本測(cè)試計(jì)劃是針對(duì)那個(gè)模塊及相關(guān)文件的。表2是針對(duì)表1指定模塊測(cè)試用例而對(duì)應(yīng)的子表,每個(gè)測(cè)試用例可以擁有一個(gè)子表;單元測(cè)試結(jié)果子表留作執(zhí)行測(cè)試用例時(shí)根據(jù)實(shí)際結(jié)果填寫。子系統(tǒng)名. PackageName. JavaClassName表1單元測(cè)試子項(xiàng)001下面表格為針對(duì)上面表格“子系統(tǒng)名. PackageName. JavaClassName”而對(duì)應(yīng)的子表,每個(gè)測(cè)試用例用一張子表:表24.2 測(cè)試類設(shè)計(jì)一個(gè)模塊或一個(gè)方法(Method)并不是一個(gè)獨(dú)立的程序,在考慮測(cè)試它時(shí)要同時(shí)考慮它和外界的聯(lián)系,用些輔助模塊去模擬與所測(cè)模塊相聯(lián)系的

17、其他模塊。這些輔助模塊分為兩種:1. 驅(qū)動(dòng)模塊(driver):相當(dāng)于所測(cè)模塊的主程序。它接收測(cè)試數(shù)據(jù),把這些數(shù)據(jù)傳送給所測(cè)模塊,最后再輸出實(shí)際測(cè)試結(jié)果。2. 樁模塊(stub):用于代替所測(cè)模塊調(diào)用的子模塊。樁模塊可以做少量的數(shù)據(jù)操作,不需要把子模塊所有功能都帶進(jìn)來,但不容許什么事情也不做。所測(cè)模塊與它相關(guān)的驅(qū)動(dòng)模塊及樁模塊共同構(gòu)成了一個(gè)“測(cè)試環(huán)境”,如圖2。驅(qū)動(dòng)模塊和樁模塊的編寫會(huì)給測(cè)試帶來額外的開銷。因?yàn)樗鼈冊(cè)谲浖桓稌r(shí)不作為產(chǎn) 品的一部分一同交付,而且它們的編寫需要一定的工作量。特別是樁模塊,不能只簡(jiǎn)單地給出“曾經(jīng)進(jìn)入”的信息。為了能夠正確的測(cè)試軟件,樁模塊可能需要模擬 實(shí)際子模塊的功

18、能,這樣樁模塊的建立就不是很輕松了。圖2 單元測(cè)試的測(cè)試環(huán)境編寫樁模塊是困難費(fèi)時(shí)的,其實(shí)也是完全可以避免編寫樁模塊的;只需在項(xiàng)目進(jìn)度管理時(shí)將實(shí)際樁模塊的代碼編寫工作安排在被測(cè)模塊前編寫即可。而且這樣可以提 高測(cè)試工作的效率,提高實(shí)際樁模塊的測(cè)試頻率從而更有效的保證產(chǎn)品的質(zhì)量。但是,為了保證能夠向上一層級(jí)提供穩(wěn)定可靠的實(shí)際樁模塊,為后續(xù)模塊測(cè)試打下良 好的基礎(chǔ),驅(qū)動(dòng)模塊還是必不可少的。對(duì)于每一個(gè)包或子系統(tǒng)我們可以根據(jù)所編寫的測(cè)試用例來編寫一個(gè)測(cè)試模塊類來做驅(qū)動(dòng)模塊,用于測(cè)試包中所有的待測(cè)試模塊。而最好不要在每個(gè)類中用一個(gè)測(cè)試函數(shù)的方法,來測(cè)試跟蹤類中所有的方法。這樣的好處在于:1. 能夠同時(shí)測(cè)試

19、包中所有的方法或模塊,也可以方便的測(cè)試跟蹤指定的模塊或方法。2. 能夠聯(lián)合使用所有測(cè)試用例對(duì)同一段代碼執(zhí)行測(cè)試,發(fā)現(xiàn)問題。3. 便以回歸測(cè)試,當(dāng)某個(gè)模塊作了修改之后,只要執(zhí)行測(cè)試類就可以執(zhí)行所有被測(cè)的模塊或方法。這樣不但能夠方便得檢查、跟蹤所修改的代碼,而且能夠檢查出修改對(duì)包內(nèi)相關(guān)模塊或方法所造成的影響,使修改引進(jìn)的錯(cuò)誤得以及時(shí)發(fā)現(xiàn)。4. 復(fù)用測(cè)試方法,使測(cè)試單元保持持久性,并可以用既有的測(cè)試來編寫相關(guān)測(cè)試。5. 將測(cè)試代碼與產(chǎn)品代碼分開,使代碼更清晰、簡(jiǎn)潔;提高測(cè)試代碼與被測(cè)代碼的可維護(hù)性。4.3 跟蹤調(diào)試跟蹤調(diào)試不但是深入測(cè)試代碼的最佳方法,而且也是程序調(diào)試發(fā)現(xiàn)錯(cuò)誤根源的有利工具。測(cè)試類設(shè)

20、計(jì)完成后,最好能借助代碼排錯(cuò)工具來跟蹤調(diào)試待測(cè)代碼段以深入的檢查代碼的邏輯錯(cuò)誤。現(xiàn)有的代碼開發(fā)工具(如:JBuilder)一般都集成了這 類排錯(cuò)工具。排錯(cuò)工具一般由執(zhí)行控制程序、執(zhí)行狀態(tài)查詢程序、跟蹤程序組成。執(zhí)行控制程序包括斷點(diǎn)定義、斷點(diǎn)撤銷、單步執(zhí)行、斷點(diǎn)執(zhí)行、條件執(zhí)行等功能。 執(zhí)行狀態(tài)查詢程序包括寄存器、堆棧狀態(tài)、變量、代碼等與程序相關(guān)的各種狀態(tài)信息的查詢。跟蹤程序用以跟蹤程序執(zhí)行過程中所經(jīng)歷的事件序列(如:分支、子程 序調(diào)用等)。程序員可通過對(duì)程序執(zhí)行過程中各種狀態(tài)的判別進(jìn)行程序錯(cuò)誤的識(shí)別、定位及改正。對(duì)于模塊的單元跟蹤調(diào)試,最好能夠做到對(duì)被測(cè)模塊的每次修改,都對(duì)每個(gè)測(cè)試用例進(jìn)行跟蹤執(zhí)行一遍以排除所有可能出現(xiàn)或引進(jìn)的錯(cuò)誤。在時(shí)間有限的情況下也必須調(diào)用驅(qū)動(dòng)模塊對(duì)所有的測(cè)試用例執(zhí)行一次,并對(duì)出現(xiàn)錯(cuò)誤或異常的測(cè)試用例跟蹤執(zhí)行一次,以發(fā)現(xiàn)問題的根源。排錯(cuò)過程往往是一個(gè)艱苦的過程,特別是那種算法復(fù)雜、調(diào)用子模塊較多的模塊,對(duì)于錯(cuò)誤的定位來說并不是一件容易的事情。盡管排錯(cuò)不是一門好學(xué)的技術(shù)(有時(shí)人們更愿意稱之為藝術(shù)),但

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論