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

        ?

        基于本地代理和索引信息的代碼侵權(quán)檢測(cè)方法

        2017-07-12 21:10:19寨亮張剛趙逢禹
        軟件導(dǎo)刊 2017年6期

        寨亮+張剛+趙逢禹

        摘要:開(kāi)源軟件越來(lái)越豐富,企業(yè)開(kāi)發(fā)人員可以方便地通過(guò)復(fù)用開(kāi)源代碼提高開(kāi)發(fā)效率。但是開(kāi)源代碼的許可證非常復(fù)雜,未加管理的代碼復(fù)用可能給企業(yè)帶來(lái)嚴(yán)重的法律風(fēng)險(xiǎn)。通過(guò)侵權(quán)檢測(cè)發(fā)現(xiàn)潛在侵權(quán)風(fēng)險(xiǎn)是企業(yè)自我保護(hù)的重要手段,然而一般企業(yè)都沒(méi)有能力維護(hù)互聯(lián)網(wǎng)級(jí)別的開(kāi)源代碼庫(kù),而使用第三方檢測(cè)系統(tǒng)需要提供企業(yè)自己的源碼,可能造成企業(yè)技術(shù)秘密泄露。為解決上述問(wèn)題,提出了一種基于本地代理的代碼侵權(quán)檢測(cè)方案,該方案僅需要對(duì)外提交代碼的結(jié)構(gòu)和索引信息即可,無(wú)需提供完整的源碼,既保護(hù)了企業(yè)源碼隱私,又避免了企業(yè)維護(hù)大量開(kāi)源代碼庫(kù)的額外負(fù)擔(dān),實(shí)現(xiàn)了高效的侵權(quán)檢測(cè)。

        關(guān)鍵詞:侵權(quán)檢測(cè);哈希值;索引;代碼抄襲;克隆檢測(cè);本地代理

        DOIDOI:10.11907/rjdk.171685

        中圖分類號(hào):TP306

        文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-7800(2017)006-0005-06

        0 引言

        軟件開(kāi)發(fā)人員在進(jìn)行軟件編碼時(shí),往往會(huì)參考他人的代碼,特別是通過(guò)網(wǎng)絡(luò)獲取大量代碼。大量開(kāi)源代碼為這種開(kāi)發(fā)模式帶來(lái)了很大的便利,但是由于開(kāi)源代碼采用的許可證種類多樣,每種許可證的約束都不相同,盲目復(fù)用軟件很可能給企業(yè)帶來(lái)嚴(yán)重的法律風(fēng)險(xiǎn)。Oracle和谷歌曠日持久的侵權(quán)官司就是一例。Oracle在2012年起訴谷歌,控告谷歌的軟件代碼侵權(quán),包括了多項(xiàng)指控,其中包括9行代碼重復(fù)。該官司前后打了4年,直到2016年才塵埃落定。雖然最終Oracle敗訴,但由于代碼抄襲帶來(lái)的法律風(fēng)險(xiǎn)仍然給企業(yè)造成了巨大損失[1]。

        開(kāi)源軟件的許可證包括MIT許可證、Apache許可證、GPL許可證、LGPL許可證等[2]。不同的許可證信息賦予代碼使用者不同權(quán)利。例如GPL許可證就具備典型的傳染性質(zhì)。GPL允許開(kāi)發(fā)者對(duì)開(kāi)源代碼自由使用和修改,但是,基于GPL許可證的代碼修改和新開(kāi)發(fā)的代碼必須遵循GPL許可證,對(duì)代碼公開(kāi),不允許將修改、衍生的代碼作為閉源的商業(yè)軟件發(fā)布和銷售。

        由于企業(yè)軟件開(kāi)發(fā)人員數(shù)量多,代碼量大,而開(kāi)源軟件的數(shù)量更是數(shù)不勝數(shù),對(duì)各種許可證及侵權(quán)風(fēng)險(xiǎn)進(jìn)行手工檢查幾乎不可能。因此,為了幫助企業(yè)規(guī)避潛在的法律風(fēng)險(xiǎn),就需要一個(gè)可以檢測(cè)并報(bào)告潛在軟件侵權(quán)風(fēng)險(xiǎn)的方法和系統(tǒng)。

        在軟件抄襲檢測(cè)方面,已經(jīng)研究和開(kāi)發(fā)了較多的方法和系統(tǒng)[3],較常用的檢測(cè)系統(tǒng)包括JPlag[4]、MOSS[5]、YAP3[6]、GPLAG[8]等。一般來(lái)說(shuō),抄襲檢測(cè)需要將檢測(cè)的代碼完整提供給軟件抄襲檢測(cè)系統(tǒng),如果企業(yè)使用第三方檢測(cè)服務(wù),就意味著企業(yè)需將待檢測(cè)的軟件源碼上傳給第三方,這給企業(yè)源碼安全構(gòu)成一定風(fēng)險(xiǎn),并有可能造成企業(yè)技術(shù)秘密、甚至業(yè)務(wù)秘密泄露。如果不使用第三方服務(wù),企業(yè)就需要自己構(gòu)建和維護(hù)一套完整的抄襲檢測(cè)系統(tǒng)。為了有效檢測(cè),該系統(tǒng)需要擁有互聯(lián)網(wǎng)上所有帶有許可證的開(kāi)源代碼,這對(duì)一般企業(yè)來(lái)說(shuō)負(fù)擔(dān)巨大,甚至是不可完成的任務(wù)。因此,一種既可以保護(hù)企業(yè)源碼安全又能高效快速進(jìn)行軟件侵權(quán)檢測(cè)的方法對(duì)企業(yè)具有重要的現(xiàn)實(shí)意義。

        為了解決上述問(wèn)題,本文提出了一種基于本地代理和代碼塊哈希索引的代碼侵權(quán)檢測(cè)方案,該方案能很好地保護(hù)企業(yè)源碼隱私,避免企業(yè)維護(hù)大量開(kāi)源代碼庫(kù)的額外負(fù)擔(dān)。

        本文方法主要優(yōu)點(diǎn):①通過(guò)本地代理,僅需要上傳代碼塊的哈希索引特征和結(jié)構(gòu)特征,無(wú)需企業(yè)提供原始代碼,能夠很好地保護(hù)企業(yè)技術(shù)秘密;②基于代碼塊的哈希索引和結(jié)構(gòu)信息對(duì)于侵權(quán)檢測(cè)仍然是信息完備的,不影響檢測(cè)效果,而且這種形式較源碼而言占用內(nèi)存空間更少,傳輸速度更快,檢索速度也更快;③特征定義清晰,檢測(cè)規(guī)則可以靈活調(diào)整和持續(xù)改進(jìn);④檢測(cè)時(shí)比對(duì)項(xiàng)目眾多,能夠基于整個(gè)互聯(lián)網(wǎng)的項(xiàng)目進(jìn)行檢測(cè),并且能夠基于統(tǒng)計(jì)信息自動(dòng)降低誤報(bào)率,檢測(cè)結(jié)果更加準(zhǔn)確。

        1 相關(guān)工作

        現(xiàn)有程序代碼抄襲檢測(cè)方法主要包括兩類:基于屬性統(tǒng)計(jì)的檢測(cè)技術(shù)和基于結(jié)構(gòu)度量的檢測(cè)技術(shù)。

        屬性統(tǒng)計(jì)技術(shù)只對(duì)程序的屬性進(jìn)行統(tǒng)計(jì)處理,不考慮程序的內(nèi)部結(jié)構(gòu)。文獻(xiàn)[11]最早把屬性統(tǒng)計(jì)技術(shù)用于程序代碼抄襲檢測(cè)。Halstead統(tǒng)計(jì)了4個(gè)屬性,即N1為運(yùn)算符出現(xiàn)的次數(shù),N2為運(yùn)算數(shù)出現(xiàn)的次數(shù),n1為不同運(yùn)算符的數(shù)量,n2為不同運(yùn)算數(shù)的數(shù)量,則源程序被轉(zhuǎn)化為一個(gè)四元組(n1,n2,N1,N2),當(dāng)兩個(gè)源程序的四元組相同時(shí)將其判定為抄襲。不同學(xué)者[12-14]引入了許多度量指標(biāo),但這些嘗試都收效甚微。由于屬性統(tǒng)計(jì)技術(shù)是對(duì)整個(gè)程序進(jìn)行度量,忽略了大部分結(jié)構(gòu)信息,僅增加度量指標(biāo)對(duì)程序的檢測(cè)結(jié)果沒(méi)有實(shí)質(zhì)性提升。該方法對(duì)直接復(fù)制粘貼的代碼抄襲檢測(cè)效果較好,當(dāng)對(duì)源程序進(jìn)行結(jié)構(gòu)修改或增加刪除代碼段時(shí)效果卻不理想,存在很多漏報(bào)。

        結(jié)構(gòu)度量技術(shù)是根據(jù)程序的內(nèi)部結(jié)構(gòu)信息來(lái)判斷兩個(gè)程序之間是否相似。結(jié)構(gòu)度量技術(shù)是代碼克隆檢測(cè)方法[9]的一個(gè)子集,包括基于文本的方法、基于Token的方法、基于抽象語(yǔ)法樹(AST)的方法、基于程序依賴圖(PDG)的方法等。

        基于文本的抄襲檢測(cè)方法從源代碼的文本結(jié)構(gòu)入手來(lái)檢測(cè)程序的相似度,其中的代表性工具如Dup[15],是以源代碼的每一行作為比較單元,通過(guò)構(gòu)建后綴樹來(lái)計(jì)算代碼的相似度。而文獻(xiàn)[10]利用滑窗來(lái)分割代碼行,配合基于索引的方式提出了一種較為高效的檢測(cè)方法?;谖谋镜姆椒ㄝ^少反映程序的語(yǔ)法語(yǔ)義信息,檢測(cè)精確度較低。

        基于Token的檢測(cè)是將源碼轉(zhuǎn)換為Token序列的形式。在克隆檢測(cè)領(lǐng)域比較典型的是文獻(xiàn)[7]的CCFinder。在抄襲檢測(cè)領(lǐng)域,JPlag、YAP3都是這種類型的抄襲檢測(cè)系統(tǒng)。它們首先將源代碼轉(zhuǎn)換成Token序列,然后使用RKR-GST算法來(lái)計(jì)算代碼相似度?;赥oken的方法忽略了程序的語(yǔ)法語(yǔ)義信息,僅對(duì)詞法級(jí)別的代碼抄襲檢測(cè)效果良好。

        基于程序依賴圖的檢測(cè)方法通過(guò)分析源代碼的語(yǔ)法結(jié)構(gòu)、函數(shù)的調(diào)用關(guān)系等,構(gòu)建程序的依賴關(guān)系圖,通過(guò)子圖同構(gòu)來(lái)判斷代碼的相似度。如GPLAG系統(tǒng)使用子圖相似方法來(lái)計(jì)算源碼的相似度?;赑DG的方法雖然準(zhǔn)確,但由于計(jì)算量大,無(wú)法應(yīng)用于大規(guī)模場(chǎng)景。

        基于抽象語(yǔ)法樹的抄襲檢測(cè)方法將源碼轉(zhuǎn)換為抽象語(yǔ)法樹,通過(guò)尋找相似子樹計(jì)算相似。如文獻(xiàn)[16]直接在抽象語(yǔ)法樹上尋找相似子樹來(lái)計(jì)算語(yǔ)法樹的相似度。在克隆檢測(cè)領(lǐng)域,文獻(xiàn)[17]開(kāi)發(fā)了工具DECKARD,通過(guò)聚類將相似子樹來(lái)檢測(cè)克隆代碼。基于AST的方法建立樹結(jié)構(gòu)的代價(jià)較高,較難應(yīng)用在大型軟件的檢測(cè)場(chǎng)景。

        本文提出的基于抽象語(yǔ)法樹和索引信息的代碼檢測(cè)方法,通過(guò)抽象語(yǔ)法樹生成的代碼塊結(jié)構(gòu)信息和基于代碼塊的哈希索引,較完備地保存了源碼信息,不影響檢測(cè)效果,而且這種形式較源碼而言占用內(nèi)存空間少,傳輸速度更快,檢索速度也更快。該方法能夠基于整個(gè)互聯(lián)網(wǎng)的項(xiàng)目進(jìn)行檢測(cè),并且能夠基于統(tǒng)計(jì)信息自動(dòng)降低誤報(bào)率,檢測(cè)結(jié)果更加準(zhǔn)確。

        2 方法概述

        本文方法包括本地客戶端和服務(wù)器端兩部分。服務(wù)器端負(fù)責(zé)構(gòu)建互聯(lián)網(wǎng)級(jí)別的開(kāi)源代碼庫(kù)信息,接收來(lái)自客戶端的檢測(cè)請(qǐng)求和代碼特征信息,進(jìn)行代碼侵權(quán)檢測(cè)計(jì)算;本地客戶端則負(fù)責(zé)提取待檢測(cè)代碼的特征信息,包括代碼塊結(jié)構(gòu)信息和哈希索引信息,上報(bào)信息到服務(wù)器端,并對(duì)服務(wù)器端下發(fā)的重復(fù)信息進(jìn)行本地化解讀。方法結(jié)構(gòu)如圖1所示。

        2.1 代碼特征提取

        代碼特征提取是服務(wù)器端和本地客戶端的公用模塊,負(fù)責(zé)提取代碼結(jié)構(gòu)和哈希索引特征,包含兩個(gè)子單元:代碼結(jié)構(gòu)解析和索引信息生成。

        (1)代碼結(jié)構(gòu)解析。通過(guò)抽象語(yǔ)法樹將程序源代碼解析為代碼塊結(jié)構(gòu),然后將代碼塊作為后續(xù)分析檢測(cè)的基本單元。定義解析后的源碼結(jié)構(gòu)為一個(gè)五元組(fileID,segmentID,parentSegmentID,segmentInfo,hashIndex)。其中fileId和segmentID分別為數(shù)字形式文件和代碼塊唯一標(biāo)識(shí)。通過(guò)fileID和segmentID可以唯一識(shí)別一個(gè)代碼塊,同時(shí)又隱藏了代碼的細(xì)節(jié)信息。parentSegmentID為代碼塊父節(jié)點(diǎn)的ID,用于找出segmentID的父節(jié)點(diǎn),segmentInfo為代碼塊中的其它信息,包括startLine、endLine、textLength、sequence、startCol等,startLine為代碼塊在文件中的起始行,endLine為代碼塊在文件中的終止行,textLength為代碼塊的文本長(zhǎng)度信息,startCol為代碼塊的起始列,sequence為同一文件中不同代碼塊出現(xiàn)的次序等。圖2是抽象語(yǔ)法樹的代碼塊結(jié)構(gòu)示例。如代碼塊N4(122,3,2…)中,122為代碼塊的fileID,3為代碼塊的segmentID,2為代碼塊的parentSegmentID。

        (2)代碼索引生成。在代碼結(jié)構(gòu)解析的基礎(chǔ)上,對(duì)每個(gè)代碼塊生成索引,通過(guò)索引來(lái)唯一表示一個(gè)代碼塊的特征。代碼索引生成包括歸一化和哈希值計(jì)算兩個(gè)步驟。歸一化是代碼重復(fù)檢測(cè)的常用策略,通過(guò)移除空格、用一致的符號(hào)替換變量名和數(shù)字等,消除由于代碼格式、變量名等因素不同對(duì)檢測(cè)效果的影響。在歸一化的代碼上使用MD5哈希算法,為每個(gè)結(jié)點(diǎn)生成一個(gè)128位的哈希值[18]。最后,將獲得的哈希索引寫入代碼塊信息的hashIndex。

        2.2 本地映射表構(gòu)建

        本地映射表維護(hù)上傳到服務(wù)器端的代碼塊和本地可閱讀代碼的對(duì)應(yīng)關(guān)系。當(dāng)服務(wù)器端傳回以索引信息表達(dá)的重復(fù)信息時(shí),可在本地解析為可讀的代碼形式。圖3展示了本地映射表的結(jié)構(gòu)。其中,每一行代表一個(gè)代碼塊,使用該代碼塊的fileID和segmentID為索引。parentSegmentID和segmentInfo反映了和原代碼的對(duì)應(yīng)信息,hashIndex則代表了該代碼塊的哈希索引特征信息(見(jiàn)表1)。

        2.3 構(gòu)建全局特征信息表

        為了能和待檢測(cè)的代碼進(jìn)行特征匹配,服務(wù)器端也需要維護(hù)全局特征信息表。服務(wù)端將項(xiàng)目源代碼轉(zhuǎn)化為一張全局索引表。全局特征信息表除了維護(hù)所有代碼塊的結(jié)構(gòu)特征和索引特征外,還需要維護(hù)項(xiàng)目信息、項(xiàng)目許可證信息。

        2.4 上傳代碼塊信息

        將代碼塊信息上傳至服務(wù)器,用于代碼重復(fù)檢測(cè)。上傳前將代碼塊信息中的原始信息去除,如segmentInfo中的起始列、終止列、代碼塊出現(xiàn)順序等信息。保留起始行、終止行、代碼塊長(zhǎng)度信息、版本信息,然后將代碼塊信息上傳至服務(wù)器。服務(wù)器端接收本地代理傳來(lái)的代碼塊信息,并使用侵權(quán)檢測(cè)引擎進(jìn)行檢測(cè)。

        2.5 侵權(quán)檢測(cè)引擎

        服務(wù)器端基于本地代理上傳的代碼塊結(jié)構(gòu)信息判斷代碼塊的重復(fù)性以及是否侵權(quán)。如果發(fā)現(xiàn)侵權(quán),就將侵權(quán)的重復(fù)信息發(fā)送給本地代理,由本地代理進(jìn)行解析。

        為此,將上傳的代碼塊信息對(duì)照全局索引表,并按照重復(fù)檢測(cè)規(guī)則進(jìn)行檢測(cè),下面給出幾個(gè)參考規(guī)則。

        規(guī)則一:簡(jiǎn)單索引重復(fù)

        簡(jiǎn)單索引重復(fù)即將索引表中的索引同全局索引表中的索引進(jìn)行匹配,若索引值相同并且代碼行數(shù)大于5行則視為一個(gè)重復(fù)。

        其中,S為服務(wù)器端接收到的索引表,表中含有起始行startLine,中止行endLine,索引值hash,由規(guī)則三檢測(cè)到的索引值將存入索引表S2中。

        根據(jù)重復(fù)檢測(cè)規(guī)則找到重復(fù)片段后,對(duì)重復(fù)片段所在文件的許可證信息進(jìn)行檢測(cè),若重復(fù)代碼所在項(xiàng)目的許可證信息允許用戶進(jìn)行修改再發(fā)布,則視為不侵權(quán),反之則視為侵權(quán)。比如GPL許可證信息中不允許其衍生代碼進(jìn)行非開(kāi)源的商業(yè)用途,若直接復(fù)用其項(xiàng)目代碼則引起侵權(quán)。

        2.6 下發(fā)侵權(quán)檢測(cè)報(bào)告

        服務(wù)器將檢測(cè)到的代碼塊重復(fù)序列傳回本地代理。本地代理對(duì)接收到的侵權(quán)檢測(cè)報(bào)告進(jìn)行解析,按照代碼塊ID還原成本地代碼進(jìn)行展示。

        3 系統(tǒng)實(shí)現(xiàn)

        侵權(quán)檢測(cè)系統(tǒng)本地端主要負(fù)責(zé)提取軟件代碼的索引特征,上報(bào)到服務(wù)器以及對(duì)服務(wù)器下發(fā)的重復(fù)信息進(jìn)行本地化解讀。服務(wù)器端主要負(fù)責(zé)重復(fù)檢測(cè),如圖3所示。

        項(xiàng)目解析器同時(shí)作用于本地和服務(wù)器端,本地為項(xiàng)目代理,服務(wù)器端為項(xiàng)目解析器,主要功能都是將源碼經(jīng)過(guò)語(yǔ)法樹、索引生成一張索引表。本文使用Eclipse的JDT內(nèi)建的代碼解析器生成抽象語(yǔ)法樹,采用MD5哈希算法來(lái)生成索引。本地項(xiàng)目代理在接收到服務(wù)器端傳來(lái)的重復(fù)時(shí),將其轉(zhuǎn)換為可閱讀的代碼形式。

        爬蟲主要收集網(wǎng)上的項(xiàng)目資源,這里以GitHub項(xiàng)目托管平臺(tái)上的JAVA項(xiàng)目為抓取目標(biāo)。GitHub作為目前規(guī)模最大的開(kāi)源軟件托管平臺(tái),提供了較友好的API,可以方便獲取項(xiàng)目源碼。

        項(xiàng)目數(shù)據(jù)庫(kù)主要在服務(wù)器端存儲(chǔ)抓取的代碼。由于開(kāi)源項(xiàng)目眾多,即使轉(zhuǎn)換成索引形式仍然占用很大空間,內(nèi)存不足以存儲(chǔ),此時(shí)對(duì)項(xiàng)目進(jìn)行持久化,將其存儲(chǔ)在數(shù)據(jù)庫(kù)中。

        重復(fù)匹配模塊主要對(duì)本地項(xiàng)目代理傳輸?shù)拇a塊索引信息與服務(wù)器端的全局索引表進(jìn)行重復(fù)匹配,利用重復(fù)匹配方法確定是否重復(fù)。

        4 實(shí)驗(yàn)及結(jié)果

        為了驗(yàn)證文中提出的軟件侵權(quán)檢測(cè)方案,選取一個(gè)健康方面的商業(yè)軟件(本文中代號(hào)為INCH)作為實(shí)驗(yàn)對(duì)象,在其中注入抄襲信息。選擇GitHub的50個(gè)開(kāi)源JAVA項(xiàng)目進(jìn)行侵權(quán)檢測(cè)。50個(gè)開(kāi)源項(xiàng)目的版本信息分為MIT許可證、Apache許可證、GPL許可證3種。本文實(shí)驗(yàn)環(huán)境為:操作系統(tǒng)Win10 64位,CPU Intel Core i5-7300HQ,內(nèi)存8G。

        本實(shí)驗(yàn)分別對(duì)不同重復(fù)規(guī)則下的侵權(quán)方法進(jìn)行驗(yàn)證。由于INCH項(xiàng)目為企業(yè)開(kāi)發(fā)人員獨(dú)立完成的程序,INCH中并不含有侵權(quán)代碼,為了對(duì)侵權(quán)算法進(jìn)行驗(yàn)證,將一段侵權(quán)代碼人為注入INCH項(xiàng)目進(jìn)行檢測(cè)。

        實(shí)驗(yàn)步驟:

        (1)選取許可證為GPL的項(xiàng)目CoreNLP,將CoreNLP項(xiàng)目文件中的一段源碼復(fù)制到INCH項(xiàng)目文件中,作為侵權(quán)代碼來(lái)源。

        (2)構(gòu)建開(kāi)源項(xiàng)目代碼庫(kù)。啟動(dòng)服務(wù)器,并抓取前述的開(kāi)源項(xiàng)目代碼庫(kù)信息緩存到本地,然后對(duì)項(xiàng)目進(jìn)行解析,解析后的代碼塊存入全局索引表。

        (3)選取重復(fù)檢測(cè)規(guī)則,分別選用規(guī)則一、規(guī)則二、規(guī)則三,然后啟動(dòng)檢測(cè)客戶端對(duì)項(xiàng)目進(jìn)行檢驗(yàn)。

        實(shí)驗(yàn)一:驗(yàn)證簡(jiǎn)單侵權(quán)規(guī)則的檢測(cè)能力(規(guī)則一)

        選取50個(gè)開(kāi)源項(xiàng)目中含有GPL許可證的CoreNLP項(xiàng)目,將ArgUtils.Java中的getWeightedTreebankDescription()方法(get()方法)復(fù)制到INCH的LoginDTO.java文件中。根據(jù)文獻(xiàn)[19]提出的代碼抄襲手段,分別對(duì)get()方法進(jìn)行代碼混淆操作,如原樣復(fù)制、修改注釋信息、標(biāo)識(shí)符名稱替換、替換數(shù)據(jù)類型、添加無(wú)意義的代碼等。選取規(guī)則一進(jìn)行侵權(quán)檢測(cè),實(shí)驗(yàn)結(jié)果見(jiàn)表2,運(yùn)用規(guī)則一的侵權(quán)檢測(cè)方法僅需要6秒即可檢測(cè)出所有注入的侵權(quán)代碼。標(biāo)識(shí)符名稱替換后的實(shí)驗(yàn)檢測(cè)報(bào)告如圖4所示。

        實(shí)驗(yàn)二:驗(yàn)證基于統(tǒng)計(jì)特征的重復(fù)項(xiàng)檢測(cè)能力(規(guī)則二)

        選取CoreNLP項(xiàng)目,將ArgUtils.Java中的get()方法分別進(jìn)行try..catch語(yǔ)句塊移除,調(diào)整if語(yǔ)句出現(xiàn)順序,分別命名為get()1方法、get()2方法,然后將get()1、get()2復(fù)制到INCH項(xiàng)目中。選取規(guī)則二進(jìn)行檢測(cè),實(shí)驗(yàn)結(jié)果如表3。其中try..catch語(yǔ)句塊移除后的實(shí)驗(yàn)檢測(cè)報(bào)告見(jiàn)圖5。

        實(shí)驗(yàn)三:驗(yàn)證基于統(tǒng)計(jì)特征的非侵權(quán)特征(規(guī)則三)

        上述實(shí)驗(yàn)中有些代碼塊如try..catch語(yǔ)句塊在項(xiàng)目中經(jīng)常使用,一般不應(yīng)識(shí)別為侵權(quán)。在此選取junit4項(xiàng)目TimeoutTest.java文件中的try {Thread.sleep(200);} catch (InterruptedException e) {}代碼塊復(fù)制到其余49個(gè)項(xiàng)目中,利用規(guī)則三進(jìn)行檢測(cè)。由于項(xiàng)目庫(kù)僅有50個(gè)項(xiàng)目,因此把規(guī)則三中重復(fù)項(xiàng)特征統(tǒng)計(jì)的臨界值改為30。實(shí)驗(yàn)結(jié)果表明運(yùn)用規(guī)則三的檢測(cè)方法僅需6.2秒即可完成任務(wù),未發(fā)現(xiàn)侵權(quán)代碼。

        實(shí)驗(yàn)四:同JPlag系統(tǒng)對(duì)比

        選取INCH項(xiàng)目為待檢測(cè)項(xiàng)目,CoreNLP項(xiàng)目為對(duì)比項(xiàng)目。分別選取規(guī)則一中的標(biāo)識(shí)符替換,原樣復(fù)制規(guī)則二中的移除語(yǔ)句塊的3種抄襲手段,對(duì)ArgUtils.Java中的get()方法進(jìn)行變換。利用本文提出的檢測(cè)方法同JPlag檢測(cè)系統(tǒng)進(jìn)行對(duì)比。由于JPlag系統(tǒng)的檢測(cè)結(jié)果為代碼相似度數(shù)值,所以用時(shí)間的度量進(jìn)行對(duì)比,實(shí)驗(yàn)結(jié)果如表4所示。

        根據(jù)實(shí)驗(yàn)一數(shù)據(jù)可以看出,利用原樣復(fù)制、修改注釋信息、標(biāo)識(shí)符名稱替換、替換數(shù)據(jù)類型、添加無(wú)意義的代碼這些方式進(jìn)行代碼抄襲,本文檢測(cè)方法均能正確檢測(cè),并且檢測(cè)時(shí)間在6s左右。實(shí)驗(yàn)二在移除get()方法中的try..catch語(yǔ)句或調(diào)整if語(yǔ)句順序后,檢測(cè)到的重復(fù)符合規(guī)則二提出的區(qū)域分布。實(shí)驗(yàn)三未找出侵權(quán)片段,是由于按照規(guī)則三,同一段代碼出現(xiàn)在較多的項(xiàng)目中則認(rèn)為是正常復(fù)用,在這50個(gè)項(xiàng)目中可以很好地消除誤報(bào)。實(shí)驗(yàn)四中JPlag系統(tǒng)的檢測(cè)時(shí)間為6.8s,本文方法為5.2s,在時(shí)間上優(yōu)于JPlag系統(tǒng)。由實(shí)驗(yàn)一實(shí)驗(yàn)二的檢測(cè)報(bào)告可以看出,返回的侵權(quán)代碼以代碼塊形式顯示,用戶可以根據(jù)本地映射表找到侵權(quán)代碼,保護(hù)了用戶隱私。

        5 結(jié)語(yǔ)

        本文提出了一種基于本地代理和索引信息的代碼侵權(quán)檢測(cè)方案,實(shí)現(xiàn)了高效的侵權(quán)檢測(cè),具備良好的可定制性。該方法可較好地保護(hù)企業(yè)源碼安全,檢測(cè)時(shí)間較快,達(dá)到了預(yù)期效果。但該侵權(quán)檢測(cè)系統(tǒng)目前僅實(shí)現(xiàn)了對(duì)JAVA語(yǔ)言代碼的侵權(quán)檢測(cè),后續(xù)仍需要對(duì)其它編程語(yǔ)言如C/C++、Python語(yǔ)言等進(jìn)行完善。此外,本實(shí)驗(yàn)測(cè)試數(shù)據(jù)集規(guī)模較小,下一步將擴(kuò)大規(guī)模,進(jìn)一步驗(yàn)證侵權(quán)檢測(cè)系統(tǒng)的有效性。

        參考文獻(xiàn):

        [1] JAMES NICCOLAI.Oracle seeks $9.3 billion for Google′s use of Java in Android[EB/OL].[2016-05-28].http://www.infoworld.com/article/3048726/android/oracle-seeks-93-billion-for-googles-use-of-java-in-android.html?utm_source=tuicool&utm_medium=referral.

        [2] FREE SOFTWARE FOUNDATION.Various licenses and comments about them,2017[EB/OL].https://www.gnu.org/licenses/license-list.html.

        [3] 田振洲,劉烴,鄭慶華,等.軟件抄襲檢測(cè)研究綜述[J].信息安全學(xué)報(bào),2016,1(3):158-161.

        [4] PRECHELT L,MALPOHL G.Finding plagiarisms among a set of programs with JPlag[EB/OL].https://www.researchgate.net/publication/2832828_Finding_Plagiarisms_among_a_Set_of_Programs_with_JPlag.

        [5] WISE M J.YAP3:improved detection of similarities in computer program and other texts[J].Acm Sigcse Bulletin,1996,28(1):130-134.

        [6] LIVIERI S,HIGO Y,MATUSHITA M,et al.Very-large scale code clone analysis and visualization of open source programs using distributed CCFinder: D-CCFinder[C].International Conference on Software Engineering.IEEE,2007:106-115.

        [7] LIU C,CHEN C,HAN J,et al.GPLAG: detection of software plagiarism by program dependence graph analysis[C].ACM SIGKDD International Conference on Knowledge Discovery and Data Mining.ACM,2006:872--881.

        [8] 史慶慶,孟繁軍,張麗萍,等.克隆代碼技術(shù)研究綜述[J].計(jì)算機(jī)應(yīng)用研究,2013,30(6):1617-1623.

        [9] HUMMEL B,JUERGENS E,HEINEMANN L,et al.Index-based code clone detection: incremental,distributed,scalable[C].IEEE International Conference on Software Maintenance.IEEE Computer Society,2010:1-9.

        [10] HALSTEAD M H.Elements of software science[M].Elsevierence,1977.

        [11] OTTENSTEIN K J.An algorithmic approach to the detection and prevention of plagiarism[J].Acm Sigcse Bulletin,1976,8(4):30-41.

        [12] GRIER S.A tool that detects plagiarism in pascal programs[J].ACM SIGCSE Bulletin,1981,13(1):15-20.

        [13] VERCO K L,WISE M J.Software for detecting suspected plagiarism: comparing structure and attribute-counting systems[C].Australasian Conference on Computer Science Education.ACM,1996:81-88.

        [14] BAKER B S.A program for identifying duplicated code[M].Computing Science & Statistics,1992.

        [15] KIM Y C,CHO Y Y,MOON J B.A plagiarism detection system using a syntax-tree.[C].International Conference on Computational Intelligence,ICCI 2004.

        [16] JIANG L,MISHERGHI G,SU Z,et al.DECKARD:scalable and accurate tree-based detection of code clones[C].International Conference on Software Engineering.IEEE,2007:96-105.

        [17] RIVEST R.The MD5 message-digest algorithm[M].RFC Editor,1992.

        [18] JONES E L.Metrics based plagiarism monitoring[C].Ccsc Northeastern Conference,2001:1-8.

        (責(zé)任編輯:杜能鋼)

        英文摘要Abstract:With the growing of open source software,enterprise developers tends to reuse existing open source code to improve development efficiency.But the complexity and variety of open source licenses may bring serious legal risks to enterprises.As a result,the immediate infringement detection is important to help enterprises to avoid such risks.However,general enterprises are unable to maintain the Internet-level open source code library,and needs to provide their own source code when using the third-party detection system which may cause the disclosure of enterprises technological secrets.In order to solve those problems,our paper proposes a local proxy code infringement detection approach.It only require enterprises providing the code structure and index information,without necessary of all of its source code.Our approach can protect enterprise source privacy and achieve efficient infringement detection.

        英文關(guān)鍵詞Key Words:Infringement Detection;Hash;Index;Code Plagiarism;Clone Detection;Local Proxy

        亚洲av熟女中文字幕| 国产精品麻花传媒二三区别| 国产成人综合久久久久久| 曰本亚洲欧洲色a在线| 精品国产av一区二区三四区| 亚洲av日韩一区二区| aⅴ精品无码无卡在线观看| 中文字幕熟妇人妻在线视频| 久久久久成人精品免费播放网站| 少妇又紧又色又爽又刺| 少妇被黑人嗷嗷大叫视频| 亚洲av网一区二区三区| 国产内射999视频一区| 久久婷婷国产精品香蕉| 亚洲一区二区三区视频免费| 97成人精品视频在线| 久久久亚洲av成人网站| 亚洲色偷偷综合亚洲av伊人| 国产精品天干天干在线观蜜臀| 女主播啪啪大秀免费观看| 男人吃奶摸下挵进去啪啪软件| 色综合视频一区中文字幕| 国产免费一级在线观看| 精品视频一区二区杨幂| 久久精品久99精品免费| 欧美丰满熟妇性xxxx| 精品久久亚洲中文无码| 国产网友自拍亚洲av| 人妻经典中文字幕av| 男女猛烈拍拍拍无挡视频| 午夜不卡久久精品无码免费| 无码91 亚洲| 精品高清一区二区三区人妖| 人人妻人人做人人爽| 韩国19禁无遮挡啪啪无码网站| 免费大学生国产在线观看p| 亚洲午夜经典一区二区日韩| 婷婷综合另类小说色区| 最新亚洲精品国偷自产在线| 国内精品九九久久精品小草| 日本刺激视频一区二区|