?

淺析克隆代碼領域本體構建研究

2020-09-26 11:50翟曄葛湘薇
內蒙古教育·理論版 2020年6期

翟曄 葛湘薇

摘 要:代碼克隆是軟件開發中常用的方法。本文針對“克隆代碼領域本體構建”這一核心問題,從克隆代碼領域本體模型的規劃、分析與設計、形式化、本體評估及維護等方面展開具體研究工作。通過克隆檢測結果獲取克隆代碼的克隆關系,通過代碼靜態分析技術抽取克隆代碼之間的耦合關系,基于這兩種以克隆代碼為中心的數據,設計并實現克隆代碼領域本體。該本體對克隆代碼的理解、分析、維護與管理有積極作用。

關鍵詞:克隆代碼;領域本體;克隆關系;克隆檢測

【中圖分類號】G【文獻標識碼】B 【文章編號】1008-1216(2020)06C-0127-02

克隆代碼是指,一個軟件系統代碼庫中的兩個或多個代碼片段彼此完全相同或幾乎相似的代碼。一組相似的代碼片段構成一個克隆類。有關克隆代碼的研究工作開始于上世紀九十年代,并在隨后的二十多年里受到越來越多國內外研究學者的高度關注,在克隆檢測、克隆演化分析等多個方面產生了大量研究成果。

過去的軟件克隆研究主要集中于代碼克隆的檢測和分析,而近年來的研究擴展到了克隆管理的整個領域??寺〈a領域本體的構建可以為克隆代碼理解、克隆分析、克隆維護、克隆管理以及克隆重構等研究提供有力的參考與支持。該本體可以為軟件開發及維護人員提供克隆代碼的更多特征以及更深層次的關系,如分布特征、耦合特征、高層設計特征等。這使得克隆代碼更容易被理解,進而使軟件開發及維護人員能更高效地維護及管理克隆代碼。

一 相關研究

目前,針對以領域本體為基礎的相關研究還非常少?,F有的基于領域本體的代碼理解及分析研究,大多是通過代碼本體與業務邏輯本體相關聯的方法分析、理解與維護軟件系統,這些研究大多關注了代碼或克隆代碼的基本信息或是業務邏輯信息,但是,克隆代碼的維護與管理工作僅憑這些研究成果是遠遠不夠的。通過克隆代碼領域本體,可以解決類似“同一克隆群內的克隆代碼在高層設計上有什么聯系”“哪些克隆代碼與其他代碼的耦合程度較高”等問題。這類問題可以給出克隆代碼更全面的生存環境狀況。

二、克隆代碼領域本體構建

本研究面向開源軟件代碼資源,筆者制訂了詳細技術方案,并開展深入研究。本研究實現流程如圖 1所示。

(一)克隆靜態關系

克隆檢測是研究基礎,本研究借助領域內較為流行的克隆代碼檢測工具NiCad來進行克隆代碼檢測工作。NiCad可以有效檢測3種類型的克隆代碼,并以XML格式反饋克隆對以及克隆群關系。根據克隆代碼檢測結果,做進一步分析,獲得克隆關系。

1.克隆代碼相似度。

克隆代碼的相似度是指兩段克隆代碼片段之間的文本相似度,本研究利用編輯距離相似度計算模型,計算兩段克隆代碼片段之間的文本相似度。

2.克隆類型。

克隆類型除了能反應克隆代碼文本相似程度,還能夠反應克隆代碼之間存在的差異。本研究利用NiCad對每一種克隆類型進行檢測,從而可以直接獲取克隆對之間的克隆類型關系。

3.克隆對及克隆群關系。

克隆對被分組,稱為克隆群的集合,其中集合中的任何兩個片段都可以形成克隆對。由于克隆代碼檢測工具能以克隆對、克隆群的方式反饋克隆代碼,所以通過分析檢測結果,可直接獲取克隆對與克隆群關系。

4.克隆代碼位置。

克隆檢測結果中至少要包含表征克隆代碼位置信息的三元組:所在文件名、起始行號、終止行號。通過分析克隆代碼檢測工具的反饋信息,即可獲取克隆對與克隆群關系信息。

(二)克隆代碼耦合關系分析

構建克隆代碼領域本體,除了關注代碼的克隆關系外,還需關注克隆代碼與其他代碼之間存在的耦合關系,這樣才能更全面地表征克隆代碼的生存環境,更深層次地理解克隆代碼。本文中涉及克隆代碼的耦合關系包含以下幾個方面。

1.繼承、實現關系。

由于特定粒度的克隆代碼片段位于某一個類或接口中,本研究考慮了克隆代碼所在的類是否繼承了其他類,從而可反映出部分克隆代碼是否在高層設計上存在著聯系。

2.聲明關系。

聲明關系指一個類中聲明的屬性和方法。通過分析聲明關系,可以挖掘出克隆代碼所在的類之間是否存在聚合等關系,這些關系可以反應克隆代碼所在類之間存在著哪些設計模式。

3.調用關系。

克隆代碼與其他代碼片段之間存在著耦合關系,例如,某一段克隆代碼調用了某些函數,或者該克隆代碼片段被其他代碼段調用。與克隆代碼相關的調用關系,是構成克隆代碼生存環境的重要數據。

克隆代碼耦合關系提取,是克隆代碼本體構建的關鍵,本研究采用AST技術準確地提取了克隆代碼中的耦合關系。

三、克隆代碼領域本體的構建

結合克隆代碼的實際需要,本項目以七步法本體構建思想為指導,結合軟件工程的結構化開發方法,設計克隆代碼領域本體的構建流程。主要包括以下步驟。

(一)本體規劃

需求分析是本體規劃的第一步,主要任務是明確本體構建的基本信息,最后生成需求分析文檔。該本體適用的專業領域和范圍是軟件代碼中的克隆代碼,構建本體的目的主要是為克隆管理提供方便。該本體的目標用戶是開發人員和測試維護人員等,目前不存在可重用的本體。

(二)本體分析

本體分析階段主要任務是:確定本體的主體架構和知識粒度,明確克隆代碼領域本體需要哪些克隆實體來填充和支撐,以及提取克隆代碼中的各種信息??寺〈a以克隆代碼片段為單位的方式進行組織,本文選用自上而下的構建方法設計本體。

(三)本體設計

對本體分析階段收集到的概念進行分析歸納,建立本體類,然后依據概念的唯一性和同級概念間不存在交集的要求,形成以繼承關系為主關系結構的樹狀模型、聲明及調用關系。類是本體的核心與基礎,定義本體的類應該能夠突顯類本身的特性,所以,一個新的類應包含其父類所沒有的新屬性。例如,對于“克隆群”類,它具備的屬性有克隆群尺寸、克隆群號等,而對于該類下的子類“克隆代碼”則新增了代碼相似度、克隆類型、文件距離等屬性。

克隆代碼領域不同實體間存在的關系很多,如對一個具體克隆片段來說,它需同屬于一個克隆對。本項目設計的關系如右表。同時,圖2呈現了克隆代碼領域本體中部分實體以及對應關系。

(四)本體形式化

1.本體的形式化主要采用形式語言來構建。

本研究中采用OWL 描述語言,用 Protégé保存為基于 RDF/XML格式的 OWL 文件,文件命名為Code Clone.owl。

2.命名空間聲明。

一組 XML 格式的命名空間的聲明,本體標識符的表示可以提供無歧義的解釋方式,使本體的表示更具可讀性。

3.實體定義。

為了避免本體表示過程中對冗長的 URL 的書寫,文檔類型聲明部分提供了對一些實體的定義,利用實體名來代替冗長的URL。

(五)克隆代碼本體的存儲與維護

對于克隆代碼領域本體的持久化,本文采用 Jena 技術實現,并將本體持久化到 MySQL 數據庫中存儲。

本體的維護是指本體的迭代進化。本體的建模目標非一個周期或者一次循環就能夠完全實現的。由于軟件復雜度的增加或新技術的迭代更新,后期需要對現有本體進行調整。

四、總結與展望

本研究是將克隆代碼與領域本體相結合,構建出克隆代碼的領域本體。研究過程中,通過對克隆代碼中耦合關系的提取,深入地研究了克隆代碼中的函數調用、變量之間的關系,該本體能幫助開發和維護人員有效地理解克隆代碼的生存環境,為克隆代碼的后期演化和重構提供依據。

參考文獻:

[1]史慶慶,孟繁軍,張麗萍,等.克隆代碼技術研究綜述[J].計算機應用研究,2013,(6).

[2]張瑞霞,張麗萍,王春暉,等.基于主題建模技術的克隆群映射方法[J]. 計算機工程與設計,2015,(6).

[3]涂穎,張麗萍,王春暉,等.基于軟件多版本演化提取克隆譜系[J].計算機應用,2015,(4).

[4]蘇小紅,張凡龍.面向管理的克隆代碼研究綜述[J].計算機學報,2018,(3).

[5]郭穎,陳峰宏,周明輝.大規模代碼克隆的檢測方法[J].計算機科學與探索,2014,(4).

[6]史慶慶,孟繁軍,張麗萍,劉東升.克隆代碼技術研究綜述[J].計算機應用研究,2013,(6).

91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合