一种面向软件定义卫星的可复用代码库构建方法与装置与流程

文档序号:24192054发布日期:2021-03-09 15:26阅读:111来源:国知局
一种面向软件定义卫星的可复用代码库构建方法与装置与流程

1.本申请涉及源代码存领域,具体而言本申请实施例涉及一种面向软件定义卫星的可复用代码库构建方法与装置。


背景技术:

2.一个软件项目往往会包含很多个源文件。现有的编译器在编译整个项目时,会按照源文件之间的依赖关系依次编译每个源文件(也就是说,每个源文件都是单独处理的),但并没有将全部的源文件作为一个整体来对待。编译器的这种工作方式或者说习惯对开发者编写每个源文件和组织整个源码树提出了较高的要求,不但要确保每个源文件信息完整(不完整不能正确编译),还要确保各个源文件之间信息一致(不一致不能正确连接)。这样一来,如何科学合理地组织源码树就成为困扰开发者的一大难题,源码规模越大,难度越大。无论如何科学论证、精心设计,一个大型的软件项目到最后都无可避免地会形成一棵交织在一起的有着复杂依赖关系的源码树,导致其维护成本逐年升高、大幅攀升。随着借助工具可以缓解这种情况,但问题并没有得到本质上的解决。这种交织在一起的有着复杂依赖关系的源码树结构不但难于维护。源代码的这种落后的组织方式和编译器形成了相互制约的紧耦合关系,一方不改,另一方也改不了;再加上兼容性的问题,导致这个领域几十年来一直发展缓慢。
3.软件定义卫星是指以计算为中心,以软件为手段,通过软件定义无线电、软件定义载荷、软件定义数据处理计算机、软件定义网络等手段,将传统上由分系统实现的通信、载荷等功能以软件方式实现,总体上将各类敏感器和执行机构通过软件连接为一个整体,最终实现大部分卫星功能的软件化。软件定义卫星解除了卫星产品软硬件之间的耦合关系,使得卫星软件可以独立演化、按需加载、动态重构,从而可以在不改变硬件的情况下实现更多的功能,完成更多的任务。在软件定义卫星中,软件占据了更大的比重,将有越来越多的开发者参与到软件定义卫星的软件开发中来,面向传统卫星的软件串行构建方法本身针对于独立个人或小团队的软件,无法满足多用户大规模软件并行开发的需要。
4.现在传统的代码管理方式都是基于文件的方式对整个项目的代码进行管理,其中对于多个人员并发开发的支持很少,在代码的同步管理,版本迭代,代码的集成方面需要化大量的时间和人力。
5.现有的源码组织方式十分落后,导致现有的集成开发环境也十分落后。因此设计一种更为高效的代码存储方式以利于编译器更快的编译成了亟待解决的技术问题。


技术实现要素:

6.本申请实施例的目的在于提供一种面向软件定义卫星的可复用代码库构建方法及装置,采用本申请的实施例至少可以将文件形式表述的代码组织关系,转换为由代码基本元素构成,代码关系表表示的源代码组织关系,进而实现源代码的结构化存储以及方便编译器进行增量编译。
7.第一方面,本申请的一些实施例提供一种面向软件定义卫星的可复用代码库构建方法,所述面向软件定义卫星的可复用代码库构建方法包括:获取待存储对象的项目信息、元素信息以及元素关系信息,其中,所述元素信息包括变量信息、函数信息、数据类型信息、类定义信息、宏定义信息、函数声明信息和头文件信息中的至少一种信息,所述元素关系信息包括元素引用关系和源代码组织关系、源代码组织关系,所述待存储对象包括源代码文件或者一行或多行编程命令;以获取的细粒度信息存储所述待存储对象,其中,所述细粒度信息包括元素信息以及元素关系信息。
8.本申请的一些实施例通过细粒度元素存储代码可以方便编译器对代码进行增量编译,且方便用户的并行软件开发。
9.在一些实施例中,通过关系型数据库、实时数据库和nosql数据库中的一种存储所述细粒度信息。例如,通过关系型数据库中的多类数据表格存储所述细粒度信息。
10.本申请的一些实施例通过多种方式实现代码的细粒度化存储,提升了编译器的编译效率,并方便用户及时发现代码开发过程中的错误。
11.在一些实施例中,所述数据表格包括:用于存储所述项目信息的项目表,用于存储所述变量信息的变量表、用于存储所述函数信息的函数表、函数参数表以及函数语句表、用于存储所述数据类型信息的数据类型表、用于存储所述宏定义信息的宏定义表、用于存储所述类定义信息的类表、用于存储所述函数声明信息的函数声明表或者用于存储所述头文件信息的头文件表;所述获取待存储对象的项目信息、元素信息以及元素关系信息,包括:对所述待存储对象进行语义语法分析,获取所述元素信息;对所述待存储对象进行项目工程分析,获取所述项目信息;所述以获取的细粒度信息存储所述待存储对象,包括:将所述元素信息存储至所述变量表、所述函数表、所述函数参数表、所述函数语句表、所述数据类型表、所述宏定义表、所述类表、所述函数声明表和所述头文件表;将所述项目信息存储至所述项目表。
12.本申请的一些实施例通过解析获取代码中的细粒度元素并进行表格化结构存储,以实现编译器的增量编译。
13.在一些实施例中,所述数据表格还包括依赖关系表、文件表以及文件目录表;所述获取待存储对象的项目信息、元素信息以及元素关系信息,包括:将所述待存储对象的文件组织的代码结构解析拆分为代码元素单元,基于所述代码元素单元在数据库中的关系来表述所述元素在文件结构中的引用关系,并将所述元素引用关系存至所述依赖关系表,所述文件表和所述文件目录表;其中,所述依赖关系表包括引用元素类型、引用元素编号、引用元素所属项目编号、被引用元素类型、被引用元素所属项目编号、引用元素创建时间、引用元素更改时间和引用元素有效性标识。
14.本申请的一些实施例还包括依赖关系表存储的引用信息,方便编译器实现源代码的编译。
15.在一些实施例中,所述变量表变包括:变量编号,变量类型,变量名称,变量定义、变量初值,变量类别,变量组别,是否常量,变量描述,变量所属项目编号,变量所属文件编号,变量所属类编号,变量有效性,锁定本条记录标识,变量在文件中的开始行,变量在文件中的结束行,变量总行数,变量是否对外可用,变量创建时间、变量创建人、变量修改时间和变量修改人中的至少部分项;所述数据类型表包括:数据类型编号,数据类型名,数据类型
md5唯一值,数据类型定义,成员类型、数据类型描述、数据类型创建时间、数据类型修改时间、数据类型所属项目编号、数据类型所属文件编号、数据类型所属类编号,数据类型有效标识、锁定本条变量记录标识,数据类型在文件中的开始行,数据类型在文件中的结束行和数据类型总行数中的至少部分项;所述函数表包括:函数编号,函数对应的md5唯一值,函数定义,函数名称,函数类别,函数原型,函数描述,函数是否对外可用,函数创建时间、函数修改时间、函数所属项目编号、函数所属文件编号、函数所属类编号、函数约束类型、函数是否有效、锁定本条函数记录标识、函数位置信息和总行数中的至少部分项,其中,所述函数位置信息是通过所述函数在文件中的开始行和结束行确定的。
16.本申请的一些实施例通过定义变量表中的各存储字段至少可以实现变量信息结构化的存储。
17.在一些实施例中,所述宏定义表包括:宏编号、宏定义体、宏名称、宏所属项目编号、宏所属文件编号、宏创建时间、宏更新时间、宏有效性、宏起始行号、宏结束行号、宏总行数、宏对应的md5唯一值和锁定本条宏定义记录标识中的至少部分项,其中,所述宏起始行和所述宏结束行为所述宏在其所属文件中的起始行和结束行;所述类表包括:类编号、类名、类对应的md5唯一值、类定义、类所属文件编号、类所属项目编号、类描述、类是否有效、类在文件中的起始位置、类在文件中的结束位置、类创建时间以、类更新时间以及锁定本条类记录标识中的至少部分项。
18.本申请的一些实施例通过定义宏定义表以及类表中的各存储字段至少可以实现宏和类相关信息的结构化存储。
19.在一些实施例中,所述多种数据表格还包括代码树表以及项目叶函数表;其中,所述代码树表包括:上一级函数标识号、下一级函数标识号、是否为头节点、是否为叶节点、项目标识号、代码树节点创建时间以及代码树节点更新时间中的至少部分项;所述项目叶函数表包括:叶函数编号、叶函数所属文件编号、叶函数所属函数编号、叶函数函数名称、项目叶函数记录创建时间、项目叶函数记录更新时间项目叶函数有效性标识中的至少部分项。
20.本申请的一些实施例通过定义代码树表以及项目叶函数表中的各存储字段至少可以实现这类型信息的结构化存储,以使编译器用户提供更方便、更准确的开发辅助功能。
21.在一些实施例中,所述待存储对象为源代码文件,所述获取待存储对象的项目信息、元素信息以及元素关系信息,包括:获取项目代码包信息、输入输出接口信息以及所述源代码组织关系信息;所述多种数据表格还包括:用于存储所述项目代码包信息的项目包信息表、用于存储所述输入输出接口信息的应用输入输出表以及用于存储所述源代码组织关系信息的文件目标表和文件表。
22.本申请的一些实施例通过定义项目代码包信息、输入输出接口信息以及代码文件组织结构信息以实现对整个项目代码信息关键信息的分析整理,从而辅助用户进行编代码编辑,项目修改,代码移植等。
23.在一些实施例中,所述项目包信息表包括:项目包所属项目标识号、项目包依赖动态库名称、项目包依赖静态库名称、项目包动态库存储位置、项目包静态库存储位置、项目包信息表创建时间、项目包信息表更新时间和项目包有效性标识中的至少部分项。
24.本申请的一些实施例通过定义项目包信息表的各字段来实现项目包信息的结构化存储。
25.在一些实施例中,所述应用输入输出表包括:接口类型标识号、接口名称、输出位置、资源编号、接口所属函数编号、接口所属文件编号、接口所述项目编号、接口记录创建时间、接口记录更新时间以及接口有效性中的至少部分项。其中,在软件版本更新时需要接口记录创建时间、接口记录更新时间以及接口有效性这些字段。
26.本申请的一些实施例通过定义应用输入输出表的各字段来实现输入输出接口信息的结构化存储。
27.在一些实施例中,所述文件目录表包括文件目录名称、上一级目录编号、下一级目录编号、文件目录所属项目编号、文件目录有效性、文件目录记录创建时间、文件目录记录更新时间和文件目录md5唯一值中的至少部分项;所述文件表包括:文件名称、文件所属文件目录编号、文件所述项目编号、文件上一级目录编号、文件类型、文件有效性特征、文件对应的md5唯一值、文件路径、文件版本、文件表记录创建时间、更新时间和锁定本条文件记录标识中的至少部分项。
28.本申请的一些实施例通过定义文件目录表以及文件表的各字段来实现文件相关信息的结构化存储。第二方面,本申请的一些实施例提供一种源代码存储处理装置,所述代码存储装置包括:获取模块,被配置为获取待存储对象的项目信息、元素信息以及元素关系信息,所述元素包括变量、函数以及数据类型,所述元素信息包括类定义信息、宏定义信息、函数声明信息和头文件信息中的至少一种信息,所述元素关系信息包括元素引用关系和源代码组织关系,所述待存储对象包括源代码文件或者一行或多行编程命令;存储模块,被配置为以所述细粒度信息存储所述细粒度信息。
29.第三方面,本申请的一些实施例提供一种源代码分析提取方法,所述源代码分析提取方法包括:通过解析源代码文件获取代码中的元素和元素关系;基于所述代码中的元素和所述元素关系,分析函数调用关系,提炼项目叶函数;基于所述代码中的元素和所述元素关系,分析函数调用路径,绘制项目的代码调用树;基于所述代码中的元素和所述元素关系,结合所述函数调用路径以及函数体内参数的赋值,分析跟踪参数传递路径。
30.第四方面,本申请的一些实施例提供一种源代码分析提取装置,所述源代码分析提取装置包括:解析模块,被配置为分析待分析的源码包,将由文件形式表述的所述源码包对应的代码组织关系,转换为由代码元素和元素关系表示的源代码组织关系;提炼模块,被配置为基于所述代码中的元素和所述元素关系,分析函数调用关系,提炼项目叶函数;绘制模块,被配置为基于所述代码中的元素和所述元素关系,分析函数调用路径,绘制项目的代码调用树;跟踪模块,被配置为基于所述代码中的元素和所述元素关系,结合所述函数调用路径以及函数体内参数的赋值,分析跟踪参数传递路径。
31.综上所述,本申请一些实施例中的源代码分析提取装置对基于文件形式存储的项目代码进行分析,将所有的由文件表示的代码元素及代码元素关系,以数据库表的形式存储在数据库中。打破了传统的代码存储方式和管理方式。从而实现在整个项目代码的开发中支持多用户并发完成,源代码的管理方式都是基于数据表来实现的。本申请的一些实施例使用数据库强大的并发处理来实现用户的对于同一个文件,同一个函数等代码元素的编写。具体地,本申请的一些实施例记录用户针对一个基本的代码元素的修改,完成项目细粒度的版本管理。完成了代码由文件到代码元素的解析工作,将所有的代码元素都存储为关系数据库表的形式,在海量代码数据表的支撑下,更加方便快捷地支持对于函数的分析利
用,从而能够给用户提供更好代码分析辅助功能,更强更快捷的代码检索功能,更高效更高质量的可复用代码库。
附图说明
32.为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
33.图1为本申请实施例提供的面向软件定义卫星的软件快速开发系统的组成示意图;
34.图2为本申请实施例提供的面向软件定义卫星的可复用代码库构建方法方法的流程图;
35.图3为本申请实施例提供的源代码文件处理存储方法的流程图之一;
36.图4为本申请实施例提供的面向软件定义卫星的可复用代码库构建装置的组成框图;
37.图5为本申请实施例提供的面向软件定义卫星的可复用代码库构建方法的流程图之二;
38.图6为本申请实施例提供的对应于图5方法的装置组成框图。
具体实施方式
39.下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
40.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
41.面向软件定义卫星的代码库构建方法在整个项目代码的开发中支持多用户并发完成,源代码的管理方式都是基于数据表来实现的。本申请的一些实施例使用数据库强大的并发处理来实现用户的对于同一个文件,同一个函数等代码元素的编写。本申请的一些实施例记录用户针对一个基本的代码元素的修改,完成项目细粒度的版本管理,完成了代码由文件到代码元素的解析工作,将所有的代码元素都存储为关系数据库表的形式,基于这种数据库表,更加方便快捷地支持我们对于函数的分析利用,从而能够给用户提供更好代码分析辅助功能,更强更快捷的代码检索功能,更高效更高质量的可复用代码库。
42.也就是说,本申请的一些实施例提供了一种更为先进的源码组织和存放装置(即根据本申请一些实施例提供的面向软件定义卫星的代码库构建方法得到的装置),在此存结构的基础上至少能够支持大规模并行编译并支持异地协同和交互式编程的集成开发云。
43.请参看图1,图1为面向软件定义卫星的软件快速开发系统包括十层结构,下面逐一介绍各层的功能以及相邻层之间的信息处理过程。需要说明的是,图1的第八层为采用本申请一些实施例提供的面向软件定义卫星的可复用代码库构建方法得到的装置。
44.第一层包括用于接收开发者输入的命令信息的交互端101。需要说明的是,用户可以借助于声音、文字等各种方式向交互端101发出命令消息。作为一个示例,交互端101采用
移动终端,具体地,开发者可以通过在移动终端上的微信客户端通过文字向编译器发出命令消息。
45.作为一个示例,每一个微信用户都是集成开发云(即本申请实施例的交互式编程系统)的合法用户,也就是一个潜在的开发者。当一个微信用户关注了集成开发云对应的微信公众账号之后,系统将为其创建一个私有库,并以其微信号进行命名。系统将记录开发者向集成开发云发送的每一条命令,和集成开发云给出的每一条应答。例如,开发者可以使用的命令消息的类型包括:cd和dc用于切换工作场景;new、del、list用于创建、删除和检索对象,其中,所述对象包括:数据类型、变量、函数、类、宏定义等;set用于设置或修改对象的属性值;help用于获取系统帮助;debug、test、analyze、build、distribute用于调试、测试、分析、构建和发布源代码。
46.本申请一些实施例的面向软件定义卫星的软件快速开发系统的工作场景分为三级,第一级工作场景用于创建和管理项目,第二级工作场景用于管理项目中的函数、数据类型和变量,第三级工作场景用于操作函数、数据类型和变量的属性。在不同的场景下可以执行不同的命令(如上段列举的命令)操控不同的对象。
47.开发者每向交互式编程系统发送一个命令,编译器701将检查这个命令的合法性,执行这个命令,并将这个命令的执行结果(即应答消息)反馈给用户。软件开发工作实际上就是通过一长串的命令和编译器701进行实时交互,最终完成应用程序的开发工作。本申请实施例的交互式编程系统支持大规模的异地协同和并行开发。
48.需要说明的是,在基于本申请实施例提供的面向软件定义卫星的软件快速开发系统开发的一个项目中,开发者分为三种角色:管理员、高级程序员、初级程序员。管理员拥有创建、删除、查询和修改项目中所有对象(即数据类型、变量、函数、类、宏定义、头文件等)的权利,可以授权或邀约某个开发者成为本项目的高级程序员和初级程序员,管理员也可以将其管理员身份让渡给项目开发团队中的某个高级程序员。高级程序员有创建、删除、查询和修改自己创建的对象以及初级程序员创建的对象的权利。初级程序员只能创建、删除、查询和修改自己创建的对象。
49.第二层包括认证及消息转发装置201,该认证及消息转发装置201用于提供注册、身份认证、支付、信道加密、消息转发、广播等功能。
50.第三层包括消息解析装置301,一方面消息解析装置301用于汇聚开发者通过交互端101以及认证及消息转发装置201提交上来的用户输入的命令消息并解析,将解析后的命令消息写入第四层解析消息及应答消息记录装置401。需要说明的是,消息解析装置301还被配置为从解析消息及应答消息记录装置401读取编译器701给出的应答消息,将其经认证及消息转发装置201分发给交互端101。
51.第四层包括解析消息及应答消息记录装置401,解析消息及应答消息记录装置401可以是关系型数据库、实时数据库、nosql数据库等。其中,第四层的解析消息及应答消息记录装置401即可以供消息解析装置301写入解析后的命令消息,也可以从第五层的命令归一化及任务调度装置501读取编译器701的应答消息。
52.第五层包括命令归一化和任务调度装置501,该命令归一化和任务调度装置501用于对从解析消息及应答消息记录装置401读取的命令消息进行归一化和任务调度。
53.第六层包括命令记录装置601。也就是说,作为一个示例命令记录装置601包括:项
目管理命令记录装置、函数管理命令记录装置、变量管理命令记录装置、数据类型管理命令记录装置以及链接命令记录装置,这些数据记录装置(可以是关系型数据库、实时数据库、nosql数据库等)。一方面命令记录装置601供命令归一化及任务调度装置501写入命令消息,读取应答消息。另一方面命令记录装置601分别图1的编译器701读取命令消息和写入应答消息。
54.第七层包含编译器701。也就是说,作为一个示例图1的编译器701包括:项目管理单元、函数管理单元、变量管理单元、数据类型管理单元、编译单元以及链接单元,这些单元能够提供源代码生成、构建、分析、仿真和模拟执行等服务。图1的第七层的多种编译单元分别与第六层的相应种类的命令记录装置对应,且与第8层源码数据记录装置801链接。
55.例如,第七层的编译单元根据中间代码和元素信息(数据类型、变量、函数、类、宏定义、头文件等)生成目标代码,链接单元根据目标代码生成可执行文件,将目标代码以及可执行文件存储至源码数据记录装置801。需要说明的是,目标程序是一个可执行文件,目标程序可以通过操作系统直接访问。
56.第八层包括源码数据记录装置801(对应于本申请实施例的面向软件定义卫星的代码库装置),这是一种数据记录装置(可以是关系型数据库、实时数据库、nosql数据库等),用于存放项目库或私有库的源代码,为第七层的编译单元提供创建、删除、查询以及修改服务。
57.第九层包含图1的代码检索装置901,这是一种代码检索装置,负责源源码数据记录装置801中存放的源代码进行分析,根据需要从可复用代码记录装置1001检索代码和相关数据后将其写入对应的源码数据记录装置801。
58.第十层包括可复用代码记录装置1001,这是一种数据记录装置(可以是关系型数据库、实时数据库、nosql数据库等),其中存放有可复用的代码资源和数据资源,通过第九层的代码检索装置901根据需要进行检索和取用。
59.需要说明的是,本申请实施例的一个项目的源代码等于若干数据类型定义、若干变量定义、若干函数定义的集合、若干宏定义的集合、若干类定义的集合和若干头文件定义集合,其中,数据类型、变量、函数、宏定义、类、头文件是分别具有不同属性的对象。当源码数据记录装置801采用结构数据库时,一个项目中的源代码在数据库中表现为一组数据表格。例如,数据类型的存放方式包括:数据类型表(例如,该表可以进一步包括数据类型编号、名称、定义、类别、组别、创建时间、创建人、最后一次修改时间、修改人、备注)、数据类型成员表(例如,该表可以进一步包括数据类型编号,成员类型、成员名称、成员默认值、成员序号、成员备注)、数据类型白名单表(例如,该表可以包括:数据类型编号、函数编号、可用标志);变量的存放方式包括变量表(例如,该表可以包括:变量编号、变量类型、变量名称、变量初值、变量类别、变量组别、是否常量、变量备注、创建时间、创建人、修改时间、修改人)以及变量白名单表(例如,该表可以包括:变量编号、函数编号、是否允许读、是否允许写);函数的存放方式包括:函数表(例如,该表可以包括:函数编号、返回值类型、函数名称、函数类别、函数组别、函数备注、创建时间、创建人、修改时间、修改人)、函数参数表(例如,该表可以包括函数编号、参数序号、参数类型、参数名称、参数默认值、参数备注)、函数语句表(例如,该表可以包括函数编号、语句序号、语句标号、语句内容、语句备注、语句类型)或者函数白名单表(例如,该表可以包括:函数编号、函数编号、是否允许调用标志),其中,函数
白名单表用于表征该函数的可见域及是否可以被调用。需要说明的是,各种数据库表格中的创建时间和更新时间都是指表的那条记录的创建时间和更新时间。
60.下面结合相关附图示例性阐述如何实现代码的细粒度存储(即如何实现一个项目的源代码等于若干数据类型定义、若干变量定义和若干函数定义的表格化存储)。
61.如图2所示,本申请的一些实施例提供由面向软件定义卫星的代码库构建装置执行的一种面向软件定义卫星的代码库构建方法,所述面向软件定义卫星的代码库构建方法包括:s101,获取待存储对象的项目信息、元素信息以及元素关系信息,其中,所述元素信息包括变量信息、函数信息、数据类型信息、类定义信息、宏定义信息、函数声明信息和头文件信息中的至少一种信息,所述元素关系信息包括元素引用关系和源代码组织关系,所述待存储对象包括源代码文件或者一行或多行编程命令;s102,以获取的细粒度信息存储所述待存储对象,其中,所述细粒度信息包括所述项目信息、所述元素信息以及所述元素关系信息。例如,通过关系型数据库、实时数据库和nosql数据库中的一种存储所述细粒度信息。
62.需要说明的是,变量信息、函数信息、类信息、宏定义信息、函数声明信息、数据类型信息以及数据类型信息的具体含义可以参考下文中变量表、函数表、宏定义表等相关表格中存储的信息来确定。例如,下文的变量表包括:变量编号,变量类型,变量名称,变量初值,变量类别,变量组别,是否常量,变量备注等,因此对应的变量信息包括这些信息。
63.在本申请的一些实施例中,通过关系型数据库、实时数据库和nosql数据库中的一种存储所述细粒度信息。例如,通过关系型数据库中的多类数据表格存储所述细粒度信息。
64.为了实现代码的元素级别存储,在本申请的一些实施例中,所述关系型数据库包括多种数据表格以存储所述细粒度信息,所述数据表格包括:用于存储所述变量信息的变量表、用于存储所述函数信息的函数表、函数参数表以及函数语句表、用于存储所述数据类型信息的数据类型表、用于存储所述宏定义信息的宏定义表、用于存储所述类定义信息的类表、用于存储所述函数声明信息的函数声明表或者用于存储所述头文件信息的头文件表;s101包括:对所述待存储对象进行语义语法分析,获取所述元素信息,对所述待存储对象进行项目工程分析,获取所述项目信息;s102包括:将所述元素信息存储至所述变量表、所述函数表、所述函数参数表、所述函数语句表、所述数据类型表、所述宏定义表、所述类表、所述函数声明表以及所述头文件表;将所述项目信息存储至所述项目表。
65.为了实现依赖关系的结构化存储,在本申请的一些实施例中,所述数据表格还包括依赖关系表,文件表以及文件目录表;s101包括:将所述待存储对象的文件组织的代码结构解析拆分为代码元素单元,基于所述代码元素单元在数据库中的关系来表述所述元素在文件结构中的引用关系,s102包括将所述元素引用关系存至所述依赖关系表;其中,所述依赖关系表包括引用元素类型、引用元素编号、引用元素所述项目编号、被引用元素类型、被引用元素所属项目编号、引用元素创建时间、引用元素更改时间和引用有效性标识中的至少部分项。
66.在本申请的一些实施例中,所述数据表格还包括函数声明表和头文件表,所述变量表包括:变量编号,变量类型,变量名称,变量定义、变量初值,变量类别,变量组别,是否常量,变量描述,变量所属项目编号,变量所属文件编号,变量所属类编号,变量有效性,锁定本条变量记录标识,变量在文件中的开始行,变量在文件中的结束行,变量总行数,变量是否对外可用,变量创建时间、变量创建人、变量修改时间和变量修改人中的至少部分项;
所述数据类型表包括:数据类型编号,数据类型名,数据类型md5唯一值,数据类型定义,成员类型、数据类型描述、数据类型创建时间、数据类型修改时间、数据类型所属项目编号、数据类型所属文件编号、数据类型所属类编号,数据类型有效标识、锁定本条数据类型记录标识,数据类型在文件中的开始行,数据类型在文件中的结束行和数据类型总行数中的至少部分项;所述函数表包括:函数编号,函数对应的md5唯一值,函数定义,函数名称,函数类别,函数原型,函数描述,函数是否对外可用,函数创建时间、函数修改时间、函数所属项目编号、函数所属文件编号、函数所属类编号、函数约束类型、函数是否有效、锁定本条函数记录标识、函数位置信息和总行数中的至少部分项,其中,所述函数位置信息是通过所述函数在文件中的开始行和结束行确定的。所述函数声明表包括:函数声明编号,函数编号,函数声明所属头文件编号,函数名称,函数声明定义体,函数声明在文件中的开始行号,函数声明在文件中的结束行号,函数声明所属项目编号,函数声明记录创建时间和函数声明记录修改时间中的至少部分项,其中,所述函数声明起始行和所述函数声明结束行为所述函数声明在其所属文件中的起始行和结束行;所述头文件表包括:头文件编号,头文件在文件表中的编号,头文件内容,头文件记录创建时间和头文件记录修改时间中的至少部分项。
67.在本申请的一些实施例中,所述宏定义表包括:宏编号、宏定义体、宏名称、宏所属项目编号、宏所属文件编号、宏创建时间、宏更新时间、宏有效性、宏起始行号、宏结束行号、宏总行数、宏对应的md5唯一值和锁定本条宏定义记录标识中的至少部分项,其中,所述宏起始行和所述宏结束行为所述宏在其所属文件中的起始行和结束行;所述类表包括:类编号、类名、类对应的md5唯一值、类定义、类所属文件编号、类所属项目编号、类描述、类是否有效、类在文件中的起始位置及结束位置、类创建时间以及类更新时间和锁定本条类记录标识中的至少部分项。
68.在本申请的一些实施例中,所述多种数据表格还包括代码树表以及项目叶函数表;其中,所述代码树表包括:上一级函数标识号、下一级函数标识号、是否为头节点、是否为叶节点、项目标识号、代码树节点创建时间以及代码树节点更新时间中的至少部分项;所述项目叶函数表包括:叶函数编号、叶函数所属文件编号、叶函数所属函数编号、叶函数函数名称、项目叶函数记录创建时间、项目叶函数记录更新时间和项目叶函数有效性标识中的至少部分项。
69.在本申请的一些实施例中,所述待存储对象为源代码文件,所述获取待存储对象的项目信息、元素信息以及元素关系信息,包括:获取项目代码包信息、输入输出接口信息以及所述源代码组织关系信息;所述多种数据表格还包括:用于存储所述项目代码包信息的项目包信息表、用于存储所述输入输出接口信息的应用输入输出表以及用于存储所述源代码组织关系信息的文件目标表和文件表。
70.在本申请的一些实施例中,所述项目包信息表包括:项目包所属项目标识号、项目包依赖动态库名称、项目包依赖静态库名称、项目包动态库存储位置、项目包静态库存储位置、项目包信息表创建时间、项目包信息表更新时间和项目包有效性标识中的至少部分项。
71.在本申请的一些实施例中,所述应用输入输出表包括:接口类型标识号、接口名称、输出位置、资源编号、接口所属函数编号、接口所属文件编号、接口所述项目编号、接口记录创建时间、接口记录更新时间以及接口有效性中的至少部分项。其中,在软件版本更新时需要接口记录创建时间、接口记录更新时间以及接口有效性这些字段。
72.在本申请的一些实施例中,所述文件目录表包括文件目录名称、上一级目录编号、下一级目录编号、文件目录所属项目编号、文件目录有效性、文件目录记录创建时间、文件目录记录更新时间和文件目录md5唯一值中的至少部分项;所述文件表包括:文件名称、文件所属文件目录编号、文件所述项目编号、文件上一级目录编号、文件类型、文件有效性特征、文件对应的md5唯一值、文件路径、文件版本、文件表记录创建时间、更新时间和锁定本条文件记录标识中的至少部分项。
73.下面结合图3以待存储对象为源代码文件为例示例性说明本申请的代码存储处理方法。
74.如图3所示,当需要细粒度化存储的对象为源代码文件时,将这些文件代码存储至第八层时需要执行如下步骤:
75.s201,读取所有源代码。
76.s202,分析整个包组织文件,将分析结果写入项目包信息表中。
77.例如,整个包组织文件包括:profile文件、makefile文件、依赖第三方库的文件等,可以将分析结果写入项目包信息表。
78.作为一个示例,项目包信息表中的元素如下表1所示。
79.表1项目包信息表
[0080][0081][0082]
s203,分析整个项目代码中输出、输入接口,分析结果存到应用输入输出表中。
[0083]
作为一个示例应用输入输出表如表2.
[0084]
表2应用输入输出表
[0085]
[0086][0087]
s204,对整个代码包文件目录组织结构进行分析,分析结果存储到文件目录树相关的数据库表格中。
[0088]
作为本申请的一个示例,文件目录树相关的数据库表格可以包括:文件目录表、文件表。例如,文件目标表中的存储元素如下表3所示。
[0089]
表3文件目标表
[0090]
[0091][0092]
作为本申请的一个示例,文件表中的存储元素如表4所示。
[0093]
表4
[0094]
[0095][0096]
s205,源代码文件分析,对源代码进行语法语义分析,分析拆分提取出文件中基本的代码元素,将文件组织的代码结构解析拆分为基本的代码元素单元,以关系数据库形式组织代码元素之间的关系,将基本代码元素、元素在文件中的组织关系、元素之间的调用依赖关系、引用关系写入到相关的数据库表中。
[0097]
作为一个示例,可以将基本代码元素、元素在文件中的组织关系、元素之间的调用依赖关系、引用关系写入到变量表、数据类型表、宏定义表、函数表、类表、函数声明表、头文件表、依赖关系表、代码树表、项目叶函数表。
[0098]
作为本申请的一个示例,变量表如表5所示。
[0099]
表5变量表
[0100][0101][0102]
作为本申请的一个示例,数据类型表如表6所示。
[0103]
表6数据类型表
[0104]
[0105][0106]
作为本申请的一个示例,宏定义表如表7所示。
[0107]
表7宏定义表
[0108]
[0109][0110]
作为一个示例,函数表如表8所示。
[0111]
表8函数表
[0112]
[0113]
[0114][0115]
作为本申请的一个示例,类表如表9所示。
[0116]
表9类表
[0117]
[0118][0119]
作为本申请的一个示例,依赖关系表如表10所示。
[0120]
表10依赖关系表
[0121]
[0122][0123]
作为本申请的一个示例,项目叶函数表如表11所示。
[0124]
表11项目叶函数表
[0125][0126]
作为本申请的一个示例,代码树表如表12所示。
[0127]
表12代码树表
[0128][0129]
请参考图4,图4示出了本申请实施例提供的代码存储处理装置,应理解,该代码存储处理与上述图2或图3方法实施例对应,能够执行上述方法实施例涉及的各个步骤,该代码存储处理的具体功能可以参见上文中的描述,为避免重复,此处适当省略详细描述。代码存储处理装置包括至少一个能以软件或固件的形式存储于存储器中或固化在代码存储处理装置的操作系统中的软件功能模块,该代码存储处理装置,包括:获取模块410,被配置为获取待存储对象的项目信息、元素信息以及元素关系信息,其中,所述元素信息包括变量信息、函数信息、宏定义信息、数据类型信息、类定义信息、函数声明信息和头文件信息中的至少一种信息,所述元素关系信息包括元素引用关系和源代码组织关系,所述待存储对象包括源代码文件或者一行或多行编程命令;存储模块420,被配置为以所述细粒度信息存储所述细粒度信息。
[0130]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的代码存储处理装置的具体工作过程,可以参考图2或图3方法中的对应过程,在此不再过多赘述。
[0131]
本申请的一些实施例提供一种源代码分析提取方法,所述源代码分析提取方法包括:s501,通过解析源代码文件获取代码中的元素和元素关系;s502,基于所述代码中的元素和所述元素关系,分析函数调用关系,提炼项目叶函数;s503,基于所述代码中的元素和
所述元素关系,分析函数调用路径,绘制项目的代码调用树;s504,基于所述代码中的元素和所述元素关系,结合所述函数调用路径以及函数体内参数的赋值,分析跟踪参数传递路径。
[0132]
如图6所示,本申请的一些实施例提供一种面向软件定义卫星的可复用代码库构建装置,所述面向软件定义卫星的可复用代码库构建装置包括:解析模块,被配置为分析待分析的源码包,将由文件形式表述的所述源码包对应的代码组织关系,转换为由代码元素和代码关系表示的源代码组织关系;提炼模块,被配置为基于所述代码中的元素和所述元素关系,分析函数调用关系,提炼项目叶函数;绘制模块,被配置为基于所述代码中的元素和所述元素关系,分析函数调用路径,绘制项目的代码调用树;跟踪模块,被配置为基于所述代码中的元素和所述元素关系,结合所述函数调用路径以及函数体内参数的赋值,分析跟踪参数传递路径。
[0133]
图6提供的面向软件定义卫星的可复用代码库构建装置的具体实现细节可以参考前文的描述,为避免重复在此不做过多赘述。
[0134]
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0135]
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
[0136]
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0137]
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等均应包含在本申请的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
[0138]
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵
盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。
[0139]
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1