• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      克隆代碼檢測在代碼搜索中的應(yīng)用研究

      2017-10-23 15:36黃麗韶
      無線互聯(lián)科技 2017年19期
      關(guān)鍵詞:克隆

      黃麗韶

      摘 要:文章設(shè)計(jì)和開發(fā)的代碼搜索引擎首先通過擴(kuò)展Heritrix,構(gòu)建本地代碼庫,利用ANTLR工具對(duì)本地代碼庫的Java源文件進(jìn)行解析;其次,基于程序抽象語法樹(AST)從方法級(jí)別和類級(jí)別檢測克隆代碼,對(duì)源代碼中的方法(method)或者類(class)進(jìn)行分類;再次,利用ASTParser對(duì)本地代碼庫掃描,抽取程序代碼的語法信息,并利用Lucene對(duì)含有語法信息的文件建立索引和搜索模塊。實(shí)驗(yàn)比較結(jié)果表明,實(shí)現(xiàn)的代碼搜索引擎可優(yōu)化已有的代碼搜索引擎的搜索結(jié)果,并且對(duì)于搜索時(shí)間沒有顯著的影響,從而可更有效地幫助程序員查找與復(fù)用已有代碼。

      關(guān)鍵詞:Java源;代碼搜索;ANTLR;克??;AST

      立足于軟件開發(fā)領(lǐng)域,開源軟件變得愈發(fā)生命力頑強(qiáng),這是因?yàn)榘殡S科技高速發(fā)展,程序開發(fā)人員開源的理念越發(fā)加強(qiáng),促使開源網(wǎng)站如雨后春筍般層出不窮,高質(zhì)量的開源項(xiàng)目數(shù)量不斷增長,開源網(wǎng)站訪問量激增,其中全球最大最著名的SourceForge.net開源網(wǎng)站已經(jīng)收錄了448 706個(gè)開源項(xiàng)目,并被軟件開發(fā)人員不斷搜索、學(xué)習(xí)和完善[1]。

      1 克隆代碼檢測在代碼搜索中的設(shè)計(jì)與實(shí)現(xiàn)

      1.1 需求分析

      軟件開發(fā)人員和編程愛好人員試圖搜索高質(zhì)量的示例代碼來學(xué)習(xí)其中的算法,學(xué)習(xí)應(yīng)用程序編程接口(Application Programming Interface,API)文檔的使用,加快開發(fā)效率。他們不僅想基于全文來搜索源代碼,還想根據(jù)不同目的通過包名、類名、方法名等形式來搜索。該系統(tǒng)要求為用戶提供一個(gè)友好的搜索界面和多種搜索方式,比如按照文本來搜索,按照包名、類名、方法定義和方法調(diào)用搜索。當(dāng)用戶以方法名或類名來搜索源代碼時(shí),搜索結(jié)果對(duì)克隆方法和克隆類分類顯示,并根據(jù)用戶搜尋目的給出最有代表性的摘要[2]。

      1.2 系統(tǒng)設(shè)計(jì)

      本文的源代碼搜索引擎系統(tǒng)設(shè)計(jì),分為前端用戶和后臺(tái)維護(hù)兩部分。查詢用戶主要是選擇查詢方式和輸入搜索關(guān)鍵字,后端用戶獲取數(shù)據(jù)、處理數(shù)據(jù)、維護(hù)系統(tǒng),維護(hù)人員首先通過Heritrix獲取源代碼,然后對(duì)源代碼庫中的克隆代碼進(jìn)行檢測和聚類,把克隆方法和克隆類聚成一類,再對(duì)源代碼庫中的源文件進(jìn)行語法信息的提取和保存,最后對(duì)提取出來的語法信息建立索引和搜索模塊,對(duì)搜索結(jié)果產(chǎn)生摘要和克隆代碼分類顯示。

      1.3 克隆方法的聚類分析

      通過預(yù)處理獲得聚類對(duì)象和信息表后進(jìn)行聚類分析,現(xiàn)有的聚類算法繁多,本文僅給出一種簡單直接的比較算法,效果更好的算法驗(yàn)證留給后續(xù)工作,聚類比較算法1如下所示。

      輸入:表名tableName

      輸出:void

      方法:getMethodDetectInfo ( tableName )

      1 初始化方法個(gè)數(shù)count,方法類型ID為2;

      2 for ( i←0 到 count-1 ) {

      3 for ( j←( i+1 ) 到 count ) {

      4 if ( 方法i與方法j的相似度 < 0.6 ) { //相似度小于0.6

      5 if( 方法 j已經(jīng)分配類 ) continue;

      6 else {

      7 為方法j分配一個(gè)新類型號(hào)ID;

      8 類型號(hào)ID++;

      9 }

      10 }else{ //相似度大于等于0.6

      11 if ( 方法j已經(jīng)分配類 ) {

      12 if ( 方法j的最大相似度 < i和j的相似度 ) {

      13 方法j的類型 = 方法i的類型號(hào);

      14 方法j的最大相似度 = i和j的相似度;

      15 } else {

      16 continue;

      17 }

      18 } else { //方法j和方法i聚為一類

      19 方法j的類型 = 方法i的類型號(hào);

      20 方法j的最大相似度 = i和j的相似度;

      21 }

      22 }

      23 }

      24 }

      1.4 類信息表的創(chuàng)建

      Java源文件主要由方法和類組成,基于類級(jí)別的克隆代碼檢測與基于方法的克隆檢測方法基本一致,本文使用Oracle數(shù)據(jù)庫表的形式來保存每個(gè)類的信息。我們?cè)谶M(jìn)行克隆類檢測的時(shí)候?qū)?huì)用到文件名、文件存放路徑和類名,在進(jìn)行克隆類聚類時(shí)需要用到類的所有信息,在對(duì)搜索結(jié)果進(jìn)行分類顯示時(shí)需要知道類ID號(hào)、文件名、類名和類型值。

      2 系統(tǒng)演示與實(shí)驗(yàn)比較

      本文利用Heritrix從SourceForge.net上抓取到70個(gè)工程包,共計(jì)20 423個(gè)Java源文件作為本地代碼庫,再對(duì)代碼庫中的方法和類進(jìn)行克隆檢測和聚類,并把檢測和聚類信息保存在庫表內(nèi),最后通過Lucene對(duì)含有語法信息的文件建立索引和搜索,首先展示我們實(shí)現(xiàn)的代碼搜索引擎友好的搜索界面,然后與已有相關(guān)代碼搜索引擎進(jìn)行實(shí)驗(yàn)搜索結(jié)果比較。

      2.1 系統(tǒng)實(shí)例演示

      本文主要在按方法定義和類名搜索模塊上作了優(yōu)化,所以系統(tǒng)展示代碼搜索引擎在這兩種搜索方式下的搜索結(jié)果,這一節(jié)只展示代碼搜索引擎的搜索結(jié)果,通過展示其他搜索引擎的搜索結(jié)果,并與搜索結(jié)果進(jìn)行比較。

      通常,用戶搜索源代碼的一個(gè)重要潛在目標(biāo)是想知道某個(gè)方法在功能上是怎樣實(shí)現(xiàn)的,學(xué)習(xí)其實(shí)現(xiàn)功能和算法,所以通過方法定義來搜索成為用戶搜索的重要方式,用戶在Method Definition界面輸入方法名搜索即可。

      結(jié)果分析:首先,搜索返回界面(methodImpResult.jsp)上端的搜索框,可以供用戶選擇其他方式或默認(rèn)以方法定義的方式來繼續(xù)搜索。例如,當(dāng)用戶在搜索到save方法的功能實(shí)現(xiàn)后,還想知道其方法調(diào)用情況或者某個(gè)類中的方法的實(shí)現(xiàn),則可以分別點(diǎn)擊MethodCall和Class搜索方式后輸入關(guān)鍵字。

      其次,搜索結(jié)果返回搜索到的結(jié)果文檔的數(shù)目、總頁數(shù)和搜索時(shí)間,本文設(shè)定每頁僅顯示5條結(jié)果,10條記錄將分成兩頁顯示,不妨列出搜索方法save返回首頁的第5條結(jié)果。

      再次,摘要顯示搜索結(jié)果依次展示出方法所屬文件的路徑、包名和類名信息,摘要顯示10行,由于在方法定義搜索模塊,用戶搜索的目標(biāo)傾向于查詢某個(gè)功能的實(shí)現(xiàn),通過預(yù)覽方法實(shí)現(xiàn)的功能來判定是否對(duì)該方法感興趣。所以本文在顯示摘要的時(shí)候優(yōu)先給出方法的注釋行,再考慮返回方法的實(shí)現(xiàn)代碼,同時(shí)給出該行在文件中的位置,摘要中匹配關(guān)鍵字的字符串高亮紅色標(biāo)記。

      最后,對(duì)搜索返回的方法進(jìn)行分類,若搜索返回的方法中存在幾個(gè)方法含有相同類屬性值的話,則把最靠前(得分最高)的方法作為代表顯示,其他方法作為相似代碼的超鏈接界面(simCode.jsp)顯示,有一個(gè)相似代碼,點(diǎn)擊超鏈接后得到其相似結(jié)果,其相似代碼的摘要中還給出其他相似的超鏈接,用以顯示其所有克隆方法。

      2.2 實(shí)驗(yàn)比較與分析

      目前,用Krugle來搜索,返回搜索結(jié)果中雖然給出了相似代碼分類,但是它是基于文件級(jí)別的克隆代碼檢測和分類,分類級(jí)別太大,并且基于全文搜索,沒有區(qū)分方法定義和方法調(diào)用。

      3 結(jié)語

      本文深入研究了克隆代碼檢測技術(shù)和源代碼搜索引擎的設(shè)計(jì)和實(shí)現(xiàn),在按方法定義和類名搜索方式中利用克隆代碼檢測技術(shù)加入了相似代碼分類顯示功能,并對(duì)部分摘要顯示給出改進(jìn)。通過與已有的代碼搜索引擎搜索結(jié)果進(jìn)行比較,表明本文實(shí)現(xiàn)的優(yōu)化有比較好的效果。

      [參考文獻(xiàn)]

      [1]黎宣,王千祥,金芝.基于增強(qiáng)描述的代碼搜索方法[J].軟件學(xué)報(bào),2017(6):1405-1417.

      [2]KIM J,LEE S,HWANG SW,et al. Towards an intelligent code search engine[J].Association for the Advancement of Artificial Intelligence,2010(3):1358-1363.endprint

      猜你喜歡
      克隆
      克隆狼
      浙江:誕生首批體細(xì)胞克隆豬
      桃MYB3基因的克隆及表達(dá)分析
      侏羅紀(jì)世界 當(dāng)克隆遇到恐龍
      鹽芥WBC11克隆與RNAi載體的構(gòu)建
      抗BP5-KLH多克隆抗體的制備及鑒定
      鯉TYK2基因的克隆鑒定及組織表達(dá)分析
      熱不對(duì)稱交錯(cuò)PCR 克隆bapt 基因側(cè)翼序列
      Galectin-7多克隆抗體的制備與鑒定
      氟西汀聯(lián)合佐匹克隆治療腦卒中后抑郁伴失眠33例療效觀察
      怀远县| 汕尾市| 黄石市| 长春市| 光泽县| 正镶白旗| 黑水县| 岑溪市| 广德县| 张家界市| 新巴尔虎左旗| 东城区| 宁明县| 寿阳县| 会同县| 静海县| 郴州市| 曲靖市| 乌拉特后旗| 钦州市| 拉萨市| 安龙县| 禄劝| 蓝田县| 无极县| 舞钢市| 泸州市| 庄浪县| 新和县| 三都| 四子王旗| 青川县| 日土县| 共和县| 东海县| 开原市| 左权县| 芜湖县| 郴州市| 章丘市| 汤原县|