一種逆向提取Java軟件程序類圖的方法
【專利摘要】本發(fā)明屬于一種軟件測試【技術(shù)領(lǐng)域】,特別涉及一種軟件詳細設(shè)計功能測試及提取軟件程序類圖的方法。其技術(shù)方案是:一種逆向提取Java軟件程序類圖的方法,包括步驟:A.靜態(tài)分析程序類圖;B.選定骨干類作為抽象的基準點,搜索骨干類之間的路徑;C.對每一條路徑,從路徑的任意一端開始,對存在具有類-關(guān)系-類-關(guān)系-類這樣性質(zhì)的子路徑與本發(fā)明列舉的57條類圖抽象規(guī)則相匹配的子路徑進行抽象;D.若出現(xiàn)兩個骨干類之間抽象后存在多種關(guān)系時,按規(guī)定的優(yōu)先級抽象后的路徑進行合并,得到抽象類圖。本發(fā)明提供了一種逆向提取Java程序類圖的方法,達到軟件的代碼實現(xiàn)與其詳細設(shè)計之間的一致性驗證的目的。
【專利說明】一種逆向提取Java軟件程序類圖的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于一種軟件測試【技術(shù)領(lǐng)域】,特別涉及一種軟件詳細設(shè)計功能測試及提取軟件程序類圖的方法。
【背景技術(shù)】
[0002]目前的軟件審查工具,主要側(cè)重于對源代碼的自動分析、對代碼缺陷的自動檢測,某種程度上忽視了程序是否符合軟件詳細設(shè)計的功能模塊劃分,程序結(jié)構(gòu)是否合理的檢驗,且對軟件詳細設(shè)計及其編程實現(xiàn)的審查,完全依賴于有經(jīng)驗的軟件開發(fā)人員,尚未看到可用來檢查程序結(jié)構(gòu)是否符合設(shè)計要求的有效方法和支持工具。例如,為了建立代碼與詳細設(shè)計之間的對應關(guān)系,需要人工在程序代碼中標注各段代碼與軟件詳細設(shè)計文檔中的定義的功能點之間的對應關(guān)系。盡管在模型驅(qū)動的軟件開發(fā)過程中,軟件的詳細設(shè)計可以直接轉(zhuǎn)換成程序代碼,但是程序代碼在軟件開發(fā)的多次迭代中可能發(fā)生變化,因此,對軟件的詳細設(shè)計與源代碼之間進行審查依然是必要的,以確認軟件實現(xiàn)是否符合設(shè)計要求。
[0003]由于在軟件開發(fā)過程中,類與類之間關(guān)系的實現(xiàn)有多種方式,因此會存在這樣的現(xiàn)象:軟件設(shè)計模型中類A和類B之間存在著關(guān)聯(lián)關(guān)系或者是依賴關(guān)系,而程序?qū)崿F(xiàn)時類A和類B不存在直接的關(guān)系,而用其他類來實現(xiàn)類A與類B之間的關(guān)系。也就是說,設(shè)計類圖與程序類圖之間會相差很大,為了達到對軟件的詳細設(shè)計與源代碼之間進行審查,需要一種提取抽象程序類圖的方法,以得到更簡化、更高抽象層次的程序類圖。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的是:提供一種逆向提取Java程序類圖的方法,以達到軟件的代碼實現(xiàn)與其詳細設(shè)計之間的一致性驗證。
[0005]本發(fā)明的技術(shù)方案是:一種逆向提取Java軟件程序類圖的方法,其特征是包括以下步驟:
[0006]A.基于JDT的API接口,分析.class文件,獲取Java程序的靜態(tài)信息,提取類之間的繼承、關(guān)聯(lián)、聚合、依賴關(guān)系以及類與接口之間實現(xiàn)、關(guān)聯(lián)、聚合、依賴關(guān)系;
[0007]B.選定體現(xiàn)主要流程的類作為骨干類,并將其作為抽象的基準點,搜索任意兩個骨干類之間的路徑;
[0008]C.對B步驟得到的每一條路徑,從路徑的任意一端開始,檢查是否存在具有類-關(guān)系-類-關(guān)系-類這樣性質(zhì)的子路徑與本步驟列舉的57條類圖抽象規(guī)則相匹配,若匹配,則用抽象規(guī)則的結(jié)果代替這條子路徑;若不匹配,則跳過當前的類結(jié)點和關(guān)系結(jié)點,從下一個類結(jié)點開始遍歷;直到不存在可以轉(zhuǎn)換的路徑,除此之外,骨干類不能被抽象掉;類圖抽象規(guī)則包括:
[0009]1)Class1-GeneralizationRight-Class2-GeneralizationRight-Class3==> Class1-GeneralizationRight-Class3;
2)Classl-GeneralizationRight-Class2-DependencyRight_Class3=> Classl—DependencyRight_Class3;
3)Class1-GeneralizationRight-Class2-AssociationRight~Class3=? Class1-AssociationRight-Class3;
4)Classl-GeneralizationRight_Class2-AggregationRight-Class3=> Classl-AggregationRight—Class3;
5)Class1-GeneralizationRight-Class2-AssociationLeft-Class3=^ Class1-AssociationLeft-Class3;
6)Class1-GeneralizationRight-Class2-DependencyLeft-Class3=> Classl—DependencyLeft_Class3;
7)Classl-GeneralizationRight-Class2-AggregationLeft-Class3=> Classl—AggregationLeft-Class3;
8)Class1-GeneralizationRight_Class2-Association-Class3 =^Class1-Association-Class3;
9)Class1-GeneralizationLeft-Class2-DependencyRight-Class3=>
Classl-DependencyRight-Class3;
`10)Class1-GeneralizationLeft-Class2-AssociationRight-Class3=^ Classl—AssociationRight-Class3;
11)Classl—GeneralizationLeft-Class2-Aggregati0nRight_Class3=? Classl- AggregationRight—Class3;
12)Class1-GeneralizationLeft-Class2-GeneralizationLeft~Class3=^ Classl- GeneralizationLeft-Class3;
[0010]
【權(quán)利要求】
1.一種逆向提取Java軟件程序類圖的方法,其特征是包括以下步驟: A.基于JDT的API接口,分析.class文件,獲取Java程序的靜態(tài)信息,提取類之間的繼承、關(guān)聯(lián)、聚合、依賴關(guān)系以及類與接口之間實現(xiàn)、關(guān)聯(lián)、聚合、依賴關(guān)系; B.選定體現(xiàn)主要流程的類作為骨干類,并將其作為抽象的基準點,搜索任意兩個骨干類之間的路徑; C.對B步驟得到的每一條路徑,從路徑的任意一端開始,檢查是否存在具有類-關(guān)系-類-關(guān)系-類這樣性質(zhì)的子路徑與本步驟列舉的57條類圖抽象規(guī)則相匹配,若匹配,則用抽象規(guī)則的結(jié)果代替這條子路徑;若不匹配,則跳過當前的類結(jié)點和關(guān)系結(jié)點,從下一個類結(jié)點開始遍歷;直到不存在可以轉(zhuǎn)換的路徑,除此之外,骨干類不能被抽象掉;類圖抽象規(guī)則包括:
2.根據(jù)權(quán)利要求1所述的逆向提取Java軟件程序類圖的方法,其特征是步驟B所述的選定骨干類的方法為: 借助用例模型:在業(yè)務領(lǐng)域?qū)<业闹笇抡业脚c用例圖或者活動圖對應的那些框架片斷,選為骨干類; 或者基于業(yè)務實體的層次分析:從能與業(yè)務實體對應起來的實體類開始,按照類間關(guān)系自底向上根據(jù)構(gòu)件依賴關(guān)系標識層次,將處于較高層次上的那些類選為骨干類; 或者軟件設(shè)計人員或測試人員根據(jù)需要自定義骨干類。
【文檔編號】G06F9/45GK103593222SQ201310451992
【公開日】2014年2月19日 申請日期:2013年9月29日 優(yōu)先權(quán)日:2013年9月29日
【發(fā)明者】于莉莉, 張幼春, 盧玲, 高智杰, 祝宇, 邱薇, 劉曉杰, 呂益楠 申請人:中國人民解放軍第二炮兵裝備研究院科研試驗中心