999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于開源社區分析的API使用案例推薦服務

2022-11-30 08:13:22張佳琪孫艷春黃罡
計算機應用 2022年11期
關鍵詞:案例用戶

張佳琪,孫艷春*,黃罡

基于開源社區分析的API使用案例推薦服務

張佳琪1,2,孫艷春1,2*,黃罡1,2

(1.北京大學 信息科學技術學院,北京 100871; 2.高可信軟件技術教育部重點實驗室(北京大學),北京 100871)(?通信作者電子郵箱sunyc@pku.edu.cn)

目前有關API學習和代碼復用的研究主要集中在對于API調用頻繁模式的挖掘、組件化信息的提取以及根據用戶的需求和目標功能進行的個性化應用程序接口(API)推薦服務等方面。然而,作為缺少專業知識和經驗技能來完成特定使用案例的軟件開發初學者,在閱讀官方文檔之外,往往需要真實的使用案例作為參考。現有代碼推薦研究大多為單片段式代碼,缺少跨函數的案例選擇,這不利于初學者學習構建完整的使用場景或功能模塊;同時,從單個函數注釋中提取的語義描述也不足以構建學習者對項目中完整功能實現方法的認識。為了解決上述問題,提出了一種基于開源社區分析的API使用案例推薦服務,并以軟件開發后端框架Spring Boot為例,構建了跨函數的案例推薦輔助學習服務。隨后,通過調查問卷、專家驗證等方式驗證了所提出的API使用案例推薦服務的可行性和有效性。

代碼復用;應用程序界面;開源社區分析;推薦服務;使用案例

0 引言

目前,對于軟件開發學習者來說,可供選擇的學習渠道包括官方文檔、中英文博客、開源項目倉庫以及問答社區等。官方文檔的學習難度取決于文檔的組織方式和內容編排,其理解在大多數情況下需要一定的領域知識,沒有該領域開發經驗的學習者難以理解文檔作者展示的內容。而博客教程傾向于碎片化學習,且缺少質量評估,需要學習者擁有一定的搜索和選擇能力。問答社區內容豐富,但初學者依然存在描述問題的困難,缺少從專業知識角度提出問題的能力。

相較于上述幾種學習方法,軟件開發初學者經常需要借助實際的使用案例幫助理解特定工具或應用程序界面(Application Program Interface, API)的使用方法和調用規則。在開源社區海量的開源項目倉庫中,有廣闊的該類學習資源,但并未被很好地挖掘出來。軟件開發初學者依靠自身能力定位需要的API使用案例有一定的困難。

現有的代碼案例推薦服務研究中,傾向于構建API功能描述或代碼功能描述,匹配用戶輸入,呈現給用戶片段式的代碼內容。除官方文檔專業性強的描述文本外,片段式代碼的功能描述大多來自注釋。但在實際學習過程中,單函數的注釋并不能很好地體現代碼內容在整體項目中的作用。本文面向擁有較少編碼經驗且缺少軟件開發實戰經驗的初學者,搜集了79份調查問卷,統計問卷參與者在單函數注釋對完成某一使用場景或功能的幫助效果上的意見,結果如表1所示。由表1可知,單片段的注釋傾向于表述函數承擔的細節任務,與項目實現的完整使用場景之間有一定的差別。

其次,軟件開發初學者缺少將不同代碼片段組建成完整功能模塊的能力。例如,如何將博客教程給出的碎片化功能函數實例,在實際項目中很好地組合復用,對于缺少經驗的開發者來說有一定難度。又如,在面向對象編程過程中,開發者傾向于用不同代碼文件中定義的類成員函數共同實現項目的完整功能,單一片段的實例不足以幫助用戶理解它在整體項目中的復用方法。

表1 單函數注釋對完成某一使用場景或功能的幫助效果的問卷調查結果

為此,本文提出了一種基于開源社區分析的API使用案例推薦服務,為初學者提供快速定位特定API及某一使用場景案例,以及進行跨函數案例代碼學習的工具。

本文的主要工作包括:

1)提出了一種面向軟件開發初學者的API使用案例推薦服務,解決初學者學習軟件開發時難以獲取以使用場景為粒度劃分的參考案例的問題。

2)提出了一種基于開源社區分析的跨函數API使用案例構造與分析方法,采用靜態代碼分析方法,從開源項目中抽取使用場景實例,進行面向用戶的評估與推薦。

1 相關工作

1.1 開源社區分析

迄今為止,以GitHub、Stack Overflow等平臺為研究對象的開源社區分析研究基本涵蓋到開發人員從入門到編碼、協作、測試的方方面面,其中包含了對于用戶、項目、問答內容等不同方面的數據分析。一方面,研究人員利用現存的大量開源社區數據,針對用戶特性個性化推薦學習領域、協作人員,為待完成Issue或問答社區問題尋找可能的解答者,優化社區人員體驗;另一方面,研究人員利用開發者已有的項目成果進行領域知識挖掘和文檔重構,為開發者的學習、檢索和復用提供不同粒度的支撐。

Seker等[1]對于GitHub的已有研究進行了二次分析,對GitHub開源數據集GHTorrent上的重要研究內容和較高質量論文的主題分布進行了總結。最終,論文總結出四個主要主題:項目、用戶、數據及行為。每個主題都有多個相關子主題,如Issue、提交說明等,表明GitHub開源數據的流行研究方向和熱門課題。GHTorrent是目前使用最廣的GitHub開源數據集,在GitHub相關數據研究方面具有一定的代表性[2]。

在與開發者或學習者相關的研究課題中,主要研究內容集中在開發者的輔助開發活動上。如陳丹等[3]對開源社區中已有開發者的合作行為模式做了分析,探索開發人員建立新合作關系的方式以及合作關系建立的影響因素。Rahman等[4]提出了一種代碼審核人員的推薦工具CORRECT,通過對開發人員跨項目的相關工作經驗以及特定技術經驗的分析,以推薦潛在的審核者。Montandon等[5]針對軟件開發者技術能力水平難以衡量的問題,提出了一種基于GitHub數據的特征聚類,實現在現今流行的庫和框架的開發人員中篩選專家級別的開發者的技術。此外,關聯多開源平臺進行數據分析與挖掘[6],構建開源社區數據集[7-8],也是這方面研究的重要內容。

綜合上述分析,對于軟件開發初學者而言,其學習需求并不需要很高專業度的人員才能滿足。如學習者通過博客和問答社區尋找答案,查找教程的過程中并不存在嚴格審查回答者技術能力的過程。其次,初學者在學習入門階段往往需要獨立學習,在獲得一定程度專業知識的基礎后再進行協作開發。現有的開源社區分析研究并沒有在面向初學者的方向上幫助他們解決初步的入門問題,而是集中于提升其成為社區開發者后的開發體驗。

1.2 API推薦及代碼推薦

目前大量軟件開發集成工具包或API庫,給編碼人員的選擇帶來了一定的困難。如npm.js集成發布的JavaScript編程語言API,面對同一關鍵詞搜索下,同一功能的不同工具包,經驗不足的學習者并不能快速確定目標并進行使用。

Zerouali等[9]的研究工作詳細分析了一個開源包的流行度衡量標準及影響因素,從GitHub、libraries.io和npm.js三個官方網站尋找指標數據,并分析它們之間的相關關系。但是結果表明,不同平臺的指標之間沒有太大的相關性,無法簡單通過單一指標得到普遍結果,需要經過考量設計得到認可度高的評估選擇框架。

API推薦研究一般從開源問答社區、官方文檔和源代碼中提取有關API的語義,匹配用戶需求。張云帆等[10]的研究工作提出了一種基于自然語言語義相似度的推薦方法,通過查詢信息和描述信息的語義相似度進行推薦選擇。Lin等[11]設計了一種識別用戶查詢中包含潛在API的方法。從軟件源代碼中提取軟件實體概念以及它們之間的關系,填補互聯網上學習資源文檔中缺少的知識空白。

Huang等[12]的研究同樣致力于解決用戶查詢和API之間的匹配問題,將Stack Overflow和API文檔合并,利用Stack Overflow中的帖子補充API信息。類似的研究還有Nie等[13]提出的代碼搜索方法QECKRocchio。Xie等[14]的研究認為Stack Overflow問答社區涉及的API只包含大眾流行度較高的部分,而基于純文檔的API檢索又通常會產生較差的結果,所以試圖通過官方文檔構建API功能描述輔助API檢索識別。

除此之外Shatnawi等[15-16]的研究認為,組件級別的代碼復用比原有的面向對象的復用更加有效。在組件粒度上的API方法具有其功能語義,并且在內部結構中展示出相互之間的依賴關系。Matos等[17]的研究從拆分大的API庫為小型API的目的出發,解決大型API復雜結構使用戶很難快速學習和使用它們的問題。

在代碼推薦方面,楊程等[18]提出了一種基于多維特征的開源項目個性化推薦方法,從開源項目自身流行度、關聯項目技術相關度以及大眾貢獻者之間的社交關聯度這三個維度的特征衡量開發者和開源項目之間的關聯關系,為開發者提供個性化的項目推薦服務。Shen等[19]則設計了一種名為NLI2Code的抽象框架,通過基于庫文檔的功能特征提取、代碼模式挖掘及填補中間變量三步過程生成推薦代碼。Zimmerman等[20]則面向嘗試學習常見算法的新手程序員,基于圖形匹配和樹編輯的方法提出了一種識別正在編寫的代碼的可能目標,從而推薦編碼相關操作的框架。

綜合上述分析,現有API推薦研究的主流思想在于匹配用戶自然語言形式需求描述和API功能描述。通過開源代碼重新分析API之間的組合關系,挖掘可復用的使用模式是其中的核心研究內容。代碼推薦則需要對可選項目給出一定的評價標準,可以是從API角度的調用分析,也可以是基于開發者本身、項目流行度等多維度特征設計出的評價指標,總體上多為單片段代碼推薦和生成,缺少跨函數的分析結果。對于代碼案例的功能描述,多從注釋獲取信息,片段性的解釋說明缺少對整體功能或場景的描述。對于初學者而言,這些不利于案例的理解與復用。

2 案例推薦服務的架構

本文提出的案例推薦服務架構如圖1所示。

圖1 案例推薦服務的系統架構

2.1 案例構造

2.1.1單函數片段抽取

在代碼或API推薦、檢索研究中,主要通過動詞短語的提取劃分功能或場景描述。本文對于使用場景的劃分,主要通過前后端交互的動詞形式監聽接口實現。在實際開發過程中,開發者之間的協作要求和高質量項目的嚴謹性,要求前后端交互的接口路徑名滿足一定的可理解性,并在語義上符合代碼實現內容。因此,本文以后端項目為例,以前后端交互請求的接收為入口構建案例。每一案例有統一明確的入口,其余用戶函數的調用也將符合該入口處的功能描述。

本文選擇Spring Boot框架實現的3 000個GitHub開源項目,識別監聽接口注解代碼行并抽取其中的URL命名,通過駝峰命名法切詞并對特殊字符作額外處理,統計包含的動詞描述。在得到的結果中,選擇語義信息明確且擁有超過300個案例的動詞作為選定使用場景,得到的7個使用場景分類如表2。案例數量少于300的使用場景不能很好地滿足后續分析篩選的需要;同時,樣本數量在數據集中較少,也說明在開發過程中學習需求較低,我們優先為初學者提供學習需求更大的場景選擇。

表2 不同使用場景下的案例數量

本文嘗試標注每一條識別到的注解所處的代碼文件,以及行標,以此匹配函數內容。對于單個文件,通過抽象語法樹的分析和處理,將每一個函數方法按照一個整體剝離出來,識別每一行中各個元素的類別,并標注行數。對于這些含有文件即方法行數信息的函數處理結果,與注解相匹配,從而得到每個注解代表的請求入口函數片段。

抽取文件頭部引用的包及類,確定可選范圍,若是用戶類,則通過引入的名稱確定文件位置;若是API類,則留待后續API調用的提取和處理。同時,在代碼段內,通過抽象語法樹分析每一行代碼,遍歷其中有關函數調用和類對象聲明部分,識別該代碼段是否引用了用戶函數。如果引用了用戶函數,則定位指示的用戶文件和用戶函數,從而得到將該函數片段加入同一案例代碼片段集合中。

每個使用場景分類下有多個候選案例,每個候選案例由一或多個代碼片段組成。對于每個代碼片段,抽取后續案例分析過程中需要的API調用信息。根據相關研究內容及本文分析需要,給出以下節點和邊關系抽取規則:

1)節點分為以下幾種:API類對象聲明節點、API方法調用節點、參數生成和更改節點、用戶類對象聲明及更改節點。其中用戶類和用戶方法的節點便于不同文件代碼片段的關聯。

2)邊關系分為以下幾類:順序執行連邊、依賴連邊、嵌套調用連邊。其中嵌套調用表示在一個方法中的參數部分調用了下一個方法。

根據以上規則,可將每個函數的代碼片段表示為圖結構。如下所示代碼實例和圖2的調用圖實例表示,其中圖2為此代碼片段按照規則表示的調用圖。

@PostMapping(“/register”)

@ResponseBody

Public ResultVO register(User user){

userService.registerUser(user);

return ResultUtils.success();}

圖2 對象函數調用圖

2.1.2多函數片段融合

對于一個項目工程來說,一個使用場景的實現絕大多數情況下不可能單純通過一個函數完成,雖然我們的初步圖示在單個函數的粒度上構建,但對于不同的函數的圖示,需要一個融合的過程。融合過程如圖3所示。在一個函數的圖結構中,如果主體函數中識別到某個用戶函數的調用,則需要將該用戶函數的圖結構加到主體函數圖結構中。主體函數中,指向該用戶函數的節點,更改為指向用戶函數圖結構的入口節點;主體函數中,該用戶函數指向的節點,改為由用戶函數圖結構出口節點指向。圖3(b)中調用函數的節點在融合后消失,指向它的節點改為指向函數圖的入口節點,A函數圖的出口節點則改為指向原本主體函數中調用A函數的節點指向的節點。

圖3 融合前后的主體函數

2.2 案例分析

2.2.1案例相似度評估

基于抽象語法樹結構統計特征向量[21]、基于調用序列挖掘頻繁模式挖掘[18,22-23],都是常用的代碼流程圖降維分析方法。在此基礎上,Nguyen等[24]提出了更有彈性的圖方法進行模式挖掘和異常檢測任務。該團隊提出了具體的基于面向對象的源代碼構建API方法調用圖規則和算法設計[25]。Gu等[26]的工作及Chen等[27]的工作都沿用了類似的思想,并采用了圖核[28]、圖卷積等方法進行API調用代碼分析。

本文采用圖核算法進行分析處理,沒有將圖結構降維到向量空間的步驟,而是直接將核函數應用到圖結構數據上,在很大程度上保留了結構化信息,為跨函數代碼調用流程圖的分類和聚類提供重要的中間手段。

2.2.2聚類及推薦算法設計

在最短路徑核計算的相似度矩陣中,存在相似度基本為0的同一使用場景實現案例。對此,根據上述圖核計算得到的兩兩圖對之間的相似度矩陣,經過譜聚類方法處理,采用類內平均相似度比類間平均相似度作為判別指標初步劃分相似實現代碼,從而給用戶推薦每一相似實現方式集合下的最高推薦排序案例。

對于一個案例代碼,衡量它對于所屬類的代表性,本文參考Gu等[26]通過案例類內中心性和特異性排序的方法,給出三個重要指標:

1)它在這個類別中的中心性,中心性越高,則該案例對于所屬類的代表作用越強。

2)它在這個類別中的特異性,特異性越高,它在這個類別中的代表性越低。比如一些不常調用的API,對于軟件開發初學者而言,增加了學習和理解的困難,因此需要降低它的推薦排名,盡量推薦更方便理解的開發案例。

3)在面向初學者時,API選擇的流行程度,越是被大多數項目選擇的API,在學習者學習使用場景開發時越有必要被推薦學習。

在按照上述推薦指標計算并排序得出的結果中,選擇每類得分前5的案例推薦給學習者。

2.3 案例推薦服務

初學者存在兩種類型的學習需求:第一種學習需求為選定目標API,學習其使用方式;第二種學習需求為不確定可用API,學習使用該框架或包進行場景或功能的實現。

本文設計的案例推薦服務允許用戶可選地指定API,并在已有的推薦排序結果中篩選符合項,給出包含該API應用的使用案例。同時,也為學習者提供從使用場景出發的案例推薦,學習者可以在學習過程中了解可用的API。

本文以Spring Boot為例,實現了API使用案例推薦服務初學者可以搜索指定的API、選擇使用場景并選擇學習該推薦服務所推薦的案例。圖4為推薦服務的案例學習界面,為用戶提供代碼片段、片段所在文件完整代碼及調用圖。用戶跳轉查看同意案例的不同片段,調用圖標注相應節點顏色。

圖4 推薦服務的案例學習界面

3 案例推薦服務驗證

3.1 用戶需求驗證

對于用戶需求的驗證,主要以調查問卷的形式進行,調查用戶對于實際案例輔助學習API效果的需求和本推薦服務所推薦的案例評價。

問卷面向某高校擁有一定編程經驗的計算機專業本科生,共收集62份反饋結果,統計其中API學習方式使用情況和本文選取的使用場景是否符合用戶需求,具體結果如表3示。同時,給出本文推薦服務排序后選擇的推薦案例,統計有過后端開發經驗的21人和沒有后端開發經驗的41人的評價,結果如表4、表5所示。表中的“占比”均指相應項目評價人數占總調查人數的比例。

從表3~5可以看出,不論是后端框架的初學者還是已有一定技術知識儲備的學習者,本服務給出的推薦結果都有很高比例的認同,在幫助作用、代表性、可理解性上給出了較高評價。初學者在可理解性上的評價略低于有一定技術能力的學習者,有經驗的學習者在幫助程度上的評價略低于初學者。這種調查結果符合預期,以及本推薦服務側重初學者的推薦特點。

表3 API學習方式和本文選取的使用場景的問卷收集部分結果

表4 無經驗開發者評價結果

表5 有經驗開發者評價結果

3.2 信息抽取驗證

本文信息抽取規則在已有研究的基礎上做了部分調整,用于后續分析處理。同時,以流程圖的形式隨案例一起推薦給用戶,輔助用戶理解案例內容。本節主要審查本文抽取代碼行結果是否屬于案例及API使用的重點信息,審查中間過程。

選擇35個候選案例(每個場景分類下選擇5個),通過兩個對Java編程有三年以上經驗且擁有后端開發經驗的人員,標注他們所認為對該案例中體現API使用方法和邏輯框架的較重要的代碼行,代碼行數量為該案例中本文方法抽取結果行數上下浮動20%,比對結果如表6。其中的重合率為本文抽取的代碼行占標注者認為重要代碼行的比率。從表6結果可以看出,本文抽取內容可以反映大部分案例代碼重點部分。標注結果和抽取結果差異性的造成有一定標注者總標注代碼行不確定的原因,使得選擇的代碼行比本文抽取內容更精細或粗糙。

表6 信息抽取驗證結果

3.3 推薦結果驗證

第二部分驗證主要針對的是推薦服務的推薦結果是否具有代表性和可理解性,以及基于圖方法得出的結果與相關工作中采用特征向量抽取得到的結果相比是否具有更優效果。由于選擇的Spring Boot后端框架項目代碼缺少量化的評價指標,因此選擇專家驗證的方式。

抽取本文推薦算法排序中排名最高的5個代碼案例,并在之后的代碼案例中隨機抽取20個。其次,在同樣的原始數據上通過特征向量主導的API特征向量抽取和處理得到推薦結果,并選擇同樣數量的驗證案例。由兩個有四年及以上Java編程經歷,擁有Spring Boot開發實踐經歷,且進行過三年及以上軟件開發實踐和實踐指導的人員對這些案例做出評價,具體評價指標如下:

1)選擇代碼案例中個人認為可理解性和代表性最佳的5個案例,并給出排序。結果顯示,案例與使用場景定義100%相符。這說明本文選擇的使用場景劃分方式能夠正確對應代碼案例內容。

2)選擇代碼案例中個人認為可理解性和代表性最佳的10個案例,并給出排序,結果如表7所示,其中的命中率即專家在給出的推薦排序中,選中的服務推薦結果與最多可選中的推薦結果之比。由表7可知,本文基于圖方法得到的相似度度量和聚類排序,比通過特征向量抽取得到的結果認可度更高。后端API的開發實例,在保留結構化信息的處理方法下,經過篩選能得到更具有代表性的代碼案例。

表7 推薦案例專家驗證結果 單位: %

4 結語

本文提出了一種API學習案例推薦服務,相較于其他API及代碼推薦研究,本文沒有從單片段代碼出發進行分析挖掘,而是基于更大粒度的多函數功能模塊進行API推薦研究。同時,沒有通過單函數注釋抽取代碼功能描述,而是從監聽請求入口,得到概括性語義特征。這種較高抽象粒度的場景選擇可以滿足初學者的大部分學習需求。例如,初學者嘗試構建論壇式網絡應用,基本功能包括用戶的登錄注冊、帖子的發布刪除及搜索,均在本文所選使用場景的實現范圍之內。

未來,我們將在以下方面進一步改進:首先,進一步細化使用場景的劃分。在實際學習過程中,學習者會有更細粒度的案例需求,如在學習注冊場景的實現時,允許指定常用注冊方式可以優化用戶的體驗,提供更細粒度的幫助。其次,本文通過GitHub開源倉庫獲取候選案例,沒有經過更精細的篩選,個別大型倉庫中同一類使用場景的案例數量較多,API用法相似,在相似性度量和聚類排序過程中存在一定優勢,更易被選中作為推薦案例。在后續工作中,可以通過改進評價指標等方式彌補現有方法的不足。最后,本文選擇以Spring Boot為例實現推薦服務,而目前還有其他流行的API庫。結合多編程語言分析方法,可以在不同的前后端場景中實現案例構造與分析處理。

[1] SEKER A, DIRI B, ARSLAN H, et al. Open source software development challenges: a systematic literature review on GitHub[J]. International Journal of Open Source Software and Processes, 2020, 11(4): 1-26.

[2] GOUSIOS G, SPINELLIS D. GHTorrent: GitHub’s data from a firehose[C]// Proceedings of the 9th IEEE Working Conference on Mining Software Repositories. Piscataway: IEEE, 2012: 12-21.

[3] 陳丹,王星,何鵬,等. 開源社區中已有開發者的合作行為分析[J]. 計算機科學, 2016, 43(6A):476-479, 501.(CHEN D, WANG X, HE P, et al. Towards understanding existing developers’ collaborative behavior in OSS communities[J]. Computer Science, 2016, 43(6A):476-479, 501.)

[4] RAHMAN M M, ROY C K, REDL J, et al. CORRECT: code reviewer recommendation at GitHub for Vendasta technologies[C]// Proceedings of the 31st IEEE/ACM International Conference on Automated Software Engineering. New York: ACM, 2016: 792-797.

[5] MONTANDON J E, SILVA L L, VALENTE M T. Identifying experts in software libraries and frameworks among GitHub users[C]// Proceedings of the IEEE/ACM 16th International Conference on Mining Software Repositories. Piscataway: IEEE, 2019: 276-287.

[6] MANES S S, BAYSAL O. How often and what StackOverflow posts do developers reference in their GitHub projects?[C]// Proceedings of the IEEE/ACM 16th International Conference on Mining Software Repositories. Piscataway: IEEE, 2019:235-239.

[7] BALTES S, DUMANI L, TREUDE C, et al. SOTorrent: reconstructing and analyzing the evolution of stack overflow posts[C]// Proceedings of the ACM/IEEE 15th International Conference on Mining Software Repositories. New York: ACM, 2018: 319-330.

[8] BALTES S, TREUDE C, DIEHL S. SOTorrent: studying the origin, evolution, and usage of stack overflow code snippets[C]// Proceedings of the IEEE/ACM 16th International Conference on Mining Software Repositories. Piscataway: IEEE, 2019: 191-194.

[9] ZEROUALI A, MENS T, ROBLES G, et al. On the diversity of software package popularity metrics: an empirical study of NPM[C]// Proceedings of the IEEE 26th International Conference on Software Analysis, Evolution and Reengineering. Piscataway: IEEE, 2019: 589-593.

[10] 張云帆,周宇,黃志球. 基于語義相似度的API使用模式推薦[J]. 計算機科學, 2020, 47(3): 34-40.(ZHANG Y F, ZHOU Y, HUANG Z Q. Semantic similarity based API usage pattern recommendation[J]. Computer Science, 2020, 47(3): 34-40.)

[11] LIN Z Q, ZOU Y Z, ZHAO J F, et al. Improving software text retrieval using conceptual knowledge in source code[C]// Proceedings of the 32nd IEEE/ACM International Conference on Automated Software Engineering. Piscataway: IEEE, 2017: 123-134.

[12] HUANG Q, XIA X, XING Z C, et al. API method recommendation without worrying about the task?API knowledge gap[C]// Proceedings of the 33rd ACM/IEEE International Conference on Automated Software Engineering. Piscataway: IEEE, 2018: 293-304.

[13] NIE L M, HE J, REN Z L, et al. Query expansion based on crowd knowledge for code search[J]. IEEE Transactions on Services Computing, 2016, 9(5): 771-783.

[14] XIE W K, PENG X, LIU M W, et al. API method recommendation via explicit matching of functionality verb phrases[C]// Proceedings of the 28th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering. New York: ACM, 2020: 1015-1026.

[15] SHATNAWI A, SHATNAWI H, SAIED M A, et al. Identifying software components from object?oriented APIs based on dynamic analysis[C]// Proceedings of the 2018 ACM/IEEE 26th International Conference on Program Comprehension. New York: ACM, 2018:189-199.

[16] SHATNAWI A, SERIAI A, SAHRAOUI H, et al. Mining software components from object?oriented APIs[EB/OL]. (2016-06-02)[2021-05-06]. https://arxiv.org/pdf/1606.00561.pdf.

[17] MATOS A S, FERREIRA FILHO J B, ROCHA L S. Splitting APIs: an exploratory study of software unbundling[C]// Proceedings of the 2019 IEEE/ACM 16th International Conference on Mining Software Repositories. Piscataway: IEEE, 2019: 360-370.

[18] 楊程,范強,王濤,等. 基于多維特征的開源項目個性化推薦方法[J]. 軟件學報, 2017, 28(6): 1357-1372.(YANG C, FAN Q, WANG T, et al. Multi?feature based personal recommendation approach for open source project[J]. Journal of Software, 2017, 28(6): 1357-1372.)

[19] SHEN Q, XIE B, ZOU Y Z, et al. NLI2Code: reusing libraries with natural language interface[C]// Proceedings of the 2019 International Conference on Software and Systems Reuse, LNCS 11602. Cham: Springer, 2019: 168-184.

[20] ZIMMERMAN K, RUPAKHETI C R. An automated framework for recommending program elements to novices[C]// Proceedings of the 30th IEEE/ACM International Conference on Automated Software Engineering. Piscataway: IEEE, 2015: 283-288.

[21] KIM J, LEE S, HWANG S W, et al. Enriching documents with examples: a corpus mining approach[J]. ACM Transactions on Information Systems, 2013, 31(1): No.1.

[22] ZHONG H, XIE T, ZHANG L, et al. MAPO: mining and recommending API usage patterns[C]// Proceedings of the 2009 European Conference on Object?Oriented Programming, LNCS 5653. Berlin: Springer, 2009: 318-343.

[23] WANG J, DANG Y N, ZHANG H Y, et al. Mining succinct and high?coverage API usage patterns from source code[C]// Proceedings of the 10th Working Conference on Mining Software Repositories. Piscataway: IEEE, 2013: 319-328.

[24] NGUYEN T T, NGUYEN H A, PHAM N H, et al. Graph?based mining of multiple object usage patterns[C]// Proceedings of the 7th Joint Meeting of the European Software Engineering Conference and the ACM SIGSOFT Symposium on the Foundations of Software Engineering. New York: ACM, 2009: 383-392.

[25] NGUYEN T T, PHAM H V, VU P M, et al. Learning API usages from bytecode: a statistical approach[C]// Proceedings of the IEEE/ACM 38th International Conference on Software Engineering. New York: ACM, 2016: 416-427.

[26] GU X D, ZHANG H Y, KIM S. CodeKernel: a graph kernel based approach to the selection of API usage examples[C]// Proceedings of the 34th IEEE/ACM International Conference on Automated Software Engineering. Piscataway: IEEE, 2019: 590-601.

[27] CHEN C, PENG X, XING Z C, et al. Holistic combination of structural and textual code information for context based API recommendation[J]. IEEE Transactions on Software Engineering, 2022, 48(8): 2987-3009.

[28] BORGWARDT K M, KRIEGEL H P. Shortest?path kernels on graphs[C]// Proceedings of the 5th IEEE International Conference on Data Mining. Piscataway: IEEE, 2005: 74-81.

Recommendation service for API use cases based on open source community analysis

ZHANG Jiaqi1,2, SUN Yanchun1,2*, HUANG Gang1,2

(1,,100871,;2(),100871,)

Current research on Application Program Interface (API) learning and code reuse focuses on mining frequent API usage patterns, extracting component information, and recommending personalized API services based on user requirements and target functions. However, as beginners in software development who lack professional knowledge, experience and skills to implement specific use cases, they often need real code use cases as a reference except reading official documents. Most of the existing research about code recommendation is in single fragment mode. The lack of cross function case in case selection is not conducive for beginners to learn to build a complete use scenario or a functional module. At the same time, the semantic description extracted from a single function annotation is not enough for learners to understand the complete function implementation method of the project. To solve the above problems, an API use case recommendation service based on open source community analysis was proposed. Taking the software development back?end framework Spring Boot as an example, a cross function case recommendation assistant learning service was constructed. Then, the feasibility and effectiveness of the proposed API use case recommendation service was verified through questionnaires and expert verification.

code reuse; Application Program Interface (API); open source community analysis; recommendation service; use case

This work is partially supported by Beijing Outstanding Young Scientist Program (BJJWZYJH01201910001004).

ZHANG Jiaqi, born in 1999, M. S. candidate. Her research interests include service computing, big data analysis.

SUN Yanchun, born in 1970, Ph. D., associate professor. Her research interests include service computing, big data analysis.

HUANG Gang, born in 1975, Ph. D., professor. His research interests include system software, self?adaption.

1001-9081(2022)11-3520-07

10.11772/j.issn.1001-9081.2021122070

2021?12?07;

2022?01?02;

2022?01?13。

北京高等學校卓越青年科學家項目(BJJWZYJH01201910001004)。

TP311

A

張佳琪(1999—),女,河北石家莊人,碩士研究生,主要研究方向:服務計算、大數據分析;孫艷春(1970—),女,遼寧沈陽人,副教授,博士,CCF高級會員,主要研究方向:服務計算、大數據分析;黃罡(1975—),男,湖南株洲人,教授,博士,CCF會員,主要研究方向:系統軟件、自適應。

猜你喜歡
案例用戶
案例4 奔跑吧,少年!
少先隊活動(2021年2期)2021-03-29 05:40:48
隨機變量分布及統計案例拔高卷
發生在你我身邊的那些治超案例
中國公路(2017年7期)2017-07-24 13:56:38
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
隨機變量分布及統計案例拔高卷
一個模擬案例引發的多重思考
中國衛生(2015年4期)2015-11-08 11:16:06
Camera360:拍出5億用戶
創業家(2015年10期)2015-02-27 07:55:08
100萬用戶
創業家(2015年10期)2015-02-27 07:54:39
主站蜘蛛池模板: 欧美一级高清片欧美国产欧美| 欧美一区二区啪啪| 最新亚洲人成网站在线观看| 欧洲在线免费视频| 97久久精品人人做人人爽| 国禁国产you女视频网站| 在线无码九区| 草逼视频国产| 国产sm重味一区二区三区| 亚洲人成网7777777国产| 色综合网址| 国产伦精品一区二区三区视频优播 | 亚洲日韩精品综合在线一区二区| 中国一级毛片免费观看| 日本一区高清| 国产精品999在线| 中文毛片无遮挡播放免费| 色屁屁一区二区三区视频国产| 国产青青操| 欧美69视频在线| 啪啪免费视频一区二区| 欧美日韩中文国产va另类| 国产不卡一级毛片视频| 91青青草视频| 日韩小视频在线观看| 国产欧美日韩在线一区| 国产成人精品18| 中美日韩在线网免费毛片视频| 91久久国产成人免费观看| 亚洲欧洲综合| 99国产在线视频| 欧美特级AAAAAA视频免费观看| 欧美日韩精品一区二区视频| 亚洲中久无码永久在线观看软件| 欧美啪啪一区| 亚洲有无码中文网| 精品少妇三级亚洲| 欧美日韩综合网| 色播五月婷婷| 精品国产香蕉在线播出| 看你懂的巨臀中文字幕一区二区| 国产永久在线视频| 99精品热视频这里只有精品7 | 玖玖精品在线| 成人永久免费A∨一级在线播放| 毛片在线播放网址| 精品人妻系列无码专区久久| 2021国产精品自拍| 色吊丝av中文字幕| 午夜无码一区二区三区在线app| 国产美女在线免费观看| 亚洲AV无码久久天堂| 2020国产精品视频| 亚洲AV成人一区二区三区AV| 热九九精品| 亚洲视频免| 国产人免费人成免费视频| 国产门事件在线| 国产精品无码作爱| 国产91丝袜| 精品国产aⅴ一区二区三区| 久久精品国产免费观看频道| 欧美日韩国产成人高清视频| 国产91在线|日本| 午夜精品福利影院| 日韩视频免费| 青草视频在线观看国产| av在线5g无码天天| 亚洲日韩高清在线亚洲专区| 久久无码高潮喷水| 国产精品嫩草影院视频| 日本一区二区不卡视频| 久久午夜影院| 亚洲欧美在线看片AI| 欧美精品导航| 欧美日韩午夜| 国产凹凸视频在线观看| 在线观看国产精美视频| 香蕉视频在线观看www| 欧美a级在线| 不卡国产视频第一页| 亚洲av无码牛牛影视在线二区|