CN103593222A - 一种逆向提取Java软件程序类图的方法 - Google Patents

一种逆向提取Java软件程序类图的方法 Download PDF

Info

Publication number
CN103593222A
CN103593222A CN201310451992.5A CN201310451992A CN103593222A CN 103593222 A CN103593222 A CN 103593222A CN 201310451992 A CN201310451992 A CN 201310451992A CN 103593222 A CN103593222 A CN 103593222A
Authority
CN
China
Prior art keywords
class
relation
key
classes
abstract
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201310451992.5A
Other languages
English (en)
Other versions
CN103593222B (zh
Inventor
于莉莉
张幼春
卢玲
高智杰
祝宇
邱薇
刘晓杰
吕益楠
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
RESEARCH EXPERIMENTAL CENTER EQUIPMENT RESEARCH INSTITUTE SECOND ARTILLERY FORCE OF PLA
Original Assignee
RESEARCH EXPERIMENTAL CENTER EQUIPMENT RESEARCH INSTITUTE SECOND ARTILLERY FORCE OF PLA
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by RESEARCH EXPERIMENTAL CENTER EQUIPMENT RESEARCH INSTITUTE SECOND ARTILLERY FORCE OF PLA filed Critical RESEARCH EXPERIMENTAL CENTER EQUIPMENT RESEARCH INSTITUTE SECOND ARTILLERY FORCE OF PLA
Priority to CN201310451992.5A priority Critical patent/CN103593222B/zh
Publication of CN103593222A publication Critical patent/CN103593222A/zh
Application granted granted Critical
Publication of CN103593222B publication Critical patent/CN103593222B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明属于一种软件测试技术领域,特别涉及一种软件详细设计功能测试及提取软件程序类图的方法。其技术方案是:一种逆向提取Java软件程序类图的方法,包括步骤:A.静态分析程序类图;B.选定骨干类作为抽象的基准点,搜索骨干类之间的路径;C.对每一条路径,从路径的任意一端开始,对存在具有类-关系-类-关系-类这样性质的子路径与本发明列举的57条类图抽象规则相匹配的子路径进行抽象;D.若出现两个骨干类之间抽象后存在多种关系时,按规定的优先级抽象后的路径进行合并,得到抽象类图。本发明提供了一种逆向提取Java程序类图的方法,达到软件的代码实现与其详细设计之间的一致性验证的目的。

Description

一种逆向提取Java软件程序类图的方法
技术领域
本发明属于一种软件测试技术领域,特别涉及一种软件详细设计功能测试及提取软件程序类图的方法。 
背景技术
目前的软件审查工具,主要侧重于对源代码的自动分析、对代码缺陷的自动检测,某种程度上忽视了程序是否符合软件详细设计的功能模块划分,程序结构是否合理的检验,且对软件详细设计及其编程实现的审查,完全依赖于有经验的软件开发人员,尚未看到可用来检查程序结构是否符合设计要求的有效方法和支持工具。例如,为了建立代码与详细设计之间的对应关系,需要人工在程序代码中标注各段代码与软件详细设计文档中的定义的功能点之间的对应关系。尽管在模型驱动的软件开发过程中,软件的详细设计可以直接转换成程序代码,但是程序代码在软件开发的多次迭代中可能发生变化,因此,对软件的详细设计与源代码之间进行审查依然是必要的,以确认软件实现是否符合设计要求。 
由于在软件开发过程中,类与类之间关系的实现有多种方式,因此会存在这样的现象:软件设计模型中类A和类B之间存在着关联关系或者是依赖关系,而程序实现时类A和类B不存在直接的关系,而用其他类来实现类A与类B之间的关系。也就是说,设计类图与程序类图之间会相差很大,为了达到对软件的详细设计与源代码之间进行审查,需要一种提取抽象程序类图的方法,以得到更简化、更高抽象层次的程序类图。 
发明内容
本发明的目的是:提供一种逆向提取Java程序类图的方法,以达到软件的代码实现与其详细设计之间的一致性验证。 
本发明的技术方案是:一种逆向提取Java软件程序类图的方法,其特征是包括以下步骤: 
A.基于JDT的API接口,分析.class文件,获取Java程序的静态信息,提取类之间的继承、关联、聚合、依赖关系以及类与接口之间实现、关联、聚合、依赖关系; 
B.选定体现主要流程的类作为骨干类,并将其作为抽象的基准点,搜索任意两个骨干类之间的路径; 
C.对B步骤得到的每一条路径,从路径的任意一端开始,检查是否存在具有类-关系-类-关系-类这样性质的子路径与本步骤列举的57条类图抽象规则相匹配,若匹配,则用抽象规则的结果代替这条子路径;若不匹配,则跳过当前的类结点和关系结点,从下一个类结点开始遍历;直到不存在可以转换的路径,除此之外,骨干类不能被抽象掉;类图抽象规则包括: 
Figure BSA0000095697750000021
Figure BSA0000095697750000031
Figure BSA0000095697750000051
其中,“-”表示分隔符,Class表示类,两个类之间为类存在的关系,共4种关系:Generalization为泛化关系;Dependency为依赖关系;Association为关联关系,Aggregation为聚合关系;Left表示后一类位于前一类的左侧;Right表示后一类位于前一类的右侧;
Figure BSA0000095697750000062
表示推出符号,由前描述的关系推出
Figure BSA0000095697750000064
后描述的关系; 
本步骤列举的57条规则是本发明能够逆向提取Java软件程序类图的关键; 
D.若出现两个骨干类之间抽象后存在多种关系时,按照泛化关系优先于聚合关系优先于双向关联关系优先于单向关联关系优先于依赖关系的优先级确定保留哪个关系,对抽象后的路径进行合并,得到抽象类图。 
本发明通过对类图的抽象,来舍弃程序类图中具体细节,以突出其重要的结构特征,达到软件的代码实现与其详细设计之间的一致性验证的目的;本发明还可以在详细设计文档缺失的情况下,或者当软件设计者面对一个包含很多实现细节而难以迅速发现软件的关键设计要素和有这些要素所构成的软件结构情况时,为软件设计者提供一种准确理解程序的途径。 
 
具体实施方式
实施例1:一种逆向提取Java软件程序类图的方法,其特征是包括以下步骤: 
A.基于JDT的API接口,分析.class文件,获取Java程序的静态信息,提取类之间的继承、关联、聚合、依赖关系以及类与接口之间实现、关联、聚合、依赖关系; 
B.选定体现主要流程的类作为骨干类,并将其作为抽象的基准点,搜索任意两个骨干类之间的路径; 
C.对B步骤得到的每一条路径,从路径的任意一端开始,检查是否存在具有类-关系-类-关系-类这样性质的子路径与本步骤列举的57条类图抽象规则相匹配,若匹配, 则用抽象规则的结果代替这条子路径;若不匹配,则跳过当前的类结点和关系结点,从下一个类结点开始遍历;直到不存在可以转换的路径,除此之外,骨干类不能被抽象掉;类图抽象规则包括: 
Figure BSA0000095697750000071
Figure BSA0000095697750000081
Figure BSA0000095697750000101
其中,“-”表示分隔符,Class表示类,两个类之间为类存在的关系,共4种关系:Generalization为泛化关系;Dependency为依赖关系;Association为关联关系,Aggregation为聚合关系;Left表示后一类位于前一类的左侧;Right表示后一类位于前一类的右侧;
Figure BSA0000095697750000112
表示推出符号,由
Figure BSA0000095697750000113
前描述的关系推出
Figure BSA0000095697750000114
后描述的关系; 
D.若出现两个骨干类之间抽象后存在多种关系时,按照泛化关系优先于聚合关系优先于双向关联关系优先于单向关联关系优先于依赖关系的优先级确定保留哪个关系,对抽象后的路径进行合并,得到抽象类图。 
实施例2:在实施例1的基础上,实施例1步骤B所述的选定骨干类的方法为: 
借助用例模型:在业务领域专家的指导下找到与用例图或者活动图对应的那些框架片断,选为骨干类; 
或者基于业务实体的层次分析:从能与业务实体对应起来的实体类开始,按照类间关系自底向上根据构件依赖关系标识层次,将处于较高层次上的那些类选为骨干类; 
或者软件设计人员或测试人员根据需要自定义骨干类。 

Claims (2)

1.一种逆向提取Java软件程序类图的方法,其特征是包括以下步骤:
A.基于JDT的API接口,分析.class文件,获取Java程序的静态信息,提取类之间的继承、关联、聚合、依赖关系以及类与接口之间实现、关联、聚合、依赖关系;
B.选定体现主要流程的类作为骨干类,并将其作为抽象的基准点,搜索任意两个骨干类之间的路径;
C.对B步骤得到的每一条路径,从路径的任意一端开始,检查是否存在具有类-关系-类-关系-类这样性质的子路径与本步骤列举的57条类图抽象规则相匹配,若匹配,则用抽象规则的结果代替这条子路径;若不匹配,则跳过当前的类结点和关系结点,从下一个类结点开始遍历;直到不存在可以转换的路径,除此之外,骨干类不能被抽象掉;类图抽象规则包括:
Figure FSA0000095697740000021
Figure FSA0000095697740000031
Figure FSA0000095697740000041
Figure FSA0000095697740000051
其中,“-”表示分隔符,Class表示类,两个类之间为类存在的关系,共4种关系:Generalization为泛化关系;Dependency为依赖关系;Association为关联关系,Aggregation为聚合关系;Left表示后一类位于前一类的左侧;Right表示后一类位于前一类的右侧;
Figure FSA0000095697740000052
表示推出符号,由
Figure FSA0000095697740000053
前描述的关系推出
Figure FSA0000095697740000054
后描述的关系;
D.若出现两个骨干类之间抽象后存在多种关系时,按照泛化关系优先于聚合关系优先于双向关联关系优先于单向关联关系优先于依赖关系的优先级确定保留哪个关系,对抽象后的路径进行合并,得到抽象类图。
2.根据权利要求1所述的逆向提取Java软件程序类图的方法,其特征是步骤B所述的选定骨干类的方法为:
借助用例模型:在业务领域专家的指导下找到与用例图或者活动图对应的那些框架片断,选为骨干类;
或者基于业务实体的层次分析:从能与业务实体对应起来的实体类开始,按照类间关系自底向上根据构件依赖关系标识层次,将处于较高层次上的那些类选为骨干类;
或者软件设计人员或测试人员根据需要自定义骨干类。
CN201310451992.5A 2013-09-29 2013-09-29 一种逆向提取Java软件程序类图的方法 Expired - Fee Related CN103593222B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310451992.5A CN103593222B (zh) 2013-09-29 2013-09-29 一种逆向提取Java软件程序类图的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310451992.5A CN103593222B (zh) 2013-09-29 2013-09-29 一种逆向提取Java软件程序类图的方法

Publications (2)

Publication Number Publication Date
CN103593222A true CN103593222A (zh) 2014-02-19
CN103593222B CN103593222B (zh) 2016-08-10

Family

ID=50083378

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310451992.5A Expired - Fee Related CN103593222B (zh) 2013-09-29 2013-09-29 一种逆向提取Java软件程序类图的方法

Country Status (1)

Country Link
CN (1) CN103593222B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104199653A (zh) * 2014-08-26 2014-12-10 上海天脉聚源文化传媒有限公司 一种Java集成开发环境的实现方法及装置
CN104391706A (zh) * 2014-12-02 2015-03-04 南京大学 一种基于逆向工程的模型库构造方法
CN111625223A (zh) * 2020-05-26 2020-09-04 中国人民解放军国防科技大学 一种基于静态分析与抽象的软件设计重建方法
CN113312038A (zh) * 2021-06-18 2021-08-27 浪潮云信息技术股份公司 一种生成Java代码类继承结构的实现方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2001001256A1 (en) * 1999-06-30 2001-01-04 Sun Microsystems, Inc. Method and apparatus for static analysis of software code
US20070150875A1 (en) * 2005-12-27 2007-06-28 Hiroaki Nakamura System and method for deriving stochastic performance evaluation model from annotated uml design model
US7493596B2 (en) * 2004-06-30 2009-02-17 International Business Machines Corporation Method, system and program product for determining java software code plagiarism and infringement
CN101477490A (zh) * 2009-01-23 2009-07-08 上海第二工业大学 基于复杂网络面向对象集成测试的方法
CN102385505B (zh) * 2010-08-30 2013-03-20 北京理工大学 针对面向对象程序设计语言源代码的软件可视化方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2001001256A1 (en) * 1999-06-30 2001-01-04 Sun Microsystems, Inc. Method and apparatus for static analysis of software code
US7493596B2 (en) * 2004-06-30 2009-02-17 International Business Machines Corporation Method, system and program product for determining java software code plagiarism and infringement
US20070150875A1 (en) * 2005-12-27 2007-06-28 Hiroaki Nakamura System and method for deriving stochastic performance evaluation model from annotated uml design model
CN101477490A (zh) * 2009-01-23 2009-07-08 上海第二工业大学 基于复杂网络面向对象集成测试的方法
CN102385505B (zh) * 2010-08-30 2013-03-20 北京理工大学 针对面向对象程序设计语言源代码的软件可视化方法

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104199653A (zh) * 2014-08-26 2014-12-10 上海天脉聚源文化传媒有限公司 一种Java集成开发环境的实现方法及装置
CN104199653B (zh) * 2014-08-26 2017-12-15 上海天脉聚源文化传媒有限公司 一种Java集成开发环境的实现方法及装置
CN104391706A (zh) * 2014-12-02 2015-03-04 南京大学 一种基于逆向工程的模型库构造方法
CN111625223A (zh) * 2020-05-26 2020-09-04 中国人民解放军国防科技大学 一种基于静态分析与抽象的软件设计重建方法
CN111625223B (zh) * 2020-05-26 2023-04-28 中国人民解放军国防科技大学 一种基于静态分析与抽象的软件设计重建方法
CN113312038A (zh) * 2021-06-18 2021-08-27 浪潮云信息技术股份公司 一种生成Java代码类继承结构的实现方法
CN113312038B (zh) * 2021-06-18 2022-05-31 浪潮云信息技术股份公司 一种生成Java代码类继承结构的实现方法

Also Published As

Publication number Publication date
CN103593222B (zh) 2016-08-10

Similar Documents

Publication Publication Date Title
US9454466B2 (en) Explaining partially illegal combinations in combinatorial models
US10402194B2 (en) Systems and methods for extracting cross language dependencies and estimating code change impact in software
US10108536B2 (en) Integrated automated test case generation for safety-critical software
US9405915B2 (en) Techniques for correlating vulnerabilities across an evolving codebase
US9594797B2 (en) Data quality assessment
US20160378618A1 (en) Risk formula for erroneous software components detection
US9372779B2 (en) System, method, apparatus and computer program for automatic evaluation of user interfaces in software programs
CN106716398B (zh) 可视地区分用于测试的字符串
CN110389896A (zh) 代码自动化分析和测试方法、装置及计算机可读存储介质
CN103593222A (zh) 一种逆向提取Java软件程序类图的方法
WO2018121531A1 (zh) 一种生成测试用例脚本的方法和装置
CN104834603A (zh) 一种面向回归测试的控制流变更影响域分析方法和系统
KR101588027B1 (ko) 소프트웨어 현지화를 위한 테스트 케이스 생성 장치 및 방법
CN103914379B (zh) 故障自动注入与故障检测的方法及其系统
CN104731694A (zh) 浏览器兼容性测试分析方法及浏览器兼容性测试分析系统
KR101520671B1 (ko) 실행코드 유사도 분석 시스템 및 방법
US10628140B2 (en) Program code generation apparatus
CN104615544A (zh) 面向问题的gui软件关联功能分析方法及装置
CN103365777A (zh) 一种测试用例生成方法及系统
CN108399321B (zh) 基于动态指令依赖图胎记的软件局部抄袭检测方法
CN106021113A (zh) 一种精准测试的实现方法
US20160239407A1 (en) Small scale integration test generation
CN104536880A (zh) 基于符号执行的gui程序测试用例扩增方法
CN116303042A (zh) 一种基于污点分析的软件配置故障检测方法
JP2020201607A (ja) 文章解析方法、文章解析プログラム、および文章解析システム

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20160810