CN103235723A - 基于抽象语法树和软件产品特征的应用软件代码提取方法 - Google Patents
基于抽象语法树和软件产品特征的应用软件代码提取方法 Download PDFInfo
- Publication number
- CN103235723A CN103235723A CN2013101445281A CN201310144528A CN103235723A CN 103235723 A CN103235723 A CN 103235723A CN 2013101445281 A CN2013101445281 A CN 2013101445281A CN 201310144528 A CN201310144528 A CN 201310144528A CN 103235723 A CN103235723 A CN 103235723A
- Authority
- CN
- China
- Prior art keywords
- feature
- node
- relation
- features
- group
- 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)
Abstract
本发明公开了一种基于抽象语法树和软件产品特征的应用软件代码提取方法,目前已有的方法一般利用约定的编程规范,由于缺乏标准化,其可靠性一直得不到很好的保证,而且需要较多的人工干预。本发明根据已有的软件产品线特征树模型以及特征与领域构件的追溯关系,从领域构件中自动提取具有应用软件特征的软件代码,从而实现应用软件系统的快速构建。本发明采用标准的抽象语法树表示软件产品的代码结构,可以使得从特征到代码的映射关系更加规范和精确,同时一次遍历抽象语法树即可自动获取构建应用软件的基本信息,其效率更高。
Description
技术领域
本发明属于软件产品线工程领域,具体涉及到一种基于抽象语法树和软件产品特征的应用软件代码提取方法。
背景技术
随着软件规模和复杂度不断提升,传统的软件开发模式已经无法满足在业务多变的环境下进行软件开发的需求。针对单个应用需求的传统软件开发模式不仅成本高、效率低下而且可维护性差,已经无法适应大规模应用需求定制和多变的业务环境。作为一种实现大规模定制生产的软件开发方法,软件产品线工程在一定程度上解决这个问题,它的出现大大降低了开发成本,提高了产品质量同时缩短了上市时间。这里,软件产品线是指一系列处于特定领域、功能相似的软件产品集合,这些产品共享一个公共的、可管理的特征集,这个特征集能满足选定的市场或任务领域的特定需求,并按照预定义的方式从一个公共的核心资产集开发得到。遵循软件产品线两阶段的开发原则,将开发过程划分为:领域工程与应用工程两个阶段。领域工程和应用工程作为软件产品线生命周期中两个主要阶段,分别承担着具体产品开发过程中的不同任务。其中,领域工程通过对领域需求中的共性、可变性进行系统化的分析来创建可复用的软件产品线平台;应用工程是生产具体应用软件系统的过程,可以通过提取符合具体应用需求的领域软件构件实现应用软件的快速开发。
发明内容
本发明针对现有技术的不足,提出了一种基于抽象语法树和软件产品特征的应用软件代码提取方法。
定义1:软件产品线特征模型可规范化定义为一个三元组:
②:特征的可选性;表示当前特征的父特征被绑定时,该特征是否必须被绑定;这里提到的父子关系是由特征间的精化关系引起的,精化关系将在第三节详细介绍;如果当前特征的Opt 属性为真,则该特征是可选性的(Optional),否则就是强制的(Mandatory);
①:与(And)特征组;中的特征成员可以是强制的(Mandatory),也可以是可选的(Optional),所以当父特征被包含在产品中时,与特征组中的强制特征必须包含在产品中,而可选特征则会根据进一步选择来确定是否包含到产品中;
本发明方法具体包括如下步骤:
步骤1:输入一个基于Java的软件产品线特征模型对应的特征树(特征树是指用树形结构表示特征之间的关系一种结构)、Java抽象语法树以及指定的特征Id;解析特征树并确定特征树中相应的AndSet、AltSet、OrSet集合;
步骤2:解析软件产品线特征模型中的约束关系,根据约束关系的可传递性确定软件产品线特征模型中的需要链集合ReqSet和排斥链集合ExclSet(特征之间的约束关系作为一种静态依赖关系,主要描述了特征之间因绑定时间的不同而造成的一种彼此相互约束的关系);
步骤3:根据软件产品线特征模型中已有的特征与代码块的映射关系,确定已有关联集合ExistSet;
步骤4:抽象语法树中的所有节点均置为未选择状态,初始化堆栈stack,并以抽象语法树的根节点作为stack的初始元素集,将输出节点集合SelectedSet置为空;
步骤5:如果stack不为空,则将栈顶节点出栈,并对该节点进行访问操作;对节点的具体访问操作为:
1)获取当前抽象语法树节点的起止位置,如果不在所选代码段的范围内则直接跳转到步骤6;
2)遍历ExistSet集合并获取当前节点已经关联的特征,然后判断这些特征是否存在于指定特征对应的AltSet集合或者ExclSet集合中,若存在,则发生核心资产不一致情况,直接跳转到步骤6;
3)获取当前抽象语法树节点的父节点,如果当前节点与父节点起止位置相同,而且父节点已经处于已选择状态,则将父节点从SelectedSet集合中删除,并将其置为未选择状态,同时将当前节点放入SelectedSet集合中,置为选择状态;否则,直接将当前节点放入SelectedSet集合中,并置为选择状态;
步骤6:获取当前节点的所有子节点,如果子节点集合不为空,则将这些子节点依次放入stack中,重复执行步骤5,直至stack 为空;如果子节点集合为空,则直接跳转步骤5,直至stack为空;
步骤7:返回当前指定特征关联的节点集合SelectedSet。最后通过组装SelectedSet节点集合对应的节点代码构建具有应用特征的应用软件系统。
本发明的有益效果:本发明采用标准的抽象语法树表示软件产品的代码结构,可以使得从特征到代码的映射关系更加规范和精确,同时一次遍历抽象语法树即可自动获取构建应用软件的基本信息,其效率更高。
附图说明
图1 基于抽象语法树的软件产品线特征代码追溯方法执行流程图。
具体实施方式
下面结合附图1进一步说明本发明提出的基于Java抽象语法树和软件产品特征的应用软件代码提取方法的具体实施过程。
输入:软件产品线特征模型对应的特征树,所选Java文件对应的抽象语法树,指定特征Id。
输出:与指定特征关联的节点集合SelectedSet。
步骤1:遍历软件产品线特征模型对应的特征树,确定特征树中与指定特征存在特征组关系的特征集合,分别构成AndSet、AltSet、OrSet集合。
步骤2:对软件产品线特征模型中的约束关系进行分析,根据约束关系的可传递性确定软件产品线特征模型中的需要链集合ReqSet和排斥链集合ExclSet。
步骤3:解析软件产品线特征模型中已有的特征与代码块的映射关系,确定已有的映射关系集合ExistSet。
步骤4:将抽象语法树中的所有节点均置为未选择状态,初始化堆栈,将抽象语法树的根节点入栈,并将与指定特征关联的节点集合SelectedSet置空。
步骤5:若栈不为空,则将栈顶节点出栈,并对该节点进行访问操作。对节点的具体访问操作为:
1)获取当前抽象语法树节点的起始位置和结束位置,如果不在所选的目标代码段的范围内则直接跳转到步骤6。
2)遍历ExistSet集合并获取当前节点已经关联的特征,然后判断这些特征是否存在于指定特征对应的AltSet集合或者ExclSet集合中,若存在,则发生核心资产不一致情况,直接跳转到步骤6。
3)获取当前抽象语法树节点的父节点,如果当前节点与父节点的起始位置与结束位置相同,而且父亲节点已经处于已选择状态,则将父亲节点从SelectedSet集合中删除,并将其置为未选择状态,同时将当前节点放入SelectedSet集合中,置为选择状态。否则,直接将当前节点放入SelectedSet集合中,并置为选择状态。
步骤6:获取当前节点的所有子节点,如果子节点集合不为空,则将这些子节点依次放入栈中,重复执行步骤5,直至栈为空。如果子节点集合为空,则直接跳转步骤5,直至栈为空。
步骤7:返回当前指定特征关联的节点集合SelectedSet。最后通过组装SelectedSet节点集合对应的节点代码构建具有应用特征的应用软件系统。
Claims (1)
1.基于抽象语法树和软件产品特征的应用软件代码提取方法,
定义1:软件产品线特征模型可规范化定义为一个三元组:
②:特征的可选性;表示当前特征的父特征被绑定时,该特征是否必须被绑定;这里提到的父子关系是由特征间的精化关系引起的,精化关系将在第三节详细介绍;如果当前特征的Opt 属性为真,则该特征是可选性的Optional,否则就是强制的Mandatory;
①:与And特征组;中的特征成员可以是强制的Mandatory,也可以是可选的Optional,所以当父特征被包含在产品中时,与特征组中的强制特征必须包含在产品中,而可选特征则会根据进一步选择来确定是否包含到产品中;
为软件产品线特征模型中核心资产Core Assets的集合,主要包括需求、代码和文档,并通过统一的全局标识符对其进行标记;
其特征在于该方法具体包括如下步骤:
步骤1:输入一个基于Java的软件产品线特征模型对应的特征树、Java抽象语法树以及指定的特征Id;解析特征树并确定特征树中相应的AndSet、AltSet、OrSet集合;
步骤2:解析软件产品线特征模型中的约束关系,根据约束关系的可传递性确定软件产品线特征模型中的需要链集合ReqSet和排斥链集合ExclSet;
步骤3:根据软件产品线特征模型中已有的特征与代码块的映射关系,确定已有关联集合ExistSet;
步骤4:抽象语法树中的所有节点均置为未选择状态,初始化堆栈stack,并以抽象语法树的根节点作为stack的初始元素集,将输出节点集合SelectedSet置为空;
步骤5:如果stack不为空,则将栈顶节点出栈,并对该节点进行访问操作;对节点的具体访问操作为:
1)获取当前抽象语法树节点的起止位置,如果不在所选代码段的范围内则直接跳转到步骤6;
2)遍历ExistSet集合并获取当前节点已经关联的特征,然后判断这些特征是否存在于指定特征对应的AltSet集合或者ExclSet集合中,若存在,则发生核心资产不一致情况,直接跳转到步骤6;
3)获取当前抽象语法树节点的父节点,如果当前节点与父节点起止位置相同,而且父节点已经处于已选择状态,则将父节点从SelectedSet集合中删除,并将其置为未选择状态,同时将当前节点放入SelectedSet集合中,置为选择状态;否则,直接将当前节点放入SelectedSet集合中,并置为选择状态;
步骤6:获取当前节点的所有子节点,如果子节点集合不为空,则将这些子节点依次放入stack中,重复执行步骤5,直至stack 为空;如果子节点集合为空,则直接跳转步骤5,直至stack为空;
步骤7:返回当前指定特征关联的节点集合SelectedSet;最后通过组装SelectedSet节点集合对应的节点代码构建具有应用特征的应用软件系统。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310144528.1A CN103235723B (zh) | 2013-04-23 | 2013-04-23 | 基于抽象语法树和软件产品特征的应用软件代码提取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310144528.1A CN103235723B (zh) | 2013-04-23 | 2013-04-23 | 基于抽象语法树和软件产品特征的应用软件代码提取方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103235723A true CN103235723A (zh) | 2013-08-07 |
CN103235723B CN103235723B (zh) | 2016-05-04 |
Family
ID=48883768
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310144528.1A Active CN103235723B (zh) | 2013-04-23 | 2013-04-23 | 基于抽象语法树和软件产品特征的应用软件代码提取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103235723B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103631632A (zh) * | 2013-11-29 | 2014-03-12 | 华为技术有限公司 | 移植方法及源到源编译器 |
CN107644073A (zh) * | 2017-09-18 | 2018-01-30 | 广东中标数据科技股份有限公司 | 一种基于深度优先遍历的字段血缘分析方法、系统及装置 |
CN107943514A (zh) * | 2017-11-01 | 2018-04-20 | 北京大学 | 一种软件文档中核心代码元素的挖掘方法及系统 |
CN108388425A (zh) * | 2018-03-20 | 2018-08-10 | 北京大学 | 一种基于lstm自动补全代码的方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102799806A (zh) * | 2012-06-14 | 2012-11-28 | 中国人民解放军信息工程大学 | 一种基于树结构的密码算法逻辑表达式识别方法 |
WO2013009713A2 (en) * | 2011-07-08 | 2013-01-17 | Uab Research Foundation | Syntactical fingerprinting |
-
2013
- 2013-04-23 CN CN201310144528.1A patent/CN103235723B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013009713A2 (en) * | 2011-07-08 | 2013-01-17 | Uab Research Foundation | Syntactical fingerprinting |
CN102799806A (zh) * | 2012-06-14 | 2012-11-28 | 中国人民解放军信息工程大学 | 一种基于树结构的密码算法逻辑表达式识别方法 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103631632A (zh) * | 2013-11-29 | 2014-03-12 | 华为技术有限公司 | 移植方法及源到源编译器 |
CN107644073A (zh) * | 2017-09-18 | 2018-01-30 | 广东中标数据科技股份有限公司 | 一种基于深度优先遍历的字段血缘分析方法、系统及装置 |
CN107943514A (zh) * | 2017-11-01 | 2018-04-20 | 北京大学 | 一种软件文档中核心代码元素的挖掘方法及系统 |
CN108388425A (zh) * | 2018-03-20 | 2018-08-10 | 北京大学 | 一种基于lstm自动补全代码的方法 |
CN108388425B (zh) * | 2018-03-20 | 2021-02-19 | 北京大学 | 一种基于lstm自动补全代码的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103235723B (zh) | 2016-05-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3367234B1 (en) | Systems and methods for arbitrary software logic modeling | |
CN106528129A (zh) | 一种Web应用界面生成系统及方法 | |
CN100493221C (zh) | 数据配置文件在不同软件版本间进行转换的方法及装置 | |
CN105718261A (zh) | 一种基于功件和功件树的目标产品生成方法和系统 | |
CN102426587A (zh) | 一种基于复杂产品异构bom的定制查询方法 | |
CN102270137B (zh) | 一种获取体系结构描述语言的方法和一种建模工具 | |
CN102339314A (zh) | 一种基于xml的跨终端的数据表单描述与展现方法 | |
US20080244541A1 (en) | Code translator and method of automatically translating modeling language code to hardware language code | |
CN102982010A (zh) | 提取文档结构的方法和装置 | |
CN102542513A (zh) | 基于本体的电网公共信息模型的验证工具及其方法 | |
CN103235723A (zh) | 基于抽象语法树和软件产品特征的应用软件代码提取方法 | |
CN105630500A (zh) | 一种用于数据处理的cim对象模型及其编程框架 | |
CN105354036A (zh) | 数据库操作代码生成方法及装置 | |
CN103559025A (zh) | 一种采用聚类方式进行软件重构的方法 | |
CN102253975A (zh) | 一种数据库自动转换系统及方法 | |
CN102819609A (zh) | 一种持久化数据模型建模方法 | |
CN102270136B (zh) | 一种需求特征建模到体系结构建模的平滑过渡方法 | |
CN101561671B (zh) | 基于构件的梯形图设计方法 | |
CN102955697A (zh) | 基于面向方面的构件库构建方法 | |
CN103020318A (zh) | 一种对数据库中数据库表维护的方法 | |
CN102722368B (zh) | 一种基于文档树和消息泵的插件式软件设计方法 | |
CN103164476A (zh) | 一种bi应用元数据描述文件的执行方法和装置 | |
CN104572832A (zh) | 一种需求元模型构建方法及装置 | |
CN103593182A (zh) | 一种采用聚类方式进行软件重构的方法 | |
CN102087595A (zh) | 基于soa的专利代理协同管理系统开发方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |