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

一种面向软件定义卫星的软件快速开发系统与方法

文献发布时间:2023-06-19 09:33:52


一种面向软件定义卫星的软件快速开发系统与方法

技术领域

本申请涉及交互式编程领域,具体而言本申请实施例涉及一种面向软件定义卫星的软件快速开发系统与方法。

背景技术

一个软件项目往往会包含很多个源文件。现有的编译器在编译整个项目时,会按照源文件之间的依赖关系依次编译每个源文件(也就是说,每个源文件都是单独处理的),但并没有将全部的源文件作为一个整体来对待。编译器的这种工作方式或者说习惯对开发者编写每个源文件和组织整个源码树提出了较高的要求,不但要确保每个源文件信息完整(不完整不能正确编译),还要确保各个源文件之间信息一致(不一致不能正确连接)。这样一来,如何科学合理地组织源码树就成为困扰开发者的一大难题,源码规模越大,难度越大。无论如何科学论证、精心设计,一个大型的软件项目到最后都无可避免地会形成一棵交织在一起的有着复杂依赖关系的源码树,导致其维护成本逐年升高、大幅攀升。

软件定义卫星是指以计算为中心,以软件为手段,通过软件定义无线电、软件定义载荷、软件定义数据处理计算机、软件定义网络等手段,将传统上由分系统实现的通信、载荷等功能以软件方式实现,总体上将各类敏感器和执行机构通过软件连接为一个整体,最终实现大部分卫星功能的软件化。软件定义卫星解除了卫星产品软硬件之间的耦合关系,使得卫星软件可以独立演化、按需加载、动态重构,从而可以在不改变硬件的情况下实现更多的功能,完成更多的任务。软件定义卫星与传统卫星的重大区别,导致了面向传统卫星软件设计的开发方法及系统难以面向软件定义卫星,或导致开发效率大幅度降低。

随着借助工具可以缓解这种情况,但问题并没有得到本质上的解决。这种交织在一起的有着复杂依赖关系的源码树结构不但难于维护,而且对编译技术的发展也是一种阻碍,同时也不利于代码复用。源代码的这种落后的组织方式和编译器形成了相互制约的紧耦合关系,一方不改,另一方也改不了;再加上兼容性的问题,导致这个领域几十年来一直发展缓慢。

发明内容

本申请实施例的目的在于提供一种面向软件定义卫星的软件快速开发系统以及方法,通过本申请一些实施例的交互式开发架构,软件开发者只需要向编译器发命令并接收应答,即可以交互的方式完成开发工作。

第一方面,本申请的一些实施例提供一种面向软件定义卫星的软件快速开发系统,所述面向软件定义卫星的软件快速开发系统包括:至少一个交互端,被配置为接收用户输入的命令消息并发送,接收应答消息;编译器,被配置为:接收所述命令消息,并根据所述命令消息完成针对项目、函数、变量或者数据类型的操作得到操作结果,并经增量编译及链接后可执行代码,其中,所述操作包括创建、删除、查询或者修改;当识别到所述函数发生变化时自动触发完成所述增量编译得到目标代码;生成用于表征针对所述命令消息的操作情况的所述应答消息;源码数据记录装置,被配置为以细粒度元素为存储单位存储所述操作结果和所述可执行代码,其中,所述细粒度元素包括所述函数、所述变量和所述数据类型。

本申请的一些实施例提供一种更细粒度的源码组织和存放方式,并在此基础提供了一种并行编译的编译器最可以实现支持异地协同和交互式编程。

在一些实施例中,所述至少一个交互端包括微信小程序、浏览器或者PC的应用程序。

本申请的一些实施例的交互端是开发者和编译服务器之间进行交互的装置,借助这些交互装置,开发者可以向编译服务器发送命令消息、从超级编译服务器接收应答消息并进行显示。

在一些实施例中,所述面向软件定义卫星的软件快速开发系统还包括:认证及消息转发装置,与所述至少一个交互端连接以接收所述命令消息,被配置为对用户身份进行认证并将所述命令消息根据至少一个所述编译器的负载情况向目标编译器发送。

在一些实施例中,所述认证及消息转发装置还被配置为:处理来自于开发者的注册操作和支付请求,或者被配置为对信道加密(即对通信信道,数据传输的通路进行加密),或者被配置为广播所述命令消息。

本申请的一些实施例采用认证及消息转发装置可以用于保证随着软件开发者人数增加导致的系统资源分配不均的问题。

在一些实施例中,所述面向软件定义卫星的软件快速开发系统还包括消息处理装置,被配置为依次对所述命令消息进行解析、存储以及命令归一化处理;其中,所述编译器根据归一化处理后的所述命令消息生成所述源代码。

本申请的一些实施例对用户输入的命令进行预处理,以保证编译器可以理解并执行预处理以后的命令。

在一些实施例中,所述消息处理装置包括:消息解析装置,被配置为解析所述命令消息,得到解析命令信息,或者接收所述应答消息;解析消息及应答消息记录装置,被配置为存储所述解析命令信息以及所述应答消息;命令归一化和任务调度装置,被配置为对所述解析命令信息进行归一化处理,以确定所述解析命令信息属于项目管理命令、函数管理命令、变量管理命令、数据类型管理命令或者链接命令;生成所述应答消息,至少用以表征用户对所述命令消息无操作权限和所述命令消息的格式不满足要求;接收所述应答消息。

本申请的一些实施例通过对用户输入的命令消息进行预处理可以实现命令消息的统一化,方便编译器执行相关命令。

在一些实施例中,所述面向软件定义卫星的软件快速开发系统还包括:命令记录装置,所述命令记录装置设置于所述命令归一化和任务调度装置与所述编译器之间,被配置为分类别记录所述项目管理命令、所述函数管理命令、所述变量管理命令、所述数据类型管理命令以及所述链接命令;所述编译器被配置为根据所述项目管理命令完成针对所述项目的操作;所述编译器被配置为根据所述函数管理命令完成针对所述函数的操作;所述编译器被配置为根据所述变量管理命令完成针对所述变量的操作;所述编译器被配置为根据所述数据类型管理命令完成针对所述数据类型的操作;所述编译器被配置为根据所述链接命令完成针对目标代码的操作得到所述可执行代码。

本申请的一些实施例通过分类记录各类命令方便编译器从对应的命令记录装置来读取对应的命令并进行相关操作。

在一些实施例中,所述面向软件定义卫星的软件快速开发系统还包括:可复用代码及数据资源记录装置,被配置为存储可复用的代码或者数据;代码检索装置,与所述源码数据记录装置连接,被配置为接收通过所述至少一个交互端输入的查询命令并基于所述查询命令从所述可复用代码及数据资源记录装置中获取目标可复用代码或者目标可复用数据。

在一些实施例中,所述编译器还被配置为:当根据所述命令消息创建、修改或删除所述元素时,自动抽取元素信息并抽取元素引用信息得到引用关系,其中,所述源码数据记录装置还被配置为存储包括所述元素信息的元素数据表,并存储包括所述引用关系的元素引用关系表;当收到检索元素命令消息时,抽取所述检索元素命令消息中的检索元素并从所述元素引用关系表和所述元素数据列表中抽取所需元素通过应答消息反馈检索结果。

本申请的一些实施例通过设置可复用代码来提升软件开发人员进行软件开发的效率,通过代码复用加快开发进度节省开发时间。

在一些实施例中,所述命令归一化和任务调度装置还被配置为:当第一云端装置不存在,负责动态创建所述第一云端装置;或者当第二云端装置不可用时,负责动态重新启动所述第二云端装置;其中,所述第一云端装置包括所述命令记录装置、所述编译器、所述源码数据记录装置和所述代码检索装置中的至少一个;所述第二云端装置包括所述命令记录装置、所述编译器、所述源码数据记录装置和所述代码检索装置中的至少一个。

本申请的一些实施例通过命令归一化和任务调度装置来扩展由于大量开发人员接入交互式编程系统造成的资源不够的问题。

在一些实施例中,所述源码数据记录装置包括关系型数据库、实时数据库和NoSQL数据库中的一种。

在一些实施例中,所述解析消息及应当消息记录装置包括关系型数据库、实时数据库和NoSQL数据库中的一种。

在一些实施例中,所述可复用代码及数据资源记录装置包括关系型数据库、实时数据库和NoSQL数据库中的一种。

本申请的一些实施例通过数据库等方式来存储源代码可以摆脱传统的以多个源文件对源代码进行存储和编译造成的效率很低的问题,提升了编译效果以及开发的进度。

第二方面,本申请的一些实施例提供一种面向软件定义卫星的软件快速开发方法,所述面向软件定义卫星的软件快速开发方法包括:接收用户输入的命令消息;根据所述命令消息完成针对项目、函数、变量或者数据类型的操作得到操作结果,并经增量编译及链接后生产可执行代码,其中,所述操作包括创建、删除、查询或者修改;以细粒度元素为存储单位存储所述操作结果并存储所述可执行代码,其中所述细粒度元素包括所述数据类型、所述函数和所述变量。

本申请的一些实施例提供一种更细粒度的源码组织和存放方式,并在此基础提供了一种并行编译的编译器最可以实现支持异地协同和交互式编程。

在一些实施例中,所述根据所述命令消息完成针对项目、函数、变量或者数据类型的操作得到操作结果,并经增量编译及链接后生产可执行文件之前,所述面向软件定义卫星的软件快速开发方法还包括:完成对所述用户的身份和权限认证。

本申请的一些实施例确认输入命令消息的用户属于合法用户,并确认用户是否具有项目增删查、函数增删查等的权限,进而保证源代码记录装置上存储的项目信息的安全性,防止项目内容被没有权限的用户篡改或者使用。

在一些实施例中,所述根据所述命令消息完成针对项目、函数、变量或者数据类型的操作得到操作结果,并经增量编译及链接后生产可执行文件之前,所述面向软件定义卫星的软件快速开发方法还包括:预处理所述命令消息,将所述命令消息划分为项目管理命令、函数管理命令、变量管理命令、数据类型管理命令、编译命令以及链接命令;所述根据所述命令消息完成针对项目、函数、变量或者数据类型的操作得到操作结果,并经增量编译及链接后生产可执行文件,包括:根据所述项目管理命令完成对所述项目的操作;根据所述函数管理命令完成对所述函数的操作;根据所述变量管理命令完成对所述变量的操作;根据所述数据类型管理命令完成对所述数据类型的操作;或者根据所述链接命令完成对所述目标代码的链接得到所述可执行代码,其中,所述目标代码是对源代码编译得到的。

本申请的一些实施例通过对命令信息进行预处理格式化,以便输入编译器被更高效的执行。

在一些实施例中,所述面向软件定义卫星的软件快速开发方法还包括:当获取到所述函数发生变化时自动触发完成所述增量编译得到所述目标代码,其中,所述函数的变化是由于对所述函数进行所述操作导致的或者所述函数的变化是由于对所述函数使用的所述数据结构或者全局变量的变化引起的。

本申请的一些实施例的编译服务为后台服务,即不需要用户使用命令、且不占用用户开发时间亦被不被用户感知的服务。这样的及时编译服务首先省去了传统的编译器占用的大量编译时间,从而缩短开发者整体开发时间;其次可以提前发现原来某些代码编译时才能发现的错误,错误越早被发现,修改错误的代价就越低。

在一些实施例中,所述根据所述命令消息完成针对项目、函数、变量或者数据类型的操作得到操作结果,并经增量编译及链接后生产可执行文件,包括:根据所述命令消息确认需要可复用代码,并将所述可复用代码写入源代码中。

本申请的一些实施例通过检索添加可复用代码来提升软件开发人员的开发速度。

在一些实施例中,所述面向软件定义卫星的软件快速开发方法还包括:向所述用户发送针对所述命令消息的处理结果的应答消息。

本申请的一些实施例通过发送命令消息并反馈对命令消息处理结果的应答消息可以完成各个用户的互动编程操作。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本申请实施例提供的面向软件定义卫星的软件快速开发系统的组成框图;

图2为本申请实施例提供的又一面向软件定义卫星的软件快速开发系统的组成框图;

图3为本申请实施例提供的命令归一化处理的流程图;

图4为本申请实施例提供的面向软件定义卫星的软件快速开发方法的流程图;

图5为本申请实施例提供的项目管理流程图;

图6为本申请实施例提供的函数管理流程图;

图7 为本申请实施例提供的数据类型管理流程图;

图8为本申请实施例提供的变量管理流程图;

图9为本申请实施例提供的检索流程示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

基于本申请一些实施例的交互式编程系统(即面向软件定义卫星的软件快速开发系统)的技术架构,开发者以向编译器发命令,从编译器接受应答的方式与编译器进行交互,编译器根据开发者的命令(意图)执行相关操作,例如生成源代码、构建目标程序等;可以将原来由开发者承担的源代码管理和维护工作(尤其是可见范围、一致性和依赖关系等)全都交给了编译器。在本申请一些实施例的技术架构下,编译器的基本编译单位从源文件缩小到了函数级别,灵活性大大提高。本申请的一些实施例采用数据库存储源代码中的函数、数据类型和变量等元素可以实现变量的即时声明即时使用;本申请一些实施例的编译器提供的服务为后台服务,即不需要用户使用命令、且不占用用户开发时间亦被不被用户感知的服务。这样的即时编译服务首先省去了传统的编译器占用的大量编译时间,从而缩短开发者整体开发时间;其次可以提前发现原来某些代码编译时才能发现的错误,错误越早被发现,修改错误的代价就越低。

请参看图1,图1为本申请一些实施例的面向软件定义卫星的软件快速开发系统的组成。图1的交互式编程系统可应用于软件定义卫星软件开发。

如图1所示,本申请的一些实施例提供一种面向软件定义卫星的软件快速开发系统,所述面向软件定义卫星的软件快速开发系统包括:至少一个交互端101(图1仅示出了三个交互端),被配置为接收用户输入的命令消息并发送,接收应答消息;编译器701,被配置为:接收所述命令消息,并根据所述命令消息完成针对项目、函数、变量或者数据类型的操作,得到操作结果,其中,所述操作包括创建、删除、查询或者修改;当识别到所述函数发生变化时自动触发完成增量编译得到目标代码(例如,当获取到所述函数发生变化时自动触发完成所述增量编译得到所述目标代码,其中,所述函数的变化是由于修改或删除所述函数导致的或者所述函数的变化是由于修改或删除所述函数使用的所述数据结构或者全局变量的引起的);生成用于表征针对所述命令消息的操作情况的所述应答消息;源码数据记录装置801,被配置为以细粒度元素为存储单位存储所述操作结果和所述可执行代码,其中,所述细粒度元素包括所述函数、所述变量和所述数据类型。本申请的一些实施例提供一种更细粒度的源码组织和存放方式,并在此基础提供了一种并行编译的编译器最可以实现支持异地协同和交互式编程。也就是说,本申请实施例中的并行编译是指:编译器可同时对多用户的多处源代码多个开发动作(表现为输入的多个命令信息)进行并行分析、处理和转换。

需要说明的是,本申请一些实施例的命令消息的类型可以包括创建空项目、根据模板创建项目、进入项目、退出项目、检索项目、修改项目属性、修改项目配置文件、及进入元素(例如,元素包括函数、变量以及数据类型)上下文、退出元素上下文、新增(即创建)变量、修改变量、删除变量、检索变量、新增(即创建)数据类型、修改数据类型、删除数据类型、检索数据类型、新增(即创建)函数、修改函数、删除函数、检索函数等。

为了使得开发者可以接收并显示编译器等的处理结果,本申请的一些实施例的交互端101包括微信客户端、微信小程序、浏览器、应用程序或者PC客户端。借助这些交互装置,开发者可以向编译服务器发送命令消息、从编译器接收应答消息并进行显示。

为了解决当接入的交互端数量增多时如何合理分配云端的资源(例如,编译器),在本申请的一些实施例中,所述面向软件定义卫星的软件快速开发系统还包括:认证及消息转发装置201,该认证及消息转发装置201与所述至少一个交互端连接以接收所述命令消息,被配置为对所述用户身份进行认证并将所述命令消息根据多个编译器的负载情况向目标编译器发送。在另一些实施例中,所述认证及消息转发装置还被配置为:处理来自于开发者的注册操作和支付请求,或者被配置为对信道加密,或者被配置为广播所述命令消息。

为了提高编译器701对用户输入的命令消息的处理速度和效果,本申请的一些实施例的面向软件定义卫星的软件快速开发系统还包括消息处理装置300,该消息处理装置300被配置为依次对所述命令消息进行解析、存储以及命令归一化处理;其中,所述编译器701根据归一化处理后的所述命令消息完成针对所述元素的所述操作。如图1所示,在一些实施例中,所述消息处理装置300包括:消息解析装置301,被配置为解析所述命令消息,得到解析命令信息;解析消息及应答消息记录装置401,被配置为存储所述解析命令信息以及所述应答消息;命令归一化和任务调度装置501,被配置为对所述解析命令信息进行归一化处理,以确定所述解析命令信息属于项目管理命令、函数管理命令、变量管理命令、数据类型管理命令或者链接命令。

为了存储命令消息以使编译器可以并行处理多条命令消息,如图1所示,在本申请的一些实施例中面向软件定义卫星的软件快速开发系统还包括:命令记录装置601,命令记录装置601设置于命令归一化和任务调度装置501与编译器701之间,命令记录装置601被配置为分类别记录项目管理命令、函数管理命令、变量管理命令、数据类型管理命令以及链接命令。相应的,编译器701被配置为根据项目管理命令完成针对项目的操作;编译器701被配置为根据函数管理命令完成针对函数的操作;编译器701被配置为根据变量管理命令完成针对变量的操作;编译器701被配置为根据数据类型管理命令完成针对数据类型的操作;所述编译器被配置为根据所述链接命令完成针对目标代码的操作得到所述可执行代码。具体的操作过程详见图5-图8,为避免重复在此不做过多赘述。

为了减轻开发人员的工作量,如图1所示,在本申请的一些实施例中的面向软件定义卫星的软件快速开发系统还包括:可复用代码及数据资源记录装置1001,被配置为存储可复用的代码或者数据;代码检索装置901,与源码数据记录装置801连接,被配置为接收通过所述至少一个交互端输入的查询命令并基于所述查询命令等命令从可复用代码及数据资源记录装置1001中获取目标可复用代码或者目标可复用数据。需要说明的是,编译器701在执行部分函数管理、数据类型管理、变量管理等也会触发从可复用代码及数据资源记录装置1001读取数据,如新增函数A,函数A需要调用可复用代码及数据资源记录装置中存储的B函数,此时会触发从可复用代码及数据资源记录装置读取函数B,并将函数B存储至源码数据记录装置。

在一些实施例中,所述命令归一化和任务调度装置还被配置为:当第一云端装置不存在,负责动态创建所述第一云端装置;或者当第二云端装置不可用时,负责动态重新启动所述第二云端装置;其中,所述第一云端装置包括所述命令记录装置、所述编译器、所述源码数据记录装置和所述代码检索装置中的至少一个;所述第二云端装置包括所述命令记录装置、所述编译器、所述源码数据记录装置和所述代码检索装置中的至少一个。

在一些实施例中,源码数据记录装置801、解析消息及应答消息记录装置401以及可复用代码及数据资源记录装置1001中的任意一个均可以采用关系型数据库、实时数据库和NoSQL数据库及其它存储装置中的一种。

下面结合图2示例性说明本申请一些实施例的面向软件定义卫星的软件快速开发系统的组成。

图2的交互式编程系统包括十层结构,下面逐一介绍各层的功能以及相邻层之间的信息传输过程。

第一层包括用于接收开发者输入的命令信息的人机交互装置110(即对应于图1的交互端101)。需要说明的是,用户可以借助于声音、文字等各种方式向人机交互装置110发出命令消息。作为一个示例,人机交互装置110采用移动终端,具体地,开发者可以通过在移动终端上的微信客户端通过文字向编译器发出命令消息。命令消息的类型可以参照上文描述,为避免重复在此不做过多赘述。

作为一个示例,每一个微信用户都是集成开发云(即本申请实施例的交互式编程系统)的合法用户,也就是一个潜在的开发者。当一个微信用户关注了集成开发云对应的微信公众账号之后,系统将为其创建一个私有库,并以其微信号进行命名。系统将记录开发者向集成开发云发送的每一条命令消息,和集成开发云给出的每一条应答消息。例如,开发者可以使用的命令消息的类型包括:CD和DC用于切换工作场景;New、del、list用于创建、删除和检索元素,其中,所述元素包括:数据类型、变量、函数、类、宏定义等;Set用于设置或修改元素的属性值;Help用于获取系统帮助;Debug、test、analyze、build、distribute用于调试、测试、分析、构建和发布源代码。

本申请一些实施例的交互式编程系统(或称为面向软件定义卫星的软件快速开发系统)的工作场景分为三级,第一级工作场景用于创建和管理项目,第二级工作场景用于管理项目中的函数、数据类型和变量,第三级工作场景用于操作函数、数据类型和变量的属性。在不同的场景下可以执行不同的命令(如上段列举的命令)操控不同的对象。

开发者每向交互式编程系统发送一个命令,编译器701将检查这个命令的合法性,执行这个命令,并将这个命令的执行结果(即应答消息)反馈给用户。本申请实施例的软件开发工作实际上就是通过一长串的命令和编译器701进行实时交互,最终完成应用程序的开发工作。本申请实施例的交互式编程系统支持大规模的异地协同和并行开发。

需要说明的是,在一个项目中,开发者分为三种角色:管理员、高级程序员、初级程序员。管理员拥有创建、删除、查询和修改项目中所有对象(即数据类型、变量、函数、类、宏定义等)的权利,可以授权或邀约某个开发者成为本项目的高级程序员和初级程序员,管理员也可以将其管理员身份让渡给项目开发团队中的某个高级程序员。高级程序员有创建、删除、查询和修改自己创建的对象以及初级程序员创建的对象的权利。初级程序员只能创建、删除、查询和修改自己创建的对象。

第二层包括可动态扩展的大规模认证及消息转发装置210(对应于图1的认证及消息转发装置201),该可动态扩展的大规模认证及消息转发装置210可进行按需动态扩展。需要说明的是,在本申请的一些实施例中可动态扩展的大规模认证及消息转发装置210还被配置为借助第三方的现有服务(例如微信公众平台),用于提供注册、身份认证、支付、信道加密、消息转发、广播等功能。

第三层包括消息解析及应答装置310(对应于图1的消息解析装置301),一方面消息解析及应答装置310用于汇聚开发者通过人机交互装置110以及可动态扩展的大规模认证及消息转发装置210提交上来的用户输入的命令消息并解析,将解析后的命令消息写入第四层消息解析及应答数据记录装置410(对应于图1的解析消息及应答消息记录装置401)。需要说明的是,消息解析及应答装置310还被配置为从消息解析及应答数据记录装置410读取编译器701给出的应答消息,将其可动态扩展的大规模认证及消息转发装置210分发给人机交互装置110。

第四层包括消息解析及应答数据记录装置410,消息解析及应答数据记录装置410可以基于关系型数据库、实时数据库、NoSQL数据库等存储解析后的命令消息。其中,第四层的消息解析及应答数据记录装置410即可以供消息解析及应答装置310写入解析后的命令消息,也可以从第五层的命令归一化及任务调度装置501(对应于图1的命令归一化和任务调度装置501)读取编译器701的应答消息。

第五层包括命令归一化及任务调度装置501(对应于图1的命令归一化和任务调度装置501),该命令归一化及任务调度装置501用于对从消息解析及应答数据记录装置410读取的命令消息进行归一化和任务调度。图3为本申请一些实施例的命令归一化及任务调度装置501的工作流程。如图3所示,一方面命令归一化及任务调度装置501从第四层的消息解析及应答数据记录装置410读取数据并进行处理。另一方面,命令归一化及任务调度装置501从第六层读取来自于编译器701的消息并进行处理。

具体地,如图3所示,S510命令归一化和任务调度装置从第四层的消息解析及应答数据记录装置410读取解析后的消息;S511,命令归一化和任务调度装置根据解析后消息包括的用户ID判断用户权限;S512,判断用户是否有执行当前命令消息的权限;S513,当确定用户具有权限时根据当前上下文判断命令类型并确定应该写入哪个命令装置(即确定写入如下文记载的第六层的项目管理命令记录装置611、函数管理命令记录装置612、变量管理命令记录装置613、数据类型管理命令记录装置614以及链接命令记录装置615中的一个装置中);S515将命令写入对应的命令记录装置(例如,写入链接命令记录装置615),否则执行S516将应答消息写入第四层的消息解析及应答数据记录装置410。S521命令归一化和任务调度装置从第六层读取应答消息;S522,将应答消息更新至第四层的消息解析及应答数据记录装置410。S531命令归一化和任务调度装置判断是否存在可用的命令记录装置、编译器、源码数据记录装置、以及代码检索装置;S532,当不存在这些装置或者这些装置不可用时则启动或者创建这些装置。

下面结合一个示例阐述命令归一化及任务调度装置501。

假设第四层的消息解析及应答数据记录装置410存储的一条解析后的命令消息包括:用户ID:12345;项目ID:52342353;消息上下文:VAR(变量);消息类别(命令框消息/编辑框消息):命令框消息;消息:del sum。

命令归一化及任务调度装置501首先根据用户ID判断该用户是否具备执行变量VAR上下文下的“del sum”命令的权限(例如是否为该变量的创建者或项目管理员),如果没有权限则将不具有处理权限的应答消息写入消息解析及应答数据记录装置410,否则判断“del sum”命令格式是否正确,如果命令格式错误则将命令格式错误导致不能被处理的应答消息写入消息解析及应答数据记录装置410中,否则将命令写入变量管理记录装置603。

第六层包括多个元素,该多个元素对应于图1的命令记录装置601。也就是说,作为一个示例命令记录装置601包括:项目管理命令记录装置611、函数管理命令记录装置612、变量管理命令记录装置613、数据类型管理命令记录装置614以及链接命令记录装置615,这些数据记录装置(可以是关系型数据库、实时数据库、NoSQL数据库等)。一方面命令记录装置601供命令归一化及任务调度装置501写入命令消息,读取应答消息。另一方面命令记录装置601分别图1的编译器701读取命令消息和写入应答消息。

第七层包含多个元素,该多个元素对应于图1的编译器701。作为一个示例图2的编译器701包括:项目管理单元711、函数管理单元712、变量管理单元713、数据类型管理单元714、编译单元715以及链接单元716,这些单元能够提供源代码生成、构建、分析、仿真和模拟执行等服务。图2的第七层的多种编译单元分别与第六层的相应种类的命令记录装置对应,且与第8层源码数据记录装置801链接。

例如,第七层的编译单元715根据中间代码和元素信息(数据类型、变量、函数(类、宏定义等))生成目标代码,链接单元716根据目标代码生成可执行文件,将目标代码以及可执行文件存储至源码数据记录装置801。需要说明的是,目标程序是一个可执行文件,目标程序可以通过操作系统直接访问。

第八层包括源码数据记录装置801,这是一种数据记录装置(可以是关系型数据库、实时数据库、NoSQL数据库等),用于存放项目库或私有库的源代码,为第七层的编译单元提供创建、删除、查询以及修改服务。

需要说明的是,本申请实施例的一个项目的源代码对应于若干数据类型定义、若干变量定义和若干函数定义的集合,其中,数据类型、变量和函数是分别具有不同属性的对象。当源码数据记录装置801采用结构数据库时,一个项目中的源代码在数据库中表现为一组数据表。例如,数据类型的存放方式包括:数据类型表(例如,该表可以进一步包括数据类型编号、名称、定义、类别、组别、创建时间、创建人、最后一次修改时间、修改人、备注)、数据类型成员表(例如,该表可以进一步包括数据类型编号,成员类型、成员名称、成员默认值、成员序号、成员备注)、数据类型白名单表(例如,该表可以包括:数据类型编号、函数编号、可用标志);变量的存放方式包括变量表(例如,该表可以包括:变量编号、变量类型、变量名称、变量初值、变量类别、变量组别、是否常量、变量备注、创建时间、创建人、修改时间、修改人)以及变量白名单表(例如,该表可以包括:变量编号、函数编号、是否允许读、是否允许写);函数的存放方式包括:函数表(例如,该表可以包括:函数编号、返回值类型、函数名称、函数类别、函数组别、函数备注、创建时间、创建人、修改时间、修改人)、函数参数表(例如,该表可以包括函数编号、参数序号、参数类型、参数名称、参数默认值、参数备注)、局部变量表(例如,该表可以包括函数编号、变量序号、变量类型、变量名称、变量初值、变量备注)、函数语句表(例如,该表可以包括函数编号、语句序号、语句标号、语句内容、语句备注、语句类型)或者函数白名单表(例如,该表可以包括:函数编号、函数编号、是否允许调用标志),其中,函数白名单表用于表征该函数的可见域及是否可以被调用。

第九层包含图1的多个代码检索装置901,这是一种代码检索装置,负责对源码数据记录装置801中存放的源代码进行分析,根据需要从可复用代码记录装置1001检索代码和相关数据后将其写入对应的源码数据记录装置801。

第十层包括可复用代码记录装置1001,这是一种数据记录装置(可以是关系型数据库、实时数据库、NoSQL数据库等),其中存放有可复用的代码资源和数据资源,通过第九层的代码检索装置901根据需要进行检索和取用。

需要说明的是,图2中各单元之间传输的信息的具体含义如下所述。图2的编译单元715从源码数据记录装置801获取的元素信息包含:数据类型信息、变量信息、函数信息(例如类、宏定义等);图2中第一层与第二层之间传输的请求消息、第二层和第三层之间传输的消息均由以下信息组成:用户编号(或称为用户ID)、项目编号(或称为项目ID)、消息上下文、消息类别(命令框消息/编辑框消息)、消息正文内容;图2传输线上的应答和消息应答均由以下信息组成:消息编号(或称为消息ID)、用户ID(或称为用户编号)、消息上下文、应答框应答消息、编辑框应答消息;图2的消息解析及应答装置310将来自第一层请求或者第二层的消息按定义拆分成如下各部分得到解析后的数据(或称为解析后的命令信息)并存储至第四层的消息解析及应答数据记录装置410:用户ID、项目ID、消息上下文、消息类别(命令框消息/编辑框消息)、消息;图2的消息应答或者命令应答将消息ID、用户ID、消息上下文、应答框应答消息、编辑框应答消息组成消息应答的格式;图2的项目管理命令包含:创建项目命令、根据模板创建项目命令、进入项目命令、退出项目命令、检索项目命令、修改项目属性命令、修改项目配置文件命令;图2的函数管理命令包含:新增函数命令、删除函数命令、修改函数命令、检索函数命令;图2的变量管理命令包含:新增变量命令、删除变量命令、修改变量命令、检索变量命令;数据类型管理命令包含:新增数据类型命令、删除数据类型命令、修改数据类型命令、检索数据类型命令;项目信息包含以下信息:项目属性;项目管理辅助信息包含一下信息:用户项目关系记录、用户权限、项目ID、项目表记录、项目ID、项目表内容、配置文件路径、模板内容、默认配置文件、项目配置文件、模板ID;函数信息包含以下信息:函数表信息、函数参数信息表信息、函数语句表信息;函数管理辅助信息包含以下信息:数据类型表信息、元素引用表信息、用户项目关系表信息、函数表信息、函数参数信息表信息、函数语句表信息;变量信息包含以下信息:变量表信息;变量管理辅助信息包含以下信息:数据类型表信息、元素引用表信息、用户项目关系表信息、变量表信息;数据类型信息包含以下信息:数据类型表信息、数据类型成员表信息;数据类型管理辅助信息包含以下信息:元素引用表信息、用户项目关系表信息、数据类型表信息、数据类型成员表信息;图2第八层向第七层提供的元素信息包括:函数表信息、函数参数信息表信息、函数语句表信息、变量表信息、数据类型表信息、数据类型成员表信息、元素引用表信息;中间代码包含符号信息、抽象语法树;目标代码即编译后的文件;可执行文件即可执行程序;代码/数据即可复用代码及数据。

下面结合图4示例性阐述本申请交互式编程系统执行的交互式编程方法的流程。

如图4所示,本申请的一些实施例提供一种交互式编程方法,所述交互式编程方法包括:S101,接收用户输入的命令消息;S102,根据所述命令消息完成针对项目、函数、变量或者数据类型的操作得到操作结果,并经增量编译及链接后生成可执行文件,其中,所述操作包括创建、删除、查询或者修改;S103,以细粒度元素为存储单位存储所述操作结果并存储所述可执行代码,其中所述细粒度存元素包括所述数据类型、所述函数和所述变量。

为了完成对用户身份的认证,在本申请的一些实施例中,交互式编程方法在执行S102之前还包括:完成对所述用户的身份和权限认证。需要说明的是,如上文所述本申请的实施例,在一个项目中,开发者分为三种角色:管理员、高级程序员、初级程序员。管理员拥有创建、删除、查询以及修改项目中所有对象(即函数、数据类型、变量、类、宏定义等元素)的权利,可以授权或邀约某个开发者成为本项目的高级程序员和初级程序员,管理员也可以将其管理员身份让渡给项目开发团队中的某个高级程序员。高级程序员有创建、删除、查询以及修改自己创建的对象以及初级程序员创建的对象的权利。初级程序员只能创建、删除、查询以及修改自己创建的对象。

为了方便编译器处理各种命令,在本申请的一些实施例中需要对命令消息进行预处理。例如,在执行S102之前,所述交互式编程方法还包括:预处理所述命令消息,将所述命令消息划分为项目管理命令、函数管理命令、变量管理命令、数据类型管理命令、编译命令以及链接命令;相应的S102包括:根据所述项目管理命令完成对所述项目的操作;根据所述函数管理命令完成对所述函数的操作;根据所述变量管理命令完成对所述变量的操作;根据所述数据类型管理命令完成对所述数据类型的操作;根据所述链接命令完成对目标代码的链接得到所述可执行代码。

下面结合图5-图8示例性阐述软件开发的操作流程图。如图5所示,该图为本申请一些实施例提供的项目管理方法流程图。

图5的项目管理方法包括:

S501,登录交互式编程系统,即用户登录图1示出的十层交互式编程系统;

S502,判断用户是否退出登录,如果是则执行S503的退出登录结束编程即不执行图5剩余的所有步骤,否则执行S504;

S504,判断用户是否有待开发项目,如果没有待开发项目则执行S505的新建项目以创建一个新项目(例如,通过交互端输入“创建空项目”或者“根据模板创建命令”来新建项目),如果已经存在待开发的项目则执行S506;

S506,进入项目,也就是说通过交互端输入“进入项目”命令进入待开发项目;

S507,判断是否设置项目属性(这是项目管理员才具有全向),如果是则执行S508来设置项目属性(例如,通过交互端输入“修改项目属性”命令修改项目属性),否则执行S509;

S509,判断是否退出项目,如果是则执行S514退出项目不执行图5剩余步骤(例如,通过交互端输入“退出项目”命令退出项),否则执行S510;

S510,如果需要进一步进行开发工作,则根据需要操作的元素类型,输入“进入元素上下文”命令,进入元素上下文(场景)。具体地,S510包括判断操作类型,如果操作类型属于函数则执行S511进入函数场景(即函数上下文)并继续执行图6步骤以完成对函数的操作,如果操作类型属于数据类型则执行S512进入数据类型场景(即数据类型上下文)并继续执行图7的步骤以完成对数据类型的操作,如果操作类型属于全局变量则执行S513进入变量场景(即进入变量上下文)并继续执行图8的步骤以完成对全局变量的操作。

如图6所示,该图为本申请一些实施例提供的函数管理方法流程图。图6的函数管理方法包括:

S601,判断函数管理类型,如果函数管理类型属于新建则执行S602创建函数,如果函数管理类型属于删除则执行S603删除函数,如果函数管理类型属于修改则执行S604修改函数,如果函数管理类型属于检索则执行S605检索函数;

S606,判断是否结束函数管理,如果否则返回S601,否则执行S607;

S607,退出函数场景结束函数管理操作。

需要说明的是图6在执行S607之后还可以继续返回图5的S509以继续执行图5包括S509在内的各后续步骤。用户在进入函数上下文后,根据需要选择函数管理类型。如果用户需要创建新函数,则在交互端输入“新增函数”命令创建函数。当系统接收到新增函数命令时,判断函数名称是否已存在,函数是否存在词法语法错误,函数是否与其他元素存在引用关系等作出相应操作,并给出应答;如果用户需要删除函数,则在交互端输入“删除函数”命令删除函数,当系统接收到删除函数命令时,判断函数是否与其他元素存在引用关系等作出相应操作,并给出应答;如果用户需要修改函数,则在交互端输入“修改函数”命令修改函数,当系统接收到修改函数命令时,判断函数是否存在词法语法错误,函数是否与其他元素存在引用关系等作出相应操作,并给出应答;如果用户需要检索函数,则在交互端输入“检索函数”命令检索函数,当系统接收到检索函数命令时,根据用户给出的检索条件进行函数检索,并给出应答。

当用户不需再对函数进行编辑时,退出函数上下文(场景)。

如图7所示,该图为本申请一些实施例提供的数据类型管理方法流程图。图7的数据类型管理方法包括:

S701,判断数据类型管理类型,如果数据类型管理类型属于新建则执行S702创建新数据类型,如果数据类型管理类型属于删除则执行S703删除数据类型,如果函数管理类型属于修改则执行S704修改数据类型,如果函数管理类型属于检索则执行S705检索数据类型;

S706,判断是否结束数据类型管理,如果否则返回S701,否则执行S707;

S707,退出数据类型场景结束数据类型管理操作。

需要说明的是图7在执行S707之后还可以继续返回图5的S509以继续执行图5包括S509在内的各后续步骤。用户在进入数据类型上下文后,根据需要选择数据类型管理类型。如果用户需要创建新数据类型,则在交互端输入“新增数据类型”命令创建数据类型,当系统接收到新增数据类型命令时,判断数据类型名称是否已存在,数据类型是否存在词法语法错误,数据类型是否与其他元素存在引用关系等作出相应操作,并给出应答。如果用户需要删除数据类型,则在交互端输入“删除数据类型”命令删除数据类型,当系统接收到删除数据类型命令时,判断数据类型是否与其他元素存在引用关系等作出相应操作,并给出应答。如果用户需要修改数据类型,则在交互端输入“修改数据类型”命令修改数据类型,当系统接收到修改数据类型命令时,判断数据类型是否存在词法语法错误,数据类型是否与其他元素存在引用关系等作出相应操作,并给出应答。如果用户需要检索数据类型,则在交互端输入“检索数据类型”命令检索数据类型,当系统接收到检索数据类型命令时,根据用户给出的检索条件进行数据类型检索,并给出应答。

当用户不需再对数据类型进行编辑时,退出数据类型上下文(场景)。

如图8所示,该图为本申请一些实施例提供的变量管理方法流程图。图8的变量管理方法包括:

S801,判断变量管理类型,如果变量管理类型属于新建则执行S802创建新变量类型,如果变量管理类型属于删除则执行S803删除变量类型,如果变量管理类型属于修改则执行S804修改变量类型,如果变量管理类型属于检索则执行S805检索变量类型;

S806,判断是否结束数据类型管理,如果否则返回S801,否则执行S807;

S807,退出数据类型场景结束数据类型管理操作。

需要说明的是图8在执行S807之后还可以继续返回图5的S509以继续执行图5包括S509在内的各后续步骤。用户在进入变量上下文后,根据需要选择变量管理类型。如果用户需要创建新变量,则在交互端输入“新增变量”命令创建变量,当系统接收到新增变量命令时,判断变量名称是否已存在,变量是否存在词法语法错误,变量是否与其他元素存在引用关系等作出相应操作,并给出应答。如果用户需要删除变量,则在交互端输入“删除变量”命令删除变量,当系统接收到删除变量命令时,判断变量是否与其他元素存在引用关系等作出相应操作,并给出应答。如果用户需要修改变量,则在交互端输入“修改变量”命令修改变量,当系统接收到修改变量命令时,判断变量是否存在词法语法错误,变量是否与其他元素存在引用关系等作出相应操作,并给出应答。如果用户需要检索变量,则在交互端输入“检索变量”命令检索变量,当系统接收到检索变量命令时,根据用户给出的检索条件进行变量检索,并给出应答。当用户不需再对变量进行编辑时,退出变量上下文(场景)。

为了提升编译器的编译效果,节省开发人员的开发时间,在本申请的一些实施例中,所述面向软件定义卫星的软件快速开发方法还包括:当所述函数变化时进行增量编译,得到可执行代码,其中,所述函数的变化是由于对所述函数进行所述操作导致的或者所述函数的变化是由于对所述函数使用的所述数据结构或者全局变量的变化引起的。具体地,交互式编程系统采用基于函数元素变化的增量编译方法,函数元素的变化原因包含:开发者主动修改函数(例如,对函数进行创建、删除或者修改等操作)或因函数使用的数据结构、全局变量的变化引起的函数的修改。在源码数据记录装置801对应的数据库中保存经编码压缩后的抽象语法树及符号信息,当数据库中的函数元素(也就是说,函数表、函数信息表、函数语句表中的信息发送变化)发生变更时,系统读取上一次编译时的语法树、更新后的元素信息,并进行增量编译。

为了提供可复用代码来节省开发人员的开发时间,在本申请的一些实施例中,S102还包括:根据所述命令消息确认需要可复用的代码,并将所述可复用代码写入所述源代码中。也就是说,本申请的一些实施例还建立开发者可以直接引用的源码资源库和数据资源库,由编译器701根据引用要求从中检索和抽取必要的元素,提高了复用效率,降低了复用门槛。具体地,如图9所示,开发者通过人机交互装置(即图1的交互端)的用户界面输入命令消息,命令消息包括创建、删除或者修改元素命令,当编译器701根据这些命令消息创建、修改或删除元素(元素可以包含函数、数据类型以及变量、类、宏)时由编译器701自动抽取元素信息并将抽取的元素信息存入源码数据记录装置801的包括的元素数据表(即上文记载的各种数据表格,包括,变量表、数据类型表、数据类型成员表等)中,同时编译器701自动抽取元素引用消息得到引用关系并将抽取得到的元素引用信息存储到源码数据记录装置801的数据库的元素引用关系表中。在一些实施例中,命令消息包括检索元素的命令,具体地,当用户通过用户界面输入用于检索元素命令的命令消息时,由编译器701抽取命令消息的检索元素并从元素引用关系表和元素数据列表中抽取所需元素通过应答消息向用户反馈检索结果。本申请的一些实施例通过检索添加可复用代码来提升软件开发人员的开发速度。元素引用关系表中的内容包括引用元素类型、引用元素项目ID、引用元素ID、被引用元素类型、被引用元素项目ID以及被引用元素ID。

需要说明的是,第十层提供的可复用代码表现为一组数据结构、变量及函数,这些元素组合在一起构成了一个独立的复用单元,这里的“独立”指该复用单元不再依赖其他元素。本申请的一些实施例提供了不同层次粒度的可复用代码,最小粒度可复用代码提供单一功能,即满足单一职责原则,高层次的可复用代码提供一组功能。本申请一些实施例中的可复用代码采用特定的描述框架来定义其信息,描述框架由基本属性及扩展属性组成,其中基本属性包含:可复用单元名称、可复用单元标识符、应用范围、领域范围、使用环境、功能描述。用户通过属性描述检索可复用代码。本申请的一些实施例可以根据搜索匹配度及可复用代码评分值综合计算出检索结果排序,用户可查看可复用代码的所有属性描述。本申请的一些实施例将给出一个可复用单元的外部接口(包含函数、全局变量、数据结构描述),用户通过调用(使用)外部接口也可以完成可复用代码的复用。

通过借助以上实施例的技术手段,开发人员无需在本地搭建开发环境,只需启动浏览器或微信小程序即可进行软件定义卫星软件的大规模异地协同开发;通过所述编译器对用户命令的处理,用户可以第一时间发现软件错误,减少软件定义卫星软件修改成本。通过对用户命令的记录,可支持逐级回溯的细粒度版本管理及快速定位代码编写者,提高软件定义卫星软件修改效率。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

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

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

相关技术
  • 一种面向软件定义卫星的软件快速开发系统与方法
  • 一种面向软件定义卫星的可按需动态重构的软件测试系统和方法
技术分类

06120112210150