一种基于Xtext的特定领域语言的软件工程设计方法与流程

文档序号:11774109阅读:639来源:国知局
一种基于Xtext的特定领域语言的软件工程设计方法与流程

本发明涉及一种软件工程项目技术,特别涉及一种基于xtext的软件工程设计方法。



背景技术:

现今,在软件开发过程中,随着软件开发的规模越来越大,复杂度越来越高,不同领域都依托着软件系统的发展,实现了从机械化向信息化的变革。作为系统工程工程领域中的重要方法特定领域语言(domainspecificlanguage,dsl),以其在特定领域工程项目中的高开发效率、低沟通成本、高抽象性和高复用性著称。在新型的软件工程项目中,越来越多的利用到了dsl。

基于现有的dsl设计方案,由于设计流程与方式的局限性,使得dsl的构建成本过高。又因为dsl定制的不规范性,大量良莠不齐的dsl诞生,这也使得语言噪声问题严重。最后源于dsl的适用范围过窄,一个软件环境的微小变化就可能导致dsl的失效,这使得优秀的dsl被过度的使用,而陷入了语言集中营危机。



技术实现要素:

本专利的目的就是提出基于xtext的特定领域语言的软件工程设计方法,解决上述现有技术的问题。

本发明一种基于xtext的特定领域语言的软件工程设计方法,其中,包括:步骤一、由emf元模型到xtext语义模型的转换;骤二、依据步骤一得到的初始的dsl语义模型采用拓扑图结构对语义模型进行验证和优化;步骤三、利用xtext的语法验证模块编辑验证规则的方法,对代码进行验证;步骤四、验证完成后生成c/java代码。

根据本发明的基于xtext的特定领域语言的软件工程设计方法的一实施例,其中,步骤一具体包括:建立元模型以刻画某种特定领域建模语言和提供支持元模型的建模工具;采用ecore模型作为刻画特定领域模型的语言,使用xtext中的ecore模型导入功能,自动生成多个dsl相关文件夹,包括自动生成的xx.xtext,其中,xx为项目人员输入的文件名,生成初始的dsl语义模型。

根据本发明的基于xtext的特定领域语言的软件工程设计方法的一实施例,其中,步骤二包括:由语言的多个语义模型,根据emf元模型,得到语义模型的模块间逻辑关系以及模块的输入输出,绘出变量的依赖图;利用深度优先算法,由变量的依赖图绘出拓扑结构;此时的拓扑图直观地反映了该语言语义模型的逻辑关系等信息,拓扑图绘制算法包括:(1)顶点表示活动,边表示活动间先后关系的有向图称做顶点活动网,称aov网;(2)在aov网中,选择一个入度最小出度为0的顶点并输出之,如果有多个入度最小出度为0的顶点,则比较入度的权重和,权重高的优先,若不存在权重值则比较顶点的序号,序号小的优先;(3)从网中删除此顶点及所有入边;(4)重复步骤(2),直至不存在出度为0的顶点为止,如该步无法执行,则执行步骤3。

根据本发明的基于xtext的特定领域语言的软件工程设计方法的一实施例,其中,步骤二中还包括对dsl的语法模型进行修改,包括:1、检查已有的语法模型是否需要优化,如果需要优化,则执行步骤2,如果不需要优化则执行步骤三;2、若是进行模块属性的修改则通过xx.xtext文件进行修改;若是代码格式的修改,则通过xxformatting.xtend文件进行修改;3、得到项目最终的dsl语法模型。

本发明基于xtext的特定领域语言的软件工程设计方法,规范dsl设计流程,降低dsl构建成本,同时基于xtext的代码验证模块,帮助相关人员调式代码,加强dsl对软件环境的适应性。最后,让dsl代码自动生成c/java代码,避免了语言噪声与语言集中营问题。

附图说明

图1所示为本发明基于xtext的特定领域语言的软件工程设计方法的流程图;

图2所示为本发明基于xtext的特定领域语言的软件工程设计方法的修改流程图;

图3所示为dsl的c/java代码生成流程图。

具体实施方式

为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。

图1所示为本发明基于xtext的特定领域语言的软件工程设计方法的流程图,如图1所示,本发明基于xtext的特定领域语言的软件工程设计方法包括:

步骤一由emf元模型到xtext语义模型的转换,包括:

元建模方法是建立用以刻画某种建模语言的元模型,并提供支持元模型图形化建模工具,包含两个要素:建立元模型以刻画某种特定领域建模语言和提供支持元模型的建模工具。

本实施例中统一采用ecore模型作为刻画特定领域模型的语言。ecore模型是完整uml的小型简化子集,也可以说ecore的源头就是来自uml,所以ecore模型与uml模型的表述上非常相似。同时,本专利采用eclipse的开源工具ecoretools作为元模型建立的开发工具,它可以用于设计建模语言。

xtext是一种基于文本的领域特定语言开发框架/工具。使用xtext,可以轻松地创建自己的编程语言和领域特定语言。xtext包含dsl的语义模型编辑、语法模型编辑、代码验证、快速修正等功能。

本发明使用xtext中的ecore模型导入功能,自动生成多个dsl相关文件夹(即org.xtext.example.xx,org.xtext.example.xx.sdk,org.xtext.example.xx.tests和org.xtext.example.xx.ui,其中xx为项目人员键入的项目名称),包括自动生成的xx.xtext(xx为项目人员输入的文件名)文件。这个文件(转换结果)就是初始的dsl语义模型。

本发明的所有步骤都是基于后缀名为.xtext的文件及其对应的语义模型展开的。

步骤二dsl的语义及语法模型的优化,包括:

依据步骤一中的转换结果,得到的初始的dsl语义模型。此时,该模型并不能满足实际项目的需求,甚至其中可能还存在错误,所以需要对该语义模型进行验证、修改或者优化。本发明采用拓扑图结构对语义模型进行验证和优化,包括:

对一个有向无环图(directedacyclicgraph简称dag)g进行拓扑排序,是将g中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈e(g),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(topologicalorder)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。包括:

1、由该语言的多个语义模型,根据emf元模型,得到语义模型的模块间逻辑关系、模块的输入输出等,绘出变量的依赖图;

2、利用深度优先算法,由变量的依赖图绘出拓扑结构。此时的拓扑图直观地反映了该语言语义模型的逻辑关系等信息,拓扑图绘制算法原理如下:

(1)通常认为顶点表示活动、边表示活动间先后关系的有向图称做顶点活动网(activityonvertexnetwork),简称aov网;

(2)在aov网中,选择一个入度最小出度为0的顶点并输出之,如果有多个入度最小出度为0的顶点,则比较入度的权重和,权重高的优先。若不存在权重值则比较顶点的序号,序号小的优先;

(3)从网中删除此顶点及所有入边;

(4)重复步骤(2),直至不存在出度为0的顶点为止。如该步无法执行,则执行步骤3。

3、验证绘出的拓扑结构。检查拓扑结构是否有环。如果有环,则证明元模型中存在错误,需要修改。修改后的元模型,需要在经过在转换后,继续执行步骤1。如果无环,则证明该语义模型逻辑上的正确性。

4、如果拓扑结构无环,则由相关人员检查该拓扑图是否简洁、明确、精细、合乎规范。如果需要优化,则将拓扑图对应的语义模型进行修改,然后执行步骤1。

5、如果拓扑结构不再需要优化,则得到最终的dsl语义模型。至此,语义模型已经符合项目的要求。

6、在得到简洁、明确、精细、合乎规范的语义模型之后,此时的语义模型已经可以正确的使用,并产生dsl代码文件了。

图2所示为本发明基于xtext的特定领域语言的软件工程设计方法的修改流程图,如图2所示,

在实际环境中,代码文件必须简单明了,使项目的工作人员一目了然。所以还需要对dsl的语法模型进行修改,如关键字定制、定制变量显示、代码格式等,具体包括:

1、检查已有的语法模型是否需要优化。如果需要优化,则执行步骤2。如果不需要优化则执行步骤三。

2、若是进行模块属性的修改(如关键字的制定、变量与变量的值是否在前台显示、变量间的关系是否在前台显示、变量的值的显示格式等)则通过xx.xtext(xx为项目人员输入的文件名)文件进行修改;若是代码格式的修改(如代码间的空行、代码的缩进等),则通过xxformatting.xtend(xx为项目人员输入的文件名)文件进行修改。

3、得到项目最终的dsl语法模型。

步骤三dsl的c/java代码生成,包括:

在生成代码之前,还有其他辅助工作需要完成。由于代码的不确定性,需要对dsl代码进行验证。

本发明一种基于xtext的特定领域语言的软件工程设计方法,采用在xtext自带的语法验证模块xxvalidator.xtend(xx为项目人员输入的文件名)编辑验证规则的方法,对代码进行验证,以确保dsl代码以及生成的c/java代码的正确性。同时,对于没有通过验证的代码字段,应当给予相应的标注和提示,以便项目人员第一时间能够发现代码中的问题,并着手解决。对于标注为“注意(warning)”及“错误(error)”的代码字段,应该尽量提供快速修正的方法。其中,快速修正的方法,在quickfixprovider.xtend文件中进行定制。由于快速修正的方法有一定的局限性,即不能提供所有问题情况下的快速修正,所以对于“注意(warning)”及“错误(error)”的描述信息应当尽可能的详细,以便项目相关人员能够明确问题的因果关系并解决问题。制定“注意(warning)”及“错误(error)”的描述信息的默认文件是xxvalidator.xtend(xx为项目人员输入的文件名)。代码生成的模板文件默认为generator.xtend。在自动生成代码之前,需要在文件中定制符合项目dsl的代码生成模板。只有有了正确精准的dsl代码之后,才能够生成符合项目要求的c/java代码。

完成上述步骤之后,即可自动生成c/java代码,图3所示为dsl的c/java代码生成流程图,如图3所示,dsl代码文件将由xxvalidator.xtend(xx为项目人员输入的文件名)进行验证。如果验证不通过,则会给出错误信息,再由项目相关人员选择手动修改或是自动修改。修改过的dsl代码将再次执行步骤1,被验证器再次验证。如果代码验证通过,dsl代码将结合步骤二中的拓扑图,由相关人员依照拓扑结构顺序定制代码生成的先后顺序。再通过代码生成模板,产生逻辑关系明确的c/java代码。

本发明的一种基于xtext的特定领域语言设计方法,规范dsl设计流程,降低了dsl构建成本。同时基于xtext的代码验证模块,帮助相关人员调式代码,加强dsl对软件环境的适应性。最后,让dsl代码自动生成c/java代码,避免了语言噪声与语言集中营问题。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1