999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

自動程序修復中的安全隱患場景及解決方案

2019-12-24 06:23:26黃昱銘馬建峰劉志全魏凱敏馮丙文
西安電子科技大學學報 2019年6期
關(guān)鍵詞:程序方法

黃昱銘,馬建峰,2,劉志全,魏凱敏,馮丙文,3,4,5

(1.暨南大學 信息科學技術(shù)學院,廣東 廣州 510632;2.西安電子科技大學 網(wǎng)絡(luò)與信息安全學院,陜西 西安 710071;3.中國科學院信息工程研究所 信息安全國家重點實驗室,北京 100093;4.廣東省信息安全技術(shù)重點實驗室,廣東 廣州 520006;5.廣東省智能信息處理重點實驗室/深圳市媒體信息內(nèi)容安全重點實驗室,廣東 深圳 518060)

由于需求理解錯誤、開發(fā)過程不合理和開發(fā)者經(jīng)驗不足,軟件中不可避免地會存在已知或未知的缺陷。通過軟件維護減少由于軟件錯誤(Software Error)引起的軟件缺陷(Software Defect)是軟件工程中不可缺少的重要環(huán)節(jié)。傳統(tǒng)方法通過人力進行軟件維護會浪費大量的勞動力和時間成本[1]。因此,研究者們越來越關(guān)注自動程序修復(Automatic Program Repair,APR)。

當前主流的自動程序修復方法是使用測試集(Test Suite)對程序缺陷進行定位和修復。使用測試集修復程序缺陷的自動程序修復方法主要分為兩類[2]:一類是基于搜索,另一類是基于語義。基于搜索的自動程序修復方法通過基于搜索的軟件工程(Search Based Software Engineering)[3]在搜索空間中尋找最合適的補丁。這類自動程序修復方法的代表有GenProg[4]等。基于語義的自動程序修復方法通過提取程序的語義信息和測試集中的補丁約束以合成合適的補丁。這類自動程序修復方法的代表有ACS[5]等。

自動程序修復方法修復程序缺陷與人工修復方法相比,雖然能更快地定位和修復缺陷,節(jié)省勞動力和時間成本,但是無法保證缺陷修復的正確性。雖然一些自動程序修復方法對補丁進行了約束[6],但由于約束不完整無法保證補丁的質(zhì)量。一些自動程序修復方法通過學習開發(fā)者修復缺陷的過程提高修復的精確性[6-7],但無法保證訓練集的污染不會影響修復結(jié)果的正確性。針對自動程序修復方法修復缺陷的質(zhì)量問題,國內(nèi)外研究者做了大量工作。當前,缺陷修復質(zhì)量的研究主要集中在修復精度與修復速度[8-9]。筆者同樣關(guān)注自動程序修復方法修復缺陷的質(zhì)量問題,但不同于現(xiàn)有研究,筆者主要研究自動程序修復方法修復缺陷過程中的安全性。筆者指出了自動程序修復方法在修復缺陷過程中存在的安全隱患場景,并為兩種安全隱患場景分別提出相應(yīng)的解決方案。

1 安全隱患場景

1.1 臟補丁源

開發(fā)者能夠通過代碼克隆(Code Cloning)加速開發(fā)進程,然而代碼克隆嚴重降低程序的安全性。代碼克隆是程序缺陷傳播的最主要方式[10],不僅增加了軟件維護成本,而且嚴重影響代碼的質(zhì)量[11]。與代碼克隆類似,基于搜索的自動程序修復方法在補丁空間中搜索合適的補丁修復程序缺陷,補丁空間來源于程序或開源的代碼倉庫,如果補丁攜帶缺陷,缺陷則會隨補丁進入程序中。

圖1 臟補丁源污染程序過程

如圖1所示,自動程序修復方法首先定位缺陷錯誤位置,緊接著通過解析缺陷位置處的語義信息,在補丁空間中搜索合適的補丁。自動程序修復方法常用的補丁空間有自身代碼、開源社區(qū)和問答網(wǎng)站等,并最終通過測試集驗證補丁的正確性。如果在補丁空間中選取的補丁中包含新的未知缺陷,且新的缺陷不能通過該測試集進行檢測,那么自動程序修復方法就會將未知缺陷引入到程序中,進而影響程序的安全性和質(zhì)量,會增加軟件的維護成本。

定義F為程序中所有函數(shù)的集合,V為程序中所有缺陷函數(shù)的集合,R為開源代碼倉庫中函數(shù)的集合,S為補丁空間中函數(shù)的集合。對于集合V和S,滿足V?F,S=F∪R。定義缺陷檢測器DE為測試集E維度下函數(shù)集F到{0, 1}的一個映射,可表示為

(1)

缺陷檢測器DE接受一個程序并返回1(包含缺陷)或0(不包含缺陷)。

定義1自動程序修復方法修復程序缺陷需要根據(jù)缺陷函數(shù)的語義信息,在補丁空間中尋找合適的補丁,在測試集E的維度下成功修復缺陷:

?f∈V, ?s∈S:DE(R(f,s))=0 ,

(2)

其中,R(f,s)為返回自動程序修復方法通過補丁函數(shù)s修復缺陷函數(shù)f后的結(jié)果,即返回插入補丁后的函數(shù)。

自動程序修復方法根據(jù)缺陷函數(shù)f和測試集E在集合S中尋找補丁s,使DE(s)‖DE(R(f,s))=0。然而,在其他測試集(如E′)維度下有DE′(s) = 1,即補丁s包含未知缺陷,但在測試集E′維度下無法定位該未知缺陷,此時修復后的程序包含該未知缺陷,使DE′(R(f,s)) = 1,此時觸發(fā)安全隱患。

1.2 臟測試集

測試預(yù)言(Test Oracle)是判斷軟件系統(tǒng)測試是否通過的關(guān)鍵機制,對整個軟件測試過程起決定性作用[12]。當前主流的自動程序修復方法主要通過測試集定位程序缺陷,并使用測試集校驗補丁的正確性。因此,測試集的正確性在很大程度上影響自動程序修復方法的修復結(jié)果。

定義2臟測試集是指測試集中部分測試用例的測試預(yù)言與期望功能不一致,即

?e∈E:O(e)≠H(e) ,

(3)

其中,O(e)為返回測試用例e的測試預(yù)言,H(e)為返回e的期望功能。

自動程序修復方法若使用臟測試集定位缺陷和校驗補丁,就能夠?qū)㈠e誤補丁引入程序,甚至影響程序原本正常的功能。

如圖2所示,自動程序修復方法使用臟測試集定位到錯誤的缺陷位置,此時基于搜索的自動程序修復方法根據(jù)錯誤的缺陷位置在補丁空間中尋找錯誤的修復補丁,而基于語義的自動程序修復方法會生成錯誤的補丁約束,合成錯誤的補丁。因此,如果采用該場景下生成的補丁修復程序,則將使程序產(chǎn)生新的缺陷,進而影響程序的安全性。

圖2 臟測試集污染程序過程

2 解決方案

2.1 補丁校驗方案

為不干預(yù)自動程序修復方法的修復過程,針對上節(jié)指出的臟補丁源場景,可通過兩個步驟的篩選獲取安全性更高的補丁,即對自動程序修復生成的補丁候選者列表進行優(yōu)先級排序,并靜態(tài)分析校驗候選者列表中的補丁。

2.1.1 補丁候選者優(yōu)先級排序

為促使自動程序修復方法快速獲取安全性更高的補丁,文中針對不同的補丁空間,對補丁候選者列表采取不同的排序策略。

如果自動程序修復方法是在自身代碼中搜尋補丁,則以復雜度作為指標對補丁候選者列表進行排序,具體流程如圖3所示。復雜度越高的代碼,涵蓋缺陷的可能性越高。文中首先根據(jù)函數(shù)單位和控制流圖將程序代碼劃分為多個區(qū)域,并采用文獻[13]提出的程序復雜度計算方法計算每個區(qū)域的復雜度,再根據(jù)補丁候選者列表中各補丁候選者所在的區(qū)域,遵照區(qū)域復雜度進行排序,優(yōu)先獲取復雜度更低的補丁。

圖3 以自身代碼為搜索空間的補丁優(yōu)先級列表生成流程

圖4 以開源社區(qū)或問答網(wǎng)站為搜索空間的優(yōu)先級列表生成流程

如果自動化程序修復方法在開源社區(qū)或問答網(wǎng)站中尋找補丁,則以信任度作為指標對候選者列表進行排序,具體流程如圖4所示。通過開源社區(qū)或問答網(wǎng)站給出的評分指標對補丁候選者列表進行排序。例如,以代碼的星級作為GitHub(https://github.com/)中代碼質(zhì)量的衡量指標。

補丁候選者列表的具體排序算法描述如下:

輸入:補丁候選者集合P。

輸出:優(yōu)先級列表Pl。

for eachpinPdo

ifp∈自身程序 then

獲取p所在區(qū)域的復雜度

根據(jù)復雜度將p插入到Pl

else ifp∈開源社區(qū)∪問答網(wǎng)站 then

獲取p在開源社區(qū)或問答網(wǎng)站分數(shù)

根據(jù)分數(shù)將p插入到Pl

else then

將p插入到Pl的末尾

end if

end for。

2.1.2 靜態(tài)校驗分析

為防止程序引入臟補丁,需要校驗補丁候選者,文中采用靜態(tài)分析技術(shù)對補丁候選者進行校驗。程序靜態(tài)分析(Program Static Analysis)在不運行程序[14]且不需要測試集的情況下,校驗代碼的可靠性和安全性。文中采用LLVM(Low Level Virtual Machine)[15]框架中的Clang靜態(tài)分析器(Clang Static Analyzer)構(gòu)建靜態(tài)分析框架。LLVM構(gòu)建的靜態(tài)分析框架具有更好的擴展性和伸縮性,能夠快速地為特定的缺陷設(shè)計檢查器,并且能夠使用LLVM內(nèi)置的缺陷檢查器,包括空指針、不安全應(yīng)用程序編程接口和除零錯誤等。

圖5 安全補丁獲取流程

如圖5所示,對2.1.1節(jié)中優(yōu)先級列表中的候選補丁進行安全性校驗。具體來講,首先從補丁候選者優(yōu)先級列表中抽取優(yōu)先級最高的補丁;然后通過靜態(tài)分析校驗該補丁的安全性,如果通過靜態(tài)分析檢查,則再使用測試集對該補丁進行評估,如果該補丁通過測試集,則該補丁正確合法,自動程序修復方法使用該補丁修復程序缺陷;若該補丁未通過靜態(tài)分析檢查或未通過測試集,則選取優(yōu)先級次高的補丁進行檢驗,直至找到正確合法的補丁或檢驗完所有的候選補丁。

靜態(tài)分析校驗補丁的具體算法描述如下:

輸入:測試集E、優(yōu)先級列表Pl。

輸出:安全補丁p。

for eachpinPldo

if 靜態(tài)分析補丁p不包含缺陷 then

if 補丁p通過測試集Ethen

返回p

end if

end if

end for。

2.2 補丁校驗方案

針對第1節(jié)指出的臟測試集場景,對測試集的格式進行規(guī)范。測試集中的每個測試用例對應(yīng)一個執(zhí)行流,這里規(guī)定測試集中每一個執(zhí)行流成對,即相同的執(zhí)行流出現(xiàn)2n次(其中n∈Z+),并定義形式化的測試集:

E={ei|i∈[1,2n]} 。

(4)

測試集E中(e2k-1,e2k)為一個測試用例對,其中k∈[1,n],每個測試用例對中測試用例對應(yīng)的執(zhí)行流相同。規(guī)范測試集的格式后,判斷測試用例對中兩個測試用例的執(zhí)行流是否相同,如果不相同,則該測試集是臟測試集,阻止自動程序修復方法通過該測試集進行缺陷定位和補丁校驗。

自動程序修復方法在進行修復前無法準確選擇能夠定位缺陷的具體測試用例。定位缺陷的測試用例的測試預(yù)言與程序執(zhí)行流的返回結(jié)果不一致會導致錯誤的檢測結(jié)果。例如,根據(jù)三角形的3條邊a、b和c,確定三角形(a,b,c)的形狀,(3, 3, 3)執(zhí)行流的返回結(jié)果是等腰三角形,該結(jié)果表明程序包含缺陷,而此時測試預(yù)言為等邊三角形,該測試用例的測試預(yù)言與執(zhí)行流的返回結(jié)果不一致,導致誤認為該測試用例為臟測試用例。因此通過數(shù)據(jù)流分析增加檢測精度,通過數(shù)據(jù)流向判斷執(zhí)行流是否一致辨別臟測試用例,算法的具體描述如下:

輸入:測試集E={ei|i∈[1,2n]}。

if測試集格式符合規(guī)范 then

for eachkin [1,n] do

ife2k-1的執(zhí)行流≠e2k的執(zhí)行流then

end if

end for

end if

其中判斷測試用例對(e2k-1,e2k)中測試用例對應(yīng)的執(zhí)行流是否相等的判斷算法如下:

輸入:測試用例對(e2k-1,e2k)。

輸出:e2k-1是否為臟測試用例。

if oracle(e2k-1)≠func(e2k-1) or oracle(e2k)≠func(e2k) then

e2k-1為臟測試用例

else if數(shù)據(jù)流分析e2k-1和e2k的執(zhí)行過程不一致 then

e2k-1為臟測試用例

end if。

3 實驗測試與結(jié)果分析

3.1 實驗樣本與環(huán)境配置

如表1所示,選取Defects4J[16]缺陷程序集作為測試樣本。Defects4J缺陷程序集中共有5個項目,即Chart、Lang、Math、Time和Closure Compiler,但由于Closure Compiler項目中缺少測試用例,無法定位缺陷,因此選取前4個項目進行實驗測試。

表1 Defects4J缺陷程序集

修復工具以GenProg和PAR[7]為基礎(chǔ),并增加兩種解決方案,即補丁校驗方案和測試集校驗方案。選取GenProg和PAR的理由如下:GenProg開源且擴展性好,易于觀察修復效果;PAR雖未開源,但修復效果接近人工修復且實現(xiàn)簡單。文中根據(jù)PAR提供的修復模板,重新實現(xiàn)了PAR原型。將添加解決方案后的修復工具分別命名為GenProg Plus和PAR Plus。

將Defects4J中的原測試集拷貝一份,并將測試用例和測試預(yù)言根據(jù)2.2節(jié)提出的規(guī)范測試集格式隨機更改拷貝測試集中的測試用例(更改后的測試用例執(zhí)行流相同但具體測試數(shù)據(jù)不同),并在拷貝測試集中設(shè)置臟測試用例,最后組合原測試集和拷貝測試集以生成規(guī)范測試集。以測試用例數(shù)為2 205的Chart項目為例,設(shè)原測試集為E,文中將E拷貝一份(設(shè)為E′),并在E′中隨機設(shè)置臟測試用例,然后通過項目源碼將部分測試用例修改為執(zhí)行流相同、具體測試數(shù)據(jù)不同的測試用例,再將E與E′中的測試用例按順序?qū)?yīng),最終生成測試用例數(shù)為4 410的規(guī)范測試集。

實驗測試運行在Ubuntu 14.04.6環(huán)境下,具體配置為AMD Ryzen 52 500U with Radeon Vega Mobile Gfx 2.00GHz、8GB內(nèi)存。

3.2 實驗結(jié)果分析

3.2.1 測試集校驗結(jié)果分析

測試集校驗方案對缺陷測試集的校驗結(jié)果如表2和圖6所示,其中Chart項目中包含的錯誤用例數(shù)為35個,實際檢出數(shù)為38個,即測試集校驗方案存在少量的誤報。Defects4J中的其他項目與Chart項目類似,也存在少量的誤報。Defects4J中4個項目的誤報率分別為8.57%、5.26%、7.02%和7.94%,平均誤報率為7.20%,具體如圖7所示。

表2 測試集校驗結(jié)果

實驗結(jié)果表明,文中所提出的測試集校驗方案能夠根據(jù)測試用例的執(zhí)行流判斷測試集的正確性,高準度地定位測試集中臟測試用例的位置,并通過臟測試用例的錯誤位置,將臟測試用例修改正確。雖然測試集校驗方案存在少量的誤報,但誤報率較小,能夠?qū)㈠e誤測試用例的范圍顯著縮小,并由人工在修改臟測試用例時確認誤報的測試用例。

3.2.2 過濾補丁方案實驗結(jié)果分析

GenProg在修復Defects4J中缺陷時可選的補丁候選者較少,因此,文中在Defects4J中添加額外代碼,從而提供比GenProg更多的補丁候選者驗證補丁校驗方案。GenProg和PAR中添加補丁校驗方案前后修復缺陷數(shù)對比分別如表3和表4所示。實驗結(jié)果表明,GenProg和GenProg Plus、PAR和PAR Plus修復Defects4J中各項目的缺陷數(shù)都分別相同,因而添加補丁校驗方案不影響自動程序修復方法的穩(wěn)定性。添加補丁校驗方案后,自動程序修復方法仍然能夠盡可能地修復程序缺陷。

圖6 錯誤用例數(shù)和測試集校驗方案實例檢出數(shù)對比

圖7 測試集校驗方案誤報率

表3 GenProg添加方案前后修復缺陷數(shù)對比

表4 PAR添加前后修復缺陷數(shù)對比

圖8揭示了Math項目(版本號:85)內(nèi)UnivariateRealSolverUtils.Java文件中缺陷程序代碼片段使用補丁校驗方案前后的修復結(jié)果。在添加補丁校驗方案前,修復后的程序雖然能夠通過測試集,但仍然存在缺陷。如圖8(b)中第200行所示,程序無法應(yīng)對function不為空且需要拋出異常的情況;而添加補丁校驗方案后,條件語句中涵蓋的情況更多,獲取的補丁能夠通過測試集且不包含新的缺陷。從實驗修復結(jié)果不難發(fā)現(xiàn),自動程序修復方法修復缺陷的結(jié)果存在安全隱患,而添加文中所提出的補丁校驗方案后,在修復缺陷的同時,選擇的補丁更為安全有效。

圖8 添加補丁校驗方案前后的修復結(jié)果對比

4 結(jié)束語

筆者指出自動程序修復方法在修復缺陷過程中存在的兩種安全隱患場景,即臟補丁源場景和臟測試集場景,并為兩種安全隱患場景分別提出相應(yīng)的解決方案,即補丁校驗方案和測試集校驗方案。此外,基于Defects4J庫中的測試用例和缺陷程序進行了實驗測試。實驗結(jié)果表明,筆者所提出的測試集校驗方案能夠精確地定位臟測試用例,并具有較小的平均誤報率(即7.2%);所提出的補丁校驗方案不影響自動程序修復方法的穩(wěn)定性,并能夠促使自動程序修復方法獲取更安全有效的補丁。筆者所提出的兩種解決方案能夠有效消除自動程序修復方法在修復過程中出現(xiàn)的安全隱患,并提高程序修復的穩(wěn)定性和修復后程序的安全性。

猜你喜歡
程序方法
學習方法
試論我國未決羈押程序的立法完善
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
創(chuàng)衛(wèi)暗訪程序有待改進
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢方法
捕魚
主站蜘蛛池模板: 亚洲人成网站观看在线观看| 国产aⅴ无码专区亚洲av综合网| 国产97色在线| 亚洲有无码中文网| 亚洲Av激情网五月天| 日韩人妻精品一区| 华人在线亚洲欧美精品| AⅤ色综合久久天堂AV色综合 | 亚洲欧洲日韩久久狠狠爱| 国产在线97| 沈阳少妇高潮在线| 日韩视频免费| 成年人免费国产视频| 久久精品丝袜| 久久综合伊人77777| 91精品国产自产91精品资源| 伊人91在线| 污污网站在线观看| 欧美国产日韩另类| 亚洲国产精品一区二区第一页免 | 精品一区国产精品| 精品国产aⅴ一区二区三区| 欧美日韩亚洲国产| 久久久亚洲色| 亚洲国产精品不卡在线| 久青草免费在线视频| a免费毛片在线播放| 国产成在线观看免费视频| 亚洲第一黄片大全| 呦系列视频一区二区三区| 国产精品视频系列专区| 人人看人人鲁狠狠高清| 欧美成人精品在线| 99久久精品免费看国产免费软件| 欧美在线中文字幕| 欧美成人免费午夜全| 亚洲成av人无码综合在线观看| 欧美成人a∨视频免费观看| 色妞www精品视频一级下载| 精品无码一区二区三区在线视频| 日韩欧美中文亚洲高清在线| 国产精品xxx| 中文字幕日韩欧美| 国内嫩模私拍精品视频| 日韩小视频在线观看| 99热这里只有免费国产精品 | 国产精品蜜臀| 亚洲—日韩aV在线| 国产在线日本| 亚洲午夜18| 伊人久久久大香线蕉综合直播| 久久公开视频| 免费精品一区二区h| 欧美中文字幕在线播放| 欧美三级自拍| 欧美狠狠干| 伊人五月丁香综合AⅤ| 九九九久久国产精品| 国产XXXX做受性欧美88| 成人午夜精品一级毛片| 黄色免费在线网址| 日本少妇又色又爽又高潮| 五月婷婷综合色| 992tv国产人成在线观看| 国产迷奸在线看| 欧美亚洲日韩不卡在线在线观看| 精品99在线观看| 婷婷在线网站| 美女无遮挡被啪啪到高潮免费| 美女潮喷出白浆在线观看视频| 91久久国产热精品免费| 色妞永久免费视频| 欧美69视频在线| 亚洲视频三级| 欧美日本在线播放| 青青久视频| 青青国产成人免费精品视频| 精品视频一区二区三区在线播 | 亚洲人成在线精品| 亚洲第一区在线| 91精品伊人久久大香线蕉| 99中文字幕亚洲一区二区|