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