核电软件开发自动化系统和方法

文档序号:10624573阅读:691来源:国知局
核电软件开发自动化系统和方法
【专利摘要】公开了核电软件开发自动化系统和方法,系统包括:架构设计部,将核电软件的架构抽象为树型数据结构,采用广度优先搜索进行遍历,自动生成代码框架;详细设计部,进行核电软件详细设计图差异的自动对比;以及代码开发部,接收输入数据,并根据事先定义的抽象定义模板,自动生成并输出程序代码。根据本发明的系统和方法,将软件自动化技术引入核电软件开发的各个环节,搭建统一的核电软件开发自动化工具平台,在充分提高软件开发效率的同时降低了人为引入的软件缺陷率。
【专利说明】
核电软件开发自动化系统和方法
技术领域
[0001]本发明示例性实施例总体上涉及软件开发自动化领域,具体涉及一种核电软件开发自动化系统和方法。
【背景技术】
[0002]软件自动化技术是计算机领域当今的热门技术,IBM、微软等国际IT公司都在该领域投入了大量研发实力。IBM公司开发的Rat1nal Software Architect (RSA)是一款基于统一建模语言(UML)的软件架构设计自动化程序,架构师根据软件需求利用UML语言绘制软件架构图,然后RSA会将软件架构设计图转化为程序框架代码。利用RSA进行软件架构的自动化设计可以保证所开发的程序代码架构忠实于原始设计,并通过可视化图形界面操作的方式使设计人员更专注于软件的业务逻辑,从繁琐的代码编写中解脱出来。
[0003]在代码生成自动化领域,当前流行的代码生成器大致有如下几类:1)代码Munger ;2)内嵌代码扩展器(Inline Code Expander,ICE) ;3)混合代码生成器(MixedCode Generator, MCG) ;4)部分类生成器(Partial Class Generator, PCG) ;5)层生成器(Tier Generator,TG)。代码Munger是代码生成器中最基本的一种,通过处理一个或多个程序源码文件生成解析文件。JavaDoc即属于该类生成器,它读取和解析Java源代码中的注释,然后利用一组模板产生HTML文档。ICE的输入和输出都是代码,输出代码是在输入代码的基础上对一些代码段进行扩展。开发该类生成器须从设计一门新语言开始,通常新语言是在现有语言的基础上进行一些语法扩展,而ICE就用来把该新语言的代码转换成现有语言的代码。Oracle公司的Pro系列(Pro*Ada、Pro*C、Pro*C0B0L)就属于该类生成器。MCG和ICE类似,输入和输出都是代码文件,但其无须先设计一门新语言,输入和输出都是同一种高级程序语言的源代码,而且其最大的特点是产生的代码可作为下一次代码产生流程的输入。该类代码生成器可用于从写在代码注释里的测试用例数据产生测试代码、从写在代码注释里的存取定义产生数据库存取代码等等。PCG将一个抽象定义文件作为输入,产生一组基本类。这些基本类完成了大部分底层的工作,用户可以通过继承和扩展这些基本类的方法来完成设计。TG读取一个抽象定义文件,并用一组模板文件生成一个或多个输出源文件,这些输出源文件完成应用程序的一个层次的所有功能。这里“层”是指多层应用程序中的“层”,如数据访问层、业务逻辑层、界面表示层等。
[0004]虽然软件自动化技术是计算机领域的研究热点,但目前已有的软件自动化技术不适合核电软件开发流程特点。核电软件属于科学计算类软件,在软件需求分析、架构设计、详细设计、代码开发等多个方面较传统软件开发都有很大差异,已有自动化技术不能满足核电软件的开发需求,很难直接应用于核电软件开发过程中。
[0005]需要一种核电软件开发技术,能够结合核电软件的特性将设计开发的各个环节自动化。

【发明内容】

[0006]本发明示例性实施例提供了一种核电软件开发自动化工具平台,将软件自动化技术引入核电软件架构设计、详细设计、代码开发的各个环节,搭建统一的核电软件开发自动化工具平台,充分提高软件开发效率的同时降低了人为引入的软件缺陷率。
[0007]根据本发明一方面,提出了一种核电软件开发自动化系统,包括:架构设计部,将核电软件的架构抽象为树型数据结构,采用广度优先搜索进行遍历,自动生成代码框架;详细设计部,进行核电软件详细设计图差异的自动对比;以及代码开发部,接收输入数据,并根据事先定义的抽象定义模板,自动生成并输出程序代码。
[0008]根据本发明另一方面,提出了一种核电软件开发自动化方法,包括:架构设计步骤,将核电软件的架构抽象为树型数据结构,采用广度优先搜索进行遍历,自动生成代码框架;详细设计步骤,进行核电软件详细设计图差异的自动对比;以及代码开发步骤,接收输入数据,并根据事先定义的抽象定义模板,自动生成并输出程序代码。
[0009]本申请的技术方案基于核电软件开发特点将软件自动化技术引入架构设计、详细设计、代码编写等多个环节,集成为统一的自动化开发工具平台。该平台将采用模块化设计和中间件技术,使得各自动化工具既能独立工作,又可协同完成开发流程各阶段的自动化,实现真正意义的核电软件开发全流程自动化。此外,采用核电软件自动化开发工具平台后,可以有效降低开发人员的重复工作量,使其可以更加关注程序业务逻辑的设计与优化,提高核电软件的开发效率和开发质量。
【附图说明】
[0010]下面结合附图对本发明的【具体实施方式】作进一步详细的说明,其中:
[0011]图1示出了根据本发明实施例的核电软件开发自动化系统的示意框图;
[0012]图2示出了基于广度优先搜索的代码框架自动生成流程;
[0013]图3示出了架构树的示例;
[0014]图4示出了代码架构生成结果的示例;
[0015]图5示出了基于Vis1对象模型和COM接口的核电软件详细设计图差异自动对比流程;
[0016]图6不出了代码开发部的不例框图;
[0017]图7示出了代码开发部中主要类及类关系的示意图;
[0018]图8示出了代码开发部中输入元数据的示例;以及
[0019]图9示出了基于图8的输入元数据,自动生成变量定义代码的示例。
【具体实施方式】
[0020]下面结合附图对本发明的示例实施例进行详述。以下描述包括各种具体细节以辅助理解,但这些具体细节应仅被示为示例性的。因此,本领域普通技术人员将认识到,可以在不脱离本公开范围和精神的情况下对这里描述的各个实施例进行各种改变和修改。此夕卜,为了清楚和简明起见,省略了公知功能和结构的描述。
[0021]以下描述和权利要求中使用的术语和词语不限于其字面含义,而是仅由发明人用于实现本发明的清楚一致的理解。因此,本领域技术人员应当清楚,对本发明各个示例实施例的以下描述仅被提供用于说明目的,而不意在限制由所附权利要求及其等同物限定的本发明。
[0022]以下结合附图详细说明本发明实施例。
[0023]图1示出了根据本发明示例实施例的核电软件开发自动化系统I的示意框图。该系统I包括:架构设计部10,将核电软件的架构抽象为树型数据结构,采用广度优先搜索进行遍历,自动生成代码框架;详细设计部20,进行核电软件详细设计图差异的自动对比;以及代码开发部30,接收输入数据,并根据事先定义的抽象定义模板,自动生成并输出程序代码。
[0024]架构设计部10将核电软件的架构抽象为包括多级节点的架构树,从根节点开始采用广度优先搜索遍历架构树的各级节点,自顶向下的逐层生成代码框架,最后生成可编译运行的完整代码框架。代码框架包括框架代码将包括程序预处理(Pre)、求解器(Solver)、后处理(Post)的顶层调用流程,并自动插入部分调试代码,如程序运行日志(Log)信息等,实现核电软件架构设计的自动化。由于采用架构设计自动化,程序设计人员可以更专注于计算软件架构的设计与优化,然后根据架构树自动生成框架代码。这将极大提高软件框架的搭建效率,同时降低软件开发的缺陷率。
[0025]详细设计部20基于Vis1对象模型和COM接口技术实现核电软件Vis1详细设计图差异的自动对比,能够帮助设计人员提高设计更改效率。在详细设计过程中,不可避免的设计更改在多人协同开发时可能会造成由于设计图版本的不一致导致设计更改被覆盖,降低开发效率。采用本发明技术后,开发人员可以快速发现不同版本程序设计图间的差异,有效合并设计变更,在降低开发人员负担的同时保证了设计一致性。
[0026]代码开发部30包括:数据层,根据输入数据提供设计图中的变量定义元数据;业务层,包括代码生成引擎、代码生成器和生成策略,其中生成策略描述了代码生成规则的抽象定义模板,代码生成引擎根据生成策略调用代码生成器,代码生成器利用数据层提供的元数据,根据抽象定义模板生成程序代码;以及表示层,执行与用户的交互,所述表示层包括事件监听组件和显示策略,其中事件监听组件采集用户的代码生成需求,并传递给业务层以进行代码生成,显示策略控制代码生成结果的呈现。代码开发部30还可以包括:数据采集模块,记录代码开发部的运行行为,生成日志文件,以便用户进行调试和查错。利用代码开发部,将原先大量繁琐重复的需要开发人员手工编写的代码转变为由计算机自动生成,较好的提高了代码开发效率。同时由于程序代码是根据模板自动生成的,因而在代码风格、编码一致性等方面可以较好的满足编程规范要求,因而从质量保证角度确保了软件的高可靠性。另外,当软件设计图发生设计变更时,无需代码开发人员再手工修改已经编写过的程序代码,只需根据变更后的设计图重新生成新代码覆盖原有代码即可,从而避免降低开发效率和引入人为错误。
[0027]图2示出了可应用于架构设计部10的基于广度优先搜索的代码框架自动生成流程的示例,具体描述如下:
[0028](I)首先扫描架构树根节点,生成计算程序入口 ;
[0029](2)判断根节点是否包含子节点;
[0030](3)若根节点没有子节点,则算法结束,直接退出;
[0031](4)若根节点包含子节点,则使用广度优先搜索(BFS)遍历架构树的下一级子节点(例如,第一级子节点),建立代码顶层框架,生成对应的源文件;
[0032](5)判断遍历到架构树的最后I个叶子节点;
[0033](6)若没有遍历到架构树的最后I个叶子节点,则使用BFS继续循环遍历架构树的下一级子节点(例如,第二级子节点),依此类推,生成程序各层次框架代码;
[0034](7)若已遍历到架构树的最后I个叶子节点,则遍历结束,生成完整的代码框架,
算法退出。
[0035]图3示出了针对核电软件的架构树的示例,其中以Fortran程序代码为例。如图3所示,该架构树共包含三层节点。首先扫描架构树的根节点LATC,生成程序入口主函数program LATC。然后扫描架构树的I级子节点,生成程序的顶层代码框架subroutinepre O、subroutine solver O和subroutine post () ο I级子节点遍历完毕后会开始遍历架构树的2级子节点,2级子节点为顶层代码框架包含的子程序。这里I级子节点pre下包含的2级子节点为读用户输入文件subroutine readlnputFile O、读多群截面数据库 subroutine readDatabase O、用户输入检查 subroutine inputCheck O、网格设置subroutine meshes O、常数计算 subroutine constants O 等;I 级子节点 solver 包含的 2级子节点为共振计算 subroutine Resonance_XS O、棚.元均勾化 subroutine Cell_homo O、组件均勾化 subroutine Assembly_homo O、燃耗计算 subroutine Burnup_calc O 等;I 级子节点post包含的2级子节点为输出处理subroutine output O。扫描完架构树的output节点后,发现已经遍历到架构树的最后I个叶子节点,则代码架构生成完成。图4示出了代码架构生成结果的示例。
[0036]下面结合图5具体描述详细设计部20。如图5所示,详细设计部20执行核电软件Vis1详细设计图差异自动对比,流程如下:
[0037](I)首先读入待比较差异的两个Vis1详细设计图;
[0038](2)调用COM接口分别生成两个设计文件的Shape对象集(记为A、B),对象集中每个Shape对象包含设计图中对应图形的所有属性信息;
[0039](3)判断A或B对象集是否为空;
[0040](4)若有对象集为空,则算法结束,直接退出;
[0041](5)若对象集不为空,则从对象集A中依次取出Shape对象,与对象集B中的同名对象进行属性对比;
[0042](6)若不存在属性差异,则表明两个Shape对象完全相同,不存在设计变更,流程如进到(8);
[0043](7)若存在属性差异,则记录Shape对象属性差异信息,流程前进到⑶;
[0044](8)判断对象集A是否为空,若为空,则流程前进到(9),若不为空,则流程返回到
(5);
[0045](9)完成所有Shape对象属性比较后输出设计文件Shape对象属性差异信息,即两个Vis1详细设计图的差异信息,算法结束。
[0046]利用记录的Shape对象属性差异信息,开发人员可以快速发现不同版本程序设计图间的差异,有效合并设计变更。
[0047]下面结合图6和7具体描述代码开发部30。
[0048]图6示出了代码开发部30的架构图,具体包括表示层(View Layer),业务层(Business Layer)以及数据层(Data Layer)。其中数据层表示代码生成器的输入,例如代码生成器将从数据层获得堆芯物理程序设计图中的变量定义元数据,为代码生成做好数据准备。业务层以代码生成器(Code Generator)为核心,利用例如从数据层提供的设计图元数据根据事先定义好的代码抽象定义模板生成Fortran代码,实现代码生成逻辑。业务层的代码生成引擎(CG Engine)负责根据生成策略(Generat1n Strategy)调用代码生成器(Generator) 0生成策略就是描述代码生成规则的抽象定义模板。表示层负责与用户的交互,将代码生成结果呈现给用户。表示层的事件监听(Event Listener)组件负责采集用户的代码生成需求,并传递给业务层进行代码生成。显示策略(Show Strategy)则负责控制代码生成结果的呈现方式,以提供较好的用户体验。数据采集模块负责记录生成器的运行行为,生成日志文件,方便进行调试和查错。
[0049]图7示出了代码开发部中主要类及类关系的示意图。在图7中,CodeBuilderView完成表示层和数据层的双重功能,负责接收用户输入的元数据,并将代码生成结果呈现给用户。GenCode和InitParaProperties共同完成代码生成的业务层功能,其中GenCode由CodeBuilderView直接调用,完成 CG Engine 的角色。GenCode 再调用 InitParaProperties完成实际代码生成功能,这里InitParaProperties完成Code Generator的功能。另外,为了实现代码可重用性,将一些通用字符串操作封装为StringTools类,如去除字符串中的所有空格、替换字符串中的全角等号、获取字符串中的中英文以及匹配是否为数字等等,方便在需要的地方直接调用。
[0050]图8示出了针对核电软件,代码开发部中输入元数据的示例。图9示出了基于图8的输入元数据,自动生成变量定义代码的示例。
[0051]以上描述了根据本发明示例实施例的核电软件开发自动化系统。根据本发明实施例,还提出了一种核电软件开发自动化方法,包括:架构设计步骤,将核电软件的架构抽象为树型数据结构,采用广度优先搜索进行遍历,自动生成代码框架;详细设计步骤,进行核电软件详细设计图差异的自动对比;以及代码开发步骤,接收输入数据,并根据事先定义的抽象定义模板,自动生成并输出程序代码。
[0052]在示例实施例中,在架构设计步骤中,将核电软件的架构抽象为包括多级节点的架构树,从根节点开始采用广度优先搜索遍历架构树的各级节点,自顶向下的逐层生成代码框架,最后生成可编译运行的完整代码框架。
[0053]在示例实施例中,在生产代码框架时,在代码框架中包括程序预处理、求解器、后处理的顶层调用流程,并自动插入部分调试代码。
[0054]在示例实施例中,在详细设计步骤中,基于Vis1对象模型和COM接口技术,执行核电软件Vis1详细设计图差异的自动对比,以发现不同版本程序设计图间的差异。
[0055]在示例实施例中,代码开发步骤包括:根据输入数据提供设计图中的变量定义元数据;以及根据生成策略调用代码生成器,代码生成器利用数据层提供的元数据,根据抽象定义模板生成程序代码,其中生成策略描述了代码生成规则的抽象定义模板。
[0056]在示例实施例中,代码开发步骤还包括:执行与用户的交互,包括采集用户的代码生成需求,以及控制代码生成结果的呈现。
[0057]在示例实施例中,代码开发步骤还包括:记录代码开发部的运行行为,生成日志文件,以便用户进行调试和查错。
[0058]以上的详细描述通过使用示意图、流程图和/或示例,已经阐述了根据本发明实施例的核电软件开发自动化系统和方法的实施例。在这种示意图、流程图和/或示例包含一个或多个功能和/或操作的情况下,本领域技术人员应理解,这种示意图、流程图或示例中的每一功能和/或操作可以通过各种结构、硬件、软件、固件或实质上它们的任意组合来单独和/或共同实现。本领域技术人员应认识到,这里所公开的实施例的一些方面在整体上或部分地可以等同地实现在集成电路中,实现为在一台或多台计算机上运行的一个或多个计算机程序(例如,实现为在一台或多台计算机系统上运行的一个或多个程序),实现为固件,或者实质上实现为上述方式的任意组合,并且本领域技术人员根据本公开,将具备设计电路和/或写入软件和/或固件代码的能力。此外,本领域技术人员将认识到,本公开所述主题的机制能够作为多种形式的程序产品进行分发,并且无论实际用来执行分发的信号承载介质的具体类型如何,本公开所述主题的示例性实施例均适用。信号承载介质的示例包括但不限于:可记录型介质,如软盘、硬盘驱动器、紧致盘(⑶)、数字通用盘(DVD)、数字磁带、计算机存储器等;以及传输型介质,如数字和/或模拟通信介质(例如,光纤光缆、波导、有线通信链路、无线通信链路等)。
[0059]虽然已参照几个典型实施例描述了本发明,但应当理解,所用的术语是说明和示例性、而非限制性的术语。由于本发明能够以多种形式具体实施而不脱离发明的精神或实质,所以应当理解,上述实施例不限于任何前述的细节,而应在随附权利要求所限定的精神和范围内广泛地解释,因此落入权利要求或其等效范围内的全部变化和改型都应为随附权利要求所涵盖。
【主权项】
1.一种核电软件开发自动化系统,包括: 架构设计部,将核电软件的架构抽象为树型数据结构,采用广度优先搜索进行遍历,自动生成代码框架; 详细设计部,进行核电软件详细设计图差异的自动对比;以及 代码开发部,接收输入数据,并根据事先定义的抽象定义模板,自动生成并输出程序代码。2.根据权利要求1所述的系统,其中架构设计部将核电软件的架构抽象为包括多级节点的架构树,从根节点开始采用广度优先搜索遍历架构树的各级节点,自顶向下的逐层生成代码框架,最后生成可编译运行的完整代码框架。3.根据权利要求2所述的系统,其中代码框架包括程序预处理、求解器、后处理的顶层调用流程,并自动插入部分调试代码。4.根据权利要求1所述的系统,其中详细设计部基于Vis1对象模型和COM接口技术,执行核电软件Vis1详细设计图差异的自动对比,以发现不同版本程序设计图间的差异。5.根据权利要求1所述的系统,其中代码开发部包括: 数据层,根据输入数据提供设计图中的变量定义元数据; 业务层,包括代码生成引擎、代码生成器和生成策略,其中生成策略描述了代码生成规则的抽象定义模板,代码生成引擎根据生成策略调用代码生成器,代码生成器利用数据层提供的元数据,根据抽象定义模板生成程序代码;以及 表示层,执行与用户的交互,所述表示层包括事件监听组件和显示策略,其中事件监听组件采集用户的代码生成需求,并传递给业务层以进行代码生成,显示策略控制代码生成结果的呈现。6.根据权利要求5所述的系统,其中代码开发部还包括: 数据采集模块,记录代码开发部的运行行为,生成日志文件,以便用户进行调试和查错O7.—种核电软件开发自动化方法,包括: 架构设计步骤,将核电软件的架构抽象为树型数据结构,采用广度优先搜索进行遍历,自动生成代码框架; 详细设计步骤,进行核电软件详细设计图差异的自动对比;以及代码开发步骤,接收输入数据,并根据事先定义的抽象定义模板,自动生成并输出程序代码。8.根据权利要求7所述的方法,其中在架构设计步骤中,将核电软件的架构抽象为包括多级节点的架构树,从根节点开始采用广度优先搜索遍历架构树的各级节点,自顶向下的逐层生成代码框架,最后生成可编译运行的完整代码框架。9.根据权利要求8所述的方法,其中在生产代码框架时,在代码框架中包括程序预处理、求解器、后处理的顶层调用流程,并自动插入部分调试代码。10.根据权利要求7所述的方法,其中在详细设计步骤中,基于Vis1对象模型和COM接口技术,执行核电软件Vis1详细设计图差异的自动对比,以发现不同版本程序设计图间的差异。11.根据权利要求7所述的方法,其中代码开发步骤包括: 根据输入数据提供设计图中的变量定义元数据;以及 根据生成策略调用代码生成器,代码生成器利用数据层提供的元数据,根据抽象定义模板生成程序代码,其中生成策略描述了代码生成规则的抽象定义模板。12.根据权利要求11所述的方法,其中代码开发步骤还包括: 执行与用户的交互,包括采集用户的代码生成需求,以及控制代码生成结果的呈现。13.根据权利要求11所述的方法,其中代码开发步骤还包括: 记录代码开发部的运行行为,生成日志文件,以便用户进行调试和查错。
【文档编号】G06F9/44GK105988792SQ201510071979
【公开日】2016年10月5日
【申请日】2015年2月11日
【发明人】莫文涛, 赵广, 刘硕, 任浩, 任党培
【申请人】国核(北京)科学技术研究院有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1