4.9程序插樁和調(diào)試_第1頁
4.9程序插樁和調(diào)試_第2頁
4.9程序插樁和調(diào)試_第3頁
4.9程序插樁和調(diào)試_第4頁
4.9程序插樁和調(diào)試_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

軟件質(zhì)量保證與測試

程序插樁和調(diào)試第4章白盒測試SoftwareQualityAssuranceandTesting

程序插樁技術(shù)

在軟件的動態(tài)測試中,程序插樁是一種基本的測試手段,有著廣泛的應(yīng)用。

程序插樁是借助于往被測程序中插入操作,來實現(xiàn)測試目的一種方法,即向源程序中添加一些語句,來實現(xiàn)對程序語句的執(zhí)行、變量的變化等情況進行監(jiān)測和檢查。

最簡單的插樁是在程序中插入輸出語句,以監(jiān)測變量的取值或者狀態(tài)是否符合預(yù)期。斷言是一種特殊的插樁,是在程序的特定部位插入語句用來檢查變量的特性。1.設(shè)計插樁在程序中插樁是需要付出成本的,包括插入代碼的成本和用完之后去掉這些代碼的成本,所以程序插樁并不是隨意進行的。對程序進行插樁時,應(yīng)當(dāng)考慮以下問題:需要通過插樁探測哪些信息?在代碼的什么部位設(shè)置探測點?典型的探測點如:每個程序塊的第1個可執(zhí)行語句之前;for,do-while,dountil等循環(huán)語句處;if-else等條件語句各分支處;輸入語句之后;函數(shù)、過程、子程序調(diào)用語句之后;return語句之后;goto語句之后等。

程序插樁技術(shù)需要設(shè)置多少個探測點?應(yīng)當(dāng)優(yōu)選插樁方案,使得需要設(shè)置的探測點盡可能少。需要插入哪些語句?

在進行程序插樁時,除了插入輸出語句之外,還可以在程序中特定部位插入某些用以判斷變量特性的語句,程序執(zhí)行時這些語句會自動判斷變量取值或狀態(tài)是否符合預(yù)期要求。

程序插樁技術(shù)2.插樁的作用

想要了解一個程序在某次運行中所有可執(zhí)行語句被覆蓋的情況,或是每個語句的實際執(zhí)行次數(shù)等,都可以利用插樁技術(shù)來實現(xiàn)。插樁的作用可以是:語句覆蓋統(tǒng)計信息顯示或提示判斷變量的動態(tài)特性

程序插樁技術(shù)3.程序插樁實例有一段程序,功能是求兩個數(shù)的最大公約數(shù),程序代碼如下:intgsd(intX,intY){intQ=X;intR=Y;while(Q!=R){if(Q>R)Q=Q-R;elseR=R-Q;}returnQ;}

程序插樁技術(shù)

在對這段程序進行測試時,可以進行插樁,以檢測程序中各個節(jié)點的執(zhí)行次數(shù)。插樁采用的語句可以如下:C(i)=C(i)+1,i=1,2,…n

即程序每經(jīng)過該位置節(jié)點的時候,計數(shù)器就會加1,最終計數(shù)器等于幾,就意味著程序執(zhí)行時經(jīng)過了該節(jié)點幾次。插樁后的程序流程圖如下圖所示。

程序插樁技術(shù)

圖中虛線框中的內(nèi)容并不是源程序的內(nèi)容,而是為了記錄該位置的執(zhí)行次數(shù)而插入的。虛線框中的代碼就是為了完成計數(shù),形式為:C(i)=C(i)+1;

i=1,2,3,……,6;

程序插樁技術(shù)

當(dāng)然還需要在程序的入口處插入對計數(shù)器C(i)初始化的語句,并在出口處插入輸出這些計數(shù)器C(i)結(jié)果的語句,才能構(gòu)成完整的插樁,這樣就能記錄并輸出在程序中插樁的各個位置節(jié)點的實際執(zhí)行次數(shù)。

從插樁后的程序流程圖不難看出,如果測試完成后所有的C(i)均大于0,則測試實現(xiàn)了語句覆蓋、判定覆蓋和條件覆蓋等。

程序插樁技術(shù)1.測試和調(diào)試

軟件開發(fā)過程中,需要對程序進行測試和調(diào)試,測試和調(diào)試的含義完全不同。

測試是去發(fā)現(xiàn)軟件中的問題的過程,是一個可以系統(tǒng)進行的有計劃的過程,可以事先確定測試策略,設(shè)計測試用例,可以把測試結(jié)果和預(yù)期的結(jié)果進行比較。測試發(fā)現(xiàn)的不一定是錯誤本身,而可能只是錯誤的外部征兆或表現(xiàn)。程序調(diào)試

調(diào)試是在發(fā)現(xiàn)錯誤之后消除錯誤的過程。調(diào)試應(yīng)充分利用測試結(jié)果和測試提供的信息,全面分析,先找出錯誤的根源和具體位置,再進行修正,將錯誤消除。

從職責(zé)上說,測試工作只需要發(fā)現(xiàn)錯誤即可,并不需要修正錯誤,而調(diào)試的職責(zé)就是要修正錯誤。軟件開發(fā)者有時需要同時肩負這兩種職責(zé),對自己開發(fā)的程序進行測試,發(fā)現(xiàn)問題,并對其進行調(diào)試,修正錯誤。程序調(diào)試2.調(diào)試的過程調(diào)試的過程如下圖所示。程序調(diào)試

調(diào)試時如果已經(jīng)識別或者說找到測試中所發(fā)現(xiàn)錯誤的原因,就可以直接予以修正,然后進行回歸測試。如果沒有找到問題的原因,那么可以先假設(shè)一個最有可能的錯誤原因,然后通過附加測試來驗證這樣的假設(shè)是否成立,直到找出錯誤原因為止。程序調(diào)試有時調(diào)試工作難度很大,原因很多,例如:癥狀和原因可能相隔很遠,高度耦合的程序結(jié)構(gòu)加深了這種情況癥狀可能是由誤差引起的,程序本身并沒有錯誤癥狀可能和時間有關(guān)癥狀可能在另一錯誤改正后消失或暫時性消失癥狀由不太容易跟蹤的人工錯誤引起很難重新完全產(chǎn)生相同輸入條件(如輸入順序不確定的實時應(yīng)用系統(tǒng))癥狀可能是時有時無(耦合硬件的嵌入式系統(tǒng)常見)癥狀可能時由分布在許多不同任務(wù)中的原因引起的程序調(diào)試

有時程序員會因為在調(diào)試程序時,找不到問題出在哪,而讓軟件開發(fā)工作陷入困境。正是由于調(diào)試工作很難,具有一定規(guī)模和復(fù)雜度程序,有些問題發(fā)現(xiàn)后,不太容易找到出錯的具體位置,所以調(diào)試工作是程序員能力和水平的一個重要體現(xiàn)。程序調(diào)試

程序調(diào)試能力因人而異,在某種程度上可以說是跟人的個性和天賦有關(guān),有的程序員非常善于調(diào)試程序,有的則不具備這樣的能力,即使是具有相同教育背景和工作背景的程序員,他們的程序調(diào)試能力也可能有很大差別。在某種角度上來說,調(diào)試是一種很容易讓人感到沮喪的編程工作。尤其讓人煩惱的是,你認識到自己犯下了錯誤,因為程序出錯了,但你卻找不到錯誤出在哪?自我懷疑、項目進度要求等引起的高度焦慮,會增加調(diào)試工作的難度。程序調(diào)試3.調(diào)試的方法

調(diào)試的方法主要有:回溯法(Backtracking)、原因排除法(Causeelimination)、歸納法(Induction)、演繹法(Deduction)。

這些方法的具體實施可以借助調(diào)試工具來輔助完成,例如帶調(diào)試功能的編譯器、動態(tài)調(diào)試輔助工具“跟蹤器”、內(nèi)存映像工具等。程序調(diào)試3.調(diào)試的方法

回溯法是指,從程序出現(xiàn)不正確結(jié)果的地方開始,沿著程序的執(zhí)行路徑,往上游尋找錯誤的源頭,直到找出程序錯誤的實際位置。例如,程序有5000行,測試發(fā)現(xiàn)最后輸出的結(jié)果是錯誤的,采用回溯法,可以先在第4500行插樁,檢查中間結(jié)果是否正確,若正確,則錯誤很可能發(fā)生在第4500—5000行之間。若不正確,則在第4000行插樁,依此類推,直到找出程序錯誤的具體位置。

程序調(diào)試4.重現(xiàn)缺陷

軟件缺陷是存在于軟件中的那些不希望或不可接受的偏差,只要缺陷客觀存在,那么任何缺陷都是可重現(xiàn)的。軟件缺陷并不是間歇發(fā)生的,即使發(fā)生的條件很多,出現(xiàn)的概率很小,但一旦滿足了確切的條件,缺陷還是會再次重現(xiàn)。

不管是軟件測試還是調(diào)試,都需要讓因軟件缺陷重現(xiàn)。在軟件測試時,這樣做是為了確認缺陷確實存在,并確切的描述缺陷,而在調(diào)試時,這樣做是為了根據(jù)重現(xiàn)的缺陷,找到出錯的原因和具體的位置,以便修正。程序調(diào)試

有的缺陷很隱蔽,要重現(xiàn)有一定難度,需要符合特定的條件,在試圖重現(xiàn)缺陷時,需要考慮以下一些情況:競爭條件:處

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論