掌桥专利:专业的专利平台
掌桥专利
首页

一种基于数据和行为模型的工业软件代码自动生成方法

文献发布时间:2024-04-18 19:59:31


一种基于数据和行为模型的工业软件代码自动生成方法

技术领域

本发明涉及工业软件领域,具体是一种基于数据和行为模型的工业软件代码自动生成方法。

背景技术

工业软件是工业发展过程中提质、降本、增效的重要工具,涉及到大量数据模型和复杂数据处理,目前我国工业软件大多依赖进口,而自主开发工业软件需要投入大量的人力物力资源,来实现庞大的数据处理系统。复杂数据处理系统涉及到多种不同的数据模型和数据处理机制,在开发这种系统时,研发过程以及研发的组织团队的复杂性急剧上升,其中有些数据模型类似,有时开发人员大量的工作耗费在重复性开发中,亟需一种代码自动生成工具来提高工作效率。

目前代码自动生成的方式包括四种:

(1)基于对象关系的代码生成

适用于关系数据库框架的项目,目前大型的互联网使用该技术实现框架代码,如IBM 的Websphere服务框架、Hibenate架构、Spring 架构、微软的Net框架等。通过对关系数据库模型进行解释,封装数据库的读写等的功能,生成框架结构,提供对外访问接口。这种方式仅适用于已经建好关系数据模型的系统,且仅能提供与数据库相关的代码生成,无法满足功能和行为控制方面的代码生成要求。

(2)基于契约的代码生成

基于面向对象的基础,延伸向切面编程,即通过业务分离,降低业务逻辑的耦合性,代表性工具包括Spring 框架的AOP方式,采取的是横向抽取机制,取代了传统纵向继承体系重复代码(性能监视、事物管理、安全检查、缓存),将公共行为抽取出来,每一种公共行为(横切关注点)可以配置成一个“通知”,利用动态代理,可以让“通知”在需要的地方执行,需要执行的地方称为“切入点”,通知和切入点构成一个“切面。这种将纵向封装的对象“横向切开”,然后“织入”通知,可以提高程序的可重用性及可靠性。这种生成方式性能略低,仅适用于方法调用,必须在Spring容器中实现。另外还有微软的VS的扩展工具CodeContracts for .NET,其更适用于单元测试的场景。目前还没有合适的用于工业软件代码生成工具。

(3)基于模型的代码生成

基于模型的代码生成首先将软件抽象为模型,然后根据模型和代码的映射关系,将模型转换成代码,代表性工具AndroMDA和Trufun。AndroMDA可以根据UML模型生成可部署的应用程序和其他组件,如可以直接生成 struts+spring+hibernate架构的系统,目前支持的有BPM4Struts、JBPM、JSF、EJB、Hibernate、JavaMeta、Spring、WebServic等。Trufun产品提供基于通用MDA代码生成框架的生成语言实现:目前已经支持Java, C#, Ansi C++,Delphi, Perl, Php5, Python, Database,Ruby,Hibernate。基于模型的代码生成工作效率高,适用范围也更改,但是已经形成的成熟框架大多更适用数据库处理、MVC和Web等系统的构建,在互联网领域应用广泛,目前在工控领域还没有成熟的框架工具。

(4)基于模板的代码生成

基于模板的代码生成包括两种,第一种是前端代码,属于最原始最简单也是目前应用最广泛的一种代码生成方式,前端最有名的是vue-cli和create-react-app两款脚手架的代码生成,分别基于vue和react框架进行的一键初始化项目生成代码。开发模式简单,但是代码重复率高,适用范围仅限于web框架,不适用于工业软件。

第二种是C++和java 的泛型编程,通过可编程的数据模型和模板引擎结合,即将可变的部分与不变的部分结合,最终生成目标具体代码。代表性工具如Velocity提供了使用者自定义模板的功能,使用者可以用自定义的模板,将关键的信息数据生成各种类型的源代码。但是Velocity仅适用于JAVA语言,工业软件大多采用C或C++开发,目前还没有相关的工具工业软件领域。

本发明拟基于模型系统工程(MBSE)对工业软件的数据和行为进行建模,提出一种基于数据和行为模型的工业软件代码自动生成方法,提高工控领域中工业软件的代码开发效率。

发明内容

本发明提供一种基于数据和行为模型的工业软件代码自动生成方法,以解决上述背景技术中提出的问题。

为实现上述目的,本发明提供如下技术方案:

一种基于数据和行为模型的工业软件代码自动生成方法,包括以下步骤:

步骤1:基于模型系统工程进行多视角顶层需求建模:基于模型系统工程(MBSE),对工业软件复杂数据处理系统的数据和行为进行多视角顶层需求建模,实现数据、运行和逻辑分析模型;

步骤2:提取数据和行为的特征定义:采用领域驱动模型提取数据和行为的特征定义,实现数据、动态、行为、区域功能和交互建模;

步骤3:构建工业软件数据行为处理模型:设计数据存储、活动管理和任务运行机制,构建工业软件数据行为处理模型;

步骤4:建立特征关系规则引擎:采用JSON格式构建平台无关的数据处理结构,建立特征关系规则引擎;

步骤5:生成信息模板和代码模板:将JSON格式转换为关系数据模型,生成信息模板和代码模板;

步骤6:基于面向对象语言建立多目标语言的配置策略;

步骤7:建立代码映射规则:建立实体、数据、活动、数据流、任务、场景和结构化中间模型的代码映射规则;

步骤8:构建自动代码生成引擎:结合结构化数据行为模型和代码映射规则,构建自动代码生成引擎来生成目标代码。

所述步骤1的具体包括如下子步骤:

步骤11:采用建模语言的需求图,对复杂数据处理系统需求进行建模;

步骤12:通过数据分析、运行分析、逻辑分析三层分解,提炼系统中的实体、活动、任务、数据流、场景、接口等数据处理集合;

步骤13:进行数据、动态、行为、特征、功能、交互的模型构建;

步骤14:形成需求用例集合,可用于后续提取可统一处理的特征和个性化特征集。

所述步骤2提取数据和行为的特征定义具体包括如下子步骤:

步骤21:根据已分析建立的需求模型、复杂数据处理的业务关系和工业软件的领域知识,构建特征关系模型;

步骤22:结合需求模型,提取数据的应用特征,设计对应的数据处理策略,实现层次化数据存储结构;

步骤23:基于数据处理结构实现活动管理和任务运行机制,匹配数据存储结构的层次化,并与场景和接口结合,实现资源化数据服务管理,通过分类模型设计数据存储策略;

步骤24:利用数据流图设计不同的分类数据的访问接口,提供数据存取访问的索引和查询方法。

所述步骤3具体包括如下子步骤:

步骤31:基于场景集合和特征集合设计数据处理的管理模式、特征字典和存取模式;

步骤32:根据场景集合,对复杂处理业务进行分区分域处理,对于单功能任务超过1000的进行分区构建场景;

步骤33:通过分场景分任务实现多活动数据按照活动划分数据和数据流,并形成存储数据元;

步骤34:从场景的角度,构建单场景数据的独立存取模式;从任务角度,构建基于分任务资源服务管理结构;

步骤35:采用关系数据库实现数据的存取,结合关系数据库分库分表的模式,建立数据处理的管理和存取模式。

所述步骤4具体包括如下子步骤:

步骤41:将非结构化需求转化为结构化定义,将需求模型非结构化数据的描述方式转化为可被计算机理解的结构化数据,采用JSON格式完成结构化数据的定义,进而转换为可在数据库中定义的结构化数据;

步骤42:通过特征字典集合,构建统一的特征模型,可实现数据处理的映射、关联、范围等处理策略。

所述步骤6包括如下子步骤:

步骤61:基于C++、Java、C#三种面向对象语言,建立编程语言的配置模板,包括开发环境、基础语法(包括对象和类、基本数据类型、变量类型、修饰符、运算符、循环结构、条件语句等)、私有定义(数组、日期时间、方法、文件操作、异常处理等)、面向对象(继承、多态、抽象类、封装、接口、枚举、包等)、高级结构(集合、容器、泛型、序列化、网络编程、多线程、注释等)等策略配置;

步骤62:通过对以上策略进行固定化代码框架映射,便于后续生成对应目标平台的代码。

所述步骤8具体包括如下子步骤:

步骤81:通过读取代码映射规则和关系数据库中定义的模型,解析规则和模型;

步骤82:按照数据->活动->任务->场景的层次,采用自底而上和自上而下结合的方法遍历模型;

步骤83:首先对场景进行分析,构建场景框架代码,进而分析场景中的任务和接口生成任务模型,继续深入获取任务中活动的信息,建立多活动类框架代码,最后生成数据类,得到整个系统的框架代码;

步骤84:采用自底而上的方法,从数据开始补齐数据和数据流的细节关系,进而补齐活动的操作和交互处理,接着补齐任务和接口的细节,最后补齐场景内的细节代码。

工业软件是工业发展过程中提质、降本、增效的重要工具,涉及到大量数据模型和复杂数据处理,目前我国工业软件大多依赖进口,而自主开发工业软件需要投入大量的人力物力资源,来实现庞大的数据处理系统,亟需通过自动化手段来辅助自主开发。本发明基于MBSE模型系统工程理论,对工业软件复杂数据处理系统的需求、设计、分析、验证和确认进行多视角顶层需求建模和架构设计,基于领域驱动提取系统的数据和行为特征,实现复杂数据处理系统的模型构建;结合关系数据库理论和编译技术设计专用于复杂数据处理的代码自动生成工具,采用该工具可实现复杂数据处理系统的代码框架,有效降低人工编写代码的错误率,保障数据处理代码开发的安全可靠性,提高开发效率,降低开发成本。

附图说明

图1 自动代码生成工具处理流程。

图2 基于MBSE的需求分析建模。

图3 特征关系模型分析。

图4 基于Json定义的结构化数据。

图5 平台无关的复杂数处理模型。

图6 自动代码生成机制。

具体实施方式

为实现上述目的,本发明实施如下技术方案:

如图1-6所示,本发明的基于数据和行为模型的工业软件代码自动生成方法,具体实施方案如下:

工作流程如图1所示,基于模型系统工程(MBSE)进行需求分析,提取数据和行为的特征定义,构建工业软件数据行为处理模型,建立特征关系规则引擎,生成可结构化的数据行为模型;分析多目标语言的配置策略,建立代码映射规则,结合结构化数据行为模型,构建自动代码生成引擎来生成目标代码。

1.需求模型构建

基于MBSE模型对复杂系统数据处理进行需求分析,构建系统需求模型。对复杂数据处理的特性进行统一梳理,如图2所示,通过数据分析、运行分析、逻辑分析三层分解,提炼系统中的实体、活动、任务、数据流、场景、接口等数据处理集合,进行数据、动态、行为、特征、功能、交互的模型构建,形成需求用例集合,可用于后续提取可统一处理的特征和个性化特征集。

2.模型定义

(1)定义

根据图2定义需要分析的元素:数据实体dx,活动act,任务task,数据流df,场景scene,接口inf。

①数据定义

对复杂系统数据来说,数据是系统的核心,数据建模的需求主要包括数据源、类型、属性、范围等基本特征,以及根据活动、任务等转化的数据目标等特征。假设单个数据实体为dx,则dx用五元组来表示:

为每个dx定义name表示该数据的名称,source表示数据源,type表示数据类型,attri表示数据的属性,range表示数据范围。

则系统所有的数据集合定义为:

②活动定义

活动act用三元组表示:

为每个活动定义名称name,该活动的输入数据

则系统所有的活动集合定义为

③任务定义

任务是执行多个活动完成特定功能的活动集合,则task用三元组表示:

为每个任务定义名称name,定义该任务重的活动act集合为

则系统所有的任务集合定义为:

④数据流定义

数据流df用三元组表示:

为每个数据流定义名称name,数据流的入口活动

则系统所有的数据流集合定义为:

⑤场景定义

场景scene为一组任务的组合,实现特定的系统功能。任务与任务直接通过接口交互。

则scene用三元组表示:

为每个任务定义名称name,定义该场景中的任务task集合为

则系统所有的场景集合定义为

⑥接口定义

接口inf用三元组表示:

为每个接口定义名称inf,该接口的提供任务

则系统所有的接口集合定义为

(2)数据分析

在复杂数据处理系统中数据集合是多元的,由于数据的类型、变化特征非常多,数据集合是一个复杂的集合。

对于数据

为数据转换的活动,数据的变化都依据活动拆分来设计,则会有庞大的活动集合。在下一节中将对如何提取活动集合的特征进行进一步的分析。

数据流是两个活动之间数据的传递,是一个动态的概念。

对于数据流

;

(3)运行分析

活动在复杂数据处理系统中,是一个动作或事件触发的最小计算单元,取决于业务系统的具体功能来定义其实际执行的内容,因此活动是一个行为概念。

对于活动

场景是复杂处理系统中的一组或多组活动的结合,根据业务系统的功能分区来定义场景,因此场景是一个区域概念。

对于场景

(4)逻辑分析

任务和接口是从逻辑层面对系统需求进行分解得到的建模对象,任务是一组活动的集合,是一个功能的概念。

对于任务

接口是任务与任务之间交互的对象,是一个交互行为概念。

对于接口

(5)特征关系提取

根据已分析建立的需求模型、复杂数据处理的业务关系和工业软件的领域知识,构建特征关系模型,如图3所示,结合需求模型,提取数据的应用特征,设计对应的数据处理策略,实现层次化数据存储结构;基于数据处理结构实现活动管理和任务运行机制,匹配数据存储结构的层次化,并与场景和接口结合,实现资源化数据服务管理,通过分类模型设计数据存储策略;利用数据流图设计不同的分类数据的访问接口,提供数据存取访问的索引和查询方法。

3.规则引擎

(1)非结构化需求转化为结构化定义

将需求模型非结构化数据的描述方式转化为可被计算机理解的结构化数据,采用JSON格式完成结构化数据的定义,进而转换为可在数据库中定义的结构化数据,如图4所示。

(2)平台无关的复杂数据处理模式

基于Json定义的结构化数据模型,构建平台无关的数据处理模型。如图5所示,基于场景集合和特征集合设计数据处理的管理模式、特征字典和存取模式。其中场景集合,用于对复杂处理业务进行分区分域处理,对于单功能任务超过1000的进行分区构建场景;通过分场景分任务实现多活动数据按照活动划分数据和数据流,并形成存储数据元;从场景的角度来看,单场景的数据有独立的存取模式;从任务来看,分任务的数据处理有利于复杂数据的分析和处理。采用关系数据库实现数据的存取,结合关系数据库分库分表的模式,建立数据处理的管理和存取模式。同时,与特征字典集合,构建统一的特征模型,可实现数据处理的映射、关联、范围等处理策略,便于后续进行自动化代码生成。

4.基于模型的自动代码生成机制

平台无关的数据处理模型是一种模板化和层次化结合的软件结构,需要更加详细的细节来描述。如图6所示,首先如何实现模型与代码的生成映射是研究的难点,因此需要设计一种代码映射规则,来表示模型与代码模板的映射关系,作为代码生成的基础。其次,需要建立针对不同语言的配置策略,本研究针对面向对象语言编程来生成,基于C++、Java和C#,通过面向对象的通用定义来生成语言的配置策略,并设计自动代码生成引擎,用于生成对应的目标代码。

(1)代码映射规则

本文简要介绍部分内容的代码映射规则。

①实体:将模板中的数据结构和对象直接映射生成类,直接解析JSON结构化模板中的定义,生成对应的类。

②数据:数据也是一种具有结构定义的实体,直接将模板中的数据定义为类。

③活动:活动是数据的转换,活动需要依据到实体上,因此在实体模型上,将简单活动操作转到到类中,用根据该操作可能生成新的数据对象。

④数据流:每个数据流向都是单一方向,否则可能引入错误。

数据流是两个活动之间局部操作,每次只涉及少量的方法或类,每一个数据流的更改需要与其他数据流更改隔离。

⑤任务:任务包含一系列的活动、数据、数据流以及和其他任务之间的接口。我们可以在任务重定义资源、组件、接口、操作和子任务等元素,用于实现任务目标的描述。

⑥场景:场景各自独立的业务,可以场景直接交互,也可以是单独运行或并发运行的模块。多场景的任务可以并发运行。每个场景映射生成一个文件夹。

⑦关系数据库:将模型定义为结构化JSON格式描述,JSON数据仅作为中间模型,通过增加交互关系,添加关系连接,将各模型之间的访问管理形成模板数据,统一生成到关系数据库中。在关系数据库中定义可编程的信息模板和代码模板的映射关系,确定好数据类型、接口、参数、视图、区域等定义。

(2)编程语言配置策略

本文针对面向对象语言的代码生成进行研究,基于C++、Java、C#三种面向对象语言,建立编程语言的配置模板,包括开发环境、基础语法(包括对象和类、基本数据类型、变量类型、修饰符、运算符、循环结构、条件语句等)、私有定义(数组、日期时间、方法、文件操作、异常处理等)、面向对象(继承、多态、抽象类、封装、接口、枚举、包等)、高级结构(集合、容器、泛型、序列化、网络编程、多线程、注释等)等策略配置,通过对以上策略进行固定化代码框架映射,便于后续生成对应目标平台的代码。

(3)自动代码生成引擎

自动代码生成引擎读取代码映射规则和关系数据库中定义的模型,解析规则和模型,通过具体的生成算法将关系数据库中描述的模型按照规则生成具体的代码。

考虑到数据->活动->任务->场景的层次,采用自底而上和自上而下结合的方法生成代码。首先对场景进行分析,构建场景框架代码,进而分析场景中的任务和接口生成任务模型,继续深入获取任务中活动的信息,建立多活动类框架代码,最后生成数据类,得到整个系统的框架代码。由于自上而下的方式中,仅生成了框架代码,再次采用自底而上的方法,从数据开始补齐数据和数据流的细节关系,进而补齐活动的操作和交互处理,接着补齐任务和接口的细节,最后补齐场景内的细节代码。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明公开的范围内,能够轻易想到的变化或替换,都应涵盖在本发明权利要求的保护范围内。

相关技术
  • 一种基于马尔可夫过程的实时轨迹预测方法
  • 一种基于马尔科夫模型的不确定性路网车辆轨迹预测方法
技术分类

06120116518148