李文鵬,王建彬,林澤琦,趙俊峰+,鄒艷珍,謝 冰
1.北京大學(xué) 信息科學(xué)技術(shù)學(xué)院,北京 100871
2.高可信軟件技術(shù)教育部重點(diǎn)實(shí)驗(yàn)室,北京 100871
3.北京大學(xué)(天津?yàn)I海)新一代信息技術(shù)研究院,天津 300450
面向開(kāi)源軟件項(xiàng)目的軟件知識(shí)圖譜構(gòu)建方法*
李文鵬1,2,3,王建彬1,2,3,林澤琦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
LI Wenpeng,WANG Jianbin,LIN Zeqi,et al.Software knowledge graph building method for open source project.Journal of Frontiers of Computer Science and Technology,2017,11(6):851-862.
軟件復(fù)用是軟件開(kāi)發(fā)中避免重復(fù)勞動(dòng)的解決方案。開(kāi)源軟件的源代碼、郵件列表、缺陷報(bào)告和問(wèn)答文檔等軟件資源中蘊(yùn)含了規(guī)模龐大、結(jié)構(gòu)復(fù)雜、語(yǔ)義關(guān)聯(lián)豐富的軟件知識(shí)。如何獲取知識(shí)、組織知識(shí),以及如何在軟件復(fù)用過(guò)程中方便地檢索軟件知識(shí)是亟待解決的問(wèn)題。為了解決這些問(wèn)題,面向開(kāi)源軟件項(xiàng)目,構(gòu)建了軟件知識(shí)圖譜,并提供了基于軟件知識(shí)圖譜的軟件知識(shí)檢索。主要工作包括:針對(duì)4種不同類型的軟件資源,提出了軟件知識(shí)實(shí)體的提取原則與方法;提出了軟件知識(shí)實(shí)體之間關(guān)聯(lián)關(guān)系構(gòu)建的方法;實(shí)現(xiàn)了兩種軟件知識(shí)檢索機(jī)制,并以文字列表和圖形可視化相結(jié)合的方式展現(xiàn)檢索結(jié)果;設(shè)計(jì)了軟件知識(shí)圖譜構(gòu)建框架?;谏鲜龉ぷ鳎O(shè)計(jì)并實(shí)現(xiàn)了一個(gè)面向開(kāi)源軟件項(xiàng)目的軟件知識(shí)圖譜構(gòu)建工具。實(shí)例證明,所構(gòu)建的軟件知識(shí)圖譜可以更好地幫助軟件開(kāi)發(fā)人員進(jìn)行軟件知識(shí)的檢索與應(yīng)用。
軟件復(fù)用;開(kāi)源軟件;軟件知識(shí)圖譜;圖數(shù)據(jù)庫(kù)
軟件復(fù)用是軟件開(kāi)發(fā)中避免重復(fù)勞動(dòng)的解決方案。通過(guò)軟件復(fù)用,可以提高軟件開(kāi)發(fā)的效率和質(zhì)量[1]。軟件復(fù)用成功的基本前提是存在大量可復(fù)用的軟件構(gòu)件,并且復(fù)用者在復(fù)用之前可以方便、有效地找到合適的可復(fù)用構(gòu)件[2]。開(kāi)源軟件是一種有效的軟件復(fù)用模式[3]。開(kāi)源軟件的蓬勃發(fā)展,極大地豐富了可復(fù)用的軟件構(gòu)件。
開(kāi)源軟件的源代碼、郵件列表、缺陷報(bào)告和問(wèn)答文檔等軟件資源中蘊(yùn)含了規(guī)模龐大、結(jié)構(gòu)復(fù)雜、語(yǔ)義關(guān)聯(lián)豐富的軟件知識(shí),這些知識(shí)能夠幫助軟件開(kāi)發(fā)人員理解軟件功能,進(jìn)行軟件復(fù)用。然而,如何組織、利用這些知識(shí)卻面臨諸多挑戰(zhàn):
(1)軟件規(guī)模增長(zhǎng)引發(fā)的軟件知識(shí)爆炸問(wèn)題。隨著軟件規(guī)模的增長(zhǎng)和軟件復(fù)雜度的提高,在軟件的開(kāi)發(fā)與復(fù)用過(guò)程中所需要理解與掌握的知識(shí)越來(lái)越多,使得復(fù)用者的學(xué)習(xí)成本越來(lái)越高。
(2)不同類型軟件資源導(dǎo)致的軟件理解問(wèn)題。軟件資源的類型多種多樣,不同類型的軟件資源中的軟件知識(shí)的特征也各不相同。
(3)軟件知識(shí)難以直觀地服務(wù)于軟件開(kāi)發(fā)人員。從不同類型的軟件資源中抽取出的軟件知識(shí)實(shí)體數(shù)量龐多,而且知識(shí)實(shí)體之間關(guān)系錯(cuò)綜復(fù)雜,需要提供一種方便用戶檢索和瀏覽知識(shí)的機(jī)制。
為了有效地組織軟件資源,更好地進(jìn)行軟件復(fù)用,本文面向開(kāi)源軟件項(xiàng)目構(gòu)建了軟件知識(shí)圖譜。軟件知識(shí)圖譜是指由不同類型的軟件資源的軟件知識(shí)圖有機(jī)融合構(gòu)成的用以描述某一軟件的知識(shí)體系。軟件知識(shí)圖是指由同一類型軟件資源的軟件知識(shí)實(shí)體及其之間的關(guān)聯(lián)關(guān)系所構(gòu)成的圖。軟件知識(shí)實(shí)體指的是軟件資源中可區(qū)分的、可辨識(shí)的且具有一定語(yǔ)義關(guān)系的單元體,而軟件知識(shí)實(shí)體之間關(guān)聯(lián)關(guān)系指的是兩兩軟件知識(shí)實(shí)體之間具有某種類型的二元關(guān)系。本文工作主要包括:
(1)提出了軟件知識(shí)實(shí)體的提取原則與方法。分別從軟件源代碼、缺陷報(bào)告、郵件列表和問(wèn)答文檔4種軟件資源中提取了相應(yīng)的軟件知識(shí)實(shí)體。
(2)提出了軟件知識(shí)實(shí)體之間關(guān)聯(lián)關(guān)系構(gòu)建的方法。分析了同一類型軟件資源中的軟件知識(shí)實(shí)體關(guān)聯(lián)關(guān)系的構(gòu)建方法與不同類型軟件資源中軟件知識(shí)實(shí)體之間的關(guān)聯(lián)關(guān)系。
(3)設(shè)計(jì)了形式化檢索和文本檢索兩種軟件知識(shí)檢索機(jī)制,并以文字列表和圖形可視化相結(jié)合的方式展現(xiàn)檢索結(jié)果。
(4)設(shè)計(jì)了軟件知識(shí)圖譜構(gòu)建框架,該框架由軟件知識(shí)提取模塊、軟件知識(shí)融合模塊、軟件知識(shí)圖譜存儲(chǔ)管理模塊與軟件知識(shí)檢索模塊構(gòu)成。
基于上述工作,本文設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)面向開(kāi)源軟件項(xiàng)目的軟件知識(shí)圖譜構(gòu)建工具,并以Lucene-Core為例,通過(guò)應(yīng)用實(shí)例展示了本文工作的有效性和合理性。
從軟件資源中提取知識(shí)的相關(guān)研究有:Cubranic等人[4]開(kāi)發(fā)了工具Hipikat來(lái)幫助復(fù)用者檢索開(kāi)源軟件的各種資源,其中主要涉及缺陷、特征描述、開(kāi)發(fā)者論壇中的帖子與其他項(xiàng)目相關(guān)的文檔這4類資源。Hipikat為一個(gè)指定項(xiàng)目收集資源和挖掘各類資源之間的關(guān)聯(lián)關(guān)系,建立了項(xiàng)目的資源數(shù)據(jù)庫(kù)。復(fù)用者可以在該庫(kù)中進(jìn)行檢索,系統(tǒng)將返回與之文本相似度較高的各種資源及其之間的關(guān)聯(lián)關(guān)系,方便復(fù)用者學(xué)習(xí)。但是Hipikcat對(duì)于每類軟件資源僅提取了對(duì)應(yīng)的文本信息,未對(duì)軟件資源做進(jìn)一步的知識(shí)提取。Gopinath等人[5]從軟件項(xiàng)目的代碼中提取出包、類、接口和方法信息,定義了項(xiàng)目、包、類、接口、方法等本體,將所有項(xiàng)目的本體存儲(chǔ)在同一個(gè)本體網(wǎng)里,以幫助開(kāi)發(fā)者復(fù)用已有的軟件。McMillan等人[6]構(gòu)建了代碼中函數(shù)之間的調(diào)用關(guān)系圖,用于在代碼搜索系統(tǒng)中幫助使用者檢索函數(shù)以及使用示例。
DBPedia從維基百科(Wikipedia)的詞條里擷取出結(jié)構(gòu)化的知識(shí)(RDF格式),并以語(yǔ)義網(wǎng)的形式將擷取的知識(shí)整合在一起[7]。DBPedia支持用戶進(jìn)行語(yǔ)義化查詢維基百科相關(guān)資源的屬性和資源之間的關(guān)系。谷歌的知識(shí)圖譜將谷歌索引的所有事物、人物和地點(diǎn),例如地標(biāo)性建筑、名人、球隊(duì)、電影、藝術(shù)品等,刻畫成實(shí)體,并建立這些實(shí)體之間的關(guān)聯(lián)關(guān)系。早期的知識(shí)圖譜建立在諸如Freebase、維基百科、維基數(shù)據(jù)以及美國(guó)中央情報(bào)局出版的《世界概況》等著名公開(kāi)數(shù)據(jù)源上,其包括了5億多個(gè)對(duì)象實(shí)體以及350億條這些對(duì)象實(shí)體之間的關(guān)聯(lián)關(guān)系。近期,谷歌又通過(guò)機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘方法[8-12],從索引的網(wǎng)頁(yè)中自動(dòng)發(fā)現(xiàn)新的實(shí)體和實(shí)體關(guān)系,從而擴(kuò)大并完善了知識(shí)圖譜[13]。這些研究主要涉及通用領(lǐng)域,較少涉及軟件相關(guān)的知識(shí)。本文根據(jù)軟件資源的特點(diǎn)研究軟件資源中的軟件知識(shí)提取和管理,并構(gòu)建軟件知識(shí)圖譜。
有關(guān)代碼和文檔之間的可追蹤性(traceability)的工作很多,本文關(guān)注這一研究方向中的代碼元素識(shí)別和關(guān)聯(lián)技術(shù)。Bacchelli等人[14]開(kāi)發(fā)了Miler工具,用以從郵件列表中提取出包含的代碼元素。該工具的主要思想是:先解析出軟件項(xiàng)目的代碼,再結(jié)合駝峰命名法(camel-case)和正則表達(dá)式匹配來(lái)識(shí)別代碼元素。Miler區(qū)分大小寫,可以較為準(zhǔn)確地識(shí)別出組合詞(如IndexReader)和單項(xiàng)詞元素(如Index)。其中組合詞的識(shí)別準(zhǔn)確率最高,而單項(xiàng)詞元素可能是自然語(yǔ)言中的單詞,需要添加一定的規(guī)則進(jìn)而準(zhǔn)確地識(shí)別單項(xiàng)詞元素。Dagenais等人[15]開(kāi)發(fā)了Reco-Doc工具,用于對(duì)API的相關(guān)學(xué)習(xí)資料建模,并從中提取出包含的代碼元素,進(jìn)而建立API和相關(guān)學(xué)習(xí)資料之間的可追蹤性。RecoDoc結(jié)合了部分程序分析和正則匹配技術(shù)提取代碼元素;同時(shí)還制定了一些啟發(fā)式規(guī)則,結(jié)合上下文環(huán)境提取代碼元素。
軟件資源中的軟件知識(shí)實(shí)體豐富多樣,它們之間的關(guān)聯(lián)關(guān)系也是錯(cuò)綜復(fù)雜。為此需要采用合適的模型表達(dá)軟件知識(shí)實(shí)體以及軟件知識(shí)實(shí)體之間的關(guān)聯(lián)關(guān)系。屬性圖模型能夠很好地利用屬性表達(dá)結(jié)點(diǎn)和關(guān)系豐富的信息,因此本文采用屬性圖模型進(jìn)行軟件知識(shí)圖譜的構(gòu)建。屬性圖模型的特征[16]如下:屬性圖模型是由結(jié)點(diǎn)、有向邊和屬性組成的;結(jié)點(diǎn)上包含屬性,屬性可以任何鍵值對(duì)的形式存在;每條邊都擁有一個(gè)方向、一個(gè)標(biāo)簽、一個(gè)開(kāi)始結(jié)點(diǎn)和一個(gè)結(jié)束結(jié)點(diǎn);就像結(jié)點(diǎn)一樣,邊也是有屬性的。
基于屬性圖模型,本文的軟件知識(shí)圖譜采用如下機(jī)制統(tǒng)一地表示從軟件資源中提煉的結(jié)構(gòu)化軟件知識(shí):圖中每個(gè)結(jié)點(diǎn)對(duì)應(yīng)一個(gè)軟件知識(shí)實(shí)體;圖中的每條有向邊代表一個(gè)語(yǔ)義關(guān)聯(lián);每個(gè)軟件知識(shí)實(shí)體中的鍵值對(duì)與實(shí)體所對(duì)應(yīng)的結(jié)點(diǎn)屬性一一對(duì)應(yīng);每個(gè)結(jié)點(diǎn)或邊由全局標(biāo)識(shí)符唯一標(biāo)識(shí)。
屬性圖模型是很多圖數(shù)據(jù)庫(kù)的底層實(shí)現(xiàn)模型。DB-Engines排名前5的圖數(shù)據(jù)庫(kù)[17]依次分別是Neo4j(http://neo4j.com/)、OrientDB(http://orientdb.com/)、Titan(http://thinkaurelius.github.com/titan/)、Virtuoso(http://virtuoso.openlinksw.com/)和ArangoDB(https: //www.arangodb.com/)??紤]到存儲(chǔ)模型、查詢語(yǔ)言、圖數(shù)據(jù)庫(kù)成熟度等因素,由于Neo4j原生支持屬性圖模型,具有豐富的查詢語(yǔ)言,使用用戶多,成熟度高,本文選擇Neo4j作為軟件知識(shí)圖譜的底層存儲(chǔ)。
在構(gòu)建面向開(kāi)源項(xiàng)目軟件知識(shí)圖譜時(shí),需要解決以下3個(gè)問(wèn)題:
(1)軟件知識(shí)實(shí)體提取。軟件資源的類型是多種多樣的,包括軟件源代碼、郵件列表、缺陷報(bào)告、相關(guān)問(wèn)答文檔等各種不同的資源類型。同一類型的軟件資源、數(shù)據(jù)來(lái)源也可能不同,如缺陷報(bào)告可能來(lái)自JIRA、BugZilla或Lighthouse。不同的軟件資源中,軟件知識(shí)實(shí)體的形式與特點(diǎn)也各不相同。
(2)軟件知識(shí)實(shí)體關(guān)聯(lián)關(guān)系建立。同一類型的軟件資源中所提取的軟件知識(shí)實(shí)體之間存在各種關(guān)聯(lián)關(guān)系,由軟件資源自身特點(diǎn)決定;從不同類型的軟件資源中提取的軟件知識(shí)實(shí)體也存在關(guān)聯(lián)關(guān)系,如郵件中可能引用一個(gè)缺陷報(bào)告。
(3)軟件知識(shí)檢索與展現(xiàn)。如何利用軟件知識(shí)圖譜向軟件開(kāi)發(fā)人員提供其所需的知識(shí),并針對(duì)不同精度需求提供不同方式的檢索。
本文面向開(kāi)源軟件項(xiàng)目的軟件知識(shí)圖譜構(gòu)建工具的總體框架如圖1所示。
面向開(kāi)源項(xiàng)目軟件知識(shí)圖譜構(gòu)建工具的輸入是開(kāi)源項(xiàng)目的源代碼、缺陷報(bào)告、郵件列表和問(wèn)答文檔等軟件資源。首先從這些軟件資源中提取出各自的軟件知識(shí)圖,稱之為軟件知識(shí)提取;然后建立軟件知識(shí)實(shí)體關(guān)聯(lián)關(guān)系,將來(lái)自不同類型軟件資源獨(dú)立的軟件知識(shí)圖有機(jī)地組織在一起,形成軟件知識(shí)圖譜;最后建立知識(shí)檢索與展現(xiàn)機(jī)制,面對(duì)用戶的精確檢索和模糊檢索需求,在軟件知識(shí)圖譜之上提供形式化檢索和文本檢索兩種檢索機(jī)制。
Fig.1 Framework diagram of software knowledge graph圖1 軟件知識(shí)圖譜框架圖
基于上述的總體解決方案,下面將對(duì)軟件知識(shí)實(shí)體提取、軟件知識(shí)實(shí)體關(guān)聯(lián)關(guān)系建立和軟件知識(shí)檢索與展現(xiàn)3個(gè)問(wèn)題進(jìn)行詳細(xì)的闡述。
4.1 軟件知識(shí)實(shí)體提取
4.1.1 面向軟件源代碼的軟件知識(shí)實(shí)體提取
本文主要面向Java開(kāi)源項(xiàng)目,因此研究面向Java源代碼的軟件知識(shí)實(shí)體提取。根據(jù)Java語(yǔ)言規(guī)范,Java代碼是由包、類、接口、域、方法、語(yǔ)句等代碼元素構(gòu)成。為了進(jìn)一步豐富代碼結(jié)構(gòu)化的知識(shí),本文將域和方法提取為軟件知識(shí)實(shí)體,具體實(shí)體屬性內(nèi)容如表1所示。
Table 1 Information of software knowledge entities in code表1 代碼中的軟件知識(shí)實(shí)體信息表
本文使用Eclipse JDT的ASTParser將每個(gè)Java文件解析成一個(gè)抽象語(yǔ)法樹(shù)(abstract syntax tree,AST)。AST使用樹(shù)狀結(jié)構(gòu)表示代碼的抽象語(yǔ)法結(jié)構(gòu),樹(shù)上每個(gè)結(jié)點(diǎn)都對(duì)應(yīng)代碼中的一種結(jié)構(gòu)。
代碼中的每個(gè)元素都對(duì)應(yīng)抽象語(yǔ)法上的一個(gè)結(jié)點(diǎn),使用Visitor設(shè)計(jì)模式遍歷所有結(jié)點(diǎn)提取如表1所示的包、類、接口、域和方法軟件知識(shí)實(shí)體以及對(duì)應(yīng)的屬性信息,并將這些軟件知識(shí)實(shí)體保存至代碼實(shí)體池中。另外,ASTParser只能將塊注釋關(guān)聯(lián)至對(duì)應(yīng)的代碼元素,而對(duì)于行注釋信息則不能自動(dòng)對(duì)應(yīng)到相應(yīng)的代碼元素上。對(duì)于行注釋信息,需單獨(dú)處理,根據(jù)其在文件中的位置與相應(yīng)的代碼實(shí)體綁定。
4.1.2 面向缺陷報(bào)告的軟件知識(shí)實(shí)體提取
開(kāi)源軟件項(xiàng)目中常用的缺陷報(bào)告系統(tǒng)有JIRA、 BugZilla和Lighehouse,它們的差異在于不同系統(tǒng)中信息的豐富程度不同,本文通過(guò)取這些缺陷報(bào)告系統(tǒng)信息的超集來(lái)解決這個(gè)問(wèn)題。如JIRA的缺陷報(bào)告中有缺陷類型信息,而B(niǎo)ugzilla中沒(méi)有該信息,那么超集為包含該信息,只是從Bugzilla中提取該信息時(shí)為null。
缺陷報(bào)告可以看作是“問(wèn)題-解決方案-反饋-參與者”型的軟件資源。對(duì)于這類資源,可以將每個(gè)問(wèn)題、解決方案、反饋以及相應(yīng)的參與者單獨(dú)提取為一個(gè)軟件知識(shí)實(shí)體。因此將“缺陷報(bào)告”、“補(bǔ)丁”、“缺陷報(bào)告評(píng)論”以及相應(yīng)的參與者單獨(dú)提取為軟件知識(shí)實(shí)體,如表2所示。
Table 2 Information of software knowledge entities in issue表2 缺陷報(bào)告中的軟件知識(shí)實(shí)體信息表
JIRA中每一個(gè)缺陷報(bào)告對(duì)應(yīng)一個(gè)JSON(Java-Script object notation)和多個(gè)文本格式的補(bǔ)丁文件(如果有補(bǔ)丁文件)。其中JSON文件中包含了除補(bǔ)丁外所有與缺陷報(bào)告相關(guān)的信息。本文使用開(kāi)源JSON解析工具GSON解析JSON文件,從每一個(gè)JSON文件中獲取對(duì)應(yīng)缺陷報(bào)告實(shí)體、補(bǔ)丁實(shí)體、缺陷報(bào)告評(píng)論實(shí)體和缺陷報(bào)告用戶實(shí)體的信息,利用文件解析工具FileUtils解析相應(yīng)的補(bǔ)丁文件設(shè)置補(bǔ)丁的“補(bǔ)丁內(nèi)容”信息。
4.1.3 面向郵件列表的軟件知識(shí)實(shí)體提取
開(kāi)源軟件項(xiàng)目的郵件列表歸檔通常使用Mbox格式。一封郵件天然就是可區(qū)分可辨識(shí)的且具有一定語(yǔ)義的單元體,可以將單獨(dú)的一封郵件提取為軟件知識(shí)實(shí)體。具體屬性如表3所示。
Table 3 Information of software knowledge entities in mail表3 郵件列表中的軟件知識(shí)實(shí)體信息表
開(kāi)源軟件提供的郵件列表歸檔的格式多樣,本文考慮Mbox格式。每個(gè)Mbox文件由多封郵件構(gòu)成,本文使用Mime4j解析出每一封郵件,以及每封郵件對(duì)應(yīng)的標(biāo)識(shí)符、主題、發(fā)送日期、發(fā)送者、接收者和郵件內(nèi)容。
為了獲取郵件“用戶實(shí)體”的信息,本文通過(guò)正則匹配從發(fā)送者和接收者信息中解析出名稱和郵件地址。但是,Mbox中的用戶名稱位置不盡相同,而且表示形式多樣。針對(duì)這種情況,本文為發(fā)現(xiàn)的每一種特殊形式設(shè)計(jì)一個(gè)正則表達(dá)式,盡可能提高準(zhǔn)確度。
4.1.4 面向問(wèn)答文檔的軟件知識(shí)實(shí)體提取
問(wèn)答文檔是“問(wèn)題-解決方案-反饋-參與者”型的軟件資源,可以將問(wèn)題、答案、評(píng)論以及相應(yīng)的參與者單獨(dú)提取為軟件知識(shí)實(shí)體,如表4所示。
Table 4 Information of software knowledge entities in Q&Adocument表4 問(wèn)答文檔中的軟件知識(shí)實(shí)體信息表
本文問(wèn)答信息獲取自問(wèn)答網(wǎng)站Stack Overflow的數(shù)據(jù)Stack Overflow Dump,解析Dump得到Posts、Comments和Users等幾個(gè)XML文件,利用XML解析器SARParser解析Posts提取出問(wèn)題和答案實(shí)體;解析Comments提取出問(wèn)答評(píng)論實(shí)體;解析Users提取出問(wèn)答用戶實(shí)體。
4.2 軟件知識(shí)實(shí)體關(guān)聯(lián)關(guān)系建立
軟件知識(shí)實(shí)體之間具有大量語(yǔ)義豐富的關(guān)聯(lián)關(guān)系:同一軟件資源內(nèi)部的軟件知識(shí)實(shí)體之間的關(guān)聯(lián)關(guān)系,這些關(guān)系往往是特有的、與類型相關(guān)的,需要針對(duì)具體的資源類型建立起這些語(yǔ)義關(guān)聯(lián)關(guān)系;跨不同軟件資源的軟件知識(shí)實(shí)體之間的關(guān)聯(lián)關(guān)系,本文考慮3類:(1)代碼元素關(guān)聯(lián),一個(gè)軟件知識(shí)實(shí)體所包含的信息中直接提及了同項(xiàng)目中的某一個(gè)代碼元素;(2)引用關(guān)聯(lián),一個(gè)軟件知識(shí)實(shí)體通過(guò)超鏈接或唯一標(biāo)識(shí)符的形式引用另一個(gè)軟件知識(shí)實(shí)體;(3)用戶關(guān)聯(lián),同一用戶在不同軟件知識(shí)實(shí)體中扮演不同角色。
4.2.1 同一資源的軟件知識(shí)實(shí)體關(guān)聯(lián)關(guān)系建立
本文建立的軟件知識(shí)實(shí)體之間的關(guān)聯(lián)關(guān)系如表5~表8所示。其中關(guān)系均采用集合論表示,如“實(shí)現(xiàn)= {(類,接口)}”中實(shí)現(xiàn)關(guān)系集合包括類與接口之間的實(shí)現(xiàn)關(guān)系。
Table 5 Relationship information of code entities表5 軟件代碼實(shí)體之間的關(guān)聯(lián)關(guān)系表
軟件代碼中多數(shù)關(guān)系蘊(yùn)含在已提取出的軟件知識(shí)實(shí)體屬性中。對(duì)于“依賴”和“調(diào)用”關(guān)系,需要利用ASTParser將代碼解析到每一個(gè)語(yǔ)句。
Table 6 Relationship information of issue entities表6 缺陷報(bào)告實(shí)體之間的關(guān)聯(lián)關(guān)系表
Table 7 Relationship information of mail entities表7 郵件列表實(shí)體之間的關(guān)聯(lián)關(guān)系表
Table 8 Relationship information of Q&Adocument entities表8 問(wèn)答文檔知識(shí)實(shí)體之間的關(guān)聯(lián)關(guān)系表
“作者關(guān)系”蘊(yùn)含在知識(shí)實(shí)體屬性中,而對(duì)于“補(bǔ)丁關(guān)系”、“缺陷報(bào)告評(píng)論關(guān)系”、“重復(fù)關(guān)系”而言,需要在解析過(guò)程中,記錄下對(duì)應(yīng)關(guān)系類型的映射,根據(jù)每一條映射為實(shí)體添加關(guān)聯(lián)關(guān)系。
“發(fā)送者”、“接收者”關(guān)系蘊(yùn)含在郵件實(shí)體的“接收者”屬性中;“回復(fù)”關(guān)系需要在解析Mbox時(shí)記錄下包含“In-Reply-To”信息的郵件的標(biāo)識(shí)符以及對(duì)應(yīng)的“In-Reply-To”信息,通過(guò)標(biāo)識(shí)符定位具體的郵件實(shí)體,并在兩個(gè)郵件實(shí)體之間建立“回復(fù)”關(guān)系。
“答案關(guān)系”、“評(píng)論關(guān)系”、“作者關(guān)系”蘊(yùn)含在知識(shí)實(shí)體屬性中,對(duì)于“重復(fù)關(guān)系”,解析PostLinks得到重復(fù)關(guān)系對(duì)應(yīng)的問(wèn)題標(biāo)識(shí)符對(duì),在對(duì)應(yīng)的問(wèn)題實(shí)體間建立一條“重復(fù)關(guān)系”。
4.2.2 不同資源的軟件知識(shí)實(shí)體關(guān)聯(lián)關(guān)系建立
對(duì)于不同類型軟件資源中的軟件知識(shí)實(shí)體,本文主要建立3種不同的關(guān)聯(lián)關(guān)系:代碼元素關(guān)聯(lián)、引用關(guān)聯(lián)和用戶關(guān)聯(lián)。
4.2.2.1 代碼元素關(guān)聯(lián)
代碼元素關(guān)聯(lián)是指建立軟件代碼中的軟件知識(shí)實(shí)體與其他類型軟件資源中軟件知識(shí)實(shí)體之間的關(guān)聯(lián)關(guān)系。如果一個(gè)非代碼軟件知識(shí)實(shí)體的屬性信息提及了同項(xiàng)目的一個(gè)代碼元素(類、接口、域或方法),則在該軟件知識(shí)實(shí)體與該代碼元素對(duì)應(yīng)的軟件知識(shí)實(shí)體之間建立一條語(yǔ)義關(guān)聯(lián)關(guān)系。本文稱這種語(yǔ)義關(guān)聯(lián)關(guān)系為“代碼引用”關(guān)系,可以看作一種特殊的“引用”關(guān)聯(lián)關(guān)系。代碼元素關(guān)聯(lián)識(shí)別方法根據(jù)RecoDoc[15]技術(shù)實(shí)現(xiàn),具體方法如下:
(1)通過(guò)基于模式匹配的方法實(shí)現(xiàn)對(duì)自然語(yǔ)言文本中的詞項(xiàng)進(jìn)行分類。該工作將自然語(yǔ)言文本中的詞項(xiàng)劃分成兩類:自然語(yǔ)言詞項(xiàng)與代碼詞項(xiàng)。這一劃分通過(guò)與若干自定義的詞項(xiàng)模式進(jìn)行自動(dòng)比對(duì)(如駝峰命名模式、常量大寫模式等),適應(yīng)于對(duì)大部分常見(jiàn)代碼風(fēng)格的軟件項(xiàng)目分析。
(2)通過(guò)上下文分析的方法實(shí)現(xiàn)對(duì)代碼元素的歧義消除。該工作對(duì)代碼元素的歧義消除利用了上下文分析技術(shù),其基礎(chǔ)是代碼元素在文檔中出現(xiàn)的局部性,即在相近的文檔實(shí)體中被引用的代碼實(shí)體亦多是相近的。
(3)通過(guò)基于注釋分析的方法實(shí)現(xiàn)對(duì)識(shí)別結(jié)果的精化。對(duì)于上下文信息不足的代碼詞項(xiàng),該工作利用待消除歧義的代碼實(shí)體所涉及的注釋,度量它與文檔實(shí)體間的相似性,進(jìn)而對(duì)識(shí)別結(jié)果進(jìn)行精化。
4.2.2.2 引用關(guān)聯(lián)
(1)識(shí)別出可被引用(超鏈接或全局唯一標(biāo)識(shí)符引用)的軟件知識(shí)實(shí)體。
(2)分析每一類可被引用的軟件知識(shí)實(shí)體對(duì)應(yīng)的超鏈接或全局唯一標(biāo)識(shí)符的模式。
(3)對(duì)于每一個(gè)具體的、可被引用的軟件知識(shí)實(shí)體ei,逐一分析每個(gè)軟件知識(shí)實(shí)體ej,若ej包含符合ei超鏈接或全局唯一標(biāo)識(shí)符模式的字符串,則建立一條從ej到ei的“引用”關(guān)系。
4.2.2.3 用戶關(guān)聯(lián)
用戶關(guān)聯(lián)是指同一用戶在不同軟件知識(shí)實(shí)體中扮演不同角色的關(guān)聯(lián)關(guān)系。比如,某個(gè)郵件的發(fā)送者也是某個(gè)缺陷報(bào)告的創(chuàng)建者。本文根據(jù)郵件地址與用戶名等信息,識(shí)別并關(guān)聯(lián)不同類型軟件資源中的同一用戶,進(jìn)而間接建立不同類型軟件資源的軟件知識(shí)實(shí)體之間的關(guān)聯(lián)關(guān)系。本文稱這種語(yǔ)義關(guān)聯(lián)關(guān)系為“同一用戶”關(guān)系。建立用戶關(guān)聯(lián)的方法如下:
(1)識(shí)別出包含用戶的軟件資源。
(2)按照是否包含郵件地址信息,將用戶分成兩類。
(3)對(duì)于包含郵件地址的用戶,直接通過(guò)郵件地址關(guān)聯(lián)不同類型軟件資源中的用戶。
(4)對(duì)于不包含郵件地址的用戶,基于“在不同軟件資源中討論同一項(xiàng)目、用戶名稱相同且唯一的兩個(gè)用戶是同一個(gè)人”的假設(shè),通過(guò)用戶名稱關(guān)聯(lián)不同類型軟件資源中的用戶。
5.1 形式化檢索與展現(xiàn)
本文軟件知識(shí)圖譜的底層存儲(chǔ)支持系統(tǒng)為Neo4j。Neo4j提供了一個(gè)聲明式的、易讀的圖查詢語(yǔ)言Cypher,可直接使用Cypher檢索軟件知識(shí)。
Cypher語(yǔ)法對(duì)于自定義的關(guān)系、結(jié)點(diǎn)的標(biāo)簽和結(jié)點(diǎn)、關(guān)系的屬性名是區(qū)分大小寫的。當(dāng)關(guān)系名稱和結(jié)點(diǎn)的標(biāo)簽名稱較長(zhǎng)時(shí),輸入拼寫正確的名稱是困難的,對(duì)使用者是不友好的。本文借鑒Eclipse進(jìn)行代碼補(bǔ)全的思想,根據(jù)上下文環(huán)境實(shí)時(shí)推薦代碼元素,開(kāi)發(fā)了Cypher補(bǔ)全工具,使得用戶輸入查詢語(yǔ)句時(shí)可以根據(jù)上下文推薦關(guān)系、結(jié)點(diǎn)的標(biāo)簽和屬性名。
5.2 文本檢索與展現(xiàn)
本文將所有軟件知識(shí)實(shí)體的核心文本內(nèi)容(表9)單獨(dú)提取成一個(gè)個(gè)的文檔,并建立起文檔與軟件知識(shí)實(shí)體之間的關(guān)聯(lián)關(guān)系;然后為每個(gè)文檔建立倒排索引。在用戶進(jìn)行檢索時(shí),返回TopK(本文K= 100)個(gè)與檢索語(yǔ)句相關(guān)的文檔,然后根據(jù)文檔與軟件知識(shí)實(shí)體之間的關(guān)聯(lián)關(guān)系,得到TopK個(gè)與檢索語(yǔ)句相關(guān)的軟件知識(shí)實(shí)體。展示內(nèi)容包含核心內(nèi)容及相應(yīng)上下文信息。
Table 9 Core attributes of software knowledge entities表9 軟件知識(shí)實(shí)體核心內(nèi)容屬性表
本章首先介紹以Lucene-Core項(xiàng)目為例構(gòu)造的軟件知識(shí)圖譜的情況,接著展示Cypher自動(dòng)補(bǔ)全的效果,最后展示軟件知識(shí)檢索效果。
6.1 實(shí)例展示
Lucene-Core軟件知識(shí)圖譜的軟件知識(shí)實(shí)體和關(guān)聯(lián)關(guān)系數(shù)量統(tǒng)計(jì)情況如表10、表11所示。
6.2 軟件知識(shí)檢索與展現(xiàn)
6.2.1 代碼補(bǔ)全展示
圖2和圖3展示了本文Cypher補(bǔ)全工具對(duì)結(jié)點(diǎn)標(biāo)簽信息、結(jié)點(diǎn)屬性信息補(bǔ)全的情況。
6.2.2 檢索IndexReader類所有的子孫類
Table 10 Software knowledge entities in Lucene-Core表10 Lucene-Core軟件知識(shí)實(shí)體統(tǒng)計(jì)表
Table 11 Relationships of software knowledge entities in Lucene-Core表11 Lucene-Core軟件知識(shí)實(shí)體關(guān)聯(lián)關(guān)系統(tǒng)計(jì)表
Fig.2 Auto-completion of node label圖2 結(jié)點(diǎn)標(biāo)簽補(bǔ)全示意圖
Fig.3 Auto-completion of node attribute圖3 結(jié)點(diǎn)屬性自動(dòng)補(bǔ)全示例圖
Fig.4 Search result in text list about“descendent classes of IndexReader”圖4 “IndexReader類所有的子孫類”文字列表檢索結(jié)果
文字列表檢索結(jié)果(部分結(jié)果)、圖形可視化檢索結(jié)果分別如圖4和圖5所示。由圖4中紅框部分可知,LeafReader的父類是IndexReader。圖5展示了所有直接或間接繼承IndexReader的類,其中最上面的結(jié)點(diǎn)為IndexReader,向下每一行表示Index同一繼承深度的子孫類,繼承關(guān)系由邊上的“EXTEND”表示。
6.2.3 檢索與IndexReader類相關(guān)的重復(fù)Bug信息
Fig.5 Search result in graph about“descendent classes of IndexReader”圖5 “IndexReader類所有的子孫類”圖形可視化檢索結(jié)果
Fig.6 Search result in text list about“bug duplications of IndexReader”圖6 “IndexReader類相關(guān)的重復(fù)Bug信息”文字列表結(jié)果
Fig.7 Search result in graph about“bug duplications of IndexReader”圖7 “IndexReader類相關(guān)的重復(fù)Bug信息”圖形可視化結(jié)果
文字列表檢索結(jié)果、圖形可視化檢索結(jié)果分別如圖6和圖7所示。圖6列出了IndexReader類和具有重復(fù)Bug信息的兩個(gè)缺陷報(bào)告,其中藍(lán)色高亮對(duì)應(yīng)的是IndexReader類,紅色高亮表示其類型是Bug,綠色高亮展示了檢索結(jié)果Issue與“IndexReader”的相關(guān)性。圖7邊上LEX_LEVEL_REFER是由代碼元素關(guān)聯(lián)建立的“代碼引用關(guān)系”,DUPLICATE表示缺陷報(bào)告之間的“重復(fù)關(guān)系”。
7.1 本文工作總結(jié)
本文的主要工作包括:
(1)提出了軟件知識(shí)實(shí)體的提取原則與方法,并分別針對(duì)4種不同類型的軟件資源提取了軟件知識(shí)實(shí)體。
(2)提出了軟件知識(shí)實(shí)體之間關(guān)聯(lián)關(guān)系構(gòu)建的方法,分析了同一類型軟件資源中軟件知識(shí)實(shí)體之間關(guān)聯(lián)關(guān)系的類型及特點(diǎn),給出了同一類型軟件資源中的軟件知識(shí)實(shí)體關(guān)聯(lián)關(guān)系的構(gòu)建方法;接著以代碼結(jié)構(gòu)為核心,引用關(guān)聯(lián)和用戶關(guān)聯(lián)為輔助的方式,建立了不同類型軟件資源中軟件知識(shí)實(shí)體之間的關(guān)聯(lián)關(guān)系。
(3)設(shè)計(jì)了兩種軟件知識(shí)檢索機(jī)制,并以文字列表和圖形可視化相結(jié)合的方式展現(xiàn)檢索結(jié)果。本文利用Neo4j的聲明式查詢語(yǔ)言Cypher提供形式化檢索,并通過(guò)開(kāi)發(fā)Neo4j的服務(wù)器擴(kuò)展程序提供了Cypher補(bǔ)全工具,以幫助用戶方便地進(jìn)行形式化檢索;利用ElasticSearch對(duì)軟件知識(shí)中的文本信息建立索引,并提供文本檢索功能。
(4)設(shè)計(jì)了軟件知識(shí)圖譜構(gòu)建框架,該框架由軟件知識(shí)提取模塊、軟件知識(shí)融合模塊、軟件知識(shí)圖譜存儲(chǔ)管理模塊與軟件知識(shí)檢索模塊構(gòu)成,分別提供軟件知識(shí)實(shí)體提取、軟件知識(shí)實(shí)體之間的關(guān)聯(lián)關(guān)系建立、軟件知識(shí)圖融合、軟件知識(shí)圖譜存儲(chǔ)以及基于軟件知識(shí)圖譜檢索等功能。
本文設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)面向開(kāi)源軟件項(xiàng)目的軟件知識(shí)圖譜構(gòu)建工具,并以Lucene-Core為例,通過(guò)實(shí)例展示了本文工作的有效性和合理性。
7.2 未來(lái)工作展望
本文工作還需進(jìn)一步的改進(jìn),主要包括:
(1)融合形式化檢索和文本檢索的接口。
(2)改善形式化檢索的圖形化展示。改善基于兩個(gè)方面,一方面是檢索結(jié)點(diǎn)之間的關(guān)聯(lián)關(guān)系補(bǔ)全,另一方面是結(jié)點(diǎn)擴(kuò)展。
(3)提供面向開(kāi)發(fā)人員的API接口。
(4)研究軟件知識(shí)圖譜的內(nèi)容更新機(jī)制。
(5)考慮軟件知識(shí)的版本信息。
[1]Yang Fuqing,Mei Hong,Li Keqin.Software reuse and software component technology[J].Acta Electronica Sinica,1999, 27(2):68-75.
[2]Yang Fuqing.Software reuse and its correlated techniques[J]. Computer Science,1999,26(5):1-4.
[3]Brown A W,Booch G.Reusing open-source software and practices:the impact of open-source on commercial vendors [C]//LNCS 2319:Proceedings of the 7th International Conference on Software Reuse,Austin,USA,Apr 15-19,2002. Berlin,Heidelberg:Springer,2002:123-136.
[4]?ubrani? D,Murphy G C.Hipikat:recommending pertinent software development artifacts[C]//Proceedings of the 25th International Conference on Software Engineering,Portland,USA,May 3-10,2003.Washington:IEEE Computer Society,2003:408-418.
[5]Gopinath G,Sagayaraj S.To generate the ontology from Java source code[J].International Journal of Advanced Computer Science andApplications,2011,2(2):111-116.
[6]McMillan C,Grechanik M,Poshyvanyk D,et al.Portfolio: finding relevant functions and their usage[C]//Proceedings of the 33rd International Conference on Software Engineering, Honolulu,USA,May 21-28,2011.New York:ACM,2011: 111-120.
[7]Lehmann J,Isele R,Jakob M,et al.DBpedia—a large-scale, multilingual knowledge base extracted from Wikipedia[J]. Semantic Web,2015,6(2):167-195.
[8]Bordes A,Gabrilovich E.Constructing and mining Webscale knowledge graphs:WWW 2015 tutorial[C]//Proceedings of the 24th International Conference on World Wide Web,Florence,Italy,May 18-22,2015.New York:ACM, 2015:1523.
[9]Dong X L,Gabrilovich E,Heitz G,et al.From data fusion to knowledge fusion[J].Proceedings of the VLDB Endowment,2014,7(10):881-892.
[10]Dong X,Gabrilovich E,Heitz G,et al.Knowledge vault:a Web-scale approach to probabilistic knowledge fusion[C]// Proceedings of the 20th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining,New York,Aug 24-27,2014.New York:ACM,2014:601-610.
[11]Dong X L,Gabrilovich E,Murphy K,et al.Knowledgebased trust:estimating the trustworthiness of Web sources[J]. Proceedings of the VLDB Endowment,2015,8(9):938-949.
[12]West R,Gabrilovich E,Murphy K,et al.Knowledge base completion via search-based question answering[C]//Proceedings of the 23rd International Conference on World Wide Web,Seoul,Korea,Apr 7-11,2014.New York:ACM, 2014:515-526.
[13]Zhang Jing,Tang Jie.The focus of the next generation of search engine:knowledge map[J].The Chinese Society of Computer Communication,2013,9(4):64-88.
[14]Bacchelli A,Lanza M,Robbes R.Linking e-mails and source code artifacts[C]//Proceedings of the 32nd International Conference on Software Engineering,Cape Town,South Africa,May 1-8,2010.New York:ACM,2010:375-384.
[15]Dagenais B,Robillard M P.Recovering traceability links between an API and its learning resources[C]//Proceedings of the 34th International Conference on Software Engineering, Zurich,Switzerland,Jun 2-9,2012.Piscataway,USA:IEEE, 2012:47-57.
[16]Robinson I,Webber J.Eifrem E.Graph databases[M].Sebastopol,USA:O'Reilly Media Press,2013:26-27.
[17]DB-engines ranking of graph DBMS[EB/OL].(2016-04) [2016-06-27].http://db-engines.com/en/ranking/graph+dbms.
附中文參考文獻(xiàn):
[1]楊芙清,梅宏,李克勤.軟件復(fù)用與軟件構(gòu)件技術(shù)[J].電子學(xué)報(bào),1999,27(2):68-75.
[2]楊芙清.軟件復(fù)用及相關(guān)技術(shù)[J].計(jì)算機(jī)科學(xué),1999,26 (5):1-4.
[13]張靜,唐杰.下一代搜索引擎的焦點(diǎn):知識(shí)圖譜[J].中國(guó)計(jì)算機(jī)學(xué)會(huì)通訊,2013,9(4):64-88.
LI Wenpeng was born in 1993.He is an M.S.candidate at Peking University.His research interest is software engineering.
李文鵬(1993—),男,山東萊蕪人,北京大學(xué)碩士研究生,主要研究領(lǐng)域?yàn)檐浖こ獭?/p>
WANG Jianbin was born in 1991.He is an M.S.candidate at Peking University.His research interest is software engineering.
王建彬(1991—),男,河北邯鄲人,北京大學(xué)碩士研究生,主要研究領(lǐng)域?yàn)檐浖こ獭?/p>
LIN Zeqi was born in 1992.He is a Ph.D.candidate at Peking University.His research interest includes software engineering,software reuse,knowledge engineering and data mining,etc.
林澤琦(1992—),男,福建莆田人,北京大學(xué)博士研究生,主要研究領(lǐng)域?yàn)檐浖こ?,軟件?fù)用,知識(shí)工程,數(shù)據(jù)挖掘等。
趙俊峰(1974—),女,福建泉州人,2005年于北京大學(xué)軟件與理論專業(yè)獲得博士學(xué)位,現(xiàn)為北京大學(xué)信息科學(xué)技術(shù)學(xué)院副教授,CCF高級(jí)會(huì)員,主要研究領(lǐng)域?yàn)檐浖こ?,知識(shí)工程,服務(wù)計(jì)算等。發(fā)表學(xué)術(shù)論文30余篇,主持或承擔(dān)過(guò)國(guó)家自然科學(xué)基金項(xiàng)目、國(guó)家863項(xiàng)目、北京重大科技成果轉(zhuǎn)換項(xiàng)目等近20項(xiàng)。
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會(huì)員,主要研究領(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年于國(guó)防科技大學(xué)計(jì)算機(jī)學(xué)院獲得博士學(xué)位,現(xiàn)為北京大學(xué)信息科學(xué)技術(shù)學(xué)院軟件所教授、博士生導(dǎo)師,CCF高級(jí)會(huì)員,主要研究領(lǐng)域?yàn)檐浖こ?,形式化方法等。發(fā)表學(xué)術(shù)論文50余篇,主持國(guó)家863重點(diǎn)項(xiàng)目多項(xiàng),獲國(guó)家科技進(jìn)步二等獎(jiǎng)。
Software Knowledge Graph Building Method for Open Source Project*
LI Wenpeng1,2,3,WANG Jianbin1,2,3,LIN Zeqi1,2,3,ZHAO Junfeng1,2,3+,ZOU Yanzhen1,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
+Corresponding author:E-mail:zhaojf@pku.edu.cn
Software reuse is a solution to reduce the duplication of efforts during software development and improve the efficiency and quality of the process.Open source projects’source code,mailing lists,issue reports,Q&A documents and other software resources contain software knowledge with complex structure and rich semantic association on a large scale.How to obtain and organize software knowledge and retrieve it effectively in the process of software reuse have become urgent problems.In order to solve these problems,this paper constructs software knowledge graph,whose goal is to organize and manage the structural knowledge of a software project,and provides software knowledge graph based knowledge retrieval.The contributions of this paper are as follows:Providing the extraction principles and methods of software knowledge entities,and extracting software knowledge entities from four different kinds of software resources respectively;Providing the methods of building the relationships between software knowledge entities;Providing two software knowledge retrieval mechanisms,and displaying the retrievalresults by the combination of word list and graph visualization;Designing the implementation framework of software knowledge graph.On the basic of the work above,this paper designs and implements a software knowledge graph building tool for open source project.Instances prove that software knowledge graph can help developers to better retrieve and use knowledge.
software reuse;open source software;software knowledge graph;graph database
eng was born in 1974.She
the Ph.D.degree in software and software theory from Peking University in 2005.Now she is an associate professor at Peking University,and the senior member of CCF.Her research interests include software engineering,knowledge engineering and service computing,etc.
A
TP301
關(guān)聯(lián)是指建立一個(gè)軟件知識(shí)實(shí)體與其引用的軟件知識(shí)實(shí)體之間的關(guān)聯(lián)關(guān)系。如果一個(gè)軟件知識(shí)實(shí)體包含的信息中包含另一個(gè)軟件知識(shí)實(shí)體對(duì)應(yīng)的超鏈接或全局唯一的標(biāo)識(shí)符,則在該軟件知識(shí)實(shí)體與包含的軟件知識(shí)實(shí)體之間建立一條語(yǔ)義關(guān)聯(lián)關(guān)系。本文稱這種語(yǔ)義關(guān)聯(lián)關(guān)系為“引用”關(guān)系。建立引用關(guān)聯(lián)的步驟如下:
*The National Natural Science Foundation of China under Grant No.61472007(國(guó)家自然科學(xué)基金);the National Science Fund for Distinguished Young Scholars of China under Grant No.61525201(國(guó)家杰出青年科學(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.022.html