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

        ?

        程序設(shè)計語言中代碼克隆的研究

        2013-10-16 12:01:14王國莉白昊昱
        計算機與網(wǎng)絡(luò) 2013年6期
        關(guān)鍵詞:檢測工具編程語言源代碼

        王國莉 白昊昱

        (1 中國電子科技集團公司第五十四研究所河北石家莊050081)

        (2 新加坡國立大學新加坡119077)

        1 引言

        代碼克隆,通常被定義為:在某一軟件項目中,在某一選定的的相似度度量下,較為相似的2段程序設(shè)計語言語句序列。代碼克隆的存在往往預示著潛在的不良設(shè)計,并將增加軟件項目的代碼規(guī)模,維護成本以及缺陷產(chǎn)生的概率。因此,在軟件重構(gòu)與維護中,代碼克隆往往被視作一種“代碼臭味”。然而,不同的程序設(shè)計語言有著不同的設(shè)計哲學,因而有著不同的特性。

        文章采用C lone Digger做為代碼克隆檢測工具。Clone Digger是一個開放源代碼項目,它實現(xiàn)了基于抽象語法樹(Abstract Syntax Tree,AST)的克隆檢測算法[1]。人們對其進行了擴展,使其支持JavaScript,Haskell與Erlang,并將代碼回饋給了開源社區(qū)。首先,將對Java,Python,JavaScript,Erlang與Haskell的程序代碼進行研究。通過對這些語言的學習,去總結(jié)它們的一系列對刪少克隆有潛在幫助的特性。這些特性包括:面向?qū)ο螅嘀乩^承,泛型,宏,鴨子類型,類型推導,第一等函數(shù),匿名函數(shù),柯里化,模式匹配,斷言,eval,反射,閉包,生成器。其次,基于選定的一組人們所研究的語言寫成的開源項目的代碼,將構(gòu)建一個源代碼庫用于對特性進行比較和分析。最后,將分析克隆檢測的結(jié)果,并指出一些有趣的現(xiàn)象。

        2 克隆檢測方法

        要研究各種程序設(shè)計語言中的代碼克隆現(xiàn)象,首先需要一個代碼克隆檢測工具。檢測工具需要足夠精確,并能夠容易地進行擴展使其支持多種語言。并且,需要選擇一組適當?shù)恼Z言及其特性。對每一種語言,必須選擇一組合適的代碼庫,從而使得分析合理并有價值[2]。

        2.1 克隆檢測

        對于克隆檢測工具,評估了CCFinder以及C lone Digger。二者都功能強大,結(jié)果精確,并具有支持多種語言的設(shè)計。評估與比較請見下文的列表。最終,選擇了C lone Digger,因為做為開源軟件,它更方便進行擴展。

        ①用戶界面:CCFinder擁有漂亮的代碼克隆分布圖界面,使得代碼克隆的分布可以非常直觀地呈現(xiàn)出來;CCFinder還擁有對比視圖,可以直接看到冗余代碼片段,而Clone Digger僅僅生成包含冗余代碼對比列表的HTML報告文檔,不過,這也已經(jīng)能夠滿足需要;

        ②技術(shù):CCFinder是基于詞法分析的克隆檢測工具,而C lone Digger采用的是基于AST的算法,從而將更為精確;但其代價是,Clone Digger的運行速度遠遠慢于CCFinder,但對人們來說,C lone Digger的速度是可以接受的;

        ③可擴展性:Clone Digger的代碼以開源的GPL許可協(xié)議發(fā)布,這使得人們可以非常方便地通過編寫AST適配器來擴展它;雖然為一個語言編寫一個AST分析器要難于為其編寫一個可用于CCFinder的詞法分析器,但是,幾乎所有的現(xiàn)代編程語言都提供了用于解析其自身源代碼的AST分析器,只要直接使用就可以了,所以擴展C loneDigger仍然是非常容易的。

        C lone Digger的作者已經(jīng)實現(xiàn)了對Python和Java的支持。對其擴展使其支持ECMAScript,Erlang和Haskell。這些代碼已經(jīng)回饋到了C lone Digger的代碼庫[3]。

        2.2 選擇語言和特性

        世界上有上百種程序設(shè)計語言,不可能去研究其中的每一個。因此,從中選出幾種,以確保人們的研究有意義、有價值。依照以下的標準來選擇所研究的語言。

        ①流行程度:該語言必須足夠流行,從而能夠找到規(guī)模足夠大的開源項目來構(gòu);②建代碼庫:并使得研究能夠讓盡量多的人受益;③成熟度:該語言必須經(jīng)過了長期的開發(fā)與進化,因此它的設(shè)計和特性都較為穩(wěn)定;④標準化:該語言應(yīng)當有一個標準,或是事實上的標準。例如,ECMA標準或是一個參考實現(xiàn);⑤語法易于解析:由于能力有限,并且采用基于AST的克隆檢測算法,因此該語言的語法必須易于解析,或者是存在語法解析器可供直接使用。

        參考上述標準,選擇了Python,ECMAScript,Erlang與Haskell做為研究目標。做為業(yè)界最流行的編程語言,Java將被做為評測的基準。每一個程序設(shè)計語言都有很多的特性和特點,研究不可能涵蓋它們的每一個方面。因此,從中選擇對消除代碼克隆有潛在影響力的特性進行研究,如表1所示。

        表1 各種程序設(shè)計語言特性比較

        2.3 構(gòu)建源代碼庫

        用于比較測試的源代碼庫由精心選擇的一系列開放源代碼項目的代碼構(gòu)建。這個代碼庫包括W eb應(yīng)用框架、語法分析程序生成器以及編程語言測試游戲這3類功能。用文中選擇的每一個語言實現(xiàn)了每一類功能的開源項目。所選擇的項目之間,同一個類別中的項目應(yīng)當實現(xiàn)了相似的功能或用于相似的目的,并在其語言社區(qū)中有較高的流行度。文中比較每一個類別中的項目的代碼克隆覆蓋率,并將給出由各個類別的數(shù)據(jù)相加得到的綜合比較數(shù)據(jù),對所選擇的開源項目的概覽如表2所示。

        表2 源代碼庫所包含的項目

        3 結(jié)果與分析

        按語言累計的代碼克隆覆蓋率如圖2所示。從圖中可以看到,在函數(shù)式編程語言中,有著明顯較少的克隆,尤其是在Haskell中。而Haskell是一個相對有著更多特性的語言。不過,由于W eb應(yīng)用框架往往要比其他類別中的項目大得多,因此,圖2很大程度上由W eb應(yīng)用框架的數(shù)據(jù)所主導。

        圖2 按語言累計的代碼克隆覆蓋率

        為了表現(xiàn)其他因素對克隆覆蓋率的影響,統(tǒng)計了按類別累計的數(shù)據(jù);以及包含所有項目的代碼克隆覆蓋率相對千代碼行(KLOC)。它與按語言累計的數(shù)據(jù)的計算方式相似。根據(jù)統(tǒng)計結(jié)果,編程語言測試游戲類別是僅有的一個有著更小的克隆覆蓋率的類別,這是因為它是一組簡單的任務(wù),因而有著較少的LOC。所以,認為軟件項目的類型對于代碼克隆沒有大的影響。

        4 結(jié)束語

        代碼克隆出現(xiàn)的原因是復雜多樣的,語言特性對于代碼克隆的影響也同樣復雜[4]。通過擴展C lone Digger使其支持更多的編程語言,并構(gòu)建一個包含了由不同語言寫成的不同種類的開源項目的源代碼庫,文中觀察到了代碼克隆現(xiàn)象在各個語言間的差異,并用語言的特性來解釋這些差異。除了語言特性,文中同樣考慮到了可能影響代碼克隆的其他因素。

        實驗結(jié)果指出,一般情況下,由于有著更多特性的語言,例如Python和Haskell寫成的代碼,往往有著較少的代碼克隆。但是,即使是有很高的表達能力的語言,如Python,所寫成的代碼,仍然會有著大量的克隆。導致克隆的原因是多種多樣的,可能是因為優(yōu)化運行效率的目的,可能是對某一編程風格的偏愛,或者僅僅是難于被合并的代碼片段[5,6]。隨著計算機程序設(shè)計語言的不斷進化,越來越多的語言特性被開發(fā)出來,并將對消除代碼克隆有所幫助。但是,人們不能夠僅僅依靠某些語言特性來消除代碼克隆。仔細地設(shè)計和實現(xiàn),有效的管理,永遠是必須和最有效的消除克隆的方法。

        [1]Bulychev Peter,M inea Marius.Duplicate code detection using antiunification:In Proceedings of Spring Young Researchers Colloquium on Software Engineering[C].2008:4- 12.

        [2]M Kim,L Bergman,T.Lau,et al.An ethnographic study of copy and paste programm ing practices in OOPL.In Empirical Software Engineering,2004:ISESE’04.Proceedings.International Symposium on[C].2004:83- 92.

        [3]G V Rossum,F L Drake.Python language reference[M].Network Theory Ltd,2003.

        [4]C Kapser,M W Godfrey.“cloning considered harm ful”consideredharm ful:In Reverse Engineering,2006.WCRE’06.13th W orking Conference[C].2006:19- 28.

        [5]D C Rajapakse,S Jarzabek.Using server pages to unify clones in webapplications:A trade- off analysis:In Proceedings of the 29th internationalconference on Software Engineering[C].2007:116- 126.

        [6]M Kim,V Sazawal,D.Notkin,et al.An empirical study of code clone genealogies:In Proceedings of the 10th European Software Engineering Conference[C].2005:187- 196.

        猜你喜歡
        檢測工具編程語言源代碼
        人工智能下復雜軟件源代碼缺陷精準校正
        計算機仿真(2023年8期)2023-09-20 11:23:42
        壓力-體積轉(zhuǎn)換在CFC編程語言中的實現(xiàn)解析
        基于TXL的源代碼插樁技術(shù)研究
        Java編程語言的特點與應(yīng)用
        軟件源代碼非公知性司法鑒定方法探析
        淺談不同編程語言對計算機軟件開發(fā)的影響
        電子制作(2018年1期)2018-04-04 01:48:36
        高溫封隔器膠筒試驗檢測工具的研究
        化工管理(2017年16期)2017-06-23 13:49:36
        德國Rosen公司發(fā)布新型漏磁檢測工具
        揭秘龍湖產(chǎn)品“源代碼”
        面向?qū)ο骔eb開發(fā)編程語言的的評估方法
        国产精品黄色片在线看| 国产av一区二区凹凸精品| 亚洲综合有码中文字幕| 国产亚洲av另类一区二区三区| 国产精品久久久久久久妇| 国产婷婷丁香久久综合| 国产精品久久中文字幕亚洲| 白白发在线视频免费观看2| 免费操逼视频| 亚洲一区二区在线| 极品少妇一区二区三区四区| 亚洲视频网站大全免费看| 亚洲一区二区三区无码国产 | 国产一区二区精品久久凹凸| 91羞射短视频在线观看| 亚洲精品一区久久久久一品av| 性欧美暴力猛交69hd| 韩国主播av福利一区二区| 美女视频黄a视频全免费网站色 | 亚洲国产高清一区av| 国产日韩精品suv| 九九视频在线观看视频6| 亚洲无码毛片免费视频在线观看| 一区二区三区av在线| 亚洲一区二区三区av无码| 正在播放国产多p交换视频| 一区二区三区精品偷拍| 韩国av一区二区三区不卡| 无遮挡又黄又刺激又爽的视频| 男女视频在线一区二区| 国产性色av一区二区| 欧美人做人爱a全程免费| 亚洲综合伊人制服丝袜美腿| 亚洲国产av中文字幕| 国产在线无码精品无码| 国产成人vr精品a视频| 国产精品成人无码a 无码| 日本一区二区不卡精品| 中文成人无字幕乱码精品区 | 日本精品一区二区高清| 丰满少妇大力进入av亚洲|