亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        軟件調(diào)試問(wèn)題研究

        2017-11-20 11:07:09劉立康
        關(guān)鍵詞:程序代碼程序員代碼

        姜 文,劉立康

        (西安電子科技大學(xué) 通信工程學(xué)院,陜西 西安 710071)

        軟件調(diào)試問(wèn)題研究

        姜 文,劉立康

        (西安電子科技大學(xué) 通信工程學(xué)院,陜西 西安 710071)

        對(duì)于軟件開(kāi)發(fā),軟件調(diào)試是非常重要的環(huán)節(jié)。尤其是對(duì)于多個(gè)開(kāi)發(fā)部門(mén)一起進(jìn)行開(kāi)發(fā)的大型軟件系統(tǒng),如何正確制定調(diào)試策略,進(jìn)行軟件缺陷定位、診斷和糾錯(cuò)是一項(xiàng)十分重要的工作。結(jié)合軟件開(kāi)發(fā)的基本概念和過(guò)程,敘述了軟件調(diào)試的概念和軟件調(diào)試的基本過(guò)程。根據(jù)軟件規(guī)模,應(yīng)用軟件開(kāi)發(fā)可以分為大、中、小三種模式;針對(duì)三種軟件開(kāi)發(fā)模式,分別介紹了軟件開(kāi)發(fā)的角色,給出了用例圖,歸納分析了開(kāi)發(fā)過(guò)程中軟件調(diào)試的特點(diǎn)。之后歸納出了軟件開(kāi)發(fā)過(guò)程中有效調(diào)試的先決條件、軟件調(diào)試原則和策略、大型軟件調(diào)試技術(shù)。最后介紹了三個(gè)典型的軟件調(diào)試案例。工作實(shí)踐表明,深入研究軟件調(diào)試的理論與技術(shù),有助于提高軟件開(kāi)發(fā)效率和軟件質(zhì)量,更好地滿(mǎn)足客戶(hù)對(duì)軟件產(chǎn)品的需求。

        軟件測(cè)試;軟件調(diào)試;軟件配置管理;持續(xù)集成;基線(xiàn)

        0 引 言

        在程序開(kāi)發(fā)過(guò)程中,一個(gè)公認(rèn)的事實(shí)是編寫(xiě)代碼并不難,但是排除代碼中的錯(cuò)誤,卻不是一件容易的事情。排除代碼中的錯(cuò)誤,涉及到軟件調(diào)試。目前軟件調(diào)試缺乏實(shí)用強(qiáng)大的調(diào)試支撐技術(shù)和輔助工具,主要以手工方式為主,具有很強(qiáng)的技巧性。隨著計(jì)算機(jī)技術(shù)的發(fā)展,需要進(jìn)一步研究軟件調(diào)試的理論與技術(shù)。

        1 軟件開(kāi)發(fā)過(guò)程中的基本概念

        軟件開(kāi)發(fā)工作內(nèi)容大致可分為五種:軟件設(shè)計(jì)、程序編碼、程序構(gòu)建、軟件測(cè)試和軟件調(diào)試。

        1.1軟件設(shè)計(jì)

        給出可行的設(shè)計(jì)方案,將客戶(hù)的需求轉(zhuǎn)換成可以實(shí)現(xiàn)的設(shè)計(jì)規(guī)格文檔。完成需求設(shè)計(jì)、架構(gòu)設(shè)計(jì)和詳細(xì)設(shè)計(jì)。將設(shè)計(jì)規(guī)格文檔提供給軟件開(kāi)發(fā)人員進(jìn)行軟件源代碼編碼。

        1.2程序編碼

        根據(jù)設(shè)計(jì)規(guī)格文檔,軟件開(kāi)發(fā)人員進(jìn)行程序編碼。

        1.3程序構(gòu)建

        程序構(gòu)建通常包括對(duì)程序代碼進(jìn)行編譯和鏈接,從而生成可執(zhí)行文件。

        (1)程序編譯。

        編譯器的基本功能就是將一種語(yǔ)言編寫(xiě)的程序(源代碼)翻譯成用另一種語(yǔ)言表示的等價(jià)程序(目標(biāo)代碼)。編譯器的出現(xiàn)為編程語(yǔ)言的繁榮,軟件產(chǎn)業(yè)的形成奠定了基礎(chǔ)。

        (2)程序鏈接。

        鏈接是將編譯器產(chǎn)生的多個(gè)目標(biāo)文件合成為一個(gè)可以在目標(biāo)平臺(tái)上執(zhí)行的軟件模塊。

        1.4軟件測(cè)試

        1.4.1 軟件測(cè)試定義

        迄今為止,軟件測(cè)試[1-2]沒(méi)有一個(gè)公認(rèn)的準(zhǔn)確定義,以下是兩個(gè)具有代表性的定義。IEEE給出的定義:使用人工和自動(dòng)手段來(lái)運(yùn)行或測(cè)試某個(gè)系統(tǒng)的過(guò)程,其目的在于檢驗(yàn)它是否滿(mǎn)足規(guī)定的需求或是弄清預(yù)期結(jié)果與實(shí)際結(jié)果之間的差別。該定義明確提出了軟件測(cè)試以檢驗(yàn)是否滿(mǎn)足需求為目標(biāo);著名的軟件工程專(zhuān)家Glenford J. Myers給出的定義:測(cè)試是為了發(fā)現(xiàn)程序中的錯(cuò)誤而執(zhí)行程序的過(guò)程。該定義強(qiáng)調(diào)測(cè)試的目的是檢測(cè)軟件中存在的錯(cuò)誤。

        1.4.2 靜態(tài)測(cè)試

        靜態(tài)測(cè)試[3]是一種不通過(guò)執(zhí)行程序而進(jìn)行測(cè)試的技術(shù)。起初程序開(kāi)發(fā)人員通過(guò)編譯器來(lái)檢查程序代碼的各種語(yǔ)法錯(cuò)誤,現(xiàn)在通常采用靜態(tài)檢測(cè)工具檢查代碼的各種錯(cuò)誤。靜態(tài)檢測(cè)工具通常具有編譯器的功能。這種測(cè)試能發(fā)現(xiàn)60%以上的錯(cuò)誤。

        1.4.3 動(dòng)態(tài)測(cè)試

        動(dòng)態(tài)測(cè)試是通過(guò)執(zhí)行程序,測(cè)試一個(gè)系統(tǒng)或組件的過(guò)程。程序在受控環(huán)境下運(yùn)行,通過(guò)運(yùn)行結(jié)果和特定期望結(jié)果進(jìn)行對(duì)比,確定軟件程序在檢查狀態(tài)下是否正確。此種測(cè)試通常發(fā)現(xiàn)40%的錯(cuò)誤。

        2 軟件調(diào)試

        2.1軟件調(diào)試的概念

        軟件調(diào)試[2.4-7]是泛指重現(xiàn)軟件缺陷問(wèn)題,定位和查找問(wèn)題根源,最終解決問(wèn)題的過(guò)程。

        軟件調(diào)試通常有如下兩種不同的定義:

        定義1:軟件調(diào)試是為了發(fā)現(xiàn)并排除軟件程序中的錯(cuò)誤,可以通過(guò)某種方法控制被調(diào)試程序的執(zhí)行過(guò)程,以便隨時(shí)查看和修改被調(diào)試程序執(zhí)行狀態(tài)的方法。

        在該定義中,軟件測(cè)試屬于軟件調(diào)試的一部分,與牛津詞典中的調(diào)試定義類(lèi)似。在牛津詞典中調(diào)試定義為:“識(shí)別和排除計(jì)算機(jī)硬件或軟件中錯(cuò)誤的過(guò)程。”

        定義2:調(diào)試是執(zhí)行一次成功的測(cè)試之后所要進(jìn)行的工作。所謂成功的測(cè)試,是指它可以證明程序沒(méi)有實(shí)現(xiàn)預(yù)期的功能。調(diào)試包含兩個(gè)步驟,從執(zhí)行了一個(gè)成功測(cè)試用例,發(fā)現(xiàn)問(wèn)題后開(kāi)始;第一步,確定程序中可疑錯(cuò)誤的準(zhǔn)確性質(zhì)和位置;第二步,修改錯(cuò)誤。

        在該定義中軟件測(cè)試從調(diào)試工作中分離出來(lái)。

        2.2軟件調(diào)試的基本過(guò)程

        按照定義2,軟件系統(tǒng)調(diào)試的基本過(guò)程如下:

        (1)重現(xiàn)問(wèn)題:重現(xiàn)軟件測(cè)試發(fā)現(xiàn)的問(wèn)題;

        (2)問(wèn)題定位:確定可能發(fā)生問(wèn)題的程序段位置;

        (3)查找原因:分析相關(guān)代碼,確定導(dǎo)致缺陷問(wèn)題的內(nèi)在原因;

        (4)設(shè)計(jì)方案:提出軟件缺陷問(wèn)題解決方案;

        (5)修改代碼:根據(jù)設(shè)計(jì)方案修改程序代碼;

        (6)驗(yàn)證和確認(rèn):采用審查、分析和測(cè)試等技術(shù)來(lái)確定錯(cuò)誤是否被排除,是否引入了新的錯(cuò)誤。

        上述6個(gè)步驟不斷迭代進(jìn)行,直至問(wèn)題解決。

        軟件調(diào)試基本過(guò)程如圖1所示。

        圖1 軟件調(diào)試的基本過(guò)程

        在這些步驟中,問(wèn)題定位和查找原因是軟件調(diào)試的關(guān)鍵環(huán)節(jié),其工作量約占總工作量的90%以上。軟件調(diào)試是一項(xiàng)既耗時(shí)又費(fèi)力,同時(shí)又富有技巧性的工作。目前軟件調(diào)試中的問(wèn)題定位[8-9]研究的比較多。

        2.3軟件調(diào)試和版本管理的關(guān)系

        軟件調(diào)試和版本管理[10-11]的關(guān)系非常密切,通常采用軟件配置管理工具進(jìn)行版本管理。

        (1)在軟件調(diào)試過(guò)程中可能有多種算法都可達(dá)到預(yù)期的目標(biāo),但只能選擇其中一種,這時(shí)需要保留各種有價(jià)值的算法版本;軟件調(diào)試完成后,需要進(jìn)行代碼優(yōu)化,在代碼優(yōu)化的過(guò)程中需要保留各種不同的版本;軟件調(diào)試完成后,需要增加功能和提升性能,在此基礎(chǔ)上開(kāi)展下一步調(diào)試工作,需要保留調(diào)試好的軟件版本。

        (2)在多人開(kāi)發(fā)同一個(gè)軟件系統(tǒng)的過(guò)程中,需要通過(guò)版本管理調(diào)試解決代碼沖突問(wèn)題。

        (3)軟件產(chǎn)品實(shí)際上是某個(gè)版本的軟件產(chǎn)品,從某種意義上來(lái)講,軟件產(chǎn)品打補(bǔ)丁和開(kāi)發(fā)軟件的新版本是更高層次的軟件開(kāi)發(fā)調(diào)試工作。

        3 應(yīng)用軟件開(kāi)發(fā)模式

        根據(jù)軟件代碼規(guī)模,應(yīng)用軟件的開(kāi)發(fā)大致分為三種模式。

        3.1程序員個(gè)人開(kāi)發(fā)的小軟件

        3.1.1 用例圖

        這種模式和早期的軟件開(kāi)發(fā)模式類(lèi)似。小軟件開(kāi)發(fā)用例圖如圖2所示。

        圖2 程序員開(kāi)發(fā)的小軟件用例圖

        3.1.2 軟件調(diào)試的特點(diǎn)

        發(fā)現(xiàn)問(wèn)題(測(cè)試)、定位問(wèn)題和提出解決問(wèn)題方案、修改程序代碼、驗(yàn)證全部由程序員負(fù)責(zé)。軟件調(diào)試可以分為靜態(tài)調(diào)試與動(dòng)態(tài)調(diào)試。

        1)靜態(tài)調(diào)試。

        源程序代碼編譯時(shí)同時(shí)對(duì)源代碼進(jìn)行靜態(tài)檢查,編譯器提供了源代碼各種編程錯(cuò)誤和錯(cuò)誤所在的位置。靜態(tài)調(diào)試就是程序員逐條修改編譯器提示的錯(cuò)誤,通過(guò)代碼編譯這一關(guān)。

        2)動(dòng)態(tài)調(diào)試。

        動(dòng)態(tài)調(diào)試分為查錯(cuò)和糾錯(cuò)。查錯(cuò)就是對(duì)程序進(jìn)行功能性能測(cè)試,查找各種不符合設(shè)計(jì)要求的各種問(wèn)題;糾錯(cuò)就是根據(jù)發(fā)現(xiàn)的問(wèn)題,查找原因,修改程序源代碼。這里的軟件調(diào)試工作包括軟件測(cè)試。動(dòng)態(tài)調(diào)試通常采用以下兩種方式:

        (1)仔細(xì)分析發(fā)現(xiàn)的問(wèn)題,通過(guò)推理來(lái)查找發(fā)生問(wèn)題的原因。程序員對(duì)程序的架構(gòu)設(shè)計(jì)、編碼實(shí)現(xiàn)十分熟悉,往往能比較快地定位和處理問(wèn)題。這種方式通常具有全局觀(guān)念,可以避免解決問(wèn)題過(guò)程中誘導(dǎo)出現(xiàn)其他問(wèn)題。

        (2)通過(guò)調(diào)試工具采用人機(jī)交互方式調(diào)試代碼。這種方式是逐條執(zhí)行和跟蹤程序代碼,觀(guān)察各種狀態(tài)和變量的變化,檢查是否符合程序設(shè)計(jì)的要求來(lái)定位問(wèn)題。這種方式有助于查找程序代碼的微觀(guān)錯(cuò)誤,要求程序員對(duì)程序代碼的實(shí)現(xiàn)十分熟悉。

        這兩種方式是互補(bǔ)的,綜合應(yīng)用調(diào)試程序代碼。

        3)版本管理。

        版本管理通常采用小型軟件配置管理工具VSS,也可采用文件存儲(chǔ)的方式。

        3.2程序組軟件開(kāi)發(fā)

        這種模式與軟件開(kāi)發(fā)中期的開(kāi)發(fā)模式類(lèi)似。通常軟件分為多個(gè)軟件模塊,每個(gè)程序員僅負(fù)責(zé)自己開(kāi)發(fā)的軟件模塊。這種開(kāi)發(fā)模式通常用于中、小型軟件的開(kāi)發(fā)。

        3.2.1 角色和用例圖

        軟件設(shè)計(jì)人員:負(fù)責(zé)軟件設(shè)計(jì),提供設(shè)計(jì)規(guī)格文檔。

        程序開(kāi)發(fā)組:程序代碼編寫(xiě)和程序調(diào)試,負(fù)責(zé)軟件的版本管理和集成構(gòu)建。

        測(cè)試人員:負(fù)責(zé)軟件功能、性能測(cè)試。

        程序組開(kāi)發(fā)的軟件用例圖如圖3所示。

        圖3 程序組開(kāi)發(fā)的軟件(中、小型軟件)用例圖

        3.2.2 軟件調(diào)試的特點(diǎn)

        1)軟件的設(shè)計(jì)工作和大部分測(cè)試工作從程序組工作中分離出去。設(shè)計(jì)人員負(fù)責(zé)軟件設(shè)計(jì),程序員負(fù)責(zé)程序代碼的實(shí)現(xiàn),定位問(wèn)題和提出解決問(wèn)題方案往往由設(shè)計(jì)人員和程序組共同合作處理,程序員負(fù)責(zé)軟件糾錯(cuò)(程序代碼修改),測(cè)試人員負(fù)責(zé)測(cè)試工作。

        2)調(diào)試分為兩個(gè)階段:

        (1)開(kāi)發(fā)組自己測(cè)試軟件。

        程序員完成程序源代碼的編寫(xiě),程序代碼的靜態(tài)檢查,使用調(diào)試工具對(duì)程序代碼進(jìn)行功能點(diǎn)的調(diào)試。所有的功能點(diǎn)都調(diào)試完成后,通過(guò)組內(nèi)代碼評(píng)審之后,將源代碼合入版本庫(kù)。

        開(kāi)發(fā)組組長(zhǎng)指定某個(gè)程序員負(fù)責(zé)程序代碼的集成構(gòu)建,編譯過(guò)程中發(fā)現(xiàn)的問(wèn)題,反饋給相關(guān)的程序員進(jìn)行處理。源代碼完成集成構(gòu)建之后,打包提交給測(cè)試人員測(cè)試。

        (2)測(cè)試人員測(cè)試軟件。

        測(cè)試人員根據(jù)設(shè)計(jì)規(guī)格文檔設(shè)計(jì)測(cè)試用例,測(cè)試提交過(guò)來(lái)的軟件包。測(cè)試人員發(fā)現(xiàn)的各種問(wèn)題反饋給程序開(kāi)發(fā)組進(jìn)行軟件調(diào)試處理。程序開(kāi)發(fā)組和設(shè)計(jì)人員確定發(fā)生問(wèn)題的原因,確定修改方案,分配給相關(guān)的程序員進(jìn)行代碼糾錯(cuò)處理。對(duì)于比較復(fù)雜的問(wèn)題,軟件設(shè)計(jì)人員需要提供實(shí)現(xiàn)編碼的設(shè)計(jì)文檔。程序代碼修改后,進(jìn)行驗(yàn)證和確認(rèn)。

        3)版本管理通常采用軟件配置管理工具SVN。通過(guò)版本管理工具對(duì)程序員提交的代碼進(jìn)行沖突檢查,通過(guò)調(diào)試處理保證代碼的兼容性和一致性。

        3.3項(xiàng)目組開(kāi)發(fā)的軟件

        軟件通常由多個(gè)模塊組成,每個(gè)模塊由若干開(kāi)發(fā)單元組成。開(kāi)發(fā)單元分配給程序員編寫(xiě)程序代碼。這種開(kāi)發(fā)模式通常用于大型軟件的開(kāi)發(fā)。

        3.3.1 角色和用例圖

        (1)軟件設(shè)計(jì)組:提供總體和各模塊的設(shè)計(jì)規(guī)格文檔。

        (2)軟件開(kāi)發(fā)組:按模塊分為開(kāi)發(fā)小組,開(kāi)發(fā)小組將開(kāi)發(fā)單元分配給程序員進(jìn)行程序編碼。

        (3)軟件配置管理員:負(fù)責(zé)基線(xiàn)和版本庫(kù)的管理。

        (4)持續(xù)集成工程師:負(fù)責(zé)軟件的持續(xù)集成[10-12]工作,搭建的集成構(gòu)建工程,通過(guò)制定定時(shí)任務(wù)來(lái)自動(dòng)完成從版本庫(kù)更新代碼、靜態(tài)檢查、編譯、出包、冒煙測(cè)試等任務(wù)。冒煙測(cè)試也稱(chēng)為預(yù)測(cè)試,對(duì)集成構(gòu)建成功的軟件包的主要功能進(jìn)行快速自動(dòng)化測(cè)試。構(gòu)建成功,可以獲得最新Build版本,建立新的編碼基線(xiàn)。持續(xù)集成工程師進(jìn)行全量構(gòu)建生成內(nèi)部轉(zhuǎn)測(cè)試版本,提交測(cè)試組進(jìn)行的測(cè)試工作。

        (5)軟件測(cè)試組:對(duì)軟件轉(zhuǎn)測(cè)試版本進(jìn)行功能、性能測(cè)試,通過(guò)后產(chǎn)生測(cè)試(Tested)基線(xiàn)。為持續(xù)集成工作提供進(jìn)行冒煙測(cè)試的自動(dòng)化測(cè)試用例腳本包,搭建相應(yīng)的測(cè)試環(huán)境。

        項(xiàng)目組開(kāi)發(fā)軟件(通常為大型軟件)用例圖如圖4所示。

        圖4 項(xiàng)目組開(kāi)發(fā)軟件(大型軟件)用例圖

        3.3.2 軟件調(diào)試的特點(diǎn)

        1)軟件設(shè)計(jì)人員和軟件測(cè)試人員增加了,有的軟件項(xiàng)目測(cè)試人員比開(kāi)發(fā)人員還要多。軟件測(cè)試不僅要發(fā)現(xiàn)程序編碼中的問(wèn)題,而且測(cè)試軟件設(shè)計(jì)中的問(wèn)題。設(shè)計(jì)中的問(wèn)題自然由設(shè)計(jì)人員處理,程序編碼中的問(wèn)題由設(shè)計(jì)人員和開(kāi)發(fā)人員共同處理。

        2)軟件的版本管理和集成構(gòu)建工作由專(zhuān)人負(fù)責(zé),實(shí)行基線(xiàn)和版本庫(kù)的管理?;€(xiàn)管理[13-14]為全體開(kāi)發(fā)人員提供統(tǒng)一的開(kāi)發(fā)基點(diǎn),統(tǒng)一的程序接口。通過(guò)控制集成構(gòu)建的頻率,有助于及時(shí)發(fā)現(xiàn)程序代碼問(wèn)題。

        3)軟件調(diào)試分為三個(gè)階段:

        (1)開(kāi)發(fā)人員調(diào)試自己開(kāi)發(fā)軟件單元。

        程序開(kāi)發(fā)人員每天從版本庫(kù)檢出需要的文件,放在本地作為工作副本開(kāi)始工作。在工作副本上進(jìn)行查看、修改、編譯、運(yùn)行、調(diào)試等操作。為了提供高質(zhì)量的代碼,需要對(duì)編寫(xiě)好的代碼進(jìn)行單元測(cè)試,靜態(tài)走碼檢查,沖突處理和本地構(gòu)建工作,處理發(fā)現(xiàn)的各種問(wèn)題。最后將評(píng)審過(guò)的代碼提交到版本庫(kù)。開(kāi)發(fā)人員向版本庫(kù)提交時(shí),要添加注釋、說(shuō)明、CR單號(hào)、修改原因等,以保證可追溯。

        (2)處理持續(xù)集成工程師發(fā)現(xiàn)的問(wèn)題。

        通常持續(xù)集成工作包括靜態(tài)測(cè)試、編譯、鏈接和冒煙測(cè)試,每一步發(fā)現(xiàn)問(wèn)題都要反饋給相關(guān)開(kāi)發(fā)人員處理,直到通過(guò)集成構(gòu)建。

        (3)處理測(cè)試組發(fā)現(xiàn)的問(wèn)題。

        測(cè)試組測(cè)試轉(zhuǎn)測(cè)試版本,將測(cè)試結(jié)果反饋給相關(guān)人員,對(duì)存在的問(wèn)題逐一定位,查找原因,修改程序,對(duì)每個(gè)軟件缺陷問(wèn)題進(jìn)行跟蹤管理,直到問(wèn)題解決為止。

        4)設(shè)計(jì)人員和程序員共同處理反饋的各種問(wèn)題,定位問(wèn)題和提出解決問(wèn)題方案。程序員負(fù)責(zé)程序代碼修改,測(cè)試人員負(fù)責(zé)驗(yàn)證和確認(rèn)工作。

        5)版本管理可以選擇SVN、ClearCase、Git等軟件配置管理工具。通過(guò)版本管理工具進(jìn)行軟件的版本管理、基線(xiàn)管理和代碼沖突檢查。

        6)軟件開(kāi)發(fā)過(guò)程中采用持續(xù)集成和基線(xiàn)管理技術(shù),可以更有效地進(jìn)行開(kāi)發(fā)和調(diào)試工作。

        4 軟件調(diào)試的方法與技術(shù)

        4.1軟件有效調(diào)試的先決條件

        開(kāi)展調(diào)試工作前要做好必要的準(zhǔn)備工作。

        1)了解設(shè)計(jì)和算法。

        調(diào)試一個(gè)軟件模塊,需要了解它的設(shè)計(jì)和實(shí)現(xiàn)算法,了解各個(gè)函數(shù)之間的調(diào)用關(guān)系,該模塊與其他模塊之間的接口關(guān)系。

        2)高質(zhì)量的程序代碼。

        程序開(kāi)發(fā)者應(yīng)該提供高質(zhì)量的程序代碼,包括規(guī)范的代碼和必要的注釋?zhuān)瑢?duì)開(kāi)發(fā)的代碼進(jìn)行單元測(cè)試,經(jīng)過(guò)同行嚴(yán)格的代碼評(píng)審。一個(gè)復(fù)雜的模塊,代碼被分成許多子程序,其中大部分不超過(guò)10至15行。

        3)熟悉軟件運(yùn)行環(huán)境。

        隨著網(wǎng)絡(luò)技術(shù)、云技術(shù)、大數(shù)據(jù)技術(shù)的發(fā)展,軟件運(yùn)行環(huán)境越來(lái)越復(fù)雜,調(diào)試者只有熟悉這些環(huán)境和環(huán)境配置,才能實(shí)現(xiàn)在線(xiàn)軟件調(diào)試。

        4)熟悉調(diào)試工具。

        以L(fǎng)inux環(huán)境下C/C++程序?yàn)槔?,調(diào)試者需要熟悉GCC編譯器和GDB調(diào)試工具。

        5)動(dòng)態(tài)軟件調(diào)試的條件。

        動(dòng)態(tài)調(diào)試軟件模塊需要正確配置調(diào)試環(huán)境,實(shí)現(xiàn)兩個(gè)功能:可以調(diào)用模塊所提供的功能;能夠得到調(diào)用結(jié)果的信息,模塊內(nèi)部狀態(tài)的變化,當(dāng)一個(gè)錯(cuò)誤發(fā)生時(shí)該模塊的動(dòng)態(tài)。

        6)軟件開(kāi)發(fā)過(guò)程的管理。

        對(duì)于大型軟件項(xiàng)目調(diào)試,管理工作十分重要。

        (1)程序代碼和文檔管理:在軟件開(kāi)發(fā)過(guò)程中,底層模塊和被多個(gè)開(kāi)發(fā)者調(diào)用的函數(shù)不能修改,對(duì)其更新要經(jīng)過(guò)嚴(yán)格的程序和審定。完善的軟件文檔可以為軟件調(diào)試提供有用的信息。

        (2)人員管理:軟件調(diào)試過(guò)程中,需要查找模塊的設(shè)計(jì)人員和開(kāi)發(fā)人員,需要他們參與調(diào)試工作或者為調(diào)試工作提供幫助,因?yàn)樗麄儗?duì)相關(guān)的模塊和程序段最熟悉。

        4.2軟件調(diào)試原則和策略

        (1)熟悉軟件設(shè)計(jì)和編碼。

        讓熟悉軟件設(shè)計(jì)和編碼的人參與調(diào)試工作,修改錯(cuò)誤也是程序設(shè)計(jì)的一種形式。在程序設(shè)計(jì)階段使用的方法都可以應(yīng)用到程序錯(cuò)誤的修正工作中。

        (2)從軟件模塊的最小集成包開(kāi)始。

        在增量式軟件開(kāi)發(fā)過(guò)程中,軟件模塊最初的起始可能是一個(gè)最低功能限度的集成包,隨后新的代碼不斷加入到系統(tǒng)中。調(diào)試工作可以從最小的集成包開(kāi)始,不斷增加代碼和模塊來(lái)查找、定位問(wèn)題。

        (3)分而治之。

        每次只處理一個(gè)問(wèn)題,把被調(diào)試組件從其上下文組件之中孤立出來(lái),通過(guò)設(shè)計(jì)驅(qū)動(dòng)模塊和樁模塊進(jìn)行調(diào)試。

        (4)發(fā)現(xiàn)問(wèn)題及時(shí)反饋和處理。

        檢測(cè)到的錯(cuò)誤越早,就越容易找到原因。如果等到問(wèn)題癥狀出現(xiàn)在客戶(hù)端接口,那么可能很難縮小發(fā)生問(wèn)題的原因列表。

        (5)兼顧全局。

        程序代碼錯(cuò)誤修改兼顧全局,確保修改錯(cuò)誤沒(méi)有影響軟件的其他部分。

        (6)徹底修改。

        如果提出的修改方案不能解釋與該錯(cuò)誤有關(guān)的全部線(xiàn)索,那就表明只修改了錯(cuò)誤的一部分,必須對(duì)錯(cuò)誤進(jìn)行徹底修改。

        (7)關(guān)注相關(guān)問(wèn)題。

        在查找問(wèn)題根源時(shí),對(duì)可能發(fā)現(xiàn)的一些相關(guān)問(wèn)題也要做處理。暫時(shí)不能處理的相關(guān)問(wèn)題應(yīng)該記錄在案,為以后的調(diào)試工作保留相關(guān)信息。

        (8)自頂向下的方法。

        通常采用自頂向下或模塊化方法來(lái)編寫(xiě)代碼。采用自頂向下或模塊化的方法來(lái)調(diào)試代碼,可以縮小軟件問(wèn)題定位的范圍,提高調(diào)試效率。

        4.3大型軟件調(diào)試技術(shù)

        大部分文獻(xiàn)資料都是介紹傳統(tǒng)的軟件調(diào)試方法,主要關(guān)注小型軟件或者軟件模塊中組件的調(diào)試方法。文中介紹一些大型軟件開(kāi)發(fā)過(guò)程的調(diào)試技術(shù)。

        1)分析和推理。

        設(shè)計(jì)人員和開(kāi)發(fā)人員根據(jù)軟件缺陷問(wèn)題的信息,分析和推理調(diào)試軟件。

        (1)根據(jù)軟件程序架構(gòu)自頂向下縮小定位范圍,確定可能發(fā)生問(wèn)題的軟件組件。

        (2)根據(jù)軟件功能,軟件運(yùn)行時(shí)序定位軟件問(wèn)題。

        (3)根據(jù)算法原理,分析和確定缺陷問(wèn)題發(fā)生的根源。

        2)歸納類(lèi)比法。

        該方法主要是根據(jù)積累的工作經(jīng)驗(yàn)和案例處理調(diào)試工作。

        (1)根據(jù)工作經(jīng)驗(yàn)和比對(duì)程序設(shè)計(jì)中類(lèi)似問(wèn)題的處理方式進(jìn)行調(diào)試工作。

        (2)咨詢(xún)相關(guān)部門(mén)和有經(jīng)驗(yàn)的相關(guān)人員。

        (3)查找相關(guān)文檔和案例,為處理問(wèn)題提供思路和方法。在大型軟件開(kāi)發(fā)過(guò)程中,通常對(duì)每個(gè)缺陷問(wèn)題進(jìn)行跟蹤管理,將解決問(wèn)題的方案和過(guò)程詳細(xì)記錄。

        3)跟蹤回朔。

        大型軟件開(kāi)發(fā)通常采用基線(xiàn)與版本管理。基線(xiàn)為程序代碼開(kāi)發(fā)提供統(tǒng)一的開(kāi)發(fā)基點(diǎn),基線(xiàn)的建立有助于分清楚各個(gè)階段存在的問(wèn)題,便于對(duì)缺陷問(wèn)題定位。軟件版本在軟件產(chǎn)品的開(kāi)發(fā)過(guò)程中生成了一個(gè)版本樹(shù)。軟件產(chǎn)品實(shí)際上是某個(gè)軟件版本,新產(chǎn)品的開(kāi)發(fā)通常是在某個(gè)軟件版本的基礎(chǔ)上進(jìn)行開(kāi)發(fā)。

        (1)開(kāi)發(fā)過(guò)程中發(fā)現(xiàn)有問(wèn)題,可以回退至版本樹(shù)上的穩(wěn)定版本,查找問(wèn)題根源。

        (2)通過(guò)基線(xiàn)版本序列可以追蹤產(chǎn)品的各種問(wèn)題,可以重新建立基于某個(gè)版本的配置,可以重現(xiàn)軟件開(kāi)發(fā)過(guò)程中的軟件缺陷和各種問(wèn)題,進(jìn)行定位并查找問(wèn)題根源。

        4)增量調(diào)試。

        大型軟件開(kāi)發(fā)大多采用軟件配置管理和持續(xù)集成技術(shù)。開(kāi)發(fā)人員每天將評(píng)代碼提交到版本庫(kù)。持續(xù)集成人員完成集成構(gòu)建工作??梢酝ㄟ^(guò)控制持續(xù)集成的粒度(構(gòu)建時(shí)間間隔),控制開(kāi)發(fā)人員提交到版本庫(kù)的程序代碼量,從而便于對(duì)缺陷問(wèn)題定位。通常每天晚上進(jìn)行持續(xù)集成工作,發(fā)現(xiàn)問(wèn)題時(shí),開(kāi)發(fā)人員實(shí)際上只需要調(diào)試處理當(dāng)天編寫(xiě)的代碼。

        5)寫(xiě)出能重現(xiàn)問(wèn)題的最短代碼。

        采用程序切片和插樁技術(shù)寫(xiě)出能重現(xiàn)問(wèn)題的最短代碼調(diào)試軟件模塊。

        (1)程序切片[15]。

        程序切片是通過(guò)在特定位置消除那些不影響表達(dá)式計(jì)算的所有語(yǔ)句,把程序減少到最小化形式,并仍能產(chǎn)生給定的行為。使用切片技術(shù),可以把一個(gè)規(guī)模較大并且較復(fù)雜的軟件模塊轉(zhuǎn)換成多個(gè)切片程序。這些切片程序相對(duì)原來(lái)的程序,簡(jiǎn)單并且易于調(diào)試和測(cè)試。

        (2)程序插樁。

        程序插樁方法是在被測(cè)程序中插入某些語(yǔ)句或者程序段來(lái)獲取各種信息。通過(guò)這些信息進(jìn)一步了解執(zhí)行過(guò)程中程序的一些動(dòng)態(tài)特性。一個(gè)軟件組件的獨(dú)立調(diào)試和測(cè)試需要采用插樁技術(shù),該組件調(diào)用或運(yùn)行需要樁模塊。

        在軟件模塊的調(diào)試過(guò)程中程序切片和程序插樁可以結(jié)合起來(lái)使用。

        6)日志追蹤技術(shù)。

        日志是一種記錄機(jī)制,軟件模塊持續(xù)集成構(gòu)建過(guò)程中,日志文件記錄了有用信息。若構(gòu)建失敗,通過(guò)查看日志文件,將信息反饋給相關(guān)人員進(jìn)行軟件調(diào)試。

        7)調(diào)試和測(cè)試融合的技術(shù)。

        (1)測(cè)試驅(qū)動(dòng)開(kāi)發(fā)[16]。

        測(cè)試驅(qū)動(dòng)開(kāi)發(fā)是一種不同于傳統(tǒng)軟件開(kāi)發(fā)流程的開(kāi)發(fā)方法。在編寫(xiě)某個(gè)功能的代碼之前先編寫(xiě)測(cè)試代碼,然后編寫(xiě)測(cè)試通過(guò)的功能代碼,這有助于編寫(xiě)簡(jiǎn)潔可用和高質(zhì)量的代碼。

        (2)開(kāi)發(fā)與測(cè)試融合。

        程序開(kāi)發(fā)人員除了進(jìn)行程序代碼的編寫(xiě),白盒測(cè)試,也要完成基本的功能測(cè)試設(shè)計(jì)和執(zhí)行。這樣有助于程序開(kāi)發(fā)人員更好地開(kāi)展調(diào)試工作。程序開(kāi)發(fā)人員可以通過(guò)交叉測(cè)試來(lái)解決測(cè)試心理學(xué)的問(wèn)題(不能自己測(cè)試自己)。

        采用這種模式測(cè)試人員的數(shù)量會(huì)減少,專(zhuān)業(yè)的測(cè)試人員去做其他復(fù)雜的測(cè)試工作。研發(fā)中的很多低級(jí)缺陷會(huì)盡早在開(kāi)發(fā)過(guò)程中被發(fā)現(xiàn),從而減少缺陷后期發(fā)現(xiàn)的成本。

        5 典型案例

        5.1手寫(xiě)體維文字符識(shí)別算法研究

        該軟件程序由研究人員個(gè)人開(kāi)發(fā)和調(diào)試。軟件注重算法的實(shí)現(xiàn),研究人員在設(shè)計(jì)完成算法設(shè)計(jì)后,采用C++語(yǔ)言進(jìn)行編程和跟蹤調(diào)試。

        5.2工具軟件的開(kāi)發(fā)

        在軟件產(chǎn)品開(kāi)發(fā)過(guò)程中,需要開(kāi)發(fā)各種專(zhuān)用工具,這些工作通常由工具組來(lái)完成。工具組的開(kāi)發(fā)模式類(lèi)似于3.2節(jié)的中、小型軟件開(kāi)發(fā)。

        5.3大型軟件產(chǎn)品開(kāi)發(fā)

        某公司的一個(gè)大型軟件開(kāi)發(fā)項(xiàng)目,涉及50多人的軟硬件設(shè)計(jì)、開(kāi)發(fā)和測(cè)試工作。軟件開(kāi)發(fā)過(guò)程中使用的軟件配置管理工具為SVN,持續(xù)集成工具為ICP-CI。開(kāi)發(fā)模式類(lèi)似于3.3節(jié)的大型軟件開(kāi)發(fā)。

        6 結(jié)束語(yǔ)

        軟件調(diào)試作為軟件開(kāi)發(fā)的重要組成部分,對(duì)于大型軟件系統(tǒng),不僅需要做好軟件代碼的調(diào)試工作,也要做好軟件模塊集成的調(diào)試工作。需要開(kāi)展大量的研究工作,從而提高軟件產(chǎn)品的開(kāi)發(fā)效率,提高軟件的質(zhì)量,以及軟件的安全性與穩(wěn)定性,更好地滿(mǎn)足客戶(hù)對(duì)軟件產(chǎn)品的需求。

        [1] Myers G J,Badgett T,Sandler C.Art of software testing[M].3rd ed.[s.l.]:John Wiley & Sons, Inc.,2012.

        [2] 林科學(xué).軟件測(cè)試/調(diào)試技術(shù)應(yīng)用研究[D].南京:南京氣象學(xué)院,2004.

        [3] 姜 文,劉立康.基于持續(xù)集成的PC-Lint靜態(tài)檢查[J].計(jì)算機(jī)技術(shù)與發(fā)展,2016,26(11):31-36.

        [4] 張銀奎.軟件調(diào)試[M].北京:電子工業(yè)出版社,2008.

        [5] Metzger R C.軟件調(diào)試思想[M].尹曉峰,馬振萍,譯.北京:電子工業(yè)出版社,2004.

        [6] Telles M,Hsieh Y.The science of debugging[M].[s.l.]:Coriolis Group,2001.

        [7] 蔡 銘,程 勝,王 瑞.航天型號(hào)高可靠軟件系統(tǒng)調(diào)試原理與技術(shù)[M].北京:中國(guó)宇航出版社,2008.

        [8] 曹鶴玲,姜淑娟,鞠小林.軟件錯(cuò)誤定位研究綜述[J].計(jì)算機(jī)科學(xué),2014,41(2):1-6.

        [9] Huang Linzhi, Ai Jun. Automatic software fault localization based on artificial bee colony[J].系統(tǒng)工程與電子技術(shù):英文版,2015,26(6):1325-1332.

        [10] 姜 文,劉立康.基于ClearCase的軟件配置管理與持續(xù)集成[J].計(jì)算機(jī)技術(shù)與發(fā)展,2016,26(1):10-17.

        [11] 姜 文,劉立康.基于SVN的軟件配置管理和持續(xù)集成[J].電子設(shè)計(jì)工程,2016,24(2):1-5.

        [12] Duvall P M,Matyas S,Glover A.持續(xù)集成軟件質(zhì)量改進(jìn)和風(fēng)險(xiǎn)降低之道[M].北京:電子工業(yè)出版社,2012.

        [13] Tykal J.Best practices for using composite baselines in UCM[R].[s.l.]:[s.n.],2004.

        [14] 姜 文,劉立康.軟件配置管理中的基線(xiàn)問(wèn)題研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2016,26(6):6-10.

        [15] 李必信.程序切片技術(shù)及其應(yīng)用[M].北京:科學(xué)出版社,2006.

        [16] Beck K.測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(注釋版)[M].孫 方,譯.北京:電子工業(yè)出版社,2007.

        ResearchonSoftwareDebugging

        JIANG Wen,LIU Li-kang

        (School of Telecommunication Engineering,Xidian University,Xi’an 710071,China)

        Software debugging is very important for software development.Especially for large software system developed by many development departments together,how to make correct debugging strategy for fixing,diagnosing and recovering of the software defect is very important work.In combination with the basic concept and process of the software development,the concept and the basic process of software debugging are described.According to the scale of software,the application software can be divided into three types,the large,the middle and the small.For them,the roles in software developing are introduced,the case charts are given respectively,and the features of software debugging during developing are inducted and analyzed.Then the preconditions of effective debugging,the principle and strategy of software debugging,the debugging technique for large software are concluded during the software development.At last,three typical cases of software debugging are introduced.Practice shows that deep research of the technique and theory of software debugging is contributed to improve the developing efficiency and quality of software and make the customer satisfied the demand of software better.

        software testing;software debugging;software configuration management;continuous integration;baseline

        2016-12-10

        2017-04-13 < class="emphasis_bold">網(wǎng)絡(luò)出版時(shí)間

        時(shí)間:2017-08-01

        國(guó)家部委基礎(chǔ)科研計(jì)劃:國(guó)防預(yù)研基金項(xiàng)目(A1120110007)

        姜 文(1986-),女,工程師,碩士,CCF會(huì)員(E200032324M),研究方向?yàn)閳D像處理、模式識(shí)別、數(shù)據(jù)庫(kù)應(yīng)用和軟件工程等;劉立康,副教授,研究方向?yàn)閿?shù)字通信、圖像處理與傳輸?shù)取?/p>

        http://kns.cnki.net/kcms/detail/61.1450.TP.20170801.1555.058.html

        TP391.41

        A

        1673-629X(2017)11-0001-06

        10.3969/j.issn.1673-629X.2017.11.001

        猜你喜歡
        程序代碼程序員代碼
        為了讓媽媽看懂地圖,一位“野生程序員”做了個(gè)小程序
        怎樣成為一名優(yōu)秀程序員
        幼兒100(2020年29期)2020-10-21 06:17:58
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        計(jì)算機(jī)網(wǎng)絡(luò)信息安全未來(lái)發(fā)展趨勢(shì)
        程序員之子
        意林(2017年24期)2018-01-02 22:49:14
        基于圖元裝接模式由程序流程圖自動(dòng)生成源代碼
        軟件工程(2016年11期)2017-01-17 16:56:57
        加班
        三月三(2016年6期)2016-06-21 10:25:33
        精品极品一区二区三区| 中文亚洲爆乳av无码专区| 免费无码黄网站在线观看| 国产精品高清视亚洲一区二区| 伊人久久大香线蕉av不变影院| 欧洲精品免费一区二区三区| 9999精品视频| 国产精品国产三级厂七| 色综合久久中文综合网亚洲| 天堂无码人妻精品av一区| 亚洲人成亚洲人成在线观看| 国产精品一区二区久久毛片| 国产av精品麻豆网址| 国产女人高潮叫床免费视频| 免费超爽大片黄| 白白白色视频在线观看播放| 一区二区三区无码高清视频| 精品无码中文字幕在线| 手机看片福利日韩国产| 暴露的熟女好爽好爽好爽| 久久99国产精品久久99| 亚洲精品国偷拍自产在线观看蜜臀 | 日本一二三区在线视频观看| 青青草原综合久久大伊人精品| av潮喷大喷水系列无码| 中出高潮了中文字幕| 中文字幕人妻精品一区| 正在播放强揉爆乳女教师| 国产AV无码专区亚洲AⅤ| 亚洲人妻有码中文字幕| 99久久精品费精品国产一区二| 国产熟妇人妻精品一区二区动漫| 美女爽好多水快进来视频| 男女互舔动态视频在线观看| 亚洲欧美色一区二区三区| 在线观看91精品国产免费免费| 日韩av中文字幕亚洲天| 色综合天天综合网国产成人网| 把插八插露脸对白内射| 精品国产亚洲av麻豆尤物| 少妇连续高潮爽到抽搐|