欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種面向軟件演化的代碼可替換性評估方法

文檔序號:10511897閱讀:334來源:國知局
一種面向軟件演化的代碼可替換性評估方法
【專利摘要】本發(fā)明公開了一種面向軟件演化的代碼可替換性評估方法,對演化原因進行分析與定位,包括以下步驟:根據(jù)源代碼構造相應的抽象語法樹;在抽象語法樹上提取表示依賴關系的邊,構造出代碼耦合關系圖;基于程序耦合關系定義一種度量代碼可替換性指標,對代碼中模塊的可替換性進行計算;針對演化版本中代碼的可替換性發(fā)生改變的包進行分析,識別出導致代碼可替換性變化的元素。該發(fā)明的評估方法不但可以自動分析源代碼,度量代碼的可替換性,指出代碼中的核心框架,而且對演化過程中發(fā)生改變的原因進行分析定位實現(xiàn)了演化評估的自動化。
【專利說明】
一種面向軟件演化的代碼可替換性評估方法
技術領域
[0001] 本發(fā)明提出了一種面向軟件演化的代碼可替換性評估方法,主要利用代碼中耦合 關系對代碼的可替換性演化原因進行識別,屬于軟件維護與演化領域。
【背景技術】
[0002] 在軟件的生命周期中,不斷對軟件進行升級、更改,以適應新的需求。而對軟件的 更改往往都是在一些外部壓力下進行的,如客戶或行業(yè)競爭。這些更改勢必會破壞程序原 有的結構,提高程序復雜度,降低代碼的質量。結果導致軟件的維護成本顯著提高,對軟件 的升級將變得更加困難。任何軟件開發(fā)方法和工具都不能避免這個問題,對軟件的修復工 作越晚進行,軟件維護成本越高,直至維護代價超過重新開發(fā)整個系統(tǒng)的代價。為了解決這 個難題,需要一種技術能夠跟蹤軟件中代碼可替換性的變更,提高軟件的內部質量。
[0003] 軟件演化是軟件工程領域正逐步受到重視的研究方向,并將得到越來越多的關 注。軟件演化過程的目標就是在不違反系統(tǒng)約束的條件下,對軟件系統(tǒng)的演化流程進行管 理,從而使演化后的軟件系統(tǒng)能夠在功能滿足用戶的需求,同時它所展現(xiàn)出來的質量屬性 也維持在一個令人滿意的水平上。
[0004] 識別程序中哪些地方變更導致代碼可替換性發(fā)生變化的真實原因是演化分析中 的難點目前,只進行一個代碼版本的可替換性度量,或者只提供代碼變更信息而沒有與代 碼的可替換性相關聯(lián),不能提供真實的影響可替換性變更的信息。因此,自動地識別可替換 性變更原因對軟件演化與維護的分析非常重要。

【發(fā)明內容】

[0005] 技術問題:本發(fā)明提供一種能夠自動化識別演化過程中導致代碼可替換性變更的 演化原因,提取代碼演化中可替換性變更的演化對象的面向軟件演化的代碼可替換性評估 方法。
[0006] 技術方案:本發(fā)明的面向軟件演化的代碼可替換性評估方法,包括以下步驟:
[0007] 步驟一,根據(jù)源代碼,將軟件版本中的每個類構造為抽象語法樹;
[0008] 步驟二,在所述步驟一構建的抽象語法樹上進行解綁定處理,得到底層的依賴關 系,然后提取表示依賴關系的邊,構造出代碼耦合關系圖;
[0009] 步驟三,基于代碼耦合關系圖,以包的傳入耦合度和傳出耦合度為基礎,根據(jù)下式 計算度量軟件代碼中每個包的可替換性指標:
[0010] C = EC/(AC+EC)
[0011] 其中,EC代表對包的傳出耦合的度量,表示依賴該包的外部包的數(shù)目,即傳出耦合 集中元素的個數(shù);
[0012] AC代表對包的傳入耦合的度量,表示被該包依賴的外部包的數(shù)目,即傳入耦合集 中元素的個數(shù);
[0013] C代表該包的可替換性的評估,取值為[0-1];
[0014] 步驟四,比較軟件代碼中的包在各個演化版本中的可替換性指標,對于可替換性 指標發(fā)生改變的包進行變更原因分析,識別出導致代碼可替換性變化的元素。
[0015] 進一步的,本發(fā)明方法中,所述步驟一構建的抽象語法樹包含代碼基本架構的解 析樹信息,以及在方法調用處與被調方法之間建立起綁定關系。
[0016] 進一步的,本發(fā)明方法中,所述步驟二構造的代碼耦合關系圖具有層次特性,由類 層次耦合關系到包層次耦合關系圖自下而上構造。
[0017] 進一步的,本發(fā)明方法中,所述步驟四中的變更原因分析,是針對可替換性發(fā)生變 更的包,在步驟二構造的代碼耦合關系圖中定位識別出導致代碼可替換性變化的元素。
[0018] 有益效果:本發(fā)明方法通過Eclipse JDT生成的抽象語法樹獲取耦合關系,主要用 于解決代碼可替換性度量的精確性以及可替換性演化原因分析問題,與現(xiàn)有技術相比,具 有以下優(yōu)點:
[0019] (1)利用Eclipse JDT中ASTParser生成的抽象語法樹,通過在解綁定技術的基礎 上所獲得的包耦合關系圖比現(xiàn)有技術所獲得的耦合關系更加精確和完整。傳統(tǒng)的耦合關系 的獲取通常是通過包的聲明域進行耦合關系的獲取,當代碼中包的聲明缺省時,會使得耦 合關系獲取的缺失。我們的技術通過代碼解綁定技術,獲取在代碼中底層所使用的類型,用 來生成代碼在類層次的耦合關系,進而逐層向上生成包層次耦合關系,可以保證包耦合關 系獲取的準確性和完整性。
[0020] (2)利用從下而上的耦合關系,為可替換性的分析提供了不同的粒度。通過在類的 耦合關系的基礎上所獲得的包耦合關系圖,比現(xiàn)有技術所獲得的耦合關系能夠包含更多信 息更加完整。傳統(tǒng)的方法在對可替換性結果展示時只顯示到包層次的內容,不能夠顯示出 包中具體發(fā)生耦合關系的類。我們的技術所獲的包的可替換性是建立在類粒度的耦合關系 上的,因此可以對包的耦合關系進行更細粒度的查詢,能夠展示出可替換性評估值在類層 次的形成原因。
[0021] (3)利用代碼的耦合關系提供了軟件演化的原因分析。通過我們在類層次所獲取 的低層次的耦合關系傳入傳出耦合集,能夠對軟件演化過程中導致可替換性變化的原因進 行分析;傳統(tǒng)的評估工具只有針對代碼整體變更的分析,并不具有針對可替換性的演化分 析,我們的方法通過獲取項目演化過程中新舊版本的耦合集,通過新舊版本的傳入傳出耦 合集的匹配,從而定位出與可替換性相關的演化原因。
【附圖說明】
[0022]圖1面向軟件演化的代碼可替換性評估體系結構;
[0023]圖2 JcouplingEvaluator總體工作流程圖;
[0024]圖3抽象語法樹;
[0025]圖4代碼耦合關系圖。
【具體實施方式】
[0026]下面結合實施例和說明書附圖對本發(fā)明作進一步的說明。
[0027]實施例中項目Proj中有版本Verl及其演化版本Ver2,Verl中共有七個包,分別為 pi. 1-pl .7,Ver2中對應的包為ρ2.1_ρ2.7。使用工具JcouplingEvaluator進行評估,其總體 工作流程圖如圖2所示。包括以下步驟:
[0028] 步驟一,根據(jù)源代碼,將軟件版本中的每個類構造為抽象語法樹;將實施例中版本 Verl的源代碼構造相應的抽象語法樹,其抽象語法樹如圖3所示;
[0029] 抽象語法樹(Abstract Syntax Tree,AST)作為程序的一種中間表示形式,在代碼 解析、程序分析等諸多領域有廣泛的應用。它將java源代碼映射為樹的形式:每個java源文 件被表示成AST節(jié)點樹。Eclipse AST是Eclipse JDT的一個重要組成部分,定義在包 org. eel ipse. jdt. core. dom中,用來表示JAVA語言中的所有語法結構。
[0030] Eclipse AST的總體結構:
[0031 ] (1)、org .eclipse, jdt. core · dom. AST( AST節(jié)點類),Eel ipse AST的工廠類,用于 創(chuàng)建表示各種語法結構的節(jié)點。
[0032] (2)、org · eclipse · jdt · core · dom. ASTNode及其派生類(AST類),用于表不JAVA語 言中的所有語法結構,在實際使用中常作為AST上的節(jié)點出現(xiàn)。
[0033] (3)、〇坪.〇(:11卩86.」(11:.(3〇代.(1〇111.厶31'\^8;[1:01'(厶31'\^8;[1:01'類)4(311卩86厶31'的訪 問者類,定義了統(tǒng)一的訪問AST中各個節(jié)點的方法。
[0034] (4)、org .eclipse, jdt. core · dom. ASTParser(ASTPar ser 類),用于解析包含 java 源代碼的程序,并返回一個AST。其返回的結果包含了源代碼字符的范圍。
[0035] 該圖的源代碼中包含一個類,類中包含四個成員變量和四個成員方法構成。其中 綁定技術用于獲取成員變量的SimpleType節(jié)點和MethodDeclaration節(jié)點的 MethodInvocation節(jié)點中所使用的類型信息,借助EclipseAST中的綁定技術將外部類型 信息同時加載進抽象語法樹,以便于節(jié)點數(shù)據(jù)類型信息的獲取。
[0036] 步驟二,在所述步驟一構建的抽象語法樹上進行解綁定處理,得到底層的依賴關 系,然后提取表示依賴關系的邊,構造出代碼耦合關系圖;
[0037] 代碼中的耦合關系圖中有以下兩種關系:傳入耦合:如果特定類依賴于其他類,那 么就稱它對其他類具有傳入耦合關系;傳出耦合:如果其他類依賴于特定類,那么就稱特定 類對其他類具有傳出耦合關系。
[0038] 類內根據(jù)抽象語法樹上的語句節(jié)點上抽取耦合信息,其中語句節(jié)點包括聲明節(jié)點 和方法調用節(jié)點;從語句節(jié)點中獲取類的傳出耦合類,例如類A中聲明或調用中使用了類B, 類B對于類A則是傳出耦合關系,類A對于類B則是傳入耦合關系。
[0039]包耦合關系在類耦合關系的基礎上,根據(jù)類所屬的包信息,獲取屬于同一個包中 的類的傳入耦合集合和傳出耦合集合,形成包層次的耦合關系圖。
[0040] 根據(jù)步驟一中所構造的AST樹,對其中的節(jié)點進行解綁定(resol veBinding)處理, 可獲得所依賴的類型信息,如類型名稱以及所屬包名。根據(jù)解綁定所獲得的依賴信息,遍歷 后將元素放入相應耦合集中。在實例中,包pl. 5中的類使用了 pi.4中的類,即表示pi.4為 pl .5的傳出親合元素,放入pi .5的傳出親合集ACSet中,pi .5為pi .4的傳入親合元素,放入 P1.4的傳入耦合集ECSet中。訪問結束后,可獲得Ver 1中各個包的傳入耦合集合傳出耦合 集,結果如下表所示:
[0042]表格中所記錄的數(shù)字為各個耦合集中元素個數(shù)。
[0043]步驟三,基于代碼耦合關系圖,以包的傳入耦合度和傳出耦合度為基礎,根據(jù)下式 計算度量軟件代碼中每個包的可替換性指標:
[0044] 代碼可替換性主要跟模塊之間的耦合度相關。模塊之間的耦合分為傳入耦合和傳 出耦合。傳入耦合是指依賴于一個包的其他包的數(shù)量;傳出耦合是指一個包所依賴的包的 數(shù)量。一個包的傳出耦合越大,它就越依賴于其他包,該包的變更對其他包的影響較小,但 面對關聯(lián)包的更改時它容易受到連鎖反應的影響。一個包的傳入耦合越大,則該包被依賴 度越高,它發(fā)生更改或被替換的代價也就越大。代碼可替換性中定義了如下兩個集合:
[0045] 定義1傳入耦合集:對于包P中的所有類集C,如果代碼其他包p中的類依賴于類c, 且c e C,則p屬于傳入耦合集中一個元素,這些元素的集合為P包的傳入耦合集ACSet。
[0046] 定義2傳出耦合集:對于包P中的所有類集C,對于類c(c eC),如果類c依賴于其他 的類c',且d C:,c'所在的包p屬于傳出耦合中的一個元素,這些元素的集合為P包的傳出 耦合集ECSet。
[0047] 通過可提換性度量模型,對Java軟件中包的可替換性的度量評估方法,通過度量 傳出耦合在耦合關系中所占據(jù)的比例對包的可替換性進行量化評價。
[0048] 該模型統(tǒng)計每個包所依賴包的個數(shù)及依賴于該包的包數(shù)目,并根據(jù)傳出耦合在總 體耦合中所占比值大小判斷該包的可替換性強弱。高的傳出耦合比例表示傳入耦合較低, 對象不具有太多的職責,易于進行替換;反之,高的傳入耦合比例表示對象具有太多的職 責,在進行替換時候要格外小心。
[0049] 根據(jù)步驟二中的傳出耦合與傳入耦合,對每個包的可替換性進行計算,結果如下 表所示。
[0051 ] C表示Verl中包的可替換性值。
[0052]對項目的演化版本Ver2重復步驟一至步驟三,進行可替換性度量,同樣計算出可 替換性度量值。Ver2中各個包的傳入耦合集合傳出耦合集表如下所示:
[0055]可替換性結果如下表所示:
[0057] 可替換性度量值越接近1,說明該包傳入耦合相對較少,容易被替換;值越接近0, 說明該包傳入耦合較多,難以被替換。
[0058] 步驟四,比較軟件代碼中的包在各個演化版本中的可替換性指標,對于可替換性 指標發(fā)生改變的包進行變更原因分析,識別出導致代碼可替換性變化的元素。
[0059] 在軟件演化過程中,如果代碼包的可替換性度量值改變了,表示代碼在演化過程 中所進行的修改導致了包的耦合關系發(fā)生了改變,例如增加、刪除或修改。
[0000] 代碼可替換性變更原因差異分析Diff(verl,ver2)具體步驟如下如下:
[0061 ]第一步:獲取項目verl中各個包的可替換性;
[0062]第二步:獲取項目ver2中各個包的可替換性;
[0063] 第三步:對比verl和ver2中各個包的可替換性數(shù)值,記錄發(fā)生改變的包;
[0064] 第四步:定位在verl和ver2中發(fā)生變更的包,記為P與P',P有傳入親合集ACSet與 傳出耦合集ECSet,P'有傳入耦合集ACSet'與傳出耦合集ECSet';
[0065] 第五步:對比ACSet與ACSet'中元素,若存在元素 aeACSet且:ai ACSch',則表示元 素 a的傳入親合關系在ver2中被刪除,若元素戒ACSet且aeACSet',貝lj表示中ver2中增加 了與元素 a的傳入親合關系。記錄變更信息到Diff(verl,ver2)中;
[0066] 第六步:對比ECSet與ECSet'中元素,若存在元素 e e ECSet且eG ECSet',則表示元 素 e的傳出耦合關系在ver2中被刪除,若元素試ECSet且eEECSet',則表示中ver2中增加 了與元素 e的傳出親合關系。記錄變更信息到Diff(verl,ver2)中。
[0067] 在如上實例中Verl到Ver2版本的演化過程中包pi. 4到p2.4的可替換性發(fā)生了變 化,其可替換性由0.73變?yōu)?.75。對比兩個版本中pi. 4和p2.4的傳入耦合集和傳出耦合集, 記pi .4的傳入親合集和p2.4的傳入親合集分別為ACSet和ACSet',實例中ACSet = ACSet', 兩者的傳入耦合集在演化過程中沒有發(fā)生變化;記Pi.4的傳出耦合集和p2.4的傳出耦合集 分別為ECSet和ECSet',實例中ECSet中為8個元素,ECSet'中有9個元素,傳出耦合耦合集在 演化過程中存在元素技ECSet且eeECSet',則表示中Ver2中增加了元素 e的傳出耦合關 系。
[0068] 記錄包中增加的變更信息到Diff (Verl,Ver2)中;通過依次遍歷Verl和Ver2中對 應的包得到可替換性的變化原因。
[0069] 上述實施例僅是本發(fā)明的優(yōu)選實施方式,應當指出:對于本技術領域的普通技術 人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和等同替換,這些對本發(fā)明 權利要求進行改進和等同替換后的技術方案,均落入本發(fā)明的保護范。
【主權項】
1. 一種面向軟件演化的代碼可替換性評估方法,其特征在于,該方法包括以下步驟: 步驟一,根據(jù)程序源代碼,將軟件版本中的每個類構造為抽象語法樹; 步驟二,在所述步驟一構建的抽象語法樹上進行解綁定處理,得到底層的依賴關系,然 后提取表示依賴關系的邊,構造出代碼耦合關系圖; 步驟三,基于代碼耦合關系圖,以包的傳入耦合度和傳出耦合度為基礎,根據(jù)下式計算 度量軟件代碼中每個包的可替換性指標C: C = EC/(AC+EC) 其中,EC代表對包的傳出耦合的度量,表示依賴該包的外部包的數(shù)目,即傳出耦合集中 元素的個數(shù); AC代表對包的傳入耦合的度量,表示被該包依賴的外部包的數(shù)目,即傳入耦合集中元 素的個數(shù); 可替換性指標C代表對該包的可替換性的評估,取值為[0-1]; 步驟四,比較軟件代碼中的包在各個演化版本中的可替換性指標,對于可替換性指標 發(fā)生改變的包進行變更原因分析,識別出導致代碼可替換性變化的元素。2. 根據(jù)權利要求1所述的面向軟件演化的代碼可替換性評估方法,其特征在于,所述步 驟一構建的抽象語法樹包含代碼基本架構的解析樹信息,以及在方法調用處與被調方法之 間建立起綁定關系。3. 根據(jù)權利要求1所述的面向軟件演化的代碼可替換性評估方法,其特征在于,所述步 驟二構造的代碼耦合關系圖具有層次特性,由類層次耦合關系到包層次耦合關系圖自下而 上構造。4. 根據(jù)權利要求1、2或3所述的面向軟件演化的代碼可替換性評估方法,其特征在于, 所述步驟四中的變更原因分析,是針對可替換性發(fā)生變更的包,在步驟二構造的代碼耦合 關系圖中定位識別出導致代碼可替換性變化的元素。
【文檔編號】G06F11/36GK105867906SQ201610164659
【公開日】2016年8月17日
【申請日】2016年3月22日
【發(fā)明人】李必信, 苗意盎, 廖力, 劉輝輝
【申請人】東南大學
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
谷城县| 绥宁县| 滨州市| 明水县| 大洼县| 上饶县| 从化市| 德保县| 江油市| 达孜县| 鄯善县| 遂宁市| 太仓市| 长丰县| 铜陵市| 汉寿县| 河间市| 昭通市| 长垣县| 观塘区| 五原县| 广昌县| 连江县| 灵石县| 蒙自县| 泊头市| 昆明市| 蒙山县| 东海县| 和政县| 临桂县| 芒康县| 洪江市| 卫辉市| 江津市| 凯里市| 郓城县| 桃园县| 吉首市| 新宾| 内黄县|