軟件調試的任務(wù)是什么? DATE: 2026-05-05 07:51:18
軟件調試的目的是:改正錯誤。
軟件調試是泛指重現軟件缺陷問(wèn)題,定位和 查找問(wèn)題根源,最終解決問(wèn)題的過(guò)程。 軟件調試通常有如下兩種不同的軟件定義:
定義1:
軟件調試是為了發(fā)現并(╯‵□′)╯排除軟件程序中 的錯誤,可以通過(guò)某種方法控制被調試程序的執行過(guò) 程,以便隨時(shí)查看和修改被調試程序執行狀態(tài)的方法。 在該定義中,調試的任軟件測試屬于軟件調試的一部分,與 牛津詞典中的調試定義類(lèi)似。 在牛津詞典中調試定義 為:“識別和排除計算機硬件或軟件中錯誤的軟件過(guò)程。”
定義2:
調試是調試的任執行一次成功的測試之后所要進(jìn) 行的工作。 所謂成功的軟件測試,是指它可以證明程序沒(méi) 有實(shí)現預期的功能。 調試包含兩個(gè)步驟,調試的任從執行了一個(gè)成(′▽?zhuān)?功測試用例,發(fā)現問(wèn)題后開(kāi)始;第一步,確定程序 中可疑錯誤的準確性質(zhì)和位置;第二步,修改錯誤。 在該定義中軟件測試從調試工作中分離出來(lái)。軟件
軟件調試的調試的任內涵
軟件調試是將編制的程序投入實(shí)際運行前,用手工或編譯程序等方法進(jìn)行測試,軟件修正語(yǔ)法錯誤和邏輯錯誤的調試的任過(guò)程。這是軟件保證計算機信(???)息系統正確性的必不可少的步驟。編完計算機程序??,調??試的任必須送入計算機中測試。軟件根據測試時(shí)所發(fā)現的錯誤,進(jìn)一步診斷,找出原因和具體的位置進(jìn)行修正。
調試這個(gè)術(shù)語(yǔ)可能意味著(zhù)很多不同的事情,但最字面的意思是,它??意味著(zhù)從代碼中刪除錯誤、異常和bug?,F在,有很多方法可以做到這一點(diǎn)。例如,可以通過(guò)掃描代碼以查找輸入錯誤或使用代ヽ(′ー`)ノ碼分析器進(jìn)行調試。您可以使用性能分析器調試代碼?;蛘?,可以使用調試器進(jìn)行調試。
軟件調試的基本過(guò)程
按照定義1,軟件系統調試的基本過(guò)程如下:
用??編輯程序把編制的源程序按照一定的書(shū)寫(xiě)格式送到計算機中,編輯程序會(huì )根據使用人員的意(yi)圖對源??程序進(jìn)行增、刪或修改。
把送入(╯°□°)╯︵ ┻━┻的源程序??翻譯成機器語(yǔ)言,即用??編譯程序對源程序進(jìn)行語(yǔ)法檢查并將符合(he)語(yǔ)法規則的源程序語(yǔ)句翻譯成計算機能識別的&??ldquo;語(yǔ)言”。如(??ヮ?)?*:???果??經(jīng)編譯程序檢查,發(fā)現有語(yǔ)法錯誤,那就必須用編輯程序來(lái)修改源程序中的語(yǔ)法錯誤,然后ヽ(′▽?zhuān)?ノ再編譯??,直至沒(méi)有語(yǔ)法錯誤為止。
使用計算機中??的連接程序,把翻譯好的計算機語(yǔ)言程序連接起來(lái),并(′?_?`)扶植成一個(gè)計算機能真正運行的程序。在連接過(guò)程中,一般不會(huì )出現連接錯誤,如果出現了連接錯誤,說(shuō)明源程序中存在子程序的(◎_◎;)調用混亂或參(can)數傳遞錯誤等問(wèn)題。這時(shí)又要用編輯??程序對源程序進(jìn)行修改,再進(jìn)行編譯和連接,如此反復進(jìn)行,( ?ω?)直至沒(méi)有連接錯誤為止。
將修改后的程序進(jìn)行試算,這時(shí)可以假設幾(ji)個(gè)模擬數據??去試運行,并把輸出結果與手工處(chu)理的正確結果相比較。如有差異,就表明計算機的程序存在(′?`*)有邏輯錯誤。如果程序不大,可以用人工方法去模擬計算機對源程(???)序的這幾個(gè)數據進(jìn)行修改處理;如果程序比較大,人工模擬顯然行不通,這(zhe)時(shí)只能將計算機設置成單步執行的方式,一步步跟蹤程序的運行。一旦找到問(wèn)題所在,仍然要(yao)用編輯程序來(lái)修改源程序,接著(zhù)仍要編譯、連接(′?`)和執行,直至無(wú)邏輯錯誤為止。也可以在完成后再進(jìn)行編譯。
按照定義2,軟件系統調試的基本過(guò)程如下:
重現問(wèn)題:重現軟件測試發(fā)現的問(wèn)題;
問(wèn)題定位:確定可能發(fā)生問(wèn)題的程序段位置;
查找原因:分析相關(guān)代碼,確定導致缺陷問(wèn)題(?????) 的內在原因;
設計方案:提出軟件缺陷問(wèn)題解決方案;
驗證和確認:采用審查、ヾ(′?`)?分析和測試等??技術(shù)來(lái) 確定錯誤是否被排除,是否引入了新的錯誤。
上述6個(gè)步驟不斷迭代進(jìn)行,直至問(wèn)題解決。 軟件調試基本過(guò)程如圖1所示:
在這些步驟中,問(wèn)題定位和查找原因是軟件調試 的關(guān)鍵環(huán)節,其工作量約占總工作量的90%以上。 軟 件調(diao)試是一項既耗時(shí)又費力,同時(shí)又富有技巧性的工 作。 目前軟件調試中的問(wèn)ヾ(′▽?zhuān)??題定位研究的比較多。
可(ke)以看到,定義??一的流程更貼合我們的日常開(kāi)發(fā)測試工作;而定義二的流程更貼合我們測試特別是軟件發(fā)布或上線(xiàn)后發(fā)現問(wèn)題的處理相關(guān)工作。
軟件調試基本特征廣泛的關(guān)聯(lián)性需要調試人員有著(zhù)雄厚的計算機基礎知識(包括操作系統、開(kāi)發(fā)語(yǔ)言、工具等)以及精通面向的業(yè)務(wù)問(wèn)題域知識。難度大從"廣泛的關(guān)聯(lián)性"就可以知道難度(?Д?)大不大了。當然也看面臨的具體問(wèn)題和調試人員的素質(zhì)(zhi)難以預估完成時(shí)間(′ω`)這個(gè)時(shí)間真的(╥_╥)是沒(méi)法預估,除非某個(gè)問(wèn)題的領(lǐng)域(′?_?`)專(zhuān)家和對軟件整體架ヽ(′ー`)ノ構及代碼的理解熟悉程度。軟件調試分類(lèi)按調試目標的系統環(huán)境分類(lèi):Windows下的軟ヽ(′ー`)ノ件調試、Linux下的軟件調試、Dos下的軟件調試等按目標代碼的執行方式分:腳本程序 – 腳本調試器執行編譯的程序: 先編譯為中間代碼,在運??行時(shí)再動(dòng)態(tài)編譯為當前CPU能夠執行的目標代碼(比如C#開(kāi)發(fā)的(′▽?zhuān)?.NET程序) – 托管調試 直接編譯和鏈接成目標代碼的程序(??C/C++) – 本地調試 兼具以上兩種的 – 混合調試按目標代碼的執行模式分:用戶(hù)態(tài)調試(User Mode Debugging)、內核態(tài)調試(Kernel Mode Debugging);在Windows這樣的多任務(wù)操作系統中,作為保證安全(quan)和秩序的一個(gè)根本措施,系統定義了兩種執行模式,即低特權等級的用戶(hù)模式(User Mode)和高特權等級的內核模式(Kernel Mode)。應用程序代碼是運行在用戶(hù)模式下的,操作系統的內核、執行體和大多數設備驅動(dòng)程序是運行在內核模式的。按軟件所處的階段分:開(kāi)發(fā)期調試、產(chǎn)品期調試(分界線(xiàn)是產(chǎn)品的正(zheng)式發(fā)布)按調試器和調試目標的(de)相對位置分:ヽ(′?`)ノ本機提哦??啊哈斯、遠程調試按調試目標的活動(dòng)(???)性分:活動(dòng)目標調試、轉儲文件調試。

