顏培皓 路紅


摘 要:軟件缺陷定位的有效性和及時(shí)性是提升軟件質(zhì)量的關(guān)鍵因素,現(xiàn)有自動(dòng)缺陷定位方法和手工調(diào)試方法具有一定局限性。為解決這一問(wèn)題,基于高斯過(guò)程的缺陷定位方法和軟件自動(dòng)修復(fù)對(duì)缺陷定位的有效性評(píng)估機(jī)制,設(shè)計(jì)了一種新的面向安全攸關(guān)系統(tǒng)的缺陷定位框架。基于ManyBugs和 IntroClass設(shè)計(jì)了軟件缺陷定位測(cè)試數(shù)據(jù)集構(gòu)造方法和實(shí)驗(yàn)方案。實(shí)驗(yàn)結(jié)果表明,該設(shè)計(jì)方案有效可行。
關(guān)鍵詞:缺陷定位;反調(diào)試;反動(dòng)態(tài)跟蹤;抗靜態(tài)分析;高斯過(guò)程
DOI:10. 11907/rjdk. 191445
中圖分類號(hào):TP309
文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1672-7800(2019)006-0200-04
Abstract: The effectiveness and timeliness of software defect location is a key factor in improving software quality. The existing automatic defect location method and manual debugging method have certain limitations in defect location. Based on this, this paper proposes a method based on Gaussian process for security critical software defect location by combining the Gaussian process-based defect location method and the automatic evaluation mechanism for the effectiveness of software automatic repair for defect locatio. It analyzes the basic principles and framework design of the method. Finally, based on ManyBugs and IntroClass, the software defect location test data set construction method and experimental scheme are designed. The results show that the design is effective and feasible.
Key Words: defect location; anti-debugging; anti-dynamic tracking; anti-static analysis; gaussian process
0 引言
軟件可靠性是提高軟件質(zhì)量的關(guān)鍵,軟件維護(hù)愈來(lái)愈重要[1],其已占整個(gè)軟件生命周期的2/3,定位并修復(fù)軟件缺陷是其一項(xiàng)重要工作。因此,能使軟件系統(tǒng)更可靠的自動(dòng)調(diào)試方法成為研究熱點(diǎn)。軟件缺陷定位作為其中的一種方法,雖然實(shí)現(xiàn)困難且成本較高,但隨著軟件規(guī)模和復(fù)雜度的不斷增加,其地位越來(lái)越重要[2-4]。因?yàn)檐浖到y(tǒng)錯(cuò)誤的原因越早發(fā)現(xiàn)越能及時(shí)處理,而且發(fā)現(xiàn)程序錯(cuò)誤并進(jìn)行處理的速度越快,系統(tǒng)故障修復(fù)的時(shí)間就越少,軟件系統(tǒng)可靠性也能得到提高[5-6]。
在航空航天、武器裝備、醫(yī)療設(shè)備、交通、核能、金融等安全攸關(guān)應(yīng)用領(lǐng)域,軟件系統(tǒng)失效將導(dǎo)致災(zāi)難性的后果[7]。安全攸關(guān)系統(tǒng)(Safety-critical System)指由于不確定條件的發(fā)生或功能缺陷導(dǎo)致人員傷亡、財(cái)產(chǎn)損失、環(huán)境破壞的軟件系統(tǒng)。安全攸關(guān)系統(tǒng)開(kāi)發(fā)越來(lái)越多地采用模塊化方式,其軟件和硬件可能來(lái)自不同生產(chǎn)廠商,這種開(kāi)發(fā)方式的轉(zhuǎn)變使安全攸關(guān)系統(tǒng)出現(xiàn)缺陷的概率明顯增加,嚴(yán)重威脅到整個(gè)系統(tǒng)運(yùn)行。
軟件調(diào)試是軟件開(kāi)發(fā)和維護(hù)過(guò)程中的一項(xiàng)重要任務(wù),其關(guān)鍵是缺陷語(yǔ)句的定位、理解和修復(fù)[8]。軟件定位是軟件修復(fù)的第一個(gè)環(huán)節(jié),也是最困難、最繁瑣、最耗時(shí)、成本最昂貴的一項(xiàng)活動(dòng)。當(dāng)軟件開(kāi)發(fā)者發(fā)現(xiàn)測(cè)試用例執(zhí)行失敗時(shí),傳統(tǒng)的缺陷定位方法是從中選出某一個(gè)失敗測(cè)試用例,然后依次在不同的可疑語(yǔ)句處設(shè)置程序斷點(diǎn),采用手工調(diào)試方法執(zhí)行該測(cè)試用例并觀察程序斷點(diǎn)處的變量值,直至找到真正的缺陷語(yǔ)句為止。然而,這種采用設(shè)置斷點(diǎn)和手工調(diào)試方法定位缺陷語(yǔ)句的代價(jià)高、費(fèi)時(shí)費(fèi)力,不能充分利用測(cè)試用例的執(zhí)行行為和執(zhí)行結(jié)果[9]。
研究人員就自動(dòng)軟件缺陷定位技術(shù)進(jìn)行了廣泛的研究并取得一定成果[10]。當(dāng)前軟件工程領(lǐng)域絕大數(shù)自動(dòng)缺陷定位方法普遍存在依賴測(cè)試用例集問(wèn)題,即利用測(cè)試用例集執(zhí)行目標(biāo)程序,根據(jù)程序執(zhí)行過(guò)程中收集的信息判斷可能存在缺陷的程序語(yǔ)句。然而,許多新開(kāi)發(fā)的軟件系統(tǒng)或開(kāi)源軟件測(cè)試用例集較少或不成熟,但這些軟件在開(kāi)發(fā)和升級(jí)過(guò)程中積累了一些歷史缺陷信息(缺陷庫(kù))和代碼變化歷史記錄(代碼庫(kù)),根據(jù)缺陷庫(kù)和代碼更新日志提取缺陷修復(fù)所對(duì)應(yīng)修改的源文件,利用缺陷與源文件的鏈接關(guān)系建立缺陷與源文件之間的關(guān)系圖,就把軟件缺陷定位轉(zhuǎn)變?yōu)閷?duì)應(yīng)缺陷與源文件之間的鏈接預(yù)測(cè)問(wèn)題。在機(jī)器學(xué)習(xí)領(lǐng)域,高斯過(guò)程(Gaussian process)是解決鏈接預(yù)測(cè)問(wèn)題的有效方法[11-12]。陳理國(guó)等 [13]基于高斯過(guò)程提出了一種高斯過(guò)程缺陷定位方法(Gaussian processes bug localization,簡(jiǎn)稱GPBL),用于預(yù)測(cè)新產(chǎn)生的缺陷可能發(fā)生在軟件系統(tǒng)的哪些源文件中。
雖然這種軟件缺陷定位方法不需要測(cè)試用例集,也不需要收集程序執(zhí)行信息,但其缺陷定位的準(zhǔn)確性與訓(xùn)練數(shù)據(jù)的質(zhì)量關(guān)系較大。如果歷史缺陷信息記錄不規(guī)范、源文件中標(biāo)識(shí)符的命名沒(méi)有統(tǒng)一規(guī)則,高斯過(guò)程缺陷定位方法效果就會(huì)受到很大影響。此外,訓(xùn)練數(shù)據(jù)只有達(dá)到一定規(guī)模才能保證準(zhǔn)確定位缺陷所在的源文件。由于一個(gè)源文件可能包含數(shù)百條語(yǔ)句,僅指出缺陷所在源文件信息并不能定位缺陷可能存在的具體程序語(yǔ)句,這對(duì)幫助程序開(kāi)發(fā)者準(zhǔn)確定位缺陷語(yǔ)句、調(diào)試和修復(fù)程序意義并不大。