亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種基于演化切片的演化影響集預(yù)測(cè)方法與流程

文檔序號(hào):12665658閱讀:262來源:國(guó)知局
一種基于演化切片的演化影響集預(yù)測(cè)方法與流程

本發(fā)明屬于軟件演化影響分析技術(shù)領(lǐng)域,具體涉及一種基于演化切片的演化影響集預(yù)測(cè)方法。



背景技術(shù):

隨著軟件技術(shù)的發(fā)展,軟件規(guī)模越來越大,軟件在開發(fā)和維護(hù)過程中,軟件故障修復(fù)、功能改進(jìn)等需要不斷的迭代演化軟件,然而針對(duì)某一軟件演化需求,其可行性以及演化實(shí)施策略都需要對(duì)可能的演化影響元素進(jìn)行分析,例如:軟件演化引起修改的程序規(guī)模偏大,從而造成演化成本過高,演化過程不可進(jìn)行;軟件演化影響了不可修改的核心代碼,從而導(dǎo)致不可行;同一需求,多種演化方案的選擇問題等等。

演化影響分析技術(shù)主要通過預(yù)測(cè)演化影響集來輔助軟件開發(fā)者和維護(hù)者,演化影響分析技術(shù)的效率高低直接影響了技術(shù)使用信心。演化影響分析的實(shí)施即可以在需求設(shè)計(jì)層進(jìn)行,也可以在代碼層進(jìn)行。當(dāng)前,基于代碼層的技術(shù)主要有基于調(diào)用圖的演化影響分析技術(shù)、基于概念格的演化影響分析技術(shù)、基于修改歷史挖掘的方法、基于依賴圖的方法。

程序切片是一種基于依賴分析的技術(shù),這種技術(shù)根據(jù)程序中興趣點(diǎn)和興趣元素提取的程序片段,在軟件錯(cuò)誤定位、程序理解、重構(gòu)等軟件開發(fā)和維護(hù)過程中均有廣泛的應(yīng)用。當(dāng)前針對(duì)大規(guī)模的頻繁修改的軟件,使用程序切片可以將分析規(guī)??s小在一個(gè)較小的范圍,便于進(jìn)行演化影響分析。

基于以上敘述,軟件處于不斷的迭代演化中,針對(duì)同一需求實(shí)施何種演化方案以及演化后造成的潛在關(guān)聯(lián)影響都需要進(jìn)行有效的演化影響分析,精確的預(yù)測(cè)演化影響集能高效地輔助軟件開發(fā)維護(hù)人員作出決策,提高軟件開發(fā)和維護(hù)效率。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明要解決的技術(shù)問題是提供一種基于演化切片的演化影響集預(yù)測(cè)方法,具有較高的查全率和較低的存?zhèn)温剩苡行лo助軟件開發(fā)人員和維護(hù)人員作出相關(guān)決策。

為解決上述技術(shù)問題,本發(fā)明的實(shí)施例提供一種基于演化切片的演化影響集預(yù)測(cè)方法,包括如下步驟:

(1)識(shí)別演化元素;

(2)生成演化切片準(zhǔn)則;

(3)構(gòu)建演化數(shù)據(jù)依賴圖;

(4)構(gòu)建演化控制依賴圖;

(5)構(gòu)建演化切片;

(6)以步驟(5)中的演化切片作為預(yù)測(cè)演化影響集,度量其有效性。

進(jìn)一步,所述步驟(1)~(5)具體描述如下:

(1)識(shí)別源程序P的演化程序PE中演化元素及其類型ctC、ctA、ctD,其中,ctC表示對(duì)P中元素的修改,ctD表示對(duì)P中元素的刪除,ctA表示在P中增加了元素;

(2)基于源程序P和演化程序PE,生成演化切片準(zhǔn)則ESC;

(3)基于源程序P和演化程序PE,構(gòu)建演化數(shù)據(jù)依賴關(guān)系,根據(jù)所述的演化數(shù)據(jù)依賴關(guān)系構(gòu)建演化數(shù)據(jù)依賴圖,其中,圖結(jié)點(diǎn)表示演化數(shù)據(jù)元素,邊表示結(jié)點(diǎn)間存在數(shù)據(jù)依賴關(guān)系;

(4)基于源程序P和演化程序PE,構(gòu)建演化控制依賴關(guān)系,根據(jù)所述的演化控制依賴關(guān)系構(gòu)建演化控制依賴圖,其中,圖結(jié)點(diǎn)表示演化控制元素,邊表示結(jié)點(diǎn)間存在控制依賴關(guān)系;

(5)基于步驟(2)中的演化切片準(zhǔn)則、步驟(3)中演化數(shù)據(jù)依賴圖和步驟(4)中的演化控制依賴圖,構(gòu)建演化切片;

(6)以步驟(5)中的演化切片作為預(yù)測(cè)演化影響集,度量其有效性。

其中,所述步驟(1)中使用兩步比較法識(shí)別源程序P的演化程序PE中演化元素及其類型ctC、ctA、ctD,設(shè)定源程序P的良性演化為不宜變動(dòng)源程序P中50%以上的代碼,否則視為惡性演化,演化影響預(yù)測(cè)終止,具體步驟如下:

(1-1)自頂向下遍歷源程序P及其演化程序PE,初始時(shí)P.node指向P中第一條語(yǔ)句或表達(dá)式,PE.node指向PE中第一條語(yǔ)句或表達(dá)式;

(1-2)若P.node==PE.node,則P.node, PE.node分別指向下一條語(yǔ)句,即P.node=P.node->next, pE.node=PE.node->next,轉(zhuǎn)(1-2),否則轉(zhuǎn)(1-3);

(1-3)自頂向下匹配P.node結(jié)點(diǎn)和PE.node的后繼結(jié)點(diǎn)PE.node1,若找到匹配結(jié)點(diǎn),則設(shè)定演化類型為ctA,演化元素為PE.node1與PE.node之間部分,演化規(guī)模為|PE.node1- PE.node|(絕對(duì)值表示結(jié)點(diǎn)之間元素個(gè)數(shù)),轉(zhuǎn)(1-6),否則轉(zhuǎn)(1-4);

(1-4)自頂向下匹配P.node的后繼結(jié)點(diǎn)P.node1和PE.node的后繼結(jié)點(diǎn)PE.node1,若找到匹配結(jié)點(diǎn),則設(shè)定演化類型為ctC,演化元素為P.node1與P.node之間部分,演化后元素為PE.node1與PE.node之間部分,演化規(guī)模為|P.node1- P.node|,轉(zhuǎn)(1-6),否則轉(zhuǎn)(1-5);

(1-5)自頂向下匹配P.node的后繼結(jié)點(diǎn)P.node1和PE.node結(jié)點(diǎn),若找到匹配結(jié)點(diǎn),則設(shè)定演化類型為ctD,演化元素為P.node1與P.node之間部分,演化后元素為P.node1與P.node之間部分,演化規(guī)模為|P.node1- P.node|,轉(zhuǎn)(1-6);

(1-6)若未跳轉(zhuǎn)過(1-3)、(1-4)、(1-5),交換(1-3),(1-4),(1-5)步驟中P和PE, ctA和ctC,執(zhí)行(1-3),(1-4),(1-5),記錄下演化類型Etype,演化規(guī)模Esize, 演化元素集E;

(1-7)從初次執(zhí)行(1-3),(1-4),(1-5)所得演化類型與Etype中選取演化規(guī)模小的演化類型作為最終的演化類型,并將相應(yīng)的演化元素作為最終的識(shí)別元素。

其中,所述步驟(2)中生成的演化切片準(zhǔn)則ESC是一個(gè)三元組<E,V,CT>,其中,E={e1,e2,…,em}為P的演化元素集合,V為演化元素中定義的變量集合,CT={ctC,ctD,ctA}為演化類型集合,ctC表示對(duì)P中元素的修改,ctD表示對(duì)P中元素的刪除,ctA表示在P中增加了元素。

上述定義中,演化元素為P中的類、方法或語(yǔ)句,V為在演化元素ej中定義的變量集合,通常,對(duì)演化元素ej中的變量重新修改定值會(huì)影響引用它的變量的值。演化類型的不同,其演化影響元素會(huì)有所不同,演化類型為ctC既影響演化前的數(shù)據(jù)傳播和控制傳播,也影響演化后的數(shù)據(jù)傳播和控制傳播,而ctD刪除了相關(guān)元素,影響演化前本已存在的數(shù)據(jù)傳播和控制傳播,ctA增加了數(shù)據(jù)傳播和控制傳播,不同的修改類型,修改分析不同。

其中,所述步驟(3)中,演化數(shù)據(jù)依賴關(guān)系的定義如下:

令演化元素集合E={ec1,ec2,…,ecp}∪{ed1,ed2,…,edq}∪{ea1,ea2,…,ear},其中eck(k=1,…p)、edl(l=1,…q)、eas(s=1,…r)分別表示演化后修改的元素、演化中刪除的元素和演化后新增的元素,其修改類型依次為ctC、ctD、ctA,且ec1,ec2,…,ecp演化前的元素分別為ec1’,ec2’…,ecp’,則:

演化元素e1演化數(shù)據(jù)依賴于e2,當(dāng)且僅當(dāng):a、存在v∈USE(e1)∩DEF(e2),且e2可達(dá)e1,任意e’∈PATH(e2,e1),v?USE(e’)∩DEF(e2);b、若e2∈{ec1,ec2,…,ecp},v∈USE(e1)∩DEF(e2’),且e2’可達(dá)e1,任意e’∈PATH(e2’,e1), v?USE(e’)∩DEF(e2’),記作:。

上述定義中,演化數(shù)據(jù)依賴取決于演化后程序元素,演化數(shù)據(jù)會(huì)傳播影響其他數(shù)據(jù)元素,同時(shí),對(duì)于演化類型ctC,演化前的程序元素處數(shù)據(jù)有可能被修改,會(huì)影響到相關(guān)依賴元素。程序在不斷的演化過程中,針對(duì)不同的演化方案重新構(gòu)造依賴關(guān)系代價(jià)非常大,因此基于源程序及演化元素進(jìn)行迭代構(gòu)造。演化數(shù)據(jù)依賴關(guān)系通過演化數(shù)據(jù)依賴圖來表示,圖結(jié)點(diǎn)表示演化數(shù)據(jù)元素,邊表示結(jié)點(diǎn)間存在數(shù)據(jù)依賴關(guān)系,演化數(shù)據(jù)依賴圖的構(gòu)造步驟如下:

(3-1)初始時(shí),演化元素集E={e1,e2,…,em},演化數(shù)據(jù)依賴圖結(jié)點(diǎn)集合EDNode t={e1,e2,…,em},邊集合EDEdge=Φ并創(chuàng)建源程序P的代碼分析樹ASTree;

(3-2)對(duì)于每個(gè)E中元素,如果其演化類型為ctC或ctD,定位ei在ASTree相應(yīng)演化前結(jié)點(diǎn)B(ei),對(duì)每個(gè)ASTree上B(ei)可達(dá)結(jié)點(diǎn)ej,如果,則EDNode= EDNode∪{ei,ej},EDEdge=EDEdge∪{<ei,ej>};

(3-3)對(duì)于每個(gè)E中元素,如果其演化類型為ctC或ctA,定位ei在ASTree相應(yīng)結(jié)點(diǎn),對(duì)每個(gè)ASTree上ei可達(dá)結(jié)點(diǎn)ej,如果,則EDNode= EDNode∪{ei,ej},EDEdge=EDEdge∪{<ei,ej>}。

上述步驟中,對(duì)于修改結(jié)點(diǎn),不但要記錄修改前的結(jié)點(diǎn)依賴,還要記錄修改后的結(jié)點(diǎn)依賴,依賴關(guān)系均從同一個(gè)結(jié)點(diǎn)引出,標(biāo)記為<ei,ej>;對(duì)于刪除結(jié)點(diǎn),只要根據(jù)修改前分析樹構(gòu)造演化數(shù)據(jù)依賴;對(duì)于新加入結(jié)點(diǎn),則要構(gòu)造新的分析樹結(jié)點(diǎn),并插入到相應(yīng)父結(jié)點(diǎn)下、孩子結(jié)點(diǎn)之上,然后構(gòu)造演化數(shù)據(jù)依賴。這種構(gòu)造方法,避免了重復(fù)的構(gòu)造分析樹,以提高數(shù)據(jù)依賴關(guān)系的提取。

其中,所述步驟(4)中,演化控制依賴關(guān)系的定義如下:

令演化元素集合E={ec1,ec2,…,ecp}∪{ed1,ed2,…,edq}∪{ea1,ea2,…,ear},其中eck(k=1,…p)、edl(l=1,…q)、eas(s=1,…r)分別表示演化后修改的元素、演化中刪除的元素和演化后新增的元素,其修改類型依次為ctC、ctD、ctA,且ec1,ec2,…,ecp演化前的元素分別為ec1’,ec2’…,ecp’,則:

演化元素e1演化控制依賴于e2,當(dāng)且僅當(dāng):a、e2為謂詞結(jié)點(diǎn),存在PATH(e2,e1),e1?MUSTPASS(e2),任意e’∈PATH(e2,e1),e1∈MUSTPASS(e’);b、若e2∈{ec1,ec2,…,ecp},e2’為謂詞結(jié)點(diǎn),存在PATH(e2’,e1),e1?MUSTPASS(e2’),任意e’∈PATH(e2’,e1),e1∈MUSTPASS(e’);,記作:。

上述定義中,演化控制依賴關(guān)系需滿足三個(gè)條件:首先,演化前后元素必須是謂詞結(jié)點(diǎn);其次,演化前后元素可達(dá)另一個(gè)元素,且并非必經(jīng)另一個(gè)元素;再次,任何可達(dá)路徑中的程序元素必經(jīng)另一元素。第二個(gè)條件保證了可達(dá)性并且可以根據(jù)條件選擇執(zhí)行,第三個(gè)條件決定了,是演化元素控制的執(zhí)行,不是演化元素后面的謂詞語(yǔ)句。與演化數(shù)據(jù)依賴關(guān)系類似,演化控制依賴通過演化控制依賴圖來實(shí)現(xiàn),圖結(jié)點(diǎn)表示演化數(shù)據(jù)元素,邊表示結(jié)點(diǎn)間存在演化數(shù)據(jù)依賴關(guān)系?;谠闯绦驑?gòu)造演化程序分析樹,其演化控制依賴關(guān)系的構(gòu)造過程如下:

(4-1)′生成演化程序代碼分析樹ASTree;

(4-2)′若演化類型為ctC,且修改前元素為謂詞元素,構(gòu)建修改前元素的控制依賴關(guān)系;如果修改后元素為謂詞,更新代碼分析樹,構(gòu)建修改后元素的控制依賴關(guān)系;

(4-3)′若演化類型為ctD,且刪除元素為謂詞元素,構(gòu)建謂詞元素的控制依賴關(guān)系;

(4-4)′若演化類型為ctA,且添加元素為謂詞元素,生成代碼分析結(jié)點(diǎn),插入結(jié)點(diǎn)到相應(yīng)代碼分析樹位置,然后構(gòu)建演化元素依賴關(guān)系;

步驟(4-2)′、(4-3)′和(4-4)′中,如果演化前后元素不是謂詞結(jié)點(diǎn),則不存在控制依賴關(guān)系,這里算法的關(guān)鍵是一旦確定演化前后元素是謂詞結(jié)點(diǎn),如何構(gòu)造演化控制依賴圖。演化元素結(jié)點(diǎn)e的演化控制依賴圖的步驟如下:

(4-1)初始時(shí),演化元素結(jié)點(diǎn)為e,演化分析樹為ASTree,演化控制依賴圖G為<ECNode,ECEdge>,其中,ECNode為演化影響結(jié)點(diǎn)結(jié)合,ECEdge是演化控制依賴邊集合;

(4-2)如果e的結(jié)點(diǎn)類型非謂詞結(jié)點(diǎn),轉(zhuǎn)(4-6);

(4-3)在ASTree上對(duì)每一個(gè)e的可達(dá)結(jié)點(diǎn)ei,如果ei是e的后必經(jīng)結(jié)點(diǎn),轉(zhuǎn)(4-6);

(4-4)若e’為e到達(dá)ei的路徑上的任一結(jié)點(diǎn),且e’不是e的后必經(jīng)結(jié)點(diǎn),轉(zhuǎn)(4-6);

(4-5)更新演化控制依賴圖G,加入演化結(jié)點(diǎn)和相應(yīng)邊,即ECNode= ECNode∪{e,ei}, ECEdge= ECEdge∪{<ei,ej>};

(4-6)返回演化控制依賴圖G。

其中,所述步驟(5)中的演化切片是根據(jù)演化元素提取的程序片段,記錄了演化元素的影響部分,其定義如下:

P為源程序,<E,V,CT>為演化切片準(zhǔn)則,基于切片準(zhǔn)則生成的演化控制依賴圖為G=<EDNode∪ECNode,EDEdge∪ECEdge>,則演化切片ESlice是演化程序元素結(jié)點(diǎn)的集合EDNode∪ECNode∪INode,其中,INode是基于EDNode∪ECNode-E生成的間接數(shù)據(jù)依賴和控制依賴結(jié)點(diǎn)結(jié)合。

演化切片主要記錄了演化元素影響的程序元素。EDNode記錄了直接數(shù)據(jù)影響的元素,ECNode記錄了直接控制影響的元素。然而,影響會(huì)不斷傳播,受影響的元素又會(huì)影響其他元素,不斷迭代,最終生成演化切片。

其中,所述步驟(6)中,基于演化切片的演化影響集的有效性主要取決于預(yù)測(cè)的影響集的精度以及存?zhèn)味?,通過查全率recall和查準(zhǔn)率NPrecision來度量,而演化識(shí)別率從一定程度上影響了精度和存?zhèn)味?,演化元素的識(shí)別通過識(shí)別率和誤判率進(jìn)行度量,具體度量方法如下:

式(Ⅰ),

式(Ⅱ),

式(Ⅰ)中,為識(shí)別率,為識(shí)別出的實(shí)際演化元素?cái)?shù)目,為所有實(shí)際演化元素?cái)?shù)目;式(Ⅱ)中,為誤判率,為識(shí)別出的非實(shí)際演化元素?cái)?shù)目,為識(shí)別出的全部演化數(shù)目,即,顯然,值越大,識(shí)別率越高,元素識(shí)別越準(zhǔn)確,越有利于演化影響分析的進(jìn)行;值越大,誤判率越高,越影響后續(xù)的演化影響分析,理想情況下,=,=0,即識(shí)別率為百分之百,誤判率為0,此時(shí)識(shí)別的元素集合與實(shí)際修改的元素集合相同;

式(Ⅲ),

式(Ⅳ),

式(Ⅲ)和(Ⅳ)中,ES是通過計(jì)算演化切片獲得的預(yù)測(cè)演化影響集,RI是實(shí)際演化影響集,recall值越大,查全率越高,能夠正確預(yù)測(cè)實(shí)際演化元素比例越多;當(dāng)RIES時(shí),recall達(dá)到理想值1,表示演化切片能夠預(yù)測(cè)出全部的實(shí)際演化元素;Nprecision值越小,表示預(yù)測(cè)存?zhèn)吻闆r越小,當(dāng)RI=ES時(shí),Nprecision達(dá)到理想值0。

本發(fā)明的上述技術(shù)方案的有益效果如下:本發(fā)明公開的基于演化切片的演化影響集預(yù)測(cè)(ESISP)方法具有較高的查全率和較低的存?zhèn)温?,能有效輔助軟件開發(fā)人員和維護(hù)人員作出相關(guān)決策。

附圖說明

圖1為本發(fā)明ESISP方法的流程。

圖2是演化元素識(shí)別程序示例圖。

圖3是演化切片生成示例圖。

圖4是實(shí)例識(shí)別率結(jié)果圖。

圖5是實(shí)例誤判率結(jié)果圖。

圖6是實(shí)例查全率和存?zhèn)温式Y(jié)果圖。

具體實(shí)施方式

為使本發(fā)明要解決的技術(shù)問題、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖及具體實(shí)施例進(jìn)行詳細(xì)描述。

一種基于演化切片的演化影響集預(yù)測(cè)(ESISP)方法,主要用于構(gòu)建演化影響集以輔助軟件開發(fā)者和維護(hù)者作出演化策略,包括如下步驟:識(shí)別演化元素;生成演化切片準(zhǔn)則;構(gòu)建演化數(shù)據(jù)依賴圖;構(gòu)建演化控制依賴圖;構(gòu)建演化切片;以演化切片作為預(yù)測(cè)演化影響集,度量其有效性。該方法的流程圖如圖1所示。

一、演化元素的識(shí)別

演化切片有利于分析演化影響元素。基于演化切片的演化影響分析技術(shù)依賴于演化元素的識(shí)別,演化元素識(shí)別度越高,則影響元素分析越準(zhǔn)確。

(1)使用兩步比較法識(shí)別源程序P的演化程序PE中演化元素及其類型ctC、ctA、ctD,其中,ctC表示對(duì)P中元素的修改,ctD表示對(duì)P中元素的刪除,ctA表示在P中增加了元素。本發(fā)明設(shè)定一個(gè)源程序P的良性演化不宜變動(dòng)源程序P中絕大部分(50%以上)代碼,否則視作惡性演化,演化影響預(yù)測(cè)終止。具體步驟如下:

(1-1)自頂向下遍歷源程序P及其演化程序PE,初始時(shí)P.node指向P中第一條語(yǔ)句或表達(dá)式,PE.node指向PE中第一條語(yǔ)句或表達(dá)式;

(1-2)若P.node==PE.node,則P.node, PE.node分別指向下一條語(yǔ)句,即P.node=P.node->next, pE.node=PE.node->next,轉(zhuǎn)(1-2),否則轉(zhuǎn)(1-3);

(1-3)自頂向下匹配P.node結(jié)點(diǎn)和PE.node的后繼結(jié)點(diǎn)PE.node1,若找到匹配結(jié)點(diǎn),則設(shè)定演化類型為ctA,演化元素為PE.node1與PE.node之間部分,演化規(guī)模為|PE.node1- PE.node|(絕對(duì)值表示結(jié)點(diǎn)之間元素個(gè)數(shù)),轉(zhuǎn)(1-6),否則轉(zhuǎn)(1-4);

(1-4)自頂向下匹配P.node的后繼結(jié)點(diǎn)P.node1和PE.node的后繼結(jié)點(diǎn)PE.node1,若找到匹配結(jié)點(diǎn),則設(shè)定演化類型為ctC,演化元素為P.node1與P.node之間部分,演化后元素為PE.node1與PE.node之間部分,演化規(guī)模為|P.node1- P.node|,轉(zhuǎn)(1-6),否則轉(zhuǎn)(1-5);

(1-5)自頂向下匹配P.node的后繼結(jié)點(diǎn)P.node1和PE.node結(jié)點(diǎn),若找到匹配結(jié)點(diǎn),則設(shè)定演化類型為ctD,演化元素為P.node1與P.node之間部分,演化后元素為P.node1與P.node之間部分,演化規(guī)模為|P.node1- P.node|,轉(zhuǎn)(1-6);

(1-6)若未跳轉(zhuǎn)過(1-3)、(1-4)、(1-5),交換(1-3),(1-4),(1-5)步驟中P和PE,ctA和ctC,執(zhí)行(1-3),(1-4),(1-5),記錄下演化類型Etype,演化規(guī)模Esize, 演化元素集E;

(1-7)從初次執(zhí)行(1-3),(1-4),(1-5)所得演化類型與Etype中選取演化規(guī)模小的演化類型作為最終的演化類型,并將相應(yīng)的演化元素作為最終的識(shí)別元素。

當(dāng)程序修改前后代碼不同時(shí),修改前代碼依次與修改后代碼比較,如果增加了程序元素,在演化程序中必然能找到源程序增加點(diǎn)下一條語(yǔ)句;如果修改或刪除了元素,因?yàn)樵闯绦蛑行薷幕騽h除的元素在修改后找不到匹配元素,且后續(xù)語(yǔ)句能找到匹配元素,依據(jù)被修改元素的比較點(diǎn),可以判斷出修改點(diǎn)和刪除點(diǎn)。然而,當(dāng)程序修改前后代碼存在高度相似性時(shí),簡(jiǎn)單的代碼比較存在造成誤判的可能。

如圖2中,程序1所做的修改是刪除了代碼段1下的代碼A。當(dāng)修改前代碼依次與修改后代碼比較時(shí),代碼A與代碼段2后代碼A相匹配,識(shí)別的結(jié)果是代碼段2為增加的代碼,而原程序中代碼段2、代碼A為刪除的代碼。程序2所做的修改是修改了代碼段1下代碼A為代碼B。當(dāng)修改前代碼依次與修改后代碼比較時(shí),代碼A與代碼3后代碼A相匹配,識(shí)別的結(jié)果是代碼B和代碼3為增加的代碼,而原程序中的代碼段3和代碼段A為刪除的代碼。

二、演化切片構(gòu)建方法

演化切片基于演化切片準(zhǔn)則、演化數(shù)據(jù)依賴圖和演化控制依賴圖構(gòu)建而成。

(2)基于源程序P和演化程序PE,生成演化切片準(zhǔn)則ESC,其定義如下:

令P原程序,演化切片準(zhǔn)則是一個(gè)三元組<E,V,CT>,其中,E={e1,e2,…,em}為P的演化元素集合,V為演化元素中定義的變量集合,CT={ctC,ctD,ctA}為演化類型集合,ctC表示對(duì)P中元素的修改,ctD表示對(duì)P中元素的刪除,ctA表示在P中增加了元素。

上述定義中,演化元素為P中的類、方法或語(yǔ)句,V為在演化元素ej中定義的變量集合,通常,對(duì)演化元素ej中的變量重新修改定值會(huì)影響引用它的變量的值。演化類型的不同,其演化影響元素會(huì)有所不同,演化類型為ctC既影響演化前的數(shù)據(jù)傳播和控制傳播,也影響演化后的數(shù)據(jù)傳播和控制傳播,而ctD刪除了相關(guān)元素,影響演化前本已存在的數(shù)據(jù)傳播和控制傳播,ctA增加了數(shù)據(jù)傳播和控制傳播。不同的修改類型,修改分析不同。

(3)基于源程序P和演化程序PE,構(gòu)建演化數(shù)據(jù)依賴關(guān)系,演化數(shù)據(jù)依賴關(guān)系通過演化數(shù)據(jù)依賴圖來表示,圖結(jié)點(diǎn)表示演化數(shù)據(jù)元素,邊表示結(jié)點(diǎn)間存在數(shù)據(jù)依賴關(guān)系。演化數(shù)據(jù)依賴關(guān)系的定義如下:

令演化元素集合E={ec1,ec2,…,ecp}∪{ed1,ed2,…,edq}∪{ea1,ea2,…,ear},其中eck(k=1,…p)、edl(l=1,…q)、 eas(s=1,…r)分別表示演化后修改的元素、演化中刪除的元素和演化后新增的元素,其修改類型依次為ctC、ctD、ctA,且ec1,ec2,…,ecp演化前的元素分別為ec1’,ec2’…,ecp’,則:

演化元素e1演化數(shù)據(jù)依賴于e2,當(dāng)且僅當(dāng)(1)存在v∈USE(e1)∩DEF(e2),且e2可達(dá)e1,任意e’∈PATH(e2,e1),v?USE(e’)∩DEF(e2);(2)若e2∈{ec1,ec2,…,ecp},v∈USE(e1)∩DEF(e2’),且e2’可達(dá)e1,任意e’∈PATH(e2’,e1), v?USE(e’)∩DEF(e2’),記作:。

上述定義中,演化數(shù)據(jù)依賴取決于演化后程序元素,演化數(shù)據(jù)會(huì)傳播影響其他數(shù)據(jù)元素,同時(shí),對(duì)于演化類型ctC,演化前的程序元素處數(shù)據(jù)有可能被修改,會(huì)影響到相關(guān)依賴元素。程序在不斷的演化過程中,針對(duì)不同的演化方案重新構(gòu)造依賴關(guān)系代價(jià)非常大,因此基于源程序及演化元素進(jìn)行迭代構(gòu)造。演化數(shù)據(jù)依賴關(guān)系通過演化數(shù)據(jù)依賴圖來表示,圖結(jié)點(diǎn)表示演化數(shù)據(jù)元素,邊表示結(jié)點(diǎn)間存在數(shù)據(jù)依賴關(guān)系。演化數(shù)據(jù)依賴圖的構(gòu)造步驟如下:

(3-1)初始時(shí),演化元素集E={e1,e2,…,em},演化數(shù)據(jù)依賴圖結(jié)點(diǎn)集合EDNode t={e1,e2,…,em},邊集合EDEdge=Φ并創(chuàng)建源程序P的代碼分析樹ASTree;

(3-2)對(duì)于每個(gè)E中元素,如果其演化類型為ctC或ctD,定位ei在ASTree相應(yīng)演化前結(jié)點(diǎn)B(ei),對(duì)每個(gè)ASTree上B(ei)可達(dá)結(jié)點(diǎn)ej,如果,則EDNode= EDNode∪{ei,ej},EDEdge=EDEdge∪{<ei,ej>};

(3-3)對(duì)于每個(gè)E中元素,如果其演化類型為ctC或ctA,定位ei在ASTree相應(yīng)結(jié)點(diǎn),對(duì)每個(gè)ASTree上ei可達(dá)結(jié)點(diǎn)ej,如果,則EDNode= EDNode∪{ei,ej},EDEdge=EDEdge∪{<ei,ej>}。

上述步驟中,對(duì)于修改結(jié)點(diǎn),不但要記錄修改前的結(jié)點(diǎn)依賴,還要記錄修改后的結(jié)點(diǎn)依賴,依賴關(guān)系均從同一個(gè)結(jié)點(diǎn)引出,標(biāo)記為<ei,ej>;對(duì)于刪除結(jié)點(diǎn),只要根據(jù)修改前分析樹構(gòu)造演化數(shù)據(jù)依賴;對(duì)于新加入結(jié)點(diǎn),則要構(gòu)造新的分析樹結(jié)點(diǎn),并插入到相應(yīng)父結(jié)點(diǎn)下,孩子結(jié)點(diǎn)之上,然后構(gòu)造演化數(shù)據(jù)依賴。這種構(gòu)造方法,避免了重復(fù)的構(gòu)造分析樹,以提高數(shù)據(jù)依賴關(guān)系的提取。

(4)基于源程序P和演化程序PE,構(gòu)建演化控制依賴關(guān)系,演化控制依賴關(guān)系通過演化控制依賴圖來表示,圖結(jié)點(diǎn)表示演化控制元素,邊表示結(jié)點(diǎn)間存在控制依賴關(guān)系。演化控制依賴關(guān)系的定義如下:

令演化元素集合E={ec1,ec2,…,ecp}∪{ed1,ed2,…,edq}∪{ea1,ea2,…,ear},其中,eck(k=1,…p)、edl(l=1,…q)、 eas(s=1,…r)分別表示演化后修改的元素、演化中刪除的元素和演化后新增的元素,其修改類型依次為ctC、ctD、ctA,且ec1,ec2,…,ecp演化前的元素分別為ec1’,ec2’…,ecp’,則: 演化元素e1演化控制依賴于e2,當(dāng)且僅當(dāng)(1)e2為謂詞結(jié)點(diǎn),存在PATH(e2,e1),e1?MUSTPASS(e2),任意e’∈PATH(e2,e1),e1∈MUSTPASS(e’);(2)若e2∈{ec1,ec2,…,ecp},e2’為謂詞結(jié)點(diǎn),存在PATH(e2’,e1),e1?MUSTPASS(e2’),任意e’∈PATH(e2’,e1),e1∈MUSTPASS(e’);,記作:。

上述定義中,演化控制依賴關(guān)系需滿足三個(gè)條件:首先,演化前后元素必須是謂詞結(jié)點(diǎn);其次,演化前后元素可達(dá)另一個(gè)元素,且并非必經(jīng)另一個(gè)元素;再次,任何可達(dá)路徑中的程序元素必經(jīng)另一元素。第二個(gè)條件保證了可達(dá)性并且可以根據(jù)條件選擇執(zhí)行,第三個(gè)條件決定了,是演化元素控制的執(zhí)行,不是演化元素后面的謂詞語(yǔ)句。與演化數(shù)據(jù)依賴關(guān)系類似,演化控制依賴通過演化控制依賴圖來實(shí)現(xiàn),圖結(jié)點(diǎn)表示演化數(shù)據(jù)元素,邊表示結(jié)點(diǎn)間存在演化數(shù)據(jù)依賴關(guān)系?;谠闯绦驑?gòu)造演化程序分析樹,其演化控制依賴關(guān)系的構(gòu)造過程如下:

(4-1)′生成演化程序代碼分析樹ASTree;

(4-2)′若演化類型為ctC,且修改前元素為謂詞元素,構(gòu)建修改前元素的控制依賴關(guān)系;如果修改后元素為謂詞,更新代碼分析樹,構(gòu)建修改后元素的控制依賴關(guān)系;

(4-3)′若演化類型為ctD,且刪除元素為謂詞元素,構(gòu)建謂詞元素的控制依賴關(guān)系;

(4-4)′若演化類型為ctA,且添加元素為謂詞元素,生成代碼分析結(jié)點(diǎn),插入結(jié)點(diǎn)到相應(yīng)代碼分析樹位置,然后構(gòu)建演化元素依賴關(guān)系;

步驟(4-2)′、(4-3)′和(4-4)′中,如果演化前后元素不是謂詞結(jié)點(diǎn),則不存在控制依賴關(guān)系,這里算法的關(guān)鍵是一旦確定演化前后元素是謂詞結(jié)點(diǎn),如何構(gòu)造演化控制依賴圖。演化元素結(jié)點(diǎn)e的演化控制依賴圖的步驟如下:

(4-1)初始時(shí),演化元素結(jié)點(diǎn)為e,演化分析樹為ASTree,演化控制依賴圖G為<ECNode,ECEdge>,其中,ECNode為演化影響結(jié)點(diǎn)結(jié)合,ECEdge是演化控制依賴邊集合;

(4-2)如果e的結(jié)點(diǎn)類型非謂詞結(jié)點(diǎn),轉(zhuǎn)(4-6);

(4-3)在ASTree上對(duì)每一個(gè)e的可達(dá)結(jié)點(diǎn)ei,如果ei是e的后必經(jīng)結(jié)點(diǎn),轉(zhuǎn)(4-6);

(4-4)若e’為e到達(dá)ei的路徑上的任一結(jié)點(diǎn),且e’不是e的后必經(jīng)結(jié)點(diǎn),轉(zhuǎn)(4-6);

(4-5)更新演化控制依賴圖G,加入演化結(jié)點(diǎn)和相應(yīng)邊,即ECNode= ECNode∪{e,ei}, ECEdge= ECEdge∪{<ei,ej>};

(4-6)返回演化控制依賴圖G。

(5)基于演化切片準(zhǔn)則、演化數(shù)據(jù)依賴圖和演化控制依賴圖,構(gòu)建演化切片。演化切片是根據(jù)演化元素提取的程序片段,記錄了演化元素的影響部分。其定義如下:

令P為源程序,<E,V,CT>為演化切片準(zhǔn)則,基于切片準(zhǔn)則生成的演化依賴圖為G=<EDNode∪ECNode,EDEdge∪ECEdge>,則演化切片ESlice是演化程序元素結(jié)點(diǎn)的集合EDNode∪ECNode∪INode,其中,INode是基于EDNode∪ECNode-E生成的間接數(shù)據(jù)依賴和控制依賴結(jié)點(diǎn)結(jié)合。

演化切片主要記錄了演化元素影響的程序元素,EDNode記錄了直接數(shù)據(jù)影響的元素,ECNode記錄了直接控制影響的元素。然而,影響會(huì)不斷傳播,受影響的元素又會(huì)影響其他元素,不斷迭代,最終生成演化切片。

圖3給出了根據(jù)演化切片識(shí)別出影響元素的簡(jiǎn)單例子。

圖3(a)是一個(gè)簡(jiǎn)單的程序例子,其功能是根據(jù)x的值返回不同的表達(dá)式結(jié)果。圖3(b)是例子程序的靜態(tài)依賴圖,細(xì)實(shí)線結(jié)點(diǎn)表示語(yǔ)句或表達(dá)式,結(jié)點(diǎn)中編號(hào)對(duì)應(yīng)圖3(a)語(yǔ)句或表達(dá)式前編號(hào),實(shí)邊是數(shù)據(jù)依賴,虛邊是控制依賴。圖3(c)是識(shí)別出刪除結(jié)點(diǎn)3之后的依賴圖,其中粗實(shí)線結(jié)點(diǎn)為演化切片元素即演化切片為{6,8}。實(shí)際上,由于圖3(c)中刪除了結(jié)點(diǎn)3影響了變量y的定值,從而影響y值的使用。程序中,僅有結(jié)點(diǎn)6和8使用了變量y。圖3(d)是識(shí)別出修改語(yǔ)句3之后的依賴圖,演化切片為{5,6,7,8,9,10},語(yǔ)句3的修改了y,x的定值,x的值通過數(shù)據(jù)傳播影響了語(yǔ)句5,8,10,而語(yǔ)句5,8,10進(jìn)一步控制影響了語(yǔ)句6,7,9,同時(shí)語(yǔ)句3中y的值影響了語(yǔ)句6,8的返回值。在實(shí)際修改中,如果語(yǔ)句2輸入的值就是2,此時(shí)實(shí)際影響語(yǔ)句僅包含6,8。圖3(e)為在識(shí)別出語(yǔ)句3后添加了語(yǔ)句x=2,按照前面的算法計(jì)算出的演化切片為{5,6,7,8,9,10},但5,6實(shí)際上不受添加語(yǔ)句的影響。

三、基于演化切片的演化影響集預(yù)測(cè)ESISP方法的有效性度量

基于演化切片的演化影響集的有效性主要取決于預(yù)測(cè)的影響集的精度以及存?zhèn)味?,通過查全率recall和查準(zhǔn)率NPrecision來度量; 而演化識(shí)別率從一定程度上影響了精度和存?zhèn)味?。演化元素的識(shí)別通過識(shí)別率和誤判率進(jìn)行度量,具體度量方法如下:

式(Ⅰ),

式(Ⅱ),

式(Ⅰ)中,為識(shí)別率,為識(shí)別出的實(shí)際演化元素?cái)?shù)目,為所有實(shí)際演化元素?cái)?shù)目;式(Ⅱ)中,為誤判率,為識(shí)別出的非實(shí)際演化元素?cái)?shù)目,為識(shí)別出的全部演化數(shù)目,即,顯然,值越大,識(shí)別率越高,元素識(shí)別越準(zhǔn)確,越有利于演化影響分析的進(jìn)行;值越大,誤判率越高,越影響后續(xù)的演化影響分析,理想情況下,=,=0,即識(shí)別率為百分之百,誤判率為0,此時(shí)識(shí)別的元素集合與實(shí)際修改的元素集合相同;

式(Ⅲ),

式(Ⅳ),

式(Ⅲ)和(Ⅳ)中,ES是通過計(jì)算演化切片獲得的預(yù)測(cè)演化影響集,RI是實(shí)際演化影響集,recall值越大,查全率越高,能夠正確預(yù)測(cè)實(shí)際演化元素比例越多;當(dāng)RIES時(shí),recall達(dá)到理想值1,表示演化切片能夠預(yù)測(cè)出全部的實(shí)際演化元素;Nprecision值越小,表示預(yù)測(cè)存?zhèn)吻闆r越小,當(dāng)RI=ES時(shí),Nprecision達(dá)到理想值0。

下面通過實(shí)施例驗(yàn)證本發(fā)明的有效性。

1)實(shí)例對(duì)象

我們選取了四個(gè)實(shí)驗(yàn)對(duì)象源程序?qū)嵗篢etris,SimpleJaveApp, NanoXML和JHSA。

。

前三個(gè)對(duì)象均為開源程序,后一個(gè)對(duì)象是一個(gè)我們?cè)缙陂_發(fā)的JAVA切片程序。上表簡(jiǎn)單描述了4個(gè)實(shí)例對(duì)象:第一列是對(duì)象名稱;第二列是對(duì)象代碼行數(shù);第三列對(duì)象程序的演化方案數(shù)目,實(shí)驗(yàn)各選取了20個(gè)演化方案;第四列是對(duì)象功能描述。在實(shí)際軟件演化過程中,演化影響分析技術(shù)主要分析軟件程序演化后,可能的演化影響部分,開發(fā)者和維護(hù)者根據(jù)分析結(jié)果對(duì)已有需求及分析結(jié)果作出相應(yīng)決策。

2)度量過程

a) 收集每個(gè)修改方案原版本VO、中間版本VM和最終版本Vf;

b) 基于文中演化元素識(shí)別方法識(shí)別出版本VM中的演化元素;

c) 基于文中演化切片構(gòu)建方法構(gòu)建演化切片ESlice;

d) 基于VO和VM計(jì)算recogniton_ratio和fault_ratio;

e) 基于ES、VO 、VM與VF計(jì)算recall和NPrecision。

3)度量結(jié)果

a) 演化元素的識(shí)別率和誤判率

根據(jù)發(fā)明中識(shí)別方法所得識(shí)別率和誤判h率如圖4和圖5所示。在統(tǒng)計(jì)識(shí)別率時(shí),我們將修改類型進(jìn)行了分類。在圖4中,本方法能識(shí)別Tetris,NanoXML的全部修改以及SimpleJavaApp,JHSA的絕大部分修改,部分ctC演化代碼未能識(shí)別。在圖5中,本方法在Tetris,NanoXML中修改代碼誤判率為0,在SimpleJavaApp,JHSA存在20%左右的ctC修改類型的代碼誤判??傮w上,通過文中的方式可以幾乎無(wú)誤的識(shí)別出修改代碼。

b) 演化影響元素的查全率和存?zhèn)温?/p>

識(shí)別出修改元素后,根據(jù)文中的方法構(gòu)建演化切片作為預(yù)估影響集,然后根據(jù)公式(Ⅲ)和(Ⅳ)得出的查全率和存?zhèn)温嗜鐖D6所示。本文的技術(shù)查全率保持在較高的水平,Tetris,NanoXML及JHSA的查全率接近100%,SimpleJavaApp的查全率最低; SimpleJavaApp的存?zhèn)温首罡撸S后依次是Tetris、JHSA、NanoXML。

總體上,本發(fā)明中的基于演化切片的演化影響集預(yù)測(cè)ESISP技術(shù)具有較高的查全率和較低的存?zhèn)温?,能有效輔助軟件開發(fā)人員和維護(hù)人員作出相關(guān)決策。

以上所述是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明所述原理的前提下,還可以作出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1