• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    保持語義不變的C克隆代碼預(yù)處理方法

    2017-12-22 03:21:17邊奕心
    電子科技大學(xué)學(xué)報 2017年6期
    關(guān)鍵詞:程序檢測方法

    邊奕心,趙 松,杜 軍

    ?

    保持語義不變的C克隆代碼預(yù)處理方法

    邊奕心1,2,趙 松2,杜 軍2

    (1.中國科學(xué)院軟件研究所 北京 海淀區(qū) 100190;2. 哈爾濱師范大學(xué)計算機(jī)科學(xué)與信息工程學(xué)院 哈爾濱 150025)

    克隆代碼檢測工具的輸出結(jié)果由于存在克隆檢測不一致性缺陷的誤檢和檢測出的克隆代碼不能直接用于重構(gòu)的問題,需要對檢測工具的輸出結(jié)果進(jìn)行預(yù)處理。為了解決該問題,提出一種新的克隆代碼預(yù)處理方法。首先,將自適應(yīng)K-最近鄰聚類方法與程序依賴圖相結(jié)合,用于降低克隆不一致性相關(guān)缺陷檢測的誤檢。然后,使用基于代價-收益分析的評估方法,在消除缺陷后的克隆代碼中識別可重構(gòu)的克隆代碼。實驗結(jié)果表明,該預(yù)處理方法,不僅降低了克隆不一致性相關(guān)缺陷檢測工具產(chǎn)生的誤檢,提高了可重構(gòu)克隆代碼的數(shù)量,而且將克隆代碼檢測與克隆代碼重構(gòu)兩個過程連接為一個有機(jī)的整體,有利于提高軟件的質(zhì)量,降低軟件維護(hù)的成本。

    自適應(yīng)K-最近鄰聚類; 克隆代碼; 克隆不一致性缺陷檢測; 程序依賴圖; 重構(gòu)

    克隆代碼(clone code)是程序源代碼中多個具有相似語法或語義的代碼片段,是程序員的拷貝-粘貼行為造成的[1],被列為軟件中低質(zhì)量、難以理解、難以維護(hù)的代碼中最著名的一種“壞味道(bad smell)”。研究顯示,克隆代碼增加了源代碼的長度和軟件系統(tǒng)的復(fù)雜性,使其更加難以維護(hù),并可能在降低系統(tǒng)運(yùn)行效率的同時,引入大量缺陷[2]。通過對代碼進(jìn)行重構(gòu)可消軟件系統(tǒng)中的部分克隆代碼,提高程序的質(zhì)量。但是,克隆代碼檢測工具的輸出結(jié)果,一般情況下不能直接用于重構(gòu),原因如下:首先,本文使用的檢測工具CPBugdetector[3]在檢測克隆代碼的同時,還能對拷貝-粘貼的相關(guān)缺陷進(jìn)行檢測。但是,工具的輸出結(jié)果存在一定的誤檢,對拷貝-粘貼相關(guān)缺陷檢測結(jié)果的準(zhǔn)確性,及對后續(xù)克隆代碼的重構(gòu)結(jié)果都會產(chǎn)生負(fù)面影響。其次,并非所有檢測出來的克隆代碼都適于重構(gòu)[4-6]。為解決以上問題,本文提出了一種預(yù)處理方法,該方法結(jié)合程序依賴圖和自適應(yīng)K-最近鄰聚類兩種方法,減少克隆不一致性相關(guān)缺陷檢測的誤檢,然后,使用基于代價-收益分析的評估方法,在消除缺陷后的克隆代碼片段中識別可重構(gòu)的克隆代碼,目的是降低維護(hù)克隆代碼的代價。

    1 相關(guān)研究

    1.1 克隆不一致性相關(guān)缺陷檢測存在的問題

    1.1.1 拷貝-粘貼相關(guān)缺陷的檢測

    克隆代碼通常是由開發(fā)人員的拷貝-粘貼行為產(chǎn)生的,這種行為極易引入缺陷。通過分析操作系統(tǒng)中的缺陷,文獻(xiàn)[7]認(rèn)為拷貝-粘貼是導(dǎo)致軟件出現(xiàn)缺陷的一個重要原因。研究結(jié)果表明:在Linux driver/i20的一個源文件中,發(fā)現(xiàn)的35個bug中有34個是由代碼的拷貝-粘貼導(dǎo)致的。

    開發(fā)人員在編寫程序時,由于實踐需要,通常會對復(fù)制后的代碼進(jìn)行修改,這是導(dǎo)致克隆不一致性缺陷的主要原因。如,如果程序的源代碼片段被拷貝后,在被拷貝片段的相應(yīng)位置的標(biāo)識符經(jīng)過修改后,出現(xiàn)了兩個或兩個以上不同的名稱,這種不一致性通常預(yù)示著軟件缺陷,被稱為標(biāo)識符重命名不一致性缺陷。文獻(xiàn)[8]把這種標(biāo)識符重命名不一致性缺陷稱之為“忘記修改某標(biāo)識符”。文獻(xiàn)[9]又提出了另一種標(biāo)識符不一致性缺陷:“錯誤修改某標(biāo)識符”。兩種缺陷的含義如下:

    忘記修改某標(biāo)識符缺陷[8]:源代碼片段被拷貝-粘貼后,如果原片段的某個標(biāo)識符在被拷貝片段的所有位置上,除了一兩處為,其余的位置都被重命名為,這很可能是開發(fā)者由于忘記修改了某處而引入的缺陷。

    錯誤修改某標(biāo)識符缺陷[8]:源代碼片段被拷貝-粘貼后,如果原片段的某個標(biāo)識符在被拷貝的片段的所有出現(xiàn)位置上,除了一兩處被重命名為,剩下位置的為,這很可能是開發(fā)者在重命名其他位置的標(biāo)識符時,不小心將此處的標(biāo)識符錯誤地重命名為而引入的缺陷。

    圖1所示程序是在Linux 2.6.6版本中,由檢測工具CPBugdetector檢測出來的一個錯誤修改某標(biāo)識符缺陷,其中,片段1的標(biāo)識符“ops”在片段2中的映射出現(xiàn)了不一致(映射“ops”4次,映射“claimed”1次)。這種缺陷很可能是開發(fā)人員“錯誤修改某標(biāo)識符”而引入的軟件缺陷。

    圖1 從Linux2.6.6中檢測出的一個錯誤修改某標(biāo)識符缺陷

    1.1.2 拷貝-粘貼相關(guān)缺陷檢測的誤檢

    代碼中出現(xiàn)標(biāo)識符映射的不一致并不意味著一定是缺陷,也有可能是拷貝-粘貼相關(guān)缺陷的檢測工具造成的誤檢。因為到目前為止,還沒有檢測工具的輸出結(jié)果是不存在誤檢的。原因可以分為3類:1)錯誤匹配拷貝-粘貼片段;2)語句順序發(fā)生變換;3)插入或刪除結(jié)構(gòu)相同的語句。前兩種類型的誤檢出現(xiàn)在文獻(xiàn)[8]中,但文獻(xiàn)并沒有提出誤檢消除的方法。本文主要研究后兩種誤檢并給出具體的誤檢消除方法。本文前期的工作[10]對消除拷貝-粘貼相關(guān)缺陷檢測的誤檢方法進(jìn)行了初步研究,在此基礎(chǔ)上,增加了可以消除的誤檢類型,并與度量方法相結(jié)合,在消除誤檢后的克隆代碼中,識別可重構(gòu)的克隆代碼。

    圖2所示程序是第二種類型的誤檢??可交換的語句順序。如圖2b所示,片段1的標(biāo)識符“l(fā)astdirent”映射到片段2中,發(fā)生了映射不一致,在片段2中該標(biāo)識符被映射成“l(fā)astdirent”3次,一次被映射成標(biāo)識符“error”。從缺陷檢測結(jié)果看,這種映射的不一致是由于程序員錯誤修改某標(biāo)識符而引起的缺陷。但是,通過分析可以發(fā)現(xiàn),這個檢測結(jié)果是由于片段1和片段2中存在可交換的語句順序(語句15與16順序顛倒)引起的,并不是真正的軟件缺陷。

    本文需要處理兩種類型的誤檢:1)插入或刪除相同結(jié)構(gòu)的語句;2)可交換的語句順序。這兩種誤檢都是在原代碼片段被拷貝粘貼后,在被拷貝片段的出現(xiàn)位置的語句的順序發(fā)生了變化引起的,為確定誤檢發(fā)生的位置(行號),本文引入了自適應(yīng)K-最近鄰聚類方法。該方法通過計算實體(程序語句)之間的相似度,把功能相近的語句聚到一起,然后對源代碼進(jìn)行聚類,將關(guān)系最密切的實體(語句的行號)分到一個聚類集合中,以便對原代碼片段和被拷貝片段的聚類集合中的行號及其相應(yīng)語句的哈希值進(jìn)行比較,確定誤檢發(fā)生的位置。

    a. 誤檢

    b.標(biāo)識符映射關(guān)系

    圖2 從Linux 2.6.6 版本中檢測出的一個語句位置互換引起的誤檢

    1.1.3 識別克隆代碼可重構(gòu)機(jī)會的挑戰(zhàn)

    檢測克隆代碼是重構(gòu)克隆代碼的前提,但是,以下原因?qū)е聶z測工具的輸出結(jié)果并不都適于重構(gòu):首先,有些克隆代碼是程序員的有意行為,因此,克隆代碼不一定對軟件系統(tǒng)產(chǎn)生威脅[4,11],檢測出來的克隆代碼有多少會對軟件系統(tǒng)產(chǎn)生不利影響,目前尚不清楚[5]。其次,由于大規(guī)模軟件系統(tǒng)的程序復(fù)雜性,導(dǎo)致很難消除某些對系統(tǒng)存在真正威脅的克隆代碼[6]。如,一些僅由聲明語句組成的克隆代碼是不適于提取的[12]。最后,有些克隆代碼使用傳統(tǒng)方法很難消除,如果采用特殊手段消除這些克隆代碼,會導(dǎo)致代碼難于理解,有時甚至有引入缺陷的可能性,這樣的結(jié)果是克隆代碼對系統(tǒng)的威脅仍然沒有消除。本文前期研究[13]對克隆代碼的識別方法進(jìn)行了初步探索,在此基礎(chǔ)上,提出了一種新的預(yù)處理克隆代碼的方法。該方法將程序依賴圖和自適應(yīng)K-最近鄰聚類相結(jié)合,消除或減少克隆不一致性相關(guān)缺陷檢測結(jié)果中存在的誤檢,然后,使用基于代價-收益分析的評估方法,在消除缺陷的克隆代碼中識別適于重構(gòu)的克隆代碼片段,在提高克隆代碼識別安全性的同時降低克隆代碼維護(hù)的代價。

    1.2 預(yù)處理算法的相關(guān)理論基礎(chǔ)

    1.2.1 自適應(yīng)K-最近鄰聚類方法

    自適應(yīng)K-最近鄰(adaptive K-nearest neighbor) 聚類方法由文獻(xiàn)[14]提出,用于處理多種問題。該方法通過計算實體(程序語句)之間的相似度,把功能相近的語句放到一個聚類集合中,以便重構(gòu)。該方法與程序切片方法的思想類似,都是要找到相關(guān)度最高的語句,然后聚類。但是,程序切片方法需要先建立程序依賴圖,然后分析語句間的各種依賴關(guān)系,算法的復(fù)雜度非常高,不能分析較大規(guī)模的程序。而聚類方法是通過計算實體(程序語句)之間的相似度把最相關(guān)的語句聚集到一起,計算簡單,算法的復(fù)雜度低,適用于分析大規(guī)模的程序代碼。

    1.2.2 程序依賴圖

    程序依賴圖(program dependence graph, PDG)是一種程序的中間圖形表示形式,是一個帶有標(biāo)記的有向多重圖。文獻(xiàn)[15]提出程序依賴圖的概念,并給出建圖的詳細(xì)算法。在程序依賴圖上,程序語句被表示成節(jié)點(diǎn),語句之間的依賴關(guān)系用圖的邊表示。

    2 克隆代碼的預(yù)處理算法

    本文提出的預(yù)處理算法由兩個步驟組成。首先,消除兩種誤檢:插入或刪除相同結(jié)構(gòu)的語句和可交換的語句順序。其次,在消除缺陷后的克隆代碼中采用本文提出的識別方法識別可重構(gòu)的克隆代碼。

    2.1 算法描述

    本文提出的結(jié)合自適應(yīng)K-最近鄰聚類和程序依賴圖的克隆代碼預(yù)處理方法流程如圖3所示。

    該方法首先使用工具CPBugdetector[3]分別檢測待測系統(tǒng)中的克隆代碼和拷貝-粘貼相關(guān)的缺陷,使用基于代價-收益的評估方法對未檢測出缺陷的克隆代碼片段,識別適于重構(gòu)的克隆代碼;對檢測出有缺陷的克隆代碼,使用本文提出的結(jié)合A-KNN聚類和程序依賴圖的方法消除這些誤檢。然后,再對拷貝-粘貼相關(guān)缺陷進(jìn)行檢測,加入人工參與部分,由人工來確認(rèn)缺陷和對缺陷進(jìn)行修正,將非誤檢又不屬于疑似缺陷的克隆代碼作為下一步的輸入,識別適于重構(gòu)的克隆代碼。最后,對適于重構(gòu)的克隆代碼采用相應(yīng)的重構(gòu)方法進(jìn)行重構(gòu),目的是消除程序中的克隆代碼。

    圖3 可重構(gòu)克隆代碼的預(yù)處理算法框圖

    2.1.1 自適應(yīng)K-最近聚類與程序依賴圖相結(jié)合的誤檢消除算法

    誤檢消除算法將自適應(yīng)K-最近鄰聚類與程序依賴圖相結(jié)合,目前該方法主要用來分析C語言編寫的程序,算法也可經(jīng)修改后應(yīng)用于其他類型的編程語言。算法描述如下。

    算法:PruneFalsePositives

    輸入:含有缺陷的克隆代碼的程序依賴圖P

    輸出:消除誤檢后的克隆代碼

    Begin

    構(gòu)建實體屬性矩陣creatmatrix();

    計算相似度矩陣similarity();

    分類結(jié)果添加到結(jié)果集合stackre_1和stackre_2中;

    湯翠是第二天下午返回來的。院子平了,碎磚碎瓦也都被推走了,南菜已經(jīng)天翻地覆了,過了今天,南菜恐怕只能在照片中看到了。幾臺鏟掘機(jī)還在工作,它們在破壞,也在建設(shè)。鏟掘機(jī)們張開巨大的鐵手,毫不費(fèi)勁地插入堅硬的土地里。湯翠沒想到,新翻上來的土呈紅褐色,像人的血。湯翠暈血,趕緊閉上眼。

    while(stackre_1&&stackre_2不空){

    比較兩個棧頂元素node1和node2的行號;

    if(match){

    stackre_1.pop(node1);stackre_2.pop(node2);}

    else{將未匹配節(jié)點(diǎn)放入集合collect中;}}\endwhile

    for(collect的節(jié)點(diǎn)){

    if(一行未匹配){

    else\兩行未匹配{

    if(未匹配節(jié)點(diǎn)的hashvalue相等){

    collect中節(jié)點(diǎn)指針分別指回其PDG,判斷它們之間是否有依賴; }}}

    End

    算法由3個步驟組成:1) 進(jìn)行數(shù)據(jù)的收集;2) 聚類;3) 消除誤檢。經(jīng)過步驟2)聚類之后,代碼中關(guān)系最密切的實體(語句的行號)被聚集到一個集合中,然后比較每個聚類集合中的行號,確定發(fā)生誤檢的位置。

    如果一個聚類集合中的兩條語句與另一個聚類因以下兩種原因引起的誤檢:“插入或刪除結(jié)構(gòu)相同的語句”和“可互換語句順序”。經(jīng)過步驟2)聚類,關(guān)系最密類集合中的兩條語句未匹配,則比較它們的哈希值。如果哈希值相等(哈希值相同的語句是結(jié)構(gòu)相同的語句),即為“語句可交換順序”而引起的誤檢,然后在程序依賴圖上執(zhí)行結(jié)構(gòu)語義分析,判斷兩條語句是否可交換,如果兩條語句之間存在著數(shù)據(jù)依賴,此時不可交換,反之可交換。

    如果一個集合中的語句未在另一個集合中找到可與之匹配的語句,存在兩種可能:一種是疑似缺陷,另一種是因插入或刪除相同結(jié)構(gòu)的語句而引起的誤檢。此時,在程序依賴圖上尋找與未找到匹配語句的哈希值相同的語句節(jié)點(diǎn),如果找到,即為因“插入或刪除相同結(jié)構(gòu)的語句”而引起的誤檢,然后在程序依賴圖上進(jìn)行結(jié)構(gòu)語義分析。如果在程序依賴圖上未找到與未匹配語句的哈希值相同的語句節(jié)點(diǎn),則為疑似缺陷。下面以圖2程序為例,對算法進(jìn)行詳述。圖2所示程序的誤檢是由于兩個程序片段中的語句15和語句16的順序發(fā)生顛倒產(chǎn)生的,表1所示為片段1的實體-屬性矩陣。程序的實體-屬性矩陣作為算法的輸入,程序語句為算法的實體,控制變量和數(shù)據(jù)變量為屬性。如表1所示,矩陣的行是該變量所在的語句行號。

    步驟如下:首先,待分析程序的實體-屬性矩陣作為算法的輸入,用以構(gòu)建程序的相似度矩陣,結(jié)果如表2所示。然后,算法處理聲明語句節(jié)點(diǎn),得到每個實體的類標(biāo)簽。最后,執(zhí)行聚類算法,對語句進(jìn)行層次聚類,得到聚類結(jié)果。

    片段1:{12,15}{13,14}{16,19,17,18},片段2:{12,16}{13,14}{15,19,17,18}。

    表1 示例程序(圖2)中片段1程序的實體-屬性矩陣

    表2 示例程序(圖2)中片段1程序的相似度矩陣

    經(jīng)過聚類后,首先比較3個聚類集合中的行號,找出不匹配的行號,在本例中,語句15和16不匹配。對為匹配的語句,先比較它們的哈希值,如果哈希值相等,則對相應(yīng)的程序依賴圖進(jìn)行結(jié)構(gòu)語義分析,目的是確定兩個語句間是否存在數(shù)據(jù)依賴,片段1程序的程序依賴圖如圖4所示。語句15和16間不存在數(shù)據(jù)依賴,因此可以交換語句15和16的順序。

    2.1.2 基于代價-收益分析的評估方法識別可重構(gòu)的克隆代碼

    過程提取作為重構(gòu)方法之一,可減少系統(tǒng)中的克隆代碼,但經(jīng)過過程提取,函數(shù)間的耦合度增加了,因而增大了軟件維護(hù)的代價,而過程提取引起的代碼規(guī)模的減少是其帶來的收益。文獻(xiàn)[6]通過代碼間的耦合度計算來度量代碼遷移的難易程度,然后,根據(jù)難易程度對語句進(jìn)行排序,識別并提取可重構(gòu)的克隆代碼,認(rèn)為使用外部定義的變量(被引用和被賦值)越少,代碼的遷移難度越低。文獻(xiàn)[12]在過長方法中識別可以被提取的片段,將代價和收益進(jìn)行相除,根據(jù)比率對候選的片段進(jìn)行排序,比率最高的片段被認(rèn)為是適于提取的。本文在文獻(xiàn)[6,12]的基礎(chǔ)上,提出了基于代價-收益評估的方法,識別可重構(gòu)的克隆代碼。該算法將代碼行的減少視為重構(gòu)的收益,而重構(gòu)的代價是被提取的函數(shù)和周圍代碼之間的傳遞參數(shù)的數(shù)量。

    圖4 示例程序(圖2)中片段1的程序依賴圖

    1) 收益分析

    Benefit()=(|cf|?1) (1)

    式中,|cf|是中每個片段內(nèi)能被提取代碼語句數(shù)量。在某些克隆代碼中,存在一定數(shù)量的非克隆代碼,但由于語句間的依賴關(guān)系,這些非克隆語句不能被移出。在已有的方法中,由于過程提取產(chǎn)生了一個過程調(diào)用,因此,實際語句的減少量為|cf|-1。

    舉例:圖5所示程序含有克隆代碼的片段的行數(shù)減少了5行(其中加粗顯示的是克隆代碼語句),但由于過程調(diào)用,收益是8。

    圖5 Linux 2.6.6中檢測出的克隆代碼

    2)代價分析

    耦合度表示過程提取的代價??寺〈a與它周圍代碼的耦合度越低,則克隆代碼越易被移動[12]。在常見的7種耦合關(guān)系中,本文主要計算數(shù)據(jù)耦合,原方法和新方法(過程提取的結(jié)果)之間的耦合度通過計算新方法的參數(shù)來計算,有:

    舉例:圖5中所示的片段,old_fs和ret是輸入?yún)?shù),ret為輸出參數(shù),因此,此例中過程提取的代價為6。

    綜上所述,代價-收益分析的評估方法為:

    表3 被測開源軟件中克隆代碼的檢測結(jié)果

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

    本文選取了9個由C語言編寫的開源程序作為實驗對象。首先采用克隆代碼檢測工具CPBugdetector[3]對這9個開源程序進(jìn)行克隆代碼檢測及其相關(guān)缺陷的檢測,克隆代碼檢測結(jié)果如表3所示。然后,使用本文提出的方法對測試程序進(jìn)行誤檢消除,誤檢消除的實驗結(jié)果如表4所示。

    表4中記錄了誤檢消除前后,分別針對檢測出的“忘記修改某標(biāo)識符”和“錯誤修改某標(biāo)識符”的缺陷,檢測工具報告的bug數(shù)量。表4的最后4列數(shù)據(jù)記錄了本文提出的算法能夠消除的誤檢的成因及缺陷類型。

    表4 不同類型分類結(jié)果比較

    表5 識別可重構(gòu)克隆代碼

    結(jié)合表3和表4進(jìn)行分析,被測程序的規(guī)模越大,檢測出來的bug越多,同時能被消除的誤檢也越多。最后,采用基于代價-收益分析的方法對消除誤檢之后的克隆代碼識別適于重構(gòu)的克隆代碼,實驗結(jié)果如表5所示。誤檢消除之后增加了適于重構(gòu)的克隆代碼的數(shù)量,同時,檢測出來的克隆代碼約70%是適于提取的。

    [1] CAI D, KIM M. An empirical study of long-lived code clones[J]. Fundamental Approaches to Software Engineering Lecture Notes in Computer Science, 2011, 6603: 432-446.

    [2] 于冬琦, 彭鑫, 趙文耘.使用抽象語法樹和靜態(tài)分析的重復(fù)代碼自動重構(gòu)方法[J]. 小型微型計算機(jī)2009, 30(9): 1752-1760.

    YU Dong-qi, PENG Xin, ZHAO Wen-yun. Automatic refactoring method of cloned code using abstract syntax tree and static analyis[J]. Journal of Chinese Computer Systems, 2009, 30(9): 1752-1760.

    [3] 蘇小紅, 馬培軍, 王倩, 等. C克隆代碼缺陷檢測工具: 中國, [CPBugdetector] V1.0[CP/DK]. 2010.

    SU Xiao-hong, MA Pei-jun, WANG Qian, et al. A defects detection tool for C clones, China, [CPBugdetector] V1.0[CP/DK]. 2010.

    [4] KIM M, BERG L, LAU T, et al. An ethnographic study of copy and paste programming practices in oopl[C]// International Symposium on Empirical Software Engineering. Washington DC, USA: IEEE, 2004: 83-92.

    [5] CODE N, KOS R. Frequency and risks of changes of clones[C]//33rd Internaitonal Conference on Software Engineering. Hawaii, USA: IEEE, 2011: 311-320.

    [6] HIGO Y, KUSU S, INOUE K. Identifying refactoring opportunities for removing code clones with a metrics-based approach[M]. Hong Kong, China: CreateSpace Independent Publising Platform, 2011: 1-26.

    [7] CHOU A, YANG J, CHELF B, et al. An empirical study of operating systems error[J]. SIGOPS Operating Systems Review, 2001, 35(1): 73-88.

    [8] LI Z, LU S, MYAGMAR S, et al. CP-miner: Finding copy-paste and related bugs in large-scale software code[J]. IEEE Transactions on Software Engineering, 2006, 32(3): 176-192.

    [9] 王倩. 基于序列挖掘的C克隆代碼及相關(guān)軟件缺陷的檢測[D]. 哈爾濱: 哈爾濱工業(yè)大學(xué), 2009.

    WANG Qian. Detection of clones and related software defects of C programs via sequential pattern mining[D]. Harbin: Harbin Institute of Technology, 2009.

    [10] MA Pei-jun, BIAN Yi-xin. A clustering method for pruning false positive of clone code detection[C]// International Conference on Mechatronic Sciences, Electric Engineering and Computer (MEC 2013). Shenyang, China: IEEE, 2013: 1917-1920.

    [11] KAPSER C, GODFREY M W. “Cloning considered harmful” considered harmful[C]//The 13th Working Conference on Reverse Engineering. Washington DC: USA: IEEE, 2006: 19-28.

    [12] YANG L, LIU HUI, NIU Z. Identifying fragments to be extracted from long methods[C]//Asia-Pacific Software Engineering Conference. Washington DC, USA, IEEE, 2009: 43-49.

    [13] BIAN Yi-xin, SU Xiao-hong, MA Pei-jun. Identifying accurate refactoring opportunities using metrics[C]// International Conference on Soft Computing Techniques and Techniques and Engineering Application. Shenyang, China: IEEE, 2013: 141-146.

    [14] ALKHALID A, ALSHAYEB M, MAHMOUD S. Software refactoring at the function level using new adaptive K-nearest neighbor algorithm[J]. Advances in Engineering Software, 2010, 41(10-11): 1160-1178.

    [15] FERRANTE J, OTTENSTEIN K J, WARREN J D. The program dependence graph and its use in optimization[J]. ACM Transaction on Program Language System, 1987, 9(3): 319-349.

    編 輯 漆 蓉

    Semantic-Preserving Pre-Processing Method for C Clone Code

    BIAN Yi-xin1,2, ZHAO Song2, and DU Jun2

    (1. Institute of Software Chinese Academy of Sciences Haidian Beijing 100190; 2. College of Computer Science and Information Engineering, Harbin Normal University Harbin 150025)

    The output results of clone code detection tool cannot be directly refactored because of the two reasons: one is the false positives of clone inconsistency related bugs detection and the other is that all the detected clones cannot be suitable for refactoring. Therefore, the output results of clone code detection tool need to be pre-processed for reducing the error checking of cloning inconsistencies defect. A pre-processing approach combing adaptive K-nearest neighbor clustering with program dependence graph is proposed in this paper to solve these problems. First, adaptive K-nearest neighbor clustering and program dependence graph are used to reduce the false positives of clones inconsistency related bugs detection. And then the refactorable clone code is identified to reduce the cost of clone maintenance. The results of the study show that our approach not only effectively prunes the false positives of clone inconsistency related bugs but also eliminates the gap between clone code detection and clone refactoring. Therefore, our method contributes to improving the quality of the software and decreasing the cost of software maintenance.

    adaptive K-nearest neighbor clustering; clone code; clone inconsistency related bugs detection; program dependence graph; refactoring

    TH133; TP183

    A

    10.3969/j.issn.1001-0548.2017.06.023

    2016-09-14;

    2017-05-18

    黑龍江省自然科學(xué)基金(F2016030)

    邊奕心(1979-),女,博士,主要從事軟件重構(gòu)、程序分析、缺陷檢測方面的研究.

    猜你喜歡
    程序檢測方法
    “不等式”檢測題
    “一元一次不等式”檢測題
    “一元一次不等式組”檢測題
    試論我國未決羈押程序的立法完善
    “程序猿”的生活什么樣
    英國與歐盟正式啟動“離婚”程序程序
    可能是方法不對
    小波變換在PCB缺陷檢測中的應(yīng)用
    用對方法才能瘦
    Coco薇(2016年2期)2016-03-22 02:42:52
    創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
    国产精品二区激情视频| 在线天堂中文资源库| 亚洲av电影在线进入| 青草久久国产| 青春草亚洲视频在线观看| av电影中文网址| 亚洲五月色婷婷综合| 欧美在线黄色| 51午夜福利影视在线观看| av福利片在线| 黄色毛片三级朝国网站| 另类精品久久| www.999成人在线观看| 1024视频免费在线观看| 欧美少妇被猛烈插入视频| 亚洲自偷自拍图片 自拍| 久久人人97超碰香蕉20202| 亚洲第一青青草原| 两性夫妻黄色片| 丰满人妻熟妇乱又伦精品不卡| av国产久精品久网站免费入址| 丝袜在线中文字幕| 亚洲国产日韩一区二区| 后天国语完整版免费观看| 国产亚洲欧美精品永久| 欧美国产精品va在线观看不卡| 亚洲精品国产av蜜桃| 午夜福利,免费看| 男的添女的下面高潮视频| 一级毛片 在线播放| 免费一级毛片在线播放高清视频 | 伦理电影免费视频| 亚洲五月色婷婷综合| 精品视频人人做人人爽| 亚洲国产欧美一区二区综合| 国产片内射在线| 国产片特级美女逼逼视频| tube8黄色片| 久久国产精品大桥未久av| 婷婷色综合大香蕉| 亚洲中文日韩欧美视频| 亚洲少妇的诱惑av| 久久人妻熟女aⅴ| 国产一区二区在线观看av| 高清不卡的av网站| 晚上一个人看的免费电影| 欧美人与善性xxx| 麻豆av在线久日| 免费久久久久久久精品成人欧美视频| 日韩 亚洲 欧美在线| 巨乳人妻的诱惑在线观看| 国产精品av久久久久免费| 国产精品秋霞免费鲁丝片| 啦啦啦在线免费观看视频4| 超碰97精品在线观看| 国产又色又爽无遮挡免| 国产精品偷伦视频观看了| 一级毛片电影观看| 亚洲成人免费电影在线观看 | 日日爽夜夜爽网站| 亚洲av成人不卡在线观看播放网 | 久久精品久久久久久噜噜老黄| 日本av手机在线免费观看| 国产视频一区二区在线看| 国产精品香港三级国产av潘金莲 | 一级黄片播放器| h视频一区二区三区| 黄频高清免费视频| av又黄又爽大尺度在线免费看| 亚洲精品国产av成人精品| 日韩制服丝袜自拍偷拍| www.av在线官网国产| 香蕉国产在线看| 国产高清国产精品国产三级| 建设人人有责人人尽责人人享有的| 久久精品aⅴ一区二区三区四区| 满18在线观看网站| 亚洲欧洲日产国产| 久久精品亚洲熟妇少妇任你| 国产成人系列免费观看| 免费女性裸体啪啪无遮挡网站| 精品一区二区三区四区五区乱码 | 尾随美女入室| 久久九九热精品免费| av天堂久久9| 亚洲精品成人av观看孕妇| 日韩电影二区| 日韩一本色道免费dvd| www.精华液| 久久人人爽av亚洲精品天堂| 又粗又硬又长又爽又黄的视频| 午夜老司机福利片| 色婷婷av一区二区三区视频| 亚洲成国产人片在线观看| 夫妻午夜视频| 黄色a级毛片大全视频| 大片免费播放器 马上看| 丝袜脚勾引网站| 老司机靠b影院| 少妇裸体淫交视频免费看高清 | 18在线观看网站| 夫妻午夜视频| 婷婷色av中文字幕| 女人久久www免费人成看片| 99精品久久久久人妻精品| 黄色怎么调成土黄色| 欧美成人精品欧美一级黄| 91精品三级在线观看| 欧美日韩视频精品一区| 热re99久久国产66热| 伊人久久大香线蕉亚洲五| 久久精品人人爽人人爽视色| 成人国产av品久久久| 可以免费在线观看a视频的电影网站| 久久精品国产综合久久久| 少妇粗大呻吟视频| 国产精品av久久久久免费| 精品久久蜜臀av无| 久久久精品区二区三区| 岛国毛片在线播放| 国产一区二区三区av在线| 亚洲免费av在线视频| 69精品国产乱码久久久| 精品亚洲成a人片在线观看| 女人高潮潮喷娇喘18禁视频| 国产一区有黄有色的免费视频| 亚洲图色成人| 欧美+亚洲+日韩+国产| 久久精品熟女亚洲av麻豆精品| 高清视频免费观看一区二区| 成在线人永久免费视频| 1024视频免费在线观看| 日韩制服骚丝袜av| av天堂久久9| 人妻人人澡人人爽人人| 精品国产超薄肉色丝袜足j| videos熟女内射| 欧美黄色片欧美黄色片| 亚洲人成电影免费在线| 咕卡用的链子| 成人午夜精彩视频在线观看| 最新的欧美精品一区二区| 在线观看国产h片| 一区二区三区激情视频| 久久国产精品大桥未久av| 亚洲成国产人片在线观看| 中文乱码字字幕精品一区二区三区| 成年动漫av网址| 日韩人妻精品一区2区三区| 99热网站在线观看| 777米奇影视久久| 欧美另类一区| 免费日韩欧美在线观看| 国产亚洲精品第一综合不卡| 老司机影院毛片| 日本色播在线视频| 91老司机精品| 久久久久国产精品人妻一区二区| 国产淫语在线视频| 亚洲欧美一区二区三区黑人| 国产国语露脸激情在线看| 亚洲欧美日韩高清在线视频 | 国产成人影院久久av| 夫妻午夜视频| 下体分泌物呈黄色| 亚洲图色成人| 成年人免费黄色播放视频| 久久中文字幕一级| 18在线观看网站| 日韩一卡2卡3卡4卡2021年| 高潮久久久久久久久久久不卡| 手机成人av网站| 亚洲成人免费av在线播放| videosex国产| 91国产中文字幕| 国产精品人妻久久久影院| 欧美另类一区| 无限看片的www在线观看| 老司机靠b影院| 热99久久久久精品小说推荐| 丝袜美腿诱惑在线| 嫁个100分男人电影在线观看 | 嫩草影视91久久| 午夜福利,免费看| 欧美在线一区亚洲| 免费不卡黄色视频| 一级毛片女人18水好多 | 精品一区二区三区四区五区乱码 | 90打野战视频偷拍视频| 中文精品一卡2卡3卡4更新| 少妇 在线观看| 国产不卡av网站在线观看| 51午夜福利影视在线观看| 日韩伦理黄色片| 青春草亚洲视频在线观看| 国产精品一区二区精品视频观看| 精品国产一区二区三区四区第35| 中文字幕另类日韩欧美亚洲嫩草| 精品国产一区二区久久| av网站在线播放免费| 国产视频首页在线观看| 五月天丁香电影| 丁香六月天网| 波野结衣二区三区在线| 婷婷色麻豆天堂久久| 久久久国产一区二区| 亚洲欧美一区二区三区久久| 午夜精品国产一区二区电影| 1024香蕉在线观看| 免费看十八禁软件| 国产男女内射视频| 一本综合久久免费| 建设人人有责人人尽责人人享有的| 男女午夜视频在线观看| 成人午夜精彩视频在线观看| 伊人久久大香线蕉亚洲五| 亚洲成av片中文字幕在线观看| 天天操日日干夜夜撸| 18禁裸乳无遮挡动漫免费视频| 精品少妇内射三级| 另类精品久久| 蜜桃在线观看..| 交换朋友夫妻互换小说| 久久久久久亚洲精品国产蜜桃av| 亚洲精品av麻豆狂野| 免费黄频网站在线观看国产| 日本午夜av视频| 日韩免费高清中文字幕av| 一区福利在线观看| 一区二区av电影网| 一级黄片播放器| 色网站视频免费| 青春草亚洲视频在线观看| 好男人电影高清在线观看| 永久免费av网站大全| 9色porny在线观看| 精品人妻一区二区三区麻豆| 日韩人妻精品一区2区三区| 亚洲精品av麻豆狂野| 美女午夜性视频免费| 两性夫妻黄色片| 日本欧美国产在线视频| 19禁男女啪啪无遮挡网站| 精品欧美一区二区三区在线| 纯流量卡能插随身wifi吗| 亚洲av日韩在线播放| 9色porny在线观看| 欧美精品高潮呻吟av久久| 香蕉国产在线看| 五月天丁香电影| 国产在线视频一区二区| 欧美大码av| 亚洲伊人色综图| 最新的欧美精品一区二区| 王馨瑶露胸无遮挡在线观看| 精品人妻熟女毛片av久久网站| 各种免费的搞黄视频| 午夜两性在线视频| 永久免费av网站大全| 啦啦啦在线免费观看视频4| 国产野战对白在线观看| 永久免费av网站大全| 国产高清videossex| 少妇 在线观看| 赤兔流量卡办理| 成人免费观看视频高清| 中文字幕人妻熟女乱码| 啦啦啦中文免费视频观看日本| 午夜视频精品福利| 在线天堂中文资源库| 后天国语完整版免费观看| 我的亚洲天堂| 婷婷色av中文字幕| 亚洲精品一二三| 国产黄频视频在线观看| 国产高清videossex| 午夜激情av网站| 两个人免费观看高清视频| 又大又爽又粗| 啦啦啦视频在线资源免费观看| 午夜福利乱码中文字幕| 午夜老司机福利片| 老司机靠b影院| 天天操日日干夜夜撸| 丝袜美足系列| 国产在线视频一区二区| 国产精品一区二区在线不卡| 久久精品熟女亚洲av麻豆精品| 国产国语露脸激情在线看| 侵犯人妻中文字幕一二三四区| 人体艺术视频欧美日本| 在线观看免费高清a一片| 嫩草影视91久久| 成人亚洲精品一区在线观看| av又黄又爽大尺度在线免费看| 激情视频va一区二区三区| 国产免费现黄频在线看| 国产亚洲欧美精品永久| 亚洲精品中文字幕在线视频| 亚洲久久久国产精品| 亚洲av成人精品一二三区| 777久久人妻少妇嫩草av网站| 丰满饥渴人妻一区二区三| 日韩大码丰满熟妇| 精品欧美一区二区三区在线| 国产1区2区3区精品| 又紧又爽又黄一区二区| 国产日韩欧美在线精品| av在线老鸭窝| 丝袜在线中文字幕| 国产真人三级小视频在线观看| 精品一品国产午夜福利视频| 看十八女毛片水多多多| 精品国产一区二区久久| 午夜日韩欧美国产| 999久久久国产精品视频| 精品少妇黑人巨大在线播放| 亚洲人成电影观看| av网站在线播放免费| 欧美精品亚洲一区二区| 1024香蕉在线观看| 国产精品成人在线| 我的亚洲天堂| 91字幕亚洲| 90打野战视频偷拍视频| 国产成人91sexporn| 日本欧美国产在线视频| 巨乳人妻的诱惑在线观看| 国产欧美日韩综合在线一区二区| 国产无遮挡羞羞视频在线观看| 永久免费av网站大全| 热re99久久国产66热| 亚洲精品一二三| 啦啦啦在线观看免费高清www| 国产无遮挡羞羞视频在线观看| 亚洲激情五月婷婷啪啪| 一级a爱视频在线免费观看| 国产有黄有色有爽视频| av国产久精品久网站免费入址| www.999成人在线观看| 免费av中文字幕在线| 伊人久久大香线蕉亚洲五| 久久99精品国语久久久| 亚洲欧美日韩另类电影网站| 电影成人av| 中文字幕精品免费在线观看视频| 天天添夜夜摸| 黄色毛片三级朝国网站| 精品少妇黑人巨大在线播放| 久久午夜综合久久蜜桃| 午夜福利一区二区在线看| 18禁黄网站禁片午夜丰满| 一本综合久久免费| 国产高清国产精品国产三级| 国产国语露脸激情在线看| www.熟女人妻精品国产| 女性被躁到高潮视频| 日本五十路高清| 成年美女黄网站色视频大全免费| 国产成人免费无遮挡视频| 熟女av电影| 美女扒开内裤让男人捅视频| 丁香六月天网| 性少妇av在线| 国产深夜福利视频在线观看| 日韩伦理黄色片| 激情视频va一区二区三区| 国产有黄有色有爽视频| 两人在一起打扑克的视频| 亚洲av电影在线观看一区二区三区| 日本欧美国产在线视频| 在线观看www视频免费| 尾随美女入室| 制服人妻中文乱码| 宅男免费午夜| 亚洲精品国产色婷婷电影| tube8黄色片| 美女主播在线视频| 国产日韩欧美视频二区| 人体艺术视频欧美日本| 人人澡人人妻人| 亚洲视频免费观看视频| 各种免费的搞黄视频| 亚洲av片天天在线观看| av线在线观看网站| 岛国毛片在线播放| 婷婷色综合大香蕉| 日本欧美国产在线视频| 日韩人妻精品一区2区三区| 丝袜脚勾引网站| 伊人亚洲综合成人网| 手机成人av网站| 精品福利永久在线观看| 97精品久久久久久久久久精品| 又大又爽又粗| 婷婷色av中文字幕| 99香蕉大伊视频| 欧美+亚洲+日韩+国产| 亚洲欧洲国产日韩| 国产亚洲av高清不卡| 色94色欧美一区二区| 日韩大码丰满熟妇| 丰满迷人的少妇在线观看| 亚洲三区欧美一区| 90打野战视频偷拍视频| 制服人妻中文乱码| 国产一区有黄有色的免费视频| 91国产中文字幕| av不卡在线播放| 日韩,欧美,国产一区二区三区| 久久久久视频综合| 欧美成人精品欧美一级黄| 国产成人精品久久久久久| xxxhd国产人妻xxx| 国产淫语在线视频| 又大又黄又爽视频免费| 日韩 亚洲 欧美在线| 少妇裸体淫交视频免费看高清 | 九色亚洲精品在线播放| 国产成人系列免费观看| 天天躁夜夜躁狠狠久久av| 国产免费视频播放在线视频| 成人亚洲欧美一区二区av| 制服人妻中文乱码| 日韩视频在线欧美| www.精华液| 波多野结衣av一区二区av| 男女下面插进去视频免费观看| 五月天丁香电影| 美女高潮到喷水免费观看| www.精华液| 国产午夜精品一二区理论片| 一本色道久久久久久精品综合| 免费少妇av软件| 亚洲人成电影免费在线| 日韩中文字幕欧美一区二区 | 久久精品国产综合久久久| 久久久精品免费免费高清| 久久综合国产亚洲精品| 赤兔流量卡办理| 精品第一国产精品| 久久精品熟女亚洲av麻豆精品| 在线观看免费日韩欧美大片| 纯流量卡能插随身wifi吗| 免费看十八禁软件| 飞空精品影院首页| 视频在线观看一区二区三区| 999精品在线视频| 久久天躁狠狠躁夜夜2o2o | 亚洲人成77777在线视频| 婷婷色综合大香蕉| 91精品国产国语对白视频| 曰老女人黄片| 国产淫语在线视频| 欧美精品一区二区免费开放| 成年美女黄网站色视频大全免费| 成人三级做爰电影| 国产深夜福利视频在线观看| 午夜激情久久久久久久| 十八禁高潮呻吟视频| 久久精品亚洲av国产电影网| 久久精品国产a三级三级三级| 日本午夜av视频| 国产日韩欧美亚洲二区| 99精品久久久久人妻精品| 国产精品久久久久久精品电影小说| 国产高清不卡午夜福利| 日日摸夜夜添夜夜爱| 99精国产麻豆久久婷婷| 国产av国产精品国产| videos熟女内射| 色综合欧美亚洲国产小说| 亚洲 国产 在线| 一本—道久久a久久精品蜜桃钙片| 国产爽快片一区二区三区| 国产成人影院久久av| 亚洲国产欧美日韩在线播放| 又大又爽又粗| 成人国产一区最新在线观看 | 一区二区三区乱码不卡18| 性色av乱码一区二区三区2| 高清不卡的av网站| 黄频高清免费视频| 9191精品国产免费久久| 男女免费视频国产| 婷婷色综合www| 在线天堂中文资源库| 天天躁日日躁夜夜躁夜夜| av有码第一页| 免费在线观看视频国产中文字幕亚洲 | 亚洲av片天天在线观看| 国产三级黄色录像| 91老司机精品| 成在线人永久免费视频| 91精品国产国语对白视频| 在线看a的网站| 国产在视频线精品| videosex国产| 黄色视频在线播放观看不卡| 母亲3免费完整高清在线观看| 超碰97精品在线观看| 色精品久久人妻99蜜桃| 丝袜美足系列| 国产成人精品无人区| 人妻人人澡人人爽人人| 精品人妻熟女毛片av久久网站| 国产高清videossex| 国产主播在线观看一区二区 | 欧美+亚洲+日韩+国产| 亚洲激情五月婷婷啪啪| 韩国精品一区二区三区| av福利片在线| 国产淫语在线视频| 成人三级做爰电影| 国产在线视频一区二区| 国产精品一区二区免费欧美 | 亚洲国产中文字幕在线视频| 亚洲av美国av| 无限看片的www在线观看| 亚洲人成电影观看| 极品少妇高潮喷水抽搐| 丰满人妻熟妇乱又伦精品不卡| 日本黄色日本黄色录像| 我要看黄色一级片免费的| 亚洲国产精品一区二区三区在线| 男男h啪啪无遮挡| 日本a在线网址| 韩国高清视频一区二区三区| 一本—道久久a久久精品蜜桃钙片| 欧美老熟妇乱子伦牲交| 9191精品国产免费久久| 汤姆久久久久久久影院中文字幕| 99久久人妻综合| 男女边吃奶边做爰视频| 亚洲av日韩精品久久久久久密 | 亚洲中文字幕日韩| 最新在线观看一区二区三区 | 两性夫妻黄色片| 婷婷色av中文字幕| 自拍欧美九色日韩亚洲蝌蚪91| 亚洲av在线观看美女高潮| 亚洲av成人精品一二三区| 日本vs欧美在线观看视频| 在线 av 中文字幕| 91精品三级在线观看| 日本vs欧美在线观看视频| 黄色 视频免费看| 美女脱内裤让男人舔精品视频| 国产成人啪精品午夜网站| 午夜福利一区二区在线看| 欧美久久黑人一区二区| 一本一本久久a久久精品综合妖精| 久久热在线av| 欧美xxⅹ黑人| a级毛片黄视频| 观看av在线不卡| 丝瓜视频免费看黄片| svipshipincom国产片| 午夜免费男女啪啪视频观看| 好男人视频免费观看在线| 少妇裸体淫交视频免费看高清 | av有码第一页| 久久久久国产精品人妻一区二区| 男女之事视频高清在线观看 | 国语对白做爰xxxⅹ性视频网站| 日本a在线网址| 色播在线永久视频| 性色av乱码一区二区三区2| 亚洲精品一卡2卡三卡4卡5卡 | 欧美激情 高清一区二区三区| 欧美精品av麻豆av| 人人妻人人澡人人爽人人夜夜| 亚洲精品国产av成人精品| 国产色视频综合| 999精品在线视频| 国产精品免费大片| 久久久欧美国产精品| 亚洲欧美一区二区三区久久| 国产免费福利视频在线观看| 免费在线观看影片大全网站 | 亚洲 欧美一区二区三区| 亚洲精品久久成人aⅴ小说| 国产av国产精品国产| 99精国产麻豆久久婷婷| 性色av一级| 亚洲人成电影免费在线| 久久天堂一区二区三区四区| 亚洲,一卡二卡三卡| 国产成人精品无人区| 亚洲专区国产一区二区| av片东京热男人的天堂| 成年动漫av网址| 精品少妇内射三级| 亚洲七黄色美女视频| 久久久久久人人人人人| 少妇人妻 视频| 欧美+亚洲+日韩+国产| 伦理电影免费视频| 国产欧美日韩精品亚洲av| 中文字幕最新亚洲高清| av有码第一页| 99久久99久久久精品蜜桃| 亚洲五月婷婷丁香| 纯流量卡能插随身wifi吗| 男女高潮啪啪啪动态图| 亚洲中文av在线| 一区二区三区乱码不卡18| 国产精品一区二区在线观看99| av在线播放精品| 王馨瑶露胸无遮挡在线观看| 欧美黑人精品巨大| 国产成人免费观看mmmm| 老司机靠b影院| 老司机午夜十八禁免费视频| 蜜桃在线观看..|