国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種軟件演化過(guò)程故障分析方法

      文檔序號(hào):6633425閱讀:748來(lái)源:國(guó)知局
      一種軟件演化過(guò)程故障分析方法
      【專(zhuān)利摘要】本發(fā)明提出了一種軟件演化過(guò)程故障分析方法,主要用于解決軟件在不斷演化過(guò)程中故障理解和分析問(wèn)題,包括如下步驟:步驟1、使用AST分析器,構(gòu)造演化修改程序的中間表示形式抽象語(yǔ)法樹(shù)EFAGM_AST;步驟2、基于演化修改,確立EFAGM的關(guān)鍵修改節(jié)點(diǎn)集,依次構(gòu)建修改節(jié)點(diǎn)集的前向和后向影響節(jié)點(diǎn)和路徑;步驟3、根據(jù)計(jì)算EFAGM圖節(jié)點(diǎn)的域,生成EFAGM的靜態(tài)影響因子和動(dòng)態(tài)影響因子,完成演化故障分析圖模型EFAGM的構(gòu)建;在故障發(fā)生時(shí),采用EFAGM實(shí)現(xiàn)對(duì)程序演化修改引起的故障分析。本發(fā)明不僅可以表示演化修改影響元素及其之間的關(guān)系,而且能有效提高演化故障分析的效率。
      【專(zhuān)利說(shuō)明】一種軟件演化過(guò)程故障分析方法

      【技術(shù)領(lǐng)域】
      [0001] 本發(fā)明提出了一種采用演化故障分析模型對(duì)軟件演化過(guò)程進(jìn)行故障分析的方法, 屬于軟件調(diào)試的【技術(shù)領(lǐng)域】。

      【背景技術(shù)】
      [0002] 隨著技術(shù)的發(fā)展和需求的提高,軟件不斷復(fù)雜化和大型化。在這類(lèi)軟件產(chǎn)品開(kāi)發(fā) 和維護(hù)過(guò)程中,時(shí)常伴隨著迭代開(kāi)發(fā)、需求變更、性能優(yōu)化等軟件程序演化修改行為,而演 化的進(jìn)行,增加了引入新的軟件程序故障的風(fēng)險(xiǎn)。因此,軟件在演化過(guò)程中,需要不斷的建 模分析,以盡早找到潛在的故障,將軟件開(kāi)發(fā)和維護(hù)費(fèi)用降到最低。
      [0003] 當(dāng)軟件程序中故障出現(xiàn)時(shí),有以下幾種方法:
      [0004] (1)最傳統(tǒng)簡(jiǎn)單的方法在程序中插入輸出語(yǔ)句。這建立在故障排除人員對(duì)程序極 其熟悉,存在很大的主觀性,且不適合現(xiàn)代大型復(fù)雜軟件的故障排除。
      [0005] (2)借助調(diào)試工具,故障排除人員通常用的手法是設(shè)置斷點(diǎn)來(lái)排除故障,這同樣過(guò) 于主觀,效率不高,造成人員的極大浪費(fèi)。
      [0006] (3)基于程序譜來(lái)發(fā)現(xiàn)軟件中的故障是當(dāng)前流行的故障定位方案,其缺點(diǎn)在于程 序在演化修改過(guò)程中,歷史程序譜存在破壞的可能,而且也無(wú)法保證Test oracle在修改后 仍然有效。由于故障排除人員未必非常熟悉整個(gè)軟件程序,他們也很難根據(jù)程序元素的可 疑性排除錯(cuò)誤的根源。
      [0007] (4)采用系統(tǒng)依賴(lài)圖來(lái)進(jìn)行故障分析。雖然系統(tǒng)依賴(lài)圖提供了所有程序元素之間 詳細(xì)的依賴(lài)關(guān)系,然而在程序不斷演化過(guò)程中,不斷構(gòu)建系統(tǒng)依賴(lài)圖,其時(shí)間代價(jià)和空間代 價(jià)是難以估量的,且其不具備演化故障分析能力。
      [0008] 基于上述問(wèn)題,設(shè)計(jì)高效精確的演化故障分析模型十分必要。如何根據(jù)演化修改 高效地構(gòu)建演化故障分析模型,并可對(duì)軟件故障提出合理建議顯得尤為重要。


      【發(fā)明內(nèi)容】

      [0009] 本發(fā)明所要解決的技術(shù)問(wèn)題是針對(duì)【背景技術(shù)】的缺陷,提供一種演化故障分析圖模 型(Evolution Fault Analysis Graph Model, EFAGM),通過(guò)構(gòu)造演化修改相關(guān)的前向依 賴(lài)元素、后向依賴(lài)元素及其靜態(tài)和動(dòng)態(tài)影響因子來(lái)分析由程序演化修改引起的故障分析問(wèn) 題。
      [0010] 本發(fā)明為解決上述技術(shù)問(wèn)題采用以下技術(shù)方案:
      [0011] 一種軟件演化過(guò)程故障分析方法,包括以下步驟:
      [0012] 步驟1、使用AST分析器,構(gòu)造演化修改程序的中間表示形式抽象語(yǔ)法樹(shù)EFAGM_ AST ;
      [0013] 步驟2、基于演化修改,確立EFAGM的關(guān)鍵修改節(jié)點(diǎn)集,依次構(gòu)建修改節(jié)點(diǎn)集的前 向和后向影響節(jié)點(diǎn)和路徑;
      [0014] 步驟3、根據(jù)計(jì)算EFAGM圖節(jié)點(diǎn)的域,生成EFAGM的靜態(tài)影響因子和動(dòng)態(tài)影響因子, 完成演化故障分析圖模型EFAGM的構(gòu)建;在故障發(fā)生時(shí),采用EFAGM實(shí)現(xiàn)對(duì)程序演化修改引 起的故障分析。
      [0015] 進(jìn)一步的,本發(fā)明的一種軟件演化過(guò)程故障分析方法,步驟1所述EFAGM是一個(gè)二 元組〈CINode,CDEdge〉,其中,CINode為修改影響節(jié)點(diǎn)集,CDEdge為修改依賴(lài)邊集;
      [0016] 修改影響節(jié)點(diǎn)集 CINode 包括常見(jiàn)節(jié)點(diǎn) BlockNode、IfNode、SwitchNode、 WhileNode、DoNode、ForNode、BreakNode、ContinueNode、ReturnNode、InvocationNode、 MethodNode ;
      [0017] 修改依賴(lài)邊集 CDEdge = DCDEdge U ICDEdge U DDDEdge U IDDEdge,其中, D⑶Edge是直接控制依賴(lài)邊集,I⑶Edge是間接控制依賴(lài)邊集,DDDEdge是直接數(shù)據(jù)依賴(lài)邊 集,IDDEdge是間接數(shù)據(jù)依賴(lài)邊集;
      [0018] EFAGM圖節(jié)點(diǎn)的域,包括:
      [0019] (I) ID域:用于演化修改影響的節(jié)點(diǎn)或邊的標(biāo)識(shí),節(jié)點(diǎn)或邊的ID標(biāo)識(shí)是唯一的;
      [0020] (2)Position域:對(duì)應(yīng)圖節(jié)點(diǎn)元素在程序中的位置;
      [0021] (3)ParentNodeLink域:當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)鏈域,用于鏈接當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn),便 于EFAGM圖的前向遍歷;若當(dāng)前節(jié)點(diǎn)若存在變量使用并受多個(gè)節(jié)點(diǎn)變量定義影響或同時(shí)受 到前向數(shù)據(jù)和控制影響,則將ParentNodeLink鏈接多個(gè)父節(jié)點(diǎn),否則只鏈接一個(gè)父節(jié)點(diǎn); 當(dāng)前節(jié)點(diǎn)若存在變量使用并受多個(gè)節(jié)點(diǎn)變量定義影響或同時(shí)受到前向數(shù)據(jù)和控制影響, ParentNodeLink鏈接多個(gè)父節(jié)點(diǎn),否則鏈接一個(gè)節(jié)點(diǎn);
      [0022] (4) ChiIdNodeLink域:當(dāng)前節(jié)點(diǎn)的孩子節(jié)點(diǎn)鏈域,用于鏈接當(dāng)前節(jié)點(diǎn)的孩子節(jié) 點(diǎn),便于 EFAGM 圖的后向遍歷;對(duì)于 IfNode、SwitchNode、WhileNode、DoNode、ForNode、 MethodNode類(lèi)型的條件判斷語(yǔ)句的ChildNodeLink域,或者當(dāng)前節(jié)點(diǎn)若存在變量定義或定 值并影響多個(gè)節(jié)點(diǎn)的使用,則鏈接多個(gè)孩子節(jié)點(diǎn);否則只鏈接一個(gè)孩子節(jié)點(diǎn);對(duì)于IfNode、 SwitchNode、WhileNode、DoNode、ForNode、MethodNode 條件判斷語(yǔ)句的 ChildNodeLink 域鏈接多個(gè)孩子節(jié)點(diǎn);當(dāng)前節(jié)點(diǎn)若存在變量定義或定值并影響多個(gè)節(jié)點(diǎn)的使用, ChildNodeLink域也鏈接多個(gè)孩子節(jié)點(diǎn);否則,ChildNodeLink域只鏈接一個(gè)孩子節(jié)點(diǎn);
      [0023] (5)ChangeNum、AveDistance域:影響當(dāng)前節(jié)點(diǎn)的修改節(jié)點(diǎn)的個(gè)數(shù)、與修改節(jié)點(diǎn) 的最小距離,令1?,!?. ..,mn為當(dāng)前節(jié)點(diǎn)與程序中η個(gè)修改節(jié)點(diǎn)的距離,則AveDistance = (m1+m2+***+mn)/n ;
      [0024] (6) StaticWeight域:靜態(tài)分析得出的當(dāng)前節(jié)點(diǎn)發(fā)生故障的概率,其計(jì)算公式為

      【權(quán)利要求】
      1. 一種軟件演化過(guò)程故障分析方法,其特征在于,包括以下步驟: 步驟1、使用AST分析器,構(gòu)造演化修改程序的中間表示形式抽象語(yǔ)法樹(shù)EFAGM_AST; 步驟2、基于演化修改,確立EFAGM的關(guān)鍵修改節(jié)點(diǎn)集,依次構(gòu)建修改節(jié)點(diǎn)集的前向和 后向影響節(jié)點(diǎn)和路徑; 步驟3、根據(jù)計(jì)算EFAGM圖節(jié)點(diǎn)的域,生成EFAGM的靜態(tài)影響因子和動(dòng)態(tài)影響因子,完成 演化故障分析圖模型EFAGM的構(gòu)建;在故障發(fā)生時(shí),采用EFAGM實(shí)現(xiàn)對(duì)程序演化修改引起的 故障分析。
      2. 根據(jù)權(quán)利要求1所述的一種軟件演化過(guò)程故障分析方法,其特征在于,步驟1所述 EFAGM是一個(gè)二元組〈CINode,CDEdge〉,其中,CINode為修改影響節(jié)點(diǎn)集,CDEdge為修改依 賴(lài)邊集; 修改影響節(jié)點(diǎn)集CINode包括常見(jiàn)節(jié)點(diǎn)BlockNode、IfNode、SwitchNode、WhileNode、DoNode、ForNode、BreakNode、ContinueNode、ReturnNode、InvocationNode、MethodNode; 修改依賴(lài)邊集CDEdge=DCDEdgeUICDEdgeUDDDEdgeUIDDEdge,其中,DCDEdge是 直接控制依賴(lài)邊集,ICDEdge是間接控制依賴(lài)邊集,DDDEdge是直接數(shù)據(jù)依賴(lài)邊集,IDDEdge 是間接數(shù)據(jù)依賴(lài)邊集; EFAGM圖節(jié)點(diǎn)的域,包括: (1) ID域:用于演化修改影響的節(jié)點(diǎn)或邊的標(biāo)識(shí),節(jié)點(diǎn)或邊的ID標(biāo)識(shí)是唯一的; (2)Position域:對(duì)應(yīng)圖節(jié)點(diǎn)元素在程序中的位置; (3) ParentNodeLink域:當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)鏈域,用于鏈接當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn),便于 EFAGM圖的前向遍歷;若當(dāng)前節(jié)點(diǎn)若存在變量使用并受多個(gè)節(jié)點(diǎn)變量定義影響或同時(shí)受 到前向數(shù)據(jù)和控制影響,則將ParentNodeLink鏈接多個(gè)父節(jié)點(diǎn),否則只鏈接一個(gè)父節(jié)點(diǎn); 當(dāng)前節(jié)點(diǎn)若存在變量使用并受多個(gè)節(jié)點(diǎn)變量定義影響或同時(shí)受到前向數(shù)據(jù)和控制影響, ParentNodeLink鏈接多個(gè)父節(jié)點(diǎn),否則鏈接一個(gè)節(jié)點(diǎn); (4)ChiIdNodeLink域:當(dāng)前節(jié)點(diǎn)的孩子節(jié)點(diǎn)鏈域,用于鏈接當(dāng)前節(jié)點(diǎn)的孩子節(jié)點(diǎn), 便于EFAGM圖的后向遍歷;對(duì)于IfNode、SwitchNode、WhileNode、DoNode、ForNode、 MethodNode類(lèi)型的條件判斷語(yǔ)句的ChildNodeLink域,或者當(dāng)前節(jié)點(diǎn)若存在變量定義或定 值并影響多個(gè)節(jié)點(diǎn)的使用,則鏈接多個(gè)孩子節(jié)點(diǎn);否則只鏈接一個(gè)孩子節(jié)點(diǎn);對(duì)于IfNode、 SwitchNode、WhileNode、DoNode、ForNode、MethodNode條件判斷語(yǔ)句的ChildNodeLink 域鏈接多個(gè)孩子節(jié)點(diǎn);當(dāng)前節(jié)點(diǎn)若存在變量定義或定值并影響多個(gè)節(jié)點(diǎn)的使用, ChildNodeLink域也鏈接多個(gè)孩子節(jié)點(diǎn);否則,ChildNodeLink域只鏈接一個(gè)孩子節(jié)點(diǎn); (5)ChangeNum、AveDistance域:影響當(dāng)前節(jié)點(diǎn)的修改節(jié)點(diǎn)的個(gè)數(shù)、與修改節(jié)點(diǎn)的 最小距離,令1?,!?. ..,mn為當(dāng)前節(jié)點(diǎn)與程序中η個(gè)修改節(jié)點(diǎn)的距離,則AveDistance= (m1+m2+***+mn)/n; (6)StaticWeight域:靜態(tài)分析得出的當(dāng)前節(jié)點(diǎn)發(fā)生故障的概率,其計(jì)算公式為 StaticWeight= -- -7·其中 m表不影響ActiveNode的ChangeNum域;當(dāng) iAveDisidiXice+l' 演化修改引起故障時(shí),當(dāng)前節(jié)點(diǎn)的故障概率遵循: a) 與修改節(jié)點(diǎn)距離越近,發(fā)生故障的概率越高; b) 被影響的修改節(jié)點(diǎn)數(shù)目越多,發(fā)生故障的概率越高; C)修改節(jié)點(diǎn)隨著數(shù)目的增加,其影響力逐漸減??; (7)DynamicWeight域:用于動(dòng)態(tài)分析得出的當(dāng)前節(jié)點(diǎn)發(fā)生故障的概率,其計(jì)算公式 為:
      其中,s是根據(jù)測(cè)試歷史信息與預(yù)言相沖突的測(cè)試數(shù)目,t是根據(jù)測(cè)試歷史信息與預(yù)言 一致的測(cè)試數(shù)目,Y是調(diào)節(jié)因子;當(dāng)演化修改引起故障時(shí),當(dāng)前節(jié)點(diǎn)的故障概率遵循: a) 經(jīng)過(guò)當(dāng)前節(jié)點(diǎn)的失效測(cè)試用例越多,發(fā)生故障的概率越高; b) 經(jīng)過(guò)當(dāng)前節(jié)點(diǎn)的成功測(cè)試用例越多,發(fā)生故障的概率越小; c) 隨著失效測(cè)試用例數(shù)目的增多,失效測(cè)試用例對(duì)故障發(fā)生的概率分析影響越??; d) 隨著失效測(cè)試用例數(shù)目的增多,成功測(cè)試用例對(duì)故障發(fā)生的概率分析影響越小。
      3. 根據(jù)權(quán)利要求2所述的一種軟件演化過(guò)程故障分析方法,其特征在于,步驟2中基 于演化修改,確立關(guān)鍵修改節(jié)點(diǎn)集為:在初始時(shí),EFAGM模型中只包括η個(gè)演化修改節(jié)點(diǎn) cNodel,...,cNoden;EFAGM圖中在加入一個(gè)節(jié)點(diǎn)的同時(shí)設(shè)置ID和Position域值,在創(chuàng) 建一條邊的同時(shí)設(shè)置ParentNodeLink和ChildNodeLink域值;在實(shí)現(xiàn)時(shí),調(diào)用方法ast. creatAST(replace)生成源程序replace的EFAGM_AST代碼樹(shù),并返回根節(jié)點(diǎn)。
      4. 根據(jù)權(quán)利要求3所述的一種軟件演化過(guò)程故障分析方法,其特征在于,步驟2中所述 依次構(gòu)建修改節(jié)點(diǎn)集的前向和后向影響節(jié)點(diǎn)和路徑;具體為: 2. 1)基于cNodel. getNodeType()方法判定cNodel的節(jié)點(diǎn)類(lèi)型,構(gòu)造cNodel的前向控 制節(jié)點(diǎn)、前向數(shù)據(jù)節(jié)點(diǎn)及相關(guān)依賴(lài)邊;當(dāng)前節(jié)點(diǎn)的修改會(huì)引起控制它的節(jié)點(diǎn)的更新,同時(shí), 當(dāng)前節(jié)點(diǎn)使用的變量修改會(huì)引起變量定義或定值節(jié)點(diǎn)的一致性檢查; 2. 2)構(gòu)造cNodel的后向控制節(jié)點(diǎn)、后向數(shù)據(jù)節(jié)點(diǎn)及相關(guān)依賴(lài)邊;當(dāng)前節(jié)點(diǎn)若為控制節(jié) 點(diǎn),它的修改會(huì)影響控制塊中所有節(jié)點(diǎn)的執(zhí)行;當(dāng)前節(jié)點(diǎn)中若定義或定值了變量,則所有使 用定義或定值集中變量的節(jié)點(diǎn)都將會(huì)受到影響; 2. 3)重復(fù)2. 1)?2. 2),創(chuàng)建其他修改節(jié)點(diǎn)cNode2到cNoden的前向影響節(jié)點(diǎn)和后向 影響節(jié)點(diǎn),并將所有未加入到EFAGM中的節(jié)點(diǎn)加入其中,創(chuàng)建ECDEdge、I⑶Edge、DDDEdge、 IDDEdge。
      5. 根據(jù)權(quán)利要求4所述的一種軟件演化過(guò)程故障分析方法,其特征在于,步驟3具體 為: 3. 1)更新EFAGM圖中每個(gè)節(jié)點(diǎn)的ChangeNum域和AveDistance域;令當(dāng)前節(jié)點(diǎn)為 ActiveNode,ChangeNum值為ActiveNode根據(jù)ParentNodeLink域或ChildNodeLink域可 達(dá)的修改節(jié)點(diǎn)個(gè)數(shù);AveDistance的計(jì)算分兩步:首先,計(jì)算ActiveNode到每個(gè)可達(dá)修改節(jié) 點(diǎn)i的最小距離mini,然后計(jì)算AveDistance,計(jì)算公式為也eitetance= 其中,m為 ChangeNum值; 3.2)根據(jù)ChangeNum域和AveDistance域計(jì)算EFAGM圖中每個(gè)節(jié)點(diǎn)的StaticWeight 值;令當(dāng)前節(jié)點(diǎn)為ActiveNode,則計(jì)算公式為:StaticWeight1-^ ;其 中m表示影響ActiveNode的ChangeNum域,在EFAGM圖上表現(xiàn)為正向或逆向可達(dá),冗=1了 表示對(duì)ActiveNode的影響的修改節(jié)點(diǎn)越多,則影響力越大,且隨著影響的修改節(jié)點(diǎn)增多, 影響力逐漸降低,-一-^表示AveDistance越大,演化修改節(jié)點(diǎn)對(duì)ActiveNode 影響越小,且由于AveDistance對(duì)ActiveNode影響力要小于修改節(jié)點(diǎn)個(gè)數(shù)的影響力,將 AveDistance的影響力限制在(0, 1]之間,即^-----e⑴,1];根據(jù)計(jì)算公式,受影 A veDtsIance +1 響的修改節(jié)點(diǎn)數(shù)目越多,則StaticWeight越大,受影響的修改節(jié)點(diǎn)數(shù)目相同,而距離越近,StaticWeight越大,當(dāng)演化修改引起故障時(shí),根據(jù)StaticWeight的大小順序?qū)收线M(jìn)行排 查; 3. 3)根據(jù)測(cè)試歷史信息計(jì)算DynamicWeight,如果演化修改后TestOracle仍然有效, 通過(guò)測(cè)試運(yùn)行的失效與否更加精確的計(jì)算演化故障的概率,其計(jì)算公式為:
      其中,s是根據(jù)測(cè)試歷史信息與預(yù)言相沖突的測(cè)試數(shù)目,t是根據(jù)測(cè)試歷史信息與預(yù)言 一致的測(cè)試數(shù)目;+表示第i個(gè)沖突測(cè)試數(shù)目對(duì)權(quán)重的影響因子,隨著測(cè)試數(shù)目的增加,測(cè) 試對(duì)權(quán)重的影響不斷減小,Ye[〇, 0.5]是調(diào)節(jié)因子,其大小由測(cè)試用例規(guī)模決定,一般情 況下,由于測(cè)試用例規(guī)模規(guī)模較大,我們默認(rèn)取Y= 〇. 5,當(dāng)i>10000時(shí),|<〇·〇1,其對(duì)權(quán)重 的影響可以忽略不計(jì),當(dāng)測(cè)試用例規(guī)模很小時(shí),將測(cè)試對(duì)權(quán)重的影響不斷減小忽略不計(jì),即 令Y= 0,這樣,所有測(cè)試對(duì)權(quán)重的影響因子均為1 ; 3. 4)完成EFAGM的構(gòu)建,故障發(fā)生時(shí),根據(jù)EFAGM節(jié)點(diǎn)元素關(guān)系以及StaticWeight、DynamicWeght域值等級(jí)來(lái)確定故障的根源。
      6.根據(jù)權(quán)利要求書(shū)4所述的一種軟件演化過(guò)程故障分析方法,其特征在于,步驟2. 1) 具體步驟如下: 2.I. 1)在EFAGM_AST上提取cNodel的前驅(qū)控制節(jié)點(diǎn)ParentVertexl,ParentVertexl 的節(jié)點(diǎn)類(lèi)型有IfNode、SwitchNode、WhileNode、DoNode、ForNode、MethodNode,加入 ParentVertexl到EFAGM圖中,更新cNodeI的ParentNodeLink域,以便于EFAGM的遍歷 操作,并創(chuàng)建直接控制依賴(lài)邊DCDEdge(ParentVertexl,cNodel),cNodel的修改會(huì)引起 ParentVertexl的修改檢查; 2.L2)提取ParentVertexl的直接前驅(qū)控制節(jié)點(diǎn)ParentVertex2,加入到EFAGM圖中,設(shè)置ParentVertexl的ParentNodeLink域,并創(chuàng)建間接控制依賴(lài)邊 KDEdge(ParentVertex2,ParentVertexl);如果由于節(jié)點(diǎn)cNodel的修改引起了故障的發(fā) 生,那么節(jié)點(diǎn)的cNodel可疑性要大于節(jié)點(diǎn)ParentVertexl、節(jié)點(diǎn)的ParentVertexl可疑性要 大于節(jié)點(diǎn)ParentVertex2 ; 2. 1.3)重復(fù)2.I. 2),創(chuàng)建所有間接控制依賴(lài)節(jié)點(diǎn)和相應(yīng)邊,不斷的波動(dòng)影響,直至將 相關(guān)的節(jié)點(diǎn)元素包括進(jìn)來(lái); 2. 1. 4)根據(jù)cNodel.getExpressionO方法提取cNodel中的表達(dá)式,并生成表達(dá)式 變量使用集v_use,基于EFAGM_AST,加入V_use中所有變量的的直接前驅(qū)定義或定值節(jié)點(diǎn) Vertexl到EFAGM中,并創(chuàng)建數(shù)據(jù)依賴(lài)邊DDDEdge(Vertexl,cNodel); 2. 1. 5)生成Vertexl中表達(dá)式變量集vl,基于EFAGM_AST,加入vl中所有變量的直接 前驅(qū)節(jié)點(diǎn)Vertex2到EFAGM中,并創(chuàng)建數(shù)據(jù)依賴(lài)邊IDDEdge(Vertex2,Vertexl); 2.I. 6)重復(fù)2.I. 5),創(chuàng)建所有間接數(shù)據(jù)依賴(lài)節(jié)點(diǎn)和相應(yīng)邊,同時(shí)需要不斷的對(duì)數(shù)據(jù)類(lèi) 型和數(shù)據(jù)值同步更新檢查,直到數(shù)據(jù)類(lèi)型的初始定義結(jié)束; 2. 1. 7)如果節(jié)點(diǎn)類(lèi)型為WhileNode、DoNode、ForNode,則這些節(jié)點(diǎn)的直接前驅(qū)數(shù)據(jù)節(jié) 點(diǎn)和控制節(jié)點(diǎn)除了自然順序之前的節(jié)點(diǎn),還包括節(jié)點(diǎn)控制塊之中的控制變量定值節(jié)點(diǎn)和跳 轉(zhuǎn)節(jié)點(diǎn),令WhileBlock、DoBlock、ForBlock中的控制變量定值或跳轉(zhuǎn)節(jié)點(diǎn)為Vertexl,加入 Vertexl到EFAGM中,并創(chuàng)建依賴(lài)邊DCDEdge(Vertexl,cNodel); 2. 1.8)如果節(jié)點(diǎn)類(lèi)型為MethodNode,則其直接前驅(qū)節(jié)點(diǎn)為調(diào)用該MethodNode的語(yǔ)句 節(jié)點(diǎn),MethodNode的修改會(huì)引起相應(yīng)的CallVertex的同步更新,基于EFAGM_AST,加入調(diào)用 節(jié)點(diǎn)CallVertex,并創(chuàng)建依賴(lài)邊DCDEdge(CallVertex,cNodel)。
      7.根據(jù)權(quán)利要求書(shū)6所述的一種軟件演化過(guò)程故障分析方法,其特征在于,步驟2. 2) 具體步驟如下: 2. 2. 1)如果節(jié)點(diǎn)類(lèi)型為IfNode、SwitchNode、WhileNode、DoNode、ForNode、MethodNode,則這些節(jié)點(diǎn)的修改會(huì)引起語(yǔ)句塊中的順序節(jié)點(diǎn)是否執(zhí)行,分別創(chuàng)建IFBlock、 SwitchCase、WhiIeBlock、DoBlock、ForBlock、MethodBlock語(yǔ)句塊下的順序節(jié)點(diǎn)Vertexl, 并創(chuàng)建直接控制依賴(lài)邊DCDEdge(cNodel,Vertexl); 2· 2· 2)如果Vertexl節(jié)點(diǎn)類(lèi)型為IfNode、SwitchNode、WhileNode、DoNode、ForNode、MethodNode,分別創(chuàng)建IFBlock、SwitchCase、WhileBlock、DoBlock、ForBlock、MethodBlock 下的語(yǔ)句節(jié)點(diǎn)Vertexl,并創(chuàng)建間接控制依賴(lài)邊KDEdge(Vertexl,Vertex2); 2. 2. 3)重復(fù)2. 2. 2)創(chuàng)建所有間接控制依賴(lài)節(jié)點(diǎn)和依賴(lài)邊,修改不斷的傳播,直到普通 的語(yǔ)句節(jié)點(diǎn)BlockNode為止; 2. 2. 4)根據(jù)cNodeLgetExpressionO方法提取cNodel中的表達(dá)式,并生成表達(dá)式變 量定義集v_def,基于EFAGM_AST,加入v_def中所有變量的的直接后繼使用節(jié)點(diǎn)Vertexl 到EFAGM中,并創(chuàng)建數(shù)據(jù)依賴(lài)邊DDDEdge(cNodel,Vertexl); 2. 2. 5)生成Vertexl中表達(dá)式變量定義集v_defl,基于EFAGM_AST,加入v_defl中所有變量的直接后繼引用節(jié)點(diǎn)Vertex2到EFAGM中,并創(chuàng)建數(shù)據(jù)依賴(lài)邊 IDDEdge(Vertexl,Vertex2); 2. 2. 6)重復(fù)2. 2. 5),創(chuàng)建所有間接數(shù)據(jù)依賴(lài)節(jié)點(diǎn)和相應(yīng)邊,直到?jīng)]有新的變量的定值 和修改為止; 2. 2. 7)如果節(jié)點(diǎn)類(lèi)型為ReturnNode,則此節(jié)點(diǎn)控制返回到方法,遍歷EFAGM_AST, 加入調(diào)用ReturnNode節(jié)點(diǎn)所在方法的節(jié)點(diǎn)Vertexl,創(chuàng)建數(shù)據(jù)依賴(lài)邊DDDEdge(cNodel, Vertexl); 2. 2. 8)如果節(jié)點(diǎn)類(lèi)型為fceakNode,遍歷EFAGM_AST, 若cNodel所在的WhileNode、DoNode、ForNode中的語(yǔ)句節(jié)點(diǎn)為Vertexl,則BreakNode的修改直接決定著Vertexl是否執(zhí)行,創(chuàng)建控制依賴(lài)邊DCD(cNodel,Vertexl); 同時(shí),WhileBlock、DoBlock、ForBlock中的BreakNode的后續(xù)語(yǔ)句也直接受BreakNode、 ContinueNode的控制,遍歷EFAGM_AST,令后續(xù)語(yǔ)句為Vertex2,加入Vertex2節(jié)點(diǎn)到EFAGM 中,并創(chuàng)建(cNodel,Vertex2); 若cNodel所在的語(yǔ)句塊為SwitchCase,則BreakNode控制語(yǔ)句塊中cNode中下一個(gè)BreakNode之前的語(yǔ)句,遍歷EFAGM_AST,令Vertexl為所在語(yǔ)句塊的cNodel的后續(xù)語(yǔ)句到 下一個(gè)BreakNode之前的語(yǔ)句,創(chuàng)建DCD(cNode1,Vertexl); 2. 2. 9)如果節(jié)點(diǎn)類(lèi)型為ContinueNode,遍歷EFAGM_AST,若cNodel所在的WhileNode、DoNode、ForNode中的語(yǔ)句節(jié)點(diǎn)為Vertexl,則ContinueNode的修改直接決定著跳轉(zhuǎn) Vertexl的執(zhí)行,創(chuàng)建控制依賴(lài)邊DCD(cNodel,Vertexl);同時(shí),WhileBlock、DoBlock、 ForBlock中的ContinueNode的后續(xù)語(yǔ)句的執(zhí)行與否也受ContinueNode的控制,遍 歷EFAGM_AST,令后續(xù)語(yǔ)句為Vertex2,加入Vertex2節(jié)點(diǎn)到EFAGM中,并創(chuàng)建(cNodel, Vertex2); 2. 2. 10)如果節(jié)點(diǎn)類(lèi)型為InvocationNode,遍歷EFAGM_AST,令調(diào)用方法節(jié)點(diǎn) 為Vertexl,加入Vertexl到EFAGM中,并創(chuàng)建控制依賴(lài)邊和數(shù)據(jù)依賴(lài)邊DCD(cNodel, Vertexl); 2. 2. 11)以cNodel的直接數(shù)據(jù)影響和控制影響節(jié)點(diǎn)為新分析節(jié)點(diǎn),創(chuàng)建2. 2. 7)? 2. 2. 10)的cNodel所有間接數(shù)據(jù)影響和控制控制影響節(jié)點(diǎn),并創(chuàng)建邊IDDEdge、ICDEdge,直 到?jīng)]有新的節(jié)點(diǎn)和邊加入為止。
      【文檔編號(hào)】G06F11/36GK104461867SQ201410623526
      【公開(kāi)日】2015年3月25日 申請(qǐng)日期:2014年11月8日 優(yōu)先權(quán)日:2014年11月8日
      【發(fā)明者】文萬(wàn)志, 陳建平, 陳翔, 鄭國(guó)平, 蔣崢崢, 顧衛(wèi)江, 彭志娟 申請(qǐng)人:南通大學(xué)
      網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1