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

        ?

        一種基于調(diào)用序列網(wǎng)絡(luò)的API推薦方法

        2018-09-26 11:30:48肖海濤王鵬包義祥何鵬
        軟件導(dǎo)刊 2018年7期
        關(guān)鍵詞:復(fù)雜網(wǎng)絡(luò)

        肖海濤 王鵬 包義祥 何鵬

        摘要:隨著計(jì)算機(jī)程序的日益復(fù)雜,代碼自動(dòng)補(bǔ)全功能需求越來(lái)越迫切。圍繞軟件編碼過(guò)程中API調(diào)用問(wèn)題進(jìn)行探究,利用代碼中API之間的調(diào)用序列,構(gòu)建API關(guān)系網(wǎng)絡(luò)模型,從服務(wù)推薦角度實(shí)現(xiàn)精準(zhǔn)的API推薦,從而提高軟件項(xiàng)目開(kāi)發(fā)效率。實(shí)驗(yàn)結(jié)果表明,基于API序列關(guān)系網(wǎng)絡(luò)模型推薦方法具有可行性,且在推薦列表長(zhǎng)度較大的情況下方法更具優(yōu)勢(shì),相比基準(zhǔn)方法推薦精度可提高7.5%。在推薦過(guò)程中提供的API子序列越長(zhǎng),推薦結(jié)果越準(zhǔn)確,但耗時(shí)明顯增加。在子序列長(zhǎng)度為5時(shí),方法推薦精度與運(yùn)行時(shí)間可達(dá)到相對(duì)適中的效果。

        關(guān)鍵詞:API推薦;服務(wù)計(jì)算;復(fù)雜網(wǎng)絡(luò)

        DOI:10.11907/rjdk.173166

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

        文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1672-7800(2018)007-0079-04

        Abstract:Withthecomplexityofcomputerprogramgrows,thefunctionalrequirementofautomaticcodecompletionbecomesmoreandmoreurgent.ThepaperexplorestheproblemofAPIcallsinsoftwarecoding,usingthecallsequencebetweencodeofAPIandbuildingAPInetworkmodel.ItachieveaccurateAPIrecommendationfromtheperspectiveofservicerecommendationsoastoimprovetheefficiencyofsoftwaredevelopmentprojects.TheexperimentalresultsverifythefeasibilityoftherecommendedmethodbasedonAPIsequencerelationnetworkmodels,andthemethodismoreadvantageouswhentherecomendationlistislongerfortherecommendationaccuracycanbeincreasedby7.5%comparedwiththebenchmarkmethod.TherecommendedresultismoreaccuratewhentheAPIsequenceislongerintheprocessofrecommendation.Onthewhole,whenthesubsequencelengthis5,therecommendationaccuracyandrunningtimecanachieverelativelymodestresults.

        KeyWords:APIrecommendation;servicecomputing;complexnetwork

        0引言

        隨著計(jì)算機(jī)程序的復(fù)雜性與計(jì)算能力并行增長(zhǎng),軟件開(kāi)發(fā)逐漸成為一項(xiàng)由多個(gè)開(kāi)發(fā)人員共同合作完成的工作,其需要復(fù)雜的源代碼管理與調(diào)試工具對(duì)開(kāi)發(fā)人員的工作進(jìn)行調(diào)整。IDE開(kāi)發(fā)工具的核心包括代碼自動(dòng)補(bǔ)全功能,而代碼自動(dòng)補(bǔ)全功能中API推薦是指通過(guò)系統(tǒng)提示幫助開(kāi)發(fā)者更準(zhǔn)確地找到需要調(diào)用的API。在軟件系統(tǒng)規(guī)模與復(fù)雜性加劇時(shí),想要通過(guò)調(diào)用相應(yīng)的API重用現(xiàn)有的類庫(kù)或框架,就必須了解使用哪些API及其調(diào)用順序。

        API增長(zhǎng)速度非常快,如JDK最新版本中類的數(shù)量已增長(zhǎng)到3000個(gè)左右,相比最初的212個(gè)增長(zhǎng)了數(shù)倍。對(duì)于API存在不準(zhǔn)確代碼樣例、不完整文檔以及自身復(fù)雜性等因素,靈活使用這些API將面臨挑戰(zhàn),同時(shí)發(fā)現(xiàn)潛在的服務(wù)或API也變得越來(lái)越困難[1]。微軟的一項(xiàng)調(diào)查顯示,67.6%的受訪者提到在學(xué)習(xí)API時(shí)面臨資源不足或缺乏的困擾[2]。有研究表明,API用戶面臨的挑戰(zhàn)是如何發(fā)現(xiàn)可以幫助完成任務(wù)的API子集[3]。API的可用性成為影響開(kāi)發(fā)人員效率的關(guān)鍵,使用API降低了開(kāi)發(fā)人員的工作效率[4]。從搜索引擎中尋找特定功能的API,效率低且大多數(shù)搜索引擎都是通過(guò)關(guān)鍵字匹配完成的,準(zhǔn)確率較低。

        這些問(wèn)題的存在使開(kāi)發(fā)人員在代碼編寫過(guò)程中,由于不熟悉API使用方法,導(dǎo)致不能快速有效地找到下一個(gè)需要使用的API,從而降低了開(kāi)發(fā)速度。現(xiàn)有API推薦方法普遍沒(méi)有利用API調(diào)用序列信息。本文通過(guò)API調(diào)用序列關(guān)系構(gòu)建API調(diào)用關(guān)系網(wǎng)絡(luò),利用復(fù)雜網(wǎng)絡(luò)理論進(jìn)行有向路徑匹配,從而準(zhǔn)確地實(shí)現(xiàn)了API推薦。

        1相關(guān)工作

        代碼補(bǔ)全系統(tǒng)通過(guò)API元素(方法、字段等)提示的方式幫助開(kāi)發(fā)者使用API。傳統(tǒng)的代碼補(bǔ)全系統(tǒng)一般只考慮API的兼容性與可見(jiàn)性,推薦大量的API元素并按照字母表排序,使得面對(duì)復(fù)雜編碼時(shí),推薦的API準(zhǔn)確率較低。

        為提高API推薦準(zhǔn)確率,有研究者提出利用數(shù)據(jù)挖掘算法挖掘API使用模式進(jìn)行推薦,從而提高開(kāi)發(fā)者的開(kāi)發(fā)效率。如DynaMine使用Apriori算法,F(xiàn)rUit使用Opus算法[5]等。將API使用模式根據(jù)結(jié)構(gòu)與語(yǔ)義分為不同的組,根據(jù)相關(guān)程度進(jìn)行推薦[6]。而數(shù)據(jù)挖掘忽略了API元素調(diào)用順序信息,實(shí)際推薦過(guò)程中,推薦順序?qū)ν扑]結(jié)果有至關(guān)重要的作用,因此有必要考慮API的調(diào)用序列模式。

        序列模式挖掘考慮了數(shù)據(jù)集中的元素調(diào)用先后信息,如Alattin和Xie[7]利用頻繁模式挖掘方法找出調(diào)用API前必須滿足的條件。Scenariographer等[8]通過(guò)字符串處理方式發(fā)現(xiàn)方法調(diào)用序列,并將序列規(guī)則表示為正則表達(dá)式。Asaduzzaman等[9]開(kāi)發(fā)Eclipse插件CSCC,實(shí)現(xiàn)了根據(jù)當(dāng)前編輯代碼的上下文信息,通過(guò)API推薦幫助用戶補(bǔ)全代碼。Perracotta[10]使用啟發(fā)式方法實(shí)現(xiàn)API推薦。Raychev等[11]提出一種基于圖(Groum)統(tǒng)計(jì)語(yǔ)言模型。GraLan利用貝葉斯推理進(jìn)行子圖匹配。Raghothaman等[12]提出從用戶點(diǎn)擊數(shù)據(jù)中找到與用戶輸入的自由文本查詢相關(guān)的APIs,通過(guò)匹配GitHub代碼中API調(diào)用序列找到APIs相應(yīng)的調(diào)用序列。Gu等[13]通過(guò)基于API調(diào)用序列的深度學(xué)習(xí)模型實(shí)現(xiàn)API推薦。Niu等[14]提出使用監(jiān)督學(xué)習(xí)方法,在兩個(gè)階段基礎(chǔ)上,借助多種特征進(jìn)行API推薦。Rahman等[15]從StackOverflow的問(wèn)答中抽取與開(kāi)發(fā)者自由文本查詢相關(guān)的API。

        本文所采用的方式是利用代碼中各種依賴關(guān)系生成API調(diào)用關(guān)系網(wǎng)絡(luò)模型,再利用復(fù)雜網(wǎng)絡(luò)理論進(jìn)行匹配、

        過(guò)濾形成API推薦結(jié)果。

        主要工作概括為兩個(gè)方面:

        ①利用開(kāi)源工具PPA對(duì)Github上的開(kāi)源軟件進(jìn)行代碼解析,獲得代碼中API序列庫(kù),根據(jù)API序列關(guān)系構(gòu)建API序列關(guān)系網(wǎng)絡(luò)模型;

        ②利用復(fù)雜網(wǎng)絡(luò)理論,提出一種基于API序列關(guān)系網(wǎng)絡(luò)模型的API推薦方法,并驗(yàn)證方法的有效性。

        2理論基礎(chǔ)

        2.1API序列

        從大量軟件源代碼庫(kù)中提取API調(diào)用序列。PPA(PartialProgramAnalysisforJava)是一個(gè)靜態(tài)代碼分析工具,可將Java源代碼轉(zhuǎn)換為類型化的抽象語(yǔ)法樹(shù),并可轉(zhuǎn)換為Jimple類型,用3地址表示,PPA在處理源代碼時(shí),對(duì)于節(jié)點(diǎn)名稱與節(jié)點(diǎn)聯(lián)系并不作過(guò)多處理,只單純從中提取出API的調(diào)用及其調(diào)用順序信息。通過(guò)源代碼處理,可從源代碼中獲取API調(diào)用序列,形成一個(gè)API調(diào)用序列庫(kù)。

        基于API調(diào)用序列庫(kù),根據(jù)API序列中元素的上下關(guān)系,構(gòu)建一條由上一個(gè)API元素指向下一個(gè)API元素的有向連邊,如圖1所示。為提高API調(diào)用關(guān)系網(wǎng)絡(luò)模型質(zhì)量,對(duì)API調(diào)用序列庫(kù)作一定的預(yù)處理,將部分出現(xiàn)頻率極低的API調(diào)用序列過(guò)濾。具體處理流程:設(shè)置API序列長(zhǎng)度閾值為10,將上述每個(gè)源代碼文件中得到的API調(diào)用序列切割成長(zhǎng)度為10的API序列片段;②統(tǒng)計(jì)不同片段在整個(gè)庫(kù)中出現(xiàn)的頻率,此處只保留頻率大于等于2的API序列片段;③對(duì)保留的API序列片段構(gòu)建API調(diào)用關(guān)系網(wǎng)絡(luò)。

        2.2API推薦

        API推薦可劃分為兩部分:①對(duì)測(cè)試的源代碼對(duì)應(yīng)的API調(diào)用序列進(jìn)行標(biāo)記,確定預(yù)測(cè)位置(如標(biāo)記為L(zhǎng)),從API調(diào)用序列中預(yù)測(cè)位置L為參考位置,向前選擇所有長(zhǎng)度小于閾值γ(γ≤10)的子序列;②按照閾值長(zhǎng)度選擇子序列作為測(cè)試序列,輸入到基于調(diào)用關(guān)系得到的API調(diào)用網(wǎng)絡(luò)模型,根據(jù)路徑匹配結(jié)果形成API推薦列表。

        3實(shí)驗(yàn)分析

        3.1實(shí)驗(yàn)數(shù)據(jù)

        本文實(shí)驗(yàn)所用數(shù)據(jù)集如表1所示。為確保實(shí)驗(yàn)結(jié)果可靠有效,從Github平臺(tái)上下載大量數(shù)據(jù)集,并從中提取一個(gè)數(shù)據(jù)量龐大的代碼庫(kù),數(shù)據(jù)集包含1000個(gè)開(kāi)源Java項(xiàng)目,共計(jì)104645個(gè)類,638293個(gè)函數(shù),對(duì)應(yīng)2039687個(gè)API。在數(shù)據(jù)選取過(guò)程中,過(guò)濾一些小程序以及PPA工具解析失敗項(xiàng)目。

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

        方法整體框架如圖3所示。根據(jù)2.1中的方法獲得API調(diào)用序列庫(kù),將其中一部分用作訓(xùn)練數(shù)據(jù)集,通過(guò)上下調(diào)用關(guān)系構(gòu)建API調(diào)用網(wǎng)絡(luò)模型,其中網(wǎng)絡(luò)模型相鄰兩個(gè)API元素關(guān)系出現(xiàn)的次數(shù)為其連邊權(quán)重。將測(cè)試集中的API元素作為輸入,在API調(diào)用網(wǎng)絡(luò)模型上進(jìn)行匹配;推薦最可能的K個(gè)API元素,得到API推薦列表。

        3.3評(píng)價(jià)指標(biāo)

        為了評(píng)價(jià)所提出的API推薦方法,使用如下判斷推薦成功的條件與常用的精度評(píng)價(jià)指標(biāo):

        (1)假設(shè)在推薦的K個(gè)列表中,有當(dāng)前測(cè)試API所需調(diào)用的下一個(gè)API,則認(rèn)為推薦成功。

        (2)Top-k推薦平均準(zhǔn)確率。

        該指標(biāo)需要計(jì)算每個(gè)測(cè)試API推薦列表中推薦成功位置的倒數(shù)1r(r(r≤k)為推薦成功時(shí)的位置),對(duì)所有測(cè)試成功位置倒數(shù)求平均值,Q為測(cè)試API個(gè)數(shù),表示為:

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

        4.1推薦方法有效性驗(yàn)證

        在實(shí)驗(yàn)過(guò)程中,設(shè)置輸入測(cè)試的API子序列長(zhǎng)度γ=1,即每個(gè)測(cè)試的API數(shù)據(jù)提供其前兩個(gè)調(diào)用API元素作為情景信息。在不同比例劃分訓(xùn)練數(shù)據(jù)集情況下,根據(jù)返回推薦列表長(zhǎng)度K取值不同,API推薦結(jié)果精度有差異。如圖4所示,用于訓(xùn)練(構(gòu)建API調(diào)用關(guān)系網(wǎng)絡(luò)模型)的API調(diào)用序列比例越大,推薦結(jié)果的精度越高,最高可達(dá)到52.3%。推薦過(guò)程中返回的推薦列表長(zhǎng)度K整體越長(zhǎng)推薦效果越好,且與測(cè)試數(shù)據(jù)集比例關(guān)系不顯著。

        為進(jìn)一步驗(yàn)證本文方法效果,選取文獻(xiàn)[9-10]中兩種方法進(jìn)行初步對(duì)比。為簡(jiǎn)化實(shí)驗(yàn)步驟,對(duì)比過(guò)程中僅以本文方法在測(cè)試數(shù)據(jù)比例為10%以下結(jié)果為主。如圖5所示,在k=1時(shí),Apriori方法最好,為33.9%;但隨K值的增大Apriori方法優(yōu)勢(shì)更明顯,其中Top-10結(jié)果達(dá)到52.3%的精度,相比兩種基準(zhǔn)方法分別提高了7.5%和2.6%。綜上所述,本文提出的基于API調(diào)用序列關(guān)系網(wǎng)絡(luò)方法更有助于API推薦。

        4.2參數(shù)γ對(duì)推薦結(jié)果的影響

        如圖6所示,可以發(fā)現(xiàn),提供的API子序列長(zhǎng)度越大,推薦結(jié)果越準(zhǔn)確,提供查找API元素的context信息越豐富,找到其下一個(gè)調(diào)用API元素可能性越大。如圖7所示,隨著參數(shù)γ增大算法耗時(shí)加長(zhǎng)。由于提供的子序列長(zhǎng)度γ越大,表示在關(guān)系網(wǎng)絡(luò)匹配過(guò)程中,需要對(duì)比的前綴元素越多,耗時(shí)越長(zhǎng)。例如當(dāng)子序列長(zhǎng)度γ=9時(shí),Τοp-10的推薦精度達(dá)到86.1%,但運(yùn)行時(shí)間達(dá)21min。當(dāng)子序列長(zhǎng)度γ=5時(shí),Τοp-10整體推薦精度與運(yùn)行時(shí)間相對(duì)較為適中,精度為71.9%,運(yùn)行時(shí)間為10min。

        5結(jié)語(yǔ)

        本文圍繞軟件編碼過(guò)程中API調(diào)用問(wèn)題進(jìn)行探究,利用API調(diào)用序列關(guān)系網(wǎng)絡(luò)模型,從API服務(wù)推薦角度實(shí)現(xiàn)精準(zhǔn)推薦,從而提高軟件項(xiàng)目開(kāi)發(fā)效率。研究發(fā)現(xiàn):基于API序列關(guān)系網(wǎng)絡(luò)模型的推薦方法效果可行,且在推薦列表長(zhǎng)度越大的情況下方法更具優(yōu)勢(shì),相比基準(zhǔn)方法推薦精度可提高7.5%;提供的API子序列長(zhǎng)度越長(zhǎng),推薦準(zhǔn)確率越高,但耗時(shí)也越長(zhǎng),子序列長(zhǎng)度為5時(shí),方法推薦精度與運(yùn)行時(shí)間可達(dá)到相對(duì)適中的效果。

        本文存在一些不足:在收集數(shù)據(jù)時(shí),由于受PPA工具限制,只選取了Github社區(qū)中Java項(xiàng)目,其它語(yǔ)言項(xiàng)目下的API推薦效果是否成立,還有待進(jìn)一步驗(yàn)證;在構(gòu)建API序列關(guān)系網(wǎng)絡(luò)模型時(shí),實(shí)際上會(huì)出現(xiàn)閉環(huán)現(xiàn)象,但對(duì)于網(wǎng)絡(luò)中路徑匹配不符,本文實(shí)驗(yàn)過(guò)程中,進(jìn)行了一定的人工處理,如何解決閉環(huán)問(wèn)題,也是值得研究的課題。

        參考文獻(xiàn):

        [1]LIC,ZHANGR,HUAIJ,etal.AnovelapproachforAPIrecommendationinmashupdevelopment[C].IEEEInternationalConferenceonWebServices.IEEE,2014:289-296.

        [2]ROBILLARDMP.WhatmakesAPIshardtolearnanswersfromdevelopers[J].IEEESoftware,2009,26(6):27-34.

        [3]ROBILLARDMP,DELINER.AfieldstudyofAPIlearningobstacles[M].KluwerAcademicPublishers,2011.

        [4]PICCIONIM,F(xiàn)URIACA,MEYERB.Anempiricalstudyofapiusability[C].ACM/IEEEInternationalSymposiumonEmpiricalSoftwareEngineeringandMeasurement.IEEE,2013:5-14.

        [5]LIVSHITSB,ZIMMERMANNT.Dynamine:findingcommonerrorpatternsbyminingsoftwarerevisionhistories[C].EuropeanSoftwareEngineeringConferenceHeldJointlywithAcmSigsoftInternationalSymposiumonFoundationsofSoftwareEngineering,2005,30(5):296-305.

        [6]SAIEDMA,ABDEENH,BENOMARO,etal.Couldweinferunorderedapiusagepatternsonlyusingthelibrarysourcecode[C].IEEEInternationalConferenceonProgramComprehension,2015:71-81.

        [7]THUMMALAPENTAS,XIET.Alattin:Miningalternativepatternsfordetectingneglectedconditions[C].IEEE/ACMInternationalConferenceonAutomatedSoftwareEngineering,2009:283-294.

        [8]SALAHM,DENTONT,MANCORIDISS,etal.Scenariographer:atoolforreverseengineeringclassusagescenariosfrommethodinvocationsequences[C].IEEEInternationalConferenceonSoftwareMaintenance,2005:155-164.

        [9]ASADUZZAMANM,ROYCK,SCHNEIDERKA,etal.Context-sensitivecodecompletiontoolforbetterapiusability[C].IEEEInternationalConferenceonSoftwareMaintenanceandEvolution,2014:621-624.

        [10]YANGJ,EVANSD,BHARDWAJD,etal.Perracotta:miningtemporalAPIrulesfromimperfecttraces[C].InternationalConferenceonSoftwareEngineering,2006:282-291.

        [11]RAYCHEVV,VECHEVM,YAHAVE.Codecompletionwithstatisticallanguagemodels[C].ACMSigplanSymposiumonProgrammingLanguageDesign&Implementation;,2014:419-428.

        [12]RAGHOTHAMANM,WEIY,HAMADIY.SWIM:synthesizingwhatImean:codesearchandidiomaticsnippetsynthesis[C].Proceedingsofthe38thInternationalConferenceonSoftwareEngineering,2016:357-367.

        [13]GUX,ZHANGH,ZHANGD,etal.DeepAPIlearning[C].Proceedingsofthe201624thACMSIGSOFTInternationalSymposiumonFoundationsofSoftwareEngineering,2016:631-642.

        [14]NIUH,KEIVANLOOI,ZOUY.Learningtorankcodeexamplesforcodesearchengines[J].EmpiricalSoftwareEngineering,2017,22(1):259-291.

        [15]RAHMANMM,ROYCK,LOD.Rack:Automaticapirecommendationusingcrowdsourcedknowledge[C].2016IEEE23rdInternationalConferenceonSoftwareAnalysis,Evolution,andReengineering,2016,1:349-359.

        (責(zé)任編輯:劉亭亭)

        猜你喜歡
        復(fù)雜網(wǎng)絡(luò)
        基于復(fù)雜網(wǎng)絡(luò)節(jié)點(diǎn)重要性的鏈路預(yù)測(cè)算法
        基于復(fù)雜網(wǎng)絡(luò)視角的海關(guān)物流監(jiān)控網(wǎng)絡(luò)風(fēng)險(xiǎn)管理探索
        基于圖熵聚類的重疊社區(qū)發(fā)現(xiàn)算法
        基于復(fù)雜網(wǎng)絡(luò)理論的通用機(jī)場(chǎng)保障網(wǎng)絡(luò)研究
        一種新的鏈接預(yù)測(cè)方法在復(fù)雜網(wǎng)絡(luò)中的應(yīng)用
        城市群復(fù)合交通網(wǎng)絡(luò)復(fù)雜性實(shí)證研究
        科技視界(2016年20期)2016-09-29 11:19:34
        小世界網(wǎng)絡(luò)統(tǒng)計(jì)量屬性分析
        對(duì)實(shí)驗(yàn)室搭建復(fù)雜網(wǎng)絡(luò)環(huán)境下的DHCP 服務(wù)及安全防護(hù)的思考
        中國(guó)市場(chǎng)(2016年13期)2016-04-28 09:14:58
        人類社會(huì)生活空間圖式演化分析
        商情(2016年11期)2016-04-15 22:00:31
        日本高清二区视频久二区| 丝袜av乱码字幕三级人妻| 亚洲乱妇熟女爽到高潮视频高清| 蜜桃高清视频在线看免费1| 亚洲精品久久国产精品| 国产精品国产三级国产av剧情| 少妇高潮喷水久久久影院| 欧美亚洲国产片在线播放| 亚洲精品中国国产嫩草影院美女 | 91精品久久久中文字幕| 欧美黑人又大又粗xxxxx| 中文字幕精品一区二区2021年| 欧美日韩国产在线观看免费| 日韩在线中文字幕一区二区三区| 全亚洲最大的私人影剧院在线看| 国产 高潮 抽搐 正在播放| 欧美成人免费全部| 亚洲AⅤ无码国精品中文字慕| 美腿丝袜美腿国产在线| 放荡成熟人妻中文字幕| 天堂视频在线观看一二区| 亚洲av永久无码精品古装片 | 激情五月婷婷一区二区| 免费无码中文字幕a级毛片| 国产亚洲精品aaaa片app| 国产亚洲一区二区三区成人| 成av人片一区二区久久| 人妻丰满熟av无码区hd| 老熟妻内射精品一区| 国产精品一区二区韩国AV| 插入中文字幕在线一区二区三区| 中文字幕乱码亚洲一区二区三区| 国产亚洲视频在线播放| 免费看黄a级毛片| 国产一区二区三区小说| 日本看片一区二区三区| 国产精品丝袜美女久久| 无码专区人妻系列日韩精品| 久久aⅴ人妻少妇嫩草影院| 国内视频偷拍一区,二区,三区| 偷拍一区二区三区黄片|