• 
    

    
    

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

      基于代碼模式的軟件問答文檔檢索優(yōu)化方法*

      2017-10-12 03:40:10華晨彥鄒艷珍朱子驍
      計(jì)算機(jī)與生活 2017年10期
      關(guān)鍵詞:子圖開發(fā)人員數(shù)據(jù)流

      華晨彥,鄒艷珍+,朱子驍,謝 冰

      1.北京大學(xué) 信息科學(xué)技術(shù)學(xué)院,北京 100871

      2.高可信軟件技術(shù)教育部重點(diǎn)實(shí)驗(yàn)室,北京 100871

      3.北京大學(xué)(天津?yàn)I海)新一代信息技術(shù)研究院,天津 300450

      基于代碼模式的軟件問答文檔檢索優(yōu)化方法*

      華晨彥1,2,3,鄒艷珍1,2,3+,朱子驍1,2,3,謝 冰1,2,3

      1.北京大學(xué) 信息科學(xué)技術(shù)學(xué)院,北京 100871

      2.高可信軟件技術(shù)教育部重點(diǎn)實(shí)驗(yàn)室,北京 100871

      3.北京大學(xué)(天津?yàn)I海)新一代信息技術(shù)研究院,天津 300450

      Abstract:Developers often need to search related software Q&A documents in Q&A website.In the search results,the Q&A documents which contain good code snippets(usage examples)are preferred.However,how to metric those code snippets in document is still a big challenge.To address this issue,this paper proposes an approach for refining software Q&A document search results based on code pattern.Firstly,code snippets are extracted from each document in the search results.Then,the common code patterns are mined and used to measure the quality of those code snippets.Finally,the documents with high quality are recommended and ranked at the top of the search results.In the experiments,this paper carries out some evaluations with 10 real problems that software developers meet in practice.Compared to the search results of StackOverflow,the proposed approach has an increment of 40%atNDCG@5.

      Key words:code pattern;software Q&Adocument;document search

      開發(fā)人員通常通過問答網(wǎng)站的搜索引擎進(jìn)行相關(guān)軟件問答文檔的搜索。在檢索結(jié)果中,包含優(yōu)質(zhì)代碼片段(使用示例)的問答文檔往往更受青睞,但如何度量這些文檔中代碼片段的質(zhì)量仍是個(gè)巨大的挑戰(zhàn)。針對這個(gè)問題,提出了一種基于代碼模式的軟件問答文檔檢索優(yōu)化方法。該方法能夠基于當(dāng)前檢索結(jié)果,抽取文檔中的代碼片段,分析代碼片段中的公共代碼模式,并基于代碼模式度量文檔中代碼片段的質(zhì)量,從原有檢索結(jié)果中向用戶推薦高質(zhì)量的軟件問答文檔。以軟件開發(fā)人員在實(shí)踐過程中遇到的真實(shí)問題為基礎(chǔ)進(jìn)行了實(shí)驗(yàn),對比StackOverflow的搜索結(jié)果,所提方法在準(zhǔn)確率指標(biāo)NDCG@5上提升了40%。

      代碼模式;軟件問答文檔;文檔檢索

      1 引言

      近年來,各類技術(shù)性問答網(wǎng)站(如StackOverflow等)受到了開發(fā)者們的喜愛,這些問答網(wǎng)站上產(chǎn)生了大量的軟件問答文檔。如何檢索和利用這些軟件問答文檔成為軟件復(fù)用領(lǐng)域一個(gè)非常重要的研究問題。

      很多研究者針對軟件問答文檔檢索問題進(jìn)行了研究[1-2],主要關(guān)注點(diǎn)是對檢索結(jié)果進(jìn)行優(yōu)化和重排序[3]。例如,Atwood[4]使用StackOverflow的基于軟件問答文檔元數(shù)據(jù)的檢索結(jié)果排序方法。該方法通過軟件問答文檔的閱讀量、回答數(shù)量、贊同數(shù)量等指標(biāo)綜合計(jì)算每篇文檔的得分,按得分的高低對檢索結(jié)果進(jìn)行排序。Ponzanelli等人[5]設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)Eclipse插件PROMPTER。PROMPTER以代碼片段作為查詢的輸入,考慮了文本相似度(使用tf-idf)、代碼相似度(代碼克?。?、API(application programming interface)類型相似度、API方法相似度等參數(shù),加權(quán)平均決定軟件問答文檔的最終得分。Williams等人[6]提出了基于遞歸偽相關(guān)反饋策略的相似文檔檢索方法。對于給定查詢的結(jié)果列表R,對R的前k篇文檔遞歸進(jìn)行檢索,通過遞歸檢索的結(jié)果反饋評價(jià)原始結(jié)果,從而優(yōu)化檢索結(jié)果。Cha等人[7]提出了基于主題模型的文檔檢索優(yōu)化方法,使用LDA(latent Dirichlet allocation)主題模型給每篇文檔計(jì)算一個(gè)主題分布,根據(jù)查詢與每個(gè)主題的相關(guān)程度確定文檔在檢索結(jié)果中的排名位置。Zou等人[8]提出的面向軟件的文本檢索方法將問題分為6種類別,依據(jù)檢索問題與檢索結(jié)果是否屬于同一類別對檢索結(jié)果進(jìn)行重排序。

      從這些工作可以看出,如何挑選或推薦高質(zhì)量的檢索結(jié)果是當(dāng)前軟件問答文檔檢索優(yōu)化的主要目標(biāo)。本文在調(diào)研中發(fā)現(xiàn),軟件問答文檔中包含大量的代碼示例片段,包含代碼片段的問答文檔質(zhì)量較高,可以更好地幫助開發(fā)者了解或解決遇到的問題。但是由于不同文檔討論不同的問題,其針對的開發(fā)任務(wù)不同,并且問答文檔由不同的人編寫,其編碼的語言、風(fēng)格也大不相同,如何度量檢索結(jié)果文檔中代碼片段的質(zhì)量以及如何進(jìn)行檢索結(jié)果重排序仍是個(gè)巨大的挑戰(zhàn)。

      為此,本文提出了一種基于代碼模式的軟件問答文檔檢索優(yōu)化方法。該方法從解決相同/相似開發(fā)任務(wù)的軟件問答文檔的代碼片段中,抽取公共的代碼模式,通過代碼模式度量代碼片段和軟件問答文檔的質(zhì)量,由此通過檢索結(jié)果重排序向用戶推薦高質(zhì)量的軟件問答文檔。

      與現(xiàn)有工作相比,本文的主要貢獻(xiàn)包括:

      (1)定義了一種面向開發(fā)任務(wù)的軟件代碼使用模式,并提出了基于數(shù)據(jù)流圖的代碼模式挖掘方法。

      (2)提出了一種基于代碼模式的軟件問答文檔檢索優(yōu)化方法。通過代碼模式度量代碼片段和軟件問答文檔的質(zhì)量,給每篇問答文檔一個(gè)評分,并結(jié)合該文檔在原有檢索結(jié)果中的排序進(jìn)行檢索優(yōu)化。

      (3)實(shí)現(xiàn)并開源了一個(gè)基于代碼模式的軟件問答文檔推薦工具。以10個(gè)軟件開發(fā)人員在實(shí)踐過程中遇到的真實(shí)問題為基礎(chǔ)進(jìn)行了實(shí)驗(yàn),對比了Stack-Overflow的搜索結(jié)果,本文工作在準(zhǔn)確率指標(biāo)NDCG@5上提升了約40%。

      本文組織結(jié)構(gòu)如下:第2章介紹了代碼模式的定義和作用;第3章詳細(xì)討論了基于代碼模式的軟件問答文檔檢索優(yōu)化方法;第4章通過實(shí)驗(yàn)驗(yàn)證了方法的有效性;第5章對本文工作進(jìn)行了總結(jié)。

      2 代碼模式

      一般來說,軟件問答文檔的來源可分為兩類:軟件項(xiàng)目官網(wǎng)與技術(shù)性問答網(wǎng)站。軟件項(xiàng)目官網(wǎng)的軟件問答文檔由軟件項(xiàng)目的開發(fā)人員撰寫,準(zhǔn)確度高,結(jié)構(gòu)簡單,通常采用一問一答的形式,但數(shù)量少,覆蓋面狹窄;技術(shù)性問答網(wǎng)站的軟件問答文檔數(shù)量巨大,且為大量開發(fā)人員在實(shí)踐過程中總結(jié)出的經(jīng)驗(yàn)教訓(xùn),覆蓋面廣,實(shí)用性高。在這兩類問答文檔中,為了更好地幫助提問者理解回答或解決問題,回答者一般都會在答案中附上相應(yīng)的代碼片段。研究表明,在StackOverflow上的軟件問答文檔中,包含代碼片段的文檔數(shù)量約占總文檔數(shù)量的50%!這些代碼片段可能是回答者針對這一問題給出的,或是其曾經(jīng)開發(fā)過的項(xiàng)目中與該問題相關(guān)的代碼片段。

      在討論相同/相似問題的軟件問答文檔中,代碼片段(使用示例)往往調(diào)用相同的API方法,或包含一些共同的語句、方法調(diào)用、控制結(jié)構(gòu),本文將這些共性稱為開發(fā)任務(wù)的代碼模式(code pattern)。對于簡單的開發(fā)任務(wù),這些API可能為單個(gè)對象的若干方法順序執(zhí)行,然而對于復(fù)雜的任務(wù),便會涉及多個(gè)對象互相交互,還可能包含復(fù)雜的控制結(jié)構(gòu)。圖1展示了兩個(gè)StackOverflow文檔體現(xiàn)的代碼模式(加粗高亮表示的部分)。該模式是使用JDK的Scanner讀取文件的常用模式。

      在問答文檔檢索過程中,這些面向開發(fā)任務(wù)的代碼模式將帶來如下益處:(1)可以度量文檔中代碼片段的質(zhì)量,過濾不完整或不準(zhǔn)確的示例代碼;(2)可以解決文檔檢索中的模糊性問題,如提問者對問題的理解存在偏差,提問者的問題過于特化等情況。在圖1包含代碼模式的兩篇文檔中,其中文檔1[9]的開發(fā)任務(wù)是輸出給定文件中所有符合特定條件的行,文檔2[10]的開發(fā)任務(wù)是讀取csv格式的文件。通過代碼模式的抽取,用戶在檢索“Scanner read file”時(shí)也可以定位到它們。

      Fig.1 Code pattern of reading file using“Scanner”圖1 使用Scanner讀取文件的代碼模式

      3 基于代碼模式的軟件問答文檔檢索優(yōu)化方法

      本文提出了一種基于代碼模式的軟件問答文檔檢索優(yōu)化方法。如圖2所示,該方法主要分為三部分:

      Fig.2 Framework of refining software Q&Adocument search results based on code pattern圖2 基于代碼模式的軟件問答文檔檢索優(yōu)化方法框架

      (1)檢索結(jié)果的獲取與解析。根據(jù)用戶的查詢獲取與查詢相關(guān)的軟件問答文檔,并解析出其中的代碼片段。

      (2)代碼模式的抽取。將代碼片段轉(zhuǎn)換為數(shù)據(jù)流圖,通過頻繁子圖挖掘算法,在這些數(shù)據(jù)流圖中挖掘出代碼模式。

      (3)檢索結(jié)果的優(yōu)化。通過代碼模式給每一篇軟件問答文檔一個(gè)評分,將所有的軟件問答文檔按評分高低重排序,推薦給用戶。

      3.1 檢索結(jié)果的獲取與解析

      本文的軟件問答文檔數(shù)據(jù)來源于StackOverflow,根據(jù)用戶的查詢,使用StackOverflow的搜索API進(jìn)行在線搜索,并將結(jié)果下載至本地,便于后續(xù)的解析與處理。StackOverflow的軟件問答文檔為HTML格式。HTML使用標(biāo)簽表明文檔的內(nèi)容,依據(jù)嵌套關(guān)系表明文檔的層次結(jié)構(gòu),通過特定的標(biāo)簽即可解析出文檔中的代碼片段。

      3.2 代碼模式的抽取

      本文使用數(shù)據(jù)流圖(data flow graph)表示代碼模式。使用數(shù)據(jù)流圖存在以下兩個(gè)優(yōu)點(diǎn):一是在面向?qū)ο笳Z言開發(fā)過程中,開發(fā)者常常遇到多個(gè)對象需要互相協(xié)作的場景[11],使用數(shù)據(jù)流圖可以有效地梳理這種交織關(guān)系;二是開發(fā)者對代碼元素的命名有著各自的喜好,而代碼元素的命名不會影響代碼實(shí)現(xiàn)的功能。數(shù)據(jù)流圖只關(guān)心每條語句的輸入來源與輸出去向,可以有效地過濾代碼元素命名帶來的干擾。

      建立數(shù)據(jù)流圖需要變量的定值-使用關(guān)系,該信息可以通過靜態(tài)單賦值形式的控制流圖獲得。然而Java語法復(fù)雜,抽象語法樹的結(jié)點(diǎn)類型較多,難以直接轉(zhuǎn)換為控制流圖,并且不同開發(fā)人員實(shí)現(xiàn)相同功能的代碼可能使用了不同的語法,存在偏好差異,導(dǎo)致生成了不同的數(shù)據(jù)流圖,最終無法抽取出代碼模式。為此,需要先將Java語言的代碼片段通過中間代碼表示,再進(jìn)行后續(xù)操作。

      (1)解析代碼片段。在前文中提到不同開發(fā)人員在代碼編寫過程中存在偏好差異,本文通過解析代碼片段,并使用中間代碼表示(intermediate representation,IR)的方式消除這些差異。

      現(xiàn)有Java語言的中間代碼生成工具只能應(yīng)用于完整的Java項(xiàng)目,無法處理代碼片段。因此,本文設(shè)計(jì)與實(shí)現(xiàn)了一個(gè)Java語言的中間代碼生成工具。IR的設(shè)計(jì)主要有兩點(diǎn):一是能與原語法相對應(yīng);二是便于進(jìn)一步處理。在本文的IR設(shè)計(jì)中,產(chǎn)生式主要分為塊級與語句級兩個(gè)層次。塊級產(chǎn)生式對應(yīng)于控制流圖中的基本塊,便于轉(zhuǎn)換為控制流圖;語句級產(chǎn)生式對應(yīng)于一條語句,也是數(shù)據(jù)流圖的結(jié)點(diǎn)。語句級產(chǎn)生式均為變量賦值的形式,便于定值-使用分析。

      (2)轉(zhuǎn)換數(shù)據(jù)流圖。本文使用靜態(tài)單賦值形式(static single form,SSA)的控制流圖來獲取與建立數(shù)據(jù)流圖所需要的變量定值-使用關(guān)系。

      從中間代碼表示轉(zhuǎn)換至流圖只需要針對控制流語句在相應(yīng)結(jié)點(diǎn)之間添加邊即可。

      將控制流圖轉(zhuǎn)換為SSA形式的關(guān)鍵就是對每個(gè)變量的定值添加版本號,在其支配邊界處添加φ函數(shù),并相應(yīng)地更新所有使用的版本號。計(jì)算支配邊界先使用Lengauer-Tarjan算法[12]計(jì)算出直接支配結(jié)點(diǎn),再通過直接支配結(jié)點(diǎn)計(jì)算支配邊界[13]。

      將靜態(tài)單賦值形式的流圖轉(zhuǎn)換成數(shù)據(jù)流圖只需要對應(yīng)每一個(gè)變量的定值結(jié)點(diǎn)、連邊至其所有的使用即可。

      (3)挖掘代碼模式。本文將代碼模式表示為數(shù)據(jù)流圖后,該問題便可轉(zhuǎn)換為頻繁子圖挖掘問題。

      頻繁子圖挖掘(frequent subgraph mining)[14]是數(shù)據(jù)挖掘領(lǐng)域的熱門問題之一,基于頻繁子圖挖掘可以發(fā)現(xiàn)大量圖數(shù)據(jù)中的公共模式。簡單地說,給定一個(gè)圖,頻繁子圖挖掘的目的就是找出其中出現(xiàn)最頻繁的子圖。頻繁子圖挖掘的常見應(yīng)用場景包括化合物結(jié)構(gòu)、社交網(wǎng)絡(luò)等。給定圖的集合S={G1=(V1,E1),G2=(V2,E2),…,Gn=(Vn,En)},頻繁子圖挖掘的完整定義如下。

      定義1(圖的大?。┤我饨o定一個(gè)圖G=(V,E),稱G的大小為|V|,記為size(G)。

      定義2(子圖)如果?Gi=(Vi,Ei),Gj=(Vj,Ej),Vi?Vj,Ei?Ej,則稱Gi包含于Gj,或Gi是Gj的子圖,記為Gi?Gj。

      定義3(支持度)任意給定一個(gè)圖G,稱G的支持度為|{g|g∈S且G是g的子圖}|,記為support(G)。

      定義4(頻繁子圖)圖的集合S的所有頻繁子圖為{g|size(g)≥fsize且support(g)≥fsupport},其中fsize和fsupport是事先給定的閾值。

      gSpan算法[15]是一種基于模式增長的頻繁子圖挖掘算法。其核心思想是對圖進(jìn)行dfs編碼和最右擴(kuò)展,通過最小dfs編碼判斷同構(gòu)。由頻繁子圖的定義可知,若圖G1是頻繁子圖,G2?G1,那么G2也是頻繁子圖。然而對于代碼模式而言,G2的代表性嚴(yán)格劣于G1,因此本文刪除了這些冗余的結(jié)果。

      3.3 檢索結(jié)果的優(yōu)化

      軟件問答文檔中代碼片段包含的代碼模式數(shù)量越多,該文檔越具有代表性。然而代碼片段的長度會影響其包含的代碼模式數(shù)量。因此本文提出了兩個(gè)評價(jià)軟件問答文檔質(zhì)量的方法。

      (1)依據(jù)每篇軟件問答文檔被接受的答案中的代碼片段包含的代碼模式數(shù)量作為評分依據(jù)。使用公式表述為:

      (2)依據(jù)每篇軟件問答文檔被接受的答案中代碼片段數(shù)據(jù)流圖中屬于代碼模式的結(jié)點(diǎn)數(shù)量與總結(jié)點(diǎn)數(shù)量的比值作為評分依據(jù)。使用公式表述為:

      其中,codes(doc)表示文檔doc中的代碼片段集合;ddg(c)表示代碼片段c的控制流圖;patterns為挖掘出的代碼模式集合。

      最終的推薦結(jié)果依據(jù)文檔的評分,評分越高的文檔,排序越靠前。

      4 實(shí)驗(yàn)與案例研究

      基于上述工作,本文設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)軟件問答文檔推薦工具。該工具目前已經(jīng)在github上進(jìn)行開源(https://github.com/woooking/qa_sorting)。下面將以軟件開發(fā)人員遇到的實(shí)際問題為例,說明推薦方法的實(shí)現(xiàn)過程和效果。

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

      為了檢驗(yàn)本文工作,收集了10個(gè)軟件人員在開發(fā)過程中遇到的問題。表1描述了這10個(gè)問題對應(yīng)的開發(fā)任務(wù)及其在StackOverflow檢索時(shí)輸入的查詢條件。譬如,第一行描述了某軟件開發(fā)人員現(xiàn)有一個(gè)開發(fā)任務(wù)是完成某個(gè)網(wǎng)絡(luò)游戲的后臺。經(jīng)過團(tuán)隊(duì)協(xié)商決定使用TCP協(xié)議進(jìn)行網(wǎng)絡(luò)傳輸,但是他并不知道如何創(chuàng)建一個(gè)TCP服務(wù)器。因此,使用“create tcp server”作為查詢條件在StackOverflow上進(jìn)行檢索,希望得到與創(chuàng)建TCP服務(wù)器相關(guān)的問答文檔。

      Table 1 Queries used in experiment表1 實(shí)驗(yàn)所用查詢

      對于每個(gè)查詢,本文從StackOverflow上獲取文本相關(guān)性排名前10的軟件問答文檔。將這些文檔打亂順序交由提出查詢的軟件開發(fā)人員為這些文檔打分,分?jǐn)?shù)范圍是1~5分,評分依據(jù)為該文檔是否可以解決軟件開發(fā)人員的問題。

      4.2 案例研究

      任務(wù)1在StackOverflow上的檢索結(jié)果如表2(左側(cè))所示??梢钥吹?,檢索結(jié)果中排名第一位的文檔評分只有1分;前3個(gè)檢索結(jié)果中只有一個(gè)文檔的評分為5分;而前5個(gè)檢索結(jié)果中也只有一個(gè)文檔的評分為5分。這樣的檢索結(jié)果將耗費(fèi)用戶大量的時(shí)間用于文檔瀏覽,降低用戶的檢索體驗(yàn)。

      基于上述檢索結(jié)果,本文從排名前10的包含被接受答案與代碼片段的文檔中總共提取出20段代碼片段。解析這20段代碼片段,并將其轉(zhuǎn)換為數(shù)據(jù)流圖。在這20個(gè)數(shù)據(jù)流圖中進(jìn)行頻繁子圖挖掘,挖掘算法中的閾值fsize和fsupport均設(shè)為3,總共挖掘出3個(gè)代碼模式。圖3展示了其中的一個(gè)代碼模式。

      Fig.3 Acode pattern example of“create tcp server”圖3 create tcp server的代碼模式

      依據(jù)代碼模式,本文對每一篇問答文檔中的代碼片段進(jìn)行評分,評分依據(jù)為文檔中代碼片段包含的代碼模式的數(shù)量。由此對檢索結(jié)果進(jìn)行重排序,推薦結(jié)果如表2(右側(cè))所示。可以看到,檢索結(jié)果中排名前4的文檔都為5分,排名第5的文檔也有4分。這樣的檢索結(jié)果可以幫助用戶準(zhǔn)確快速地定位至高質(zhì)量的軟件問答文檔。通過對比可以發(fā)現(xiàn),本文推薦方法可以有效地幫助軟件開發(fā)人員解決問題。

      4.3 對比實(shí)驗(yàn)

      為了更好地驗(yàn)證本文工作,對上述10組檢驗(yàn)結(jié)果分別進(jìn)行了分析。為了評價(jià)推薦結(jié)果的好壞,本文選取了信息檢索中常用的指標(biāo)之一NDCG@k[16]。該指標(biāo)的計(jì)算公式如下:

      其中,r(i)表示排在結(jié)果第i位的項(xiàng)與查詢的相關(guān)程度,r(i)越高,相關(guān)程度越大。在本文中相關(guān)程度共分為5級,最高為4,最低為0;Nk是歸一化參數(shù),它使得在最佳排序(即r(i)為降序)時(shí),NDCG@k的值為1。

      本文選取NDCG@k作為評價(jià)指標(biāo)的理由為:

      (1)軟件開發(fā)人員只有閱讀高質(zhì)量的文檔才能解決開發(fā)問題,因此在評價(jià)指標(biāo)中需要體現(xiàn)出高質(zhì)量的文檔比低質(zhì)量的文檔對結(jié)果的影響性更大。在NDCG@k的公式中,指數(shù)位的r(i)體現(xiàn)了這一點(diǎn)。

      (2)高質(zhì)量文檔在推薦結(jié)果中的位置十分重要。在NDCG@k的公式中,體現(xiàn)了這一點(diǎn),結(jié)果越靠后的文檔被開發(fā)者閱讀的幾率越低,對排序結(jié)果的影響也就越低。

      在實(shí)驗(yàn)過程中,本文對比了4種問答文檔檢索/推薦方法。

      (1)StackOverflow:該站點(diǎn)的原始搜索結(jié)果。

      (2)pattern_ratio:依據(jù)代碼模式結(jié)點(diǎn)數(shù)與代碼片段結(jié)點(diǎn)數(shù)的比例評價(jià)文檔質(zhì)量。

      (3)pattern_count:依據(jù)代碼片段包含的代碼模式數(shù)量評價(jià)文檔質(zhì)量的評分。

      (4)replace:僅對包含被接受答案與代碼片段的文檔使用pattern_count方式評分,其余文檔的位置保持不變。

      實(shí)驗(yàn)結(jié)果如圖4所示。對比上述4種方法的結(jié)果可以發(fā)現(xiàn):整體而言,pattern_count方法的效果最佳。相比于StackOverflow的原始結(jié)果,pattern_count方法在NDCG@1(只看第一名)上從60.8%提升至83.3%,在NDCG@5(第一名到第五名)上從52.8%提升至75.1%,提升幅度為40%左右。pattern_ratio的效果略遜色于pattern_count。經(jīng)過分析發(fā)現(xiàn),回答者在回答問題時(shí)給出的代碼片段往往來源于其曾經(jīng)寫過的某個(gè)項(xiàng)目,因此會包含一些冗余代碼,這些代碼無法構(gòu)成代碼模式,但也不會影響文檔的質(zhì)量。而pattern_ratio依據(jù)代碼模式結(jié)點(diǎn)數(shù)與代碼片段結(jié)點(diǎn)數(shù)的比例評價(jià)文檔質(zhì)量,因此會降低此類文檔的評分。

      Fig.4 Result of experiment圖4 實(shí)驗(yàn)結(jié)果

      因?yàn)楸疚奶岢龅能浖柎鹞臋n檢索優(yōu)化方法基于軟件問答文檔中的代碼片段,所以最終的推薦結(jié)果只包含代碼片段。為了驗(yàn)證本文方法獲得的效果提升不僅僅是因?yàn)橥扑]了包含代碼片段的文檔,可以對比replace和StackOverflow兩種方法。replace與StackOverflow的文檔排序區(qū)別僅在于包含代碼片段的文檔,在結(jié)果中,replace比StackOverflow在k=1至5時(shí)均有提升,因此可以證明本文方法獲得的效果提升不僅僅是因?yàn)橥扑]了包含代碼片段的文檔,而是基于代碼模式的軟件問答文檔度量方法的確有效。

      5 總結(jié)

      為了在檢索過程中幫助用戶更快地找到包含優(yōu)質(zhì)示例代碼的相關(guān)文檔,本文提出了一種基于代碼模式的軟件問答文檔推薦方法,并以10個(gè)開發(fā)人員實(shí)際遇到的問題為基礎(chǔ)進(jìn)行了實(shí)驗(yàn),驗(yàn)證了本文方法的有效性。在未來工作中,將考慮加入更多來源、類型的軟件文檔數(shù)據(jù),以提升本文方法的適用性;進(jìn)一步改進(jìn)代碼模式挖掘方法,使得檢索系統(tǒng)能更快、更準(zhǔn)確地理解軟件問答文檔中的代碼片段。

      [1]Wang Xiaoling,Wen Jirong,Luan Jinfeng,et al.A method to query document database by content and structure[J].Journal of Software,2003,14(5):976-983.

      [2]Ye Ting,Xie Bing,Zou Yanzhen,et al.Interrogative-guided re-ranking for question-oriented software text retrieval[C]//Proceedings of the 29th ACM/IEEE International Conference on Automated Software Engineering,Vasteras,Sweden,Sep 15-19,2014.New York:ACM,2014:215-220.

      [3]Huang Zhenhua,Zhang Jiawen,Tian Chunqi,et al.Survey on learning-to-rank based recommendation algorithms[J].Journal of Software,2016,27(3):691-713.

      [4]Atwood J.What formula should be used to determine“hot”questions?[EB/OL].(2008)[2016-07-18].http://meta.stackexchange.com/questions/11602/what-formula-should-beused-to-determine-hot-questions.

      [5]Ponzanelli L,Bavota G,Di Penta M,et al.Mining Stack-Overflow to turn the IDE into a self-confident programming prompter[C]//Proceedings of the 11th Working Conference on Mining Software Repositories,Hyderabad,India,May 31-Jun 1,2014.New York:ACM,2014:102-111.

      [6]Williams K,Giles C L.Improving similar document retrieval using a recursive pseudo relevance feedback strategy[C]//Proceedings of the 16th ACM/IEEE-CS on Joint Conference on Digital Libraries,Newark,USA,Jun 19-23,2016.New York:ACM,2016:275-276.

      [7]Cha M S,Kim S Y,Ha J H,et al.Topic model based approach for improved indexing in content based document retrieval[J].International Journal of Networked and Distributed Computing,2016,4(1):55-64.

      [8]Zou Yanzhen,Ye Ting,Lu Yangyang,et al.Learning to rank for question oriented software text retrieval(T)[C]//Proceedings of the 30th IEEE/ACM International Conference on Automated Software Engineering,Lincoln,USA,Nov 9-13,2015.Washington:IEEE Computer Society,2015:1-11.

      [9]Java scanner class help[EB/OL].(2011)[2016-07-18].http://stackoverflow.com/questions/3947761/java-scanner-class-help.

      [10]Why does scanner read every other line of CSV file?Java[EB/OL].[2016-07-18].http://stackoverflow.com/questions/36564422/why-does-scanner-read-every-other-line-of-csvfile-java.

      [11]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,Amsterdam,Aug 24-28,2009.New York:ACM,2009:383-392.

      [12]Lengauer T,Tarjan R E.A fast algorithm for finding dominators in a flowgraph[J].ACM Transactions on Programming Languages and Systems,1979,1(1):121-141.

      [13]Cytron R,Ferrante J,Rosen B K,et al.Efficiently computing static single assignment form and the control dependence graph[J].ACM Transactions on Programming Languages and Systems,1991,13(4):451-490.

      [14]Inokuchi A,Washio T,Motoda H.An Apriori-based algorithm for mining frequent substructures from graph data[C]//LNCS 1910:Proceedings of the 4th European Conference on Principles of Data Mining and Knowledge Discovery,Lyon,France,Sep 13-16,2000.Berlin,Heidelberg:Springer,2000:13-23.

      [15]Yan Xifeng,Han Jiawei.gSpan:graph-based substructure pattern mining[C]//Proceedings of the 2002 IEEE International Conference on Data Mining,Maebashi City,Japan,Dec 9-12,2002.Washington:IEEE Computer Society,2002:721-724.

      [16]J?rvelin K,Kek?l?inen J.Cumulated gain-based evaluation of IR techniques[J].ACM Transactions on Information Systems,2002,20(4):422-446.

      附中文參考文獻(xiàn):

      [1]王曉玲,文繼榮,欒金鋒,等.一種通過內(nèi)容和結(jié)構(gòu)查詢文檔數(shù)據(jù)庫的方法[J].軟件學(xué)報(bào),2003,14(5):976-983.

      [3]黃震華,張佳雯,田春岐,等.基于排序?qū)W習(xí)的推薦算法研究綜述[J].軟件學(xué)報(bào),2016,27(3):691-713.

      Refine Software Q&ADocument Search Results Based on Code Pattern*

      HUAChenyan1,2,3,ZOU Yanzhen1,2,3+,ZHU Zixiao1,2,3,XIE Bing1,2,3
      1.School of Electronics Engineering and Computer Science,Peking University,Beijing 100871,China
      2.Key Laboratory of High Confidence Software Technologies,Ministry of Education,Beijing 100871,China
      3.Peking University Information Technology Institute(Tianjin Binhai),Tianjin 300450,China

      A

      TP301

      +Corresponding author:E-mail:zouyz@pku.edu.cn

      HUA Chenyan,ZOU Yanzhen,ZHU Zixiao,et al.Refine software Q&A document search results based on code pattern.Journal of Frontiers of Computer Science and Technology,2017,11(10):1591-1598.

      ISSN 1673-9418 CODEN JKYTA8

      Journal of Frontiers of Computer Science and Technology

      1673-9418/2017/11(10)-1591-08

      10.3778/j.issn.1673-9418.1609028

      E-mail:fcst@vip.163.com

      http://www.ceaj.org

      Tel:+86-10-89056056

      *The National Key Research and Development Program of China under Grant No.2016YFB1000804(國家重點(diǎn)研發(fā)計(jì)劃);the National Science Fund for Distinguished Young Scholars of China under Grant No.61525201(國家杰出青年科學(xué)基金).

      Received 2016-08,Accepted 2016-10.

      CNKI網(wǎng)絡(luò)優(yōu)先出版:2016-10-31,http://www.cnki.net/kcms/detail/11.5602.TP.20161031.1652.024.html

      HUA Chenyan was born in 1994.He is an M.S.candidate at Peking University.His research interest is software engineering.

      華晨彥(1994—),男,上海人,北京大學(xué)碩士研究生,主要研究領(lǐng)域?yàn)檐浖こ獭?/p>

      ZOU Yanzhen was born in 1976.She received the Ph.D.degree in software and software theory from Peking University in 2010.Now she is an associate professor at Peking University,and the member of CCF.Her research interests include software engineering,software reuse and information retrieval,etc.

      鄒艷珍(1976—),女,遼寧蓋州人,2010年于北京大學(xué)軟件與理論專業(yè)獲得博士學(xué)位,現(xiàn)為北京大學(xué)信息科學(xué)技術(shù)學(xué)院副教授,CCF會員,主要研究領(lǐng)域?yàn)檐浖こ?,軟件?fù)用,信息檢索等。

      ZHU Zixiao was born in 1990.He is a Ph.D.candidate at Peking University.His research interests include software engineering,software comprehension and reuse,etc.

      朱子驍(1990—),男,湖南郴州人,北京大學(xué)博士研究生,主要研究領(lǐng)域?yàn)檐浖こ?,軟件資源理解與復(fù)用等。

      XIE Bing was born in 1970.He received the Ph.D.degree from School of Computer,National University of Defense Technology in 1998.Now he is a professor and Ph.D.supervisor at Peking University,and the senior member of CCF.His research interests include software engineering and formal methods,etc.

      謝冰(1970—),男,湖南湘潭人,1998年于國防科技大學(xué)計(jì)算機(jī)學(xué)院獲得博士學(xué)位,現(xiàn)為北京大學(xué)信息科學(xué)技術(shù)學(xué)院軟件所教授、博士生導(dǎo)師,CCF高級會員,主要研究領(lǐng)域?yàn)檐浖こ?,形式化方法等。發(fā)表學(xué)術(shù)論文40余篇,主持國家863重點(diǎn)項(xiàng)目多項(xiàng),獲國家科技進(jìn)步二等獎(jiǎng)。

      猜你喜歡
      子圖開發(fā)人員數(shù)據(jù)流
      汽車維修數(shù)據(jù)流基礎(chǔ)(下)
      Semtech發(fā)布LoRa Basics 以加速物聯(lián)網(wǎng)應(yīng)用
      臨界完全圖Ramsey數(shù)
      一種提高TCP與UDP數(shù)據(jù)流公平性的擁塞控制機(jī)制
      基于頻繁子圖挖掘的數(shù)據(jù)服務(wù)Mashup推薦
      基于數(shù)據(jù)流聚類的多目標(biāo)跟蹤算法
      讓W(xué)indows 10進(jìn)入開發(fā)者模式
      電腦迷(2015年12期)2015-04-29 23:22:51
      后悔了?教你隱藏開發(fā)人員選項(xiàng)
      電腦愛好者(2015年6期)2015-04-03 01:20:56
      北醫(yī)三院 數(shù)據(jù)流疏通就診量
      不含2K1+K2和C4作為導(dǎo)出子圖的圖的色數(shù)
      桃江县| 仙游县| 盐源县| 教育| 蚌埠市| 神农架林区| 泰安市| 荔波县| 突泉县| 天柱县| 沛县| 望江县| 儋州市| 东丽区| 呼伦贝尔市| 永修县| 双流县| 广宗县| 江永县| 新平| 同心县| 同江市| 东辽县| 新竹县| 锡林浩特市| 无锡市| 英超| 旬邑县| 万宁市| 金川县| 交口县| 佛教| 花莲市| 兴城市| 青海省| 荥经县| 丹棱县| 民县| 古交市| 佛冈县| 平潭县|