CN109857390B - 一种Git仓库文件注解系统的注解传递方法 - Google Patents
一种Git仓库文件注解系统的注解传递方法 Download PDFInfo
- Publication number
- CN109857390B CN109857390B CN201910039534.8A CN201910039534A CN109857390B CN 109857390 B CN109857390 B CN 109857390B CN 201910039534 A CN201910039534 A CN 201910039534A CN 109857390 B CN109857390 B CN 109857390B
- Authority
- CN
- China
- Prior art keywords
- annotation
- annotations
- statement
- variable
- database
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 32
- 230000005540 biological transmission Effects 0.000 title claims abstract description 7
- 230000006870 function Effects 0.000 claims abstract description 22
- 238000004458 analytical method Methods 0.000 claims abstract description 13
- 230000003068 static effect Effects 0.000 claims abstract description 8
- 238000002716 delivery method Methods 0.000 claims description 7
- 238000010586 diagram Methods 0.000 claims description 6
- 230000008676 import Effects 0.000 claims 1
- 238000012546 transfer Methods 0.000 abstract description 4
- 238000005206 flow analysis Methods 0.000 abstract description 3
- 238000012423 maintenance Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种Git仓库文件注解系统的注解传递方法,首先对需要进行传递的项目进行静态分析,将需要分析的代码全部加载到缓存转换为中间表示;然后连接数据库将该项目的注解全部加载进来;接下来将注解和变量或者函数进行绑定,主要是通过对比注解和代码的位置来确立对应关系;最后通过数据流将已有的注解传递给相关的变量或函数,然后将传递来的注解更新到数据库中,通过Git仓库文件注解系统可以查看到传递后的注解;该方法主要是通过数据流分析将已有的注解传递到相关的地方,提高代码中注解的覆盖率,减少开发人员的重复工作。
Description
技术领域
本发明属于互联网和软件工程领域,具体涉及一种Git仓库文件注解系统的注解传递方法。
背景技术
在软件开发和维护过程中,工作人员往往花费大约一半的时间来理解代码。大多数开发人员都认为阅读他人的代码并不容易。代码注释是软件开发和维护的重要组成部分,为了能够让读者(代码完成后若干长时间后的开发者本人、新接手代码的同行、协同工作的伙伴、调用代码的人)清晰地理解代码的意图,在代码中会人工加入一些不执行的说明语句。通常注释比源代码更直接、更具描述性和可理解性。优质的代码注释不仅能覆盖软件系统中的核心业务逻辑,还能避免产生代码冗余、破坏代码的整体结构,从而有效保障软件的可理解能力和可维护性。
但在软件的开发、维护过程中,注释并没有得到太多的关注。具体表现在:开源项目中通常注释比较匮乏;注释没有随着代码的演化而不断更新;注释与代码可能存在不一致;不规范注释和冗余注释;等等。这些现状导致了源代码可读性和程序可维护性的下降.究其原因,一方面是由于对注释的重视程度不够,另一方面也是由于在代码和注释之间频繁切换,开发者的确需要花费更多的时间和精力。
虽然代码中已经有了功能注释和逻辑注释,但是在团队协作开发过程中,负责人在审核提交代码的时候,可能需要在不改变源代码的情况下对部分代码添加一些注解,同时,开发者也可以对代码添加一些注解,这些注解可以包括大量文字的知识点解析、伪算法讲解和图片,还可以跨越多个文件的多处代码进行整合注解等。目前,比较流行的GitHub或者GitLab代码托管平台本身没有提供注解传递的功能,无法满足我们的需求。
发明内容
本发明的目的是针对现有技术存在的问题,提供一种Git仓库文件注解系统的注解传递方法,通过数据流分析将已有的注解传递到相关的地方,提高代码中注解的覆盖率,减少开发人员的重复工作。
为实现上述目的,本发明采用的技术方案是:
一种Git仓库文件注解系统的注解传递方法,包括以下步骤:
S1,将项目代码转化为中间表示;
由于无法对项目的源码直接进行分析或运行,故需要先构建语法树,解析代码并构建所有源码之间的关系;因此,先通过静态分析框架将项目代码转化为框架形式的中间表示,再构建完整的函数调用关系图,最终将每个变量和函数都转化为框架形式的中间表示,并按照程序的逻辑进行组织;
S2,加载所述项目代码的所有注解,在数据库中将所述项目代码的所有注解加载到程序的内部缓存中;
S3,将所述注解与中间表示进行绑定,通过对比所述注解的位置信息和中间表示的位置信息,将位置信息相同的变量和注解进行绑定;
S4,通过数据流传递注解,通过数据流将已进行绑定的注解传递给其他的变量或函数;
S5,更新传递后的注解到数据库,将注解传递到其它的变量或函数进行绑定后,遍历项目的所有代码,将传递的注解加入一个Set集合中,再将Set集合中的所有注解插入到数据库中。
具体地,步骤S1中,在构建完整的函数调用关系图之后,还需要设定一个虚拟的函数入口,用于动态地调用所有的分析方法;所述分析方法包括将中间表示与注解进行绑定的方法和通过数据流传递注解的方法。
所述中间表示是分析项目时,用于表示项目中代码的一种数据结构,这种中间表示是静态分析框架所提供的,方便获取到代码中的各种信息,比如函数之间的调用关系或者是变量的类型等。
具体地,步骤S2中,加载所述项目代码的所有注解,具体方法为:以源码文件的名称为查询条件,使用SQL语句在数据库中查询出所有符合条件的注解,再将所有符合条件的注解缓存到本地的一个Map集合中,其中主键为位置信息,其值为注解所对应的实体类;由于在数据库中,所述注解的位置信息是以序列化后的对象存储的,故在缓存所述注解的过程中,需要对所述注解的位置信息采用反序列化操作才能正确地将所述注解信息转化为缓存对象。
具体地,步骤S3中,将所述注解与中间表示进行绑定,具体方法为:首先,取变量的位置信息作为Key;然后,在程序的内部缓存中查询是否存在于该Key的位置信息对应的注解,若存在注解,则将该注解与所述变量进行绑定;若不存在注解,则说明所述变量不存在注解;最后,遍历项目的所有代码,将所有的注解和对应的变量进行绑定;绑定关系是通过静态分析框架来实现的,可以将注解作为中间表示的一个属性添加进去。
具体地,步骤S4中,通过数据流传递注解,具体方法为:在传递注解的过程中,通过数据流对程序语句进行着条分析,若当前语句中存在之前绑定了注解的变量,则将之前变量的注解与当前语句中对应的变量进行绑定;若当前语句的变量已经绑定了注解,则将该变量及其注解更新到当前语句的输出集合中,并将当前语句的输出集合作为下一条语句的输入集合对下一条语句进行分析。
进一步地,在分析程序语句时,每条所述语句均具备输入集合和输出集合,当前语句的输入集合即为上一条语句的输出集合,当前语句的输出集合即为下一条语句的输入集合;所述输入集合内包含有当前语句及当前语句之后所有语句存在的变量;在将当前语句的变量及其注解更新到当前语句的输出集合的过程中,需要用当前语句的变量将当前语句输入集合中与该变量的注解重复的变量替换掉。
具体地,步骤S5中,在将传递后的注解更新到数据库时,首先要传入原始注解到数据库对注解的版本号进行定位;再将所述Set集合中所有传递过来的注解都依照所述版本号插入数据库。
与现有技术相比,本发明的有益效果是:本发明的注解传递方法只需要对项目中的少量代码进行注解,然后通过数据流分析即可将注解传递到项目的其他程序语句中,从而提高代码注解的覆盖率,同时减少开发人员的工作量,从而节约软件开发和维护的成本。
附图说明
图1为本发明一种Git仓库文件注解系统的注解传递方法的流程结构示意图;
图2为实施例将注解与中间表示进行绑定的流程结构示意图;
图3为本实施例中数据流传递方法的流程结构示意图。
具体实施方式
下面将结合本发明中的附图,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动条件下所获得的所有其它实施例,都属于本发明保护的范围。
如图1所示,本实施例提供了一种Git仓库文件注解系统的注解传递方法,包括以下步骤:
S1,将项目代码转化为中间表示;
由于无法对项目的源码直接进行分析或运行,故需要先构建语法树,解析代码并构建所有源码之间的关系;因此,先通过静态分析框架将项目代码转化为框架形式的中间表示,再构建完整的函数调用关系图,最终将每个变量和函数都转化为框架形式的中间表示,并按照程序的逻辑进行组织;
S2,加载所述项目代码的所有注解,在数据库中将所述项目代码的所有注解加载到程序的内部缓存中;
S3,将所述注解与中间表示进行绑定,通过对比所述注解的位置信息和中间表示的位置信息,将位置信息相同的变量和注解进行绑定;
S4,通过数据流传递注解,通过数据流将已进行绑定的注解传递给其他的变量或函数;
S5,更新传递后的注解到数据库,将注解传递到其它的变量或函数进行绑定后,遍历项目的所有代码,将传递的注解加入一个Set集合中,再将Set集合中的所有注解插入到数据库中。
具体地,步骤S1中,在构建完整的函数调用关系图之后,还需要设定一个虚拟的函数入口,用于动态地调用所有的分析方法。
具体地,步骤S2中,加载所述项目代码的所有注解,具体方法为:以源码文件的名称为查询条件,使用SQL语句在数据库中查询出所有符合条件的注解,再将所有符合条件的注解缓存到本地的一个Map集合中,其中主键为位置信息,其值为注解所对应的实体类;由于在数据库中,所述注解的位置信息是以序列化后的对象存储的,故在缓存所述注解的过程中,需要对所述注解的位置信息采用反序列化操作才能正确地将所述注解信息转化为缓存对象;在加载数据库中所有的相关注解之前,已经通过步骤S1将项目以中间表示的形式加载进了内存中,因此可以获取所有需要分析的项目的路径名,根据路径名可以连接数据库后将符合要求的数据全部查询出来,并放入缓存之中。加载所述项目代码的所有注解主要包括四个步骤:获取数据库连接、按照分析项目路径查询相关注解、获取缓存表以及将注解插入缓存表。
具体地,如图2所示,步骤S3中,将所述注解与中间表示进行绑定,以变量为例,具体方法为:首先,取变量的位置信息作为Key;然后,在程序的内部缓存中查询是否存在于该Key的位置信息对应的注解,若存在注解,则将该注解与所述变量进行绑定;若不存在注解,则说明所述变量不存在注解;最后,遍历项目的所有代码,将所有的注解和对应的变量进行绑定;绑定关系是通过静态分析框架来实现的,可以将注解作为中间表示的一个属性添加进去。
具体地,通过步骤S3的绑定之后,就要使用静态程序框架来进行数据流分析了,主要分为三个部分,获取输入集合,对当前语句进行传递,以及生成输出集合,其中输入集合是由上一个语句传递来的。所以主要需要处理的就是当前语句注解的传递以及输出集合的生成。
具体地,如图3所示,所述数据流传递方法的步骤如下:
在传递注解的过程中,通过数据流对程序语句进行着条分析,若当前语句中存在之前绑定了注解的变量,则将之前变量的注解与当前语句中对应的变量进行绑定;若当前语句的变量已经绑定了注解,则将该变量及其注解更新到当前语句的输出集合中,并将当前语句的输出集合作为下一条语句的输入集合对下一条语句进行分析。
进一步地,在分析程序语句时,每条所述语句均具备输入集合和输出集合,当前语句的输入集合即为上一条语句的输出集合,当前语句的输出集合即为下一条语句的输入集合;所述输入集合内包含有当前语句及当前语句之后所有语句存在的变量;在将当前语句的变量及其注解更新到当前语句的输出集合的过程中,需要用当前语句的变量将当前语句输入集合中与该变量的注解重复的变量替换掉。
具体地,步骤S5中,在将传递后的注解更新到数据库时,首先要传入原始注解到数据库对注解的版本号进行定位;再将所述Set集合中所有传递过来的注解都依照所述版本号插入数据库。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
Claims (5)
1.一种Git仓库文件注解系统的注解传递方法,其特征在于,包括以下步骤:
S1,将项目代码转化为中间表示,通过静态分析框架将项目代码转化为框架形式的中间表示,再构建完整的函数调用关系图,最终将每个变量和函数都转化为框架形式的中间表示,并按照程序的逻辑对中间表示进行组织;
S2,加载所述项目代码的所有注解,在数据库中将所述项目代码的所有注解加载到程序的内部缓存中;
S3,将所述注解与中间表示进行绑定,通过对比所述注解的位置信息和中间表示的位置信息,将位置信息相同的变量和注解进行绑定;
S4,通过数据流传递注解,通过数据流将已进行绑定的注解传递给其他的变量或函数;
S5,更新传递后的注解到数据库,将注解传递到其它的变量或函数进行绑定后,遍历项目的所有代码,将传递的注解加入一个Set集合中,再将Set集合中的所有注解插入到数据库中;
步骤S3中,将所述注解与中间表示进行绑定的方法为:首先,取变量的位置信息作为Key;然后,在程序的内部缓存中查询是否存在于该Key的位置信息对应的注解,若存在注解,则将该注解与所述变量进行绑定;若不存在注解,则说明所述变量不存在注解;最后,遍历项目的所有代码,将所有的注解和对应的变量进行绑定;
步骤S4中,通过数据流传递注解的方法为:在传递注解的过程中,通过数据流对程序语句进行逐 条分析,若当前语句中存在之前绑定了注解的变量,则将之前变量的注解与当前语句中对应的变量进行绑定;若当前语句的变量已经绑定了注解,则将该变量及其注解更新到当前语句的输出集合中,并将当前语句的输出集合作为下一条语句的输入集合对下一条语句进行分析。
2.根据权利要求1所述的一种Git仓库文件注解系统的注解传递方法,其特征在于,步骤S1中,在构建完整的函数调用关系图之后,还需要设定一个虚拟的函数入口,用于动态地调用所有的分析方法。
3.根据权利要求1所述的一种Git仓库文件注解系统的注解传递方法,其特征在于,步骤S2中,加载所述项目代码的所有注解,具体方法为:以源码文件的名称为查询条件,使用SQL语句在数据库中查询出所有符合条件的注解,再将所有符合条件的注解缓存到本地的一个Map集合中;在缓存所述注解的过程中,需要对所述注解的位置信息采用反序列化操作。
4.根据权利要求1所述的一种Git仓库文件注解系统的注解传递方法,其特征在于,在分析程序语句时,每条所述语句均具备输入集合和输出集合,当前语句的输入集合即为上一条语句的输出集合,当前语句的输出集合即为下一条语句的输入集合;所述输入集合内包含有当前语句及当前语句之后所有语句存在的变量;在将当前语句的变量及其注解更新到当前语句的输出集合的过程中,需要用当前语句的变量将当前语句输入集合中与该变量的注解重复的变量替换掉。
5.根据权利要求1所述的一种Git仓库文件注解系统的注解传递方法,其特征在于,步骤S5中,在将传递后的注解更新到数据库时,首先要传入原始注解到数据库对注解的版本号进行定位;再将所述Set集合中所有传递过来的注解都依照所述版本号插入数据库。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910039534.8A CN109857390B (zh) | 2019-01-16 | 2019-01-16 | 一种Git仓库文件注解系统的注解传递方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910039534.8A CN109857390B (zh) | 2019-01-16 | 2019-01-16 | 一种Git仓库文件注解系统的注解传递方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109857390A CN109857390A (zh) | 2019-06-07 |
CN109857390B true CN109857390B (zh) | 2022-05-31 |
Family
ID=66894901
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910039534.8A Active CN109857390B (zh) | 2019-01-16 | 2019-01-16 | 一种Git仓库文件注解系统的注解传递方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109857390B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110471694A (zh) * | 2019-07-11 | 2019-11-19 | 平安普惠企业管理有限公司 | 注释信息处理方法、装置、计算机设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108170756A (zh) * | 2017-12-22 | 2018-06-15 | 南京邮电大学 | 基于Git仓库的多维度、多视角和可视化注解系统的实现方法 |
CN108228231A (zh) * | 2018-01-08 | 2018-06-29 | 南京邮电大学 | 一种Git仓库文件注解系统的可视化漂移算法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8181165B2 (en) * | 2007-10-30 | 2012-05-15 | International Business Machines Corporation | Using annotations to reuse variable declarations to generate different service functions |
-
2019
- 2019-01-16 CN CN201910039534.8A patent/CN109857390B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108170756A (zh) * | 2017-12-22 | 2018-06-15 | 南京邮电大学 | 基于Git仓库的多维度、多视角和可视化注解系统的实现方法 |
CN108228231A (zh) * | 2018-01-08 | 2018-06-29 | 南京邮电大学 | 一种Git仓库文件注解系统的可视化漂移算法 |
Non-Patent Citations (1)
Title |
---|
"基于Soot控制流图的函数调用路径分析";朱绪利等;《数据通信》;20120831(第04期);第26-29页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109857390A (zh) | 2019-06-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109614413B (zh) | 一种内存流式计算平台系统 | |
US8370400B2 (en) | Solution-specific business object view | |
KR102229010B1 (ko) | 데이터를 모델링하기 위한 시스템 및 방법 | |
CN111966692A (zh) | 针对数据仓库的数据处理方法、介质、装置和计算设备 | |
EP2797013A1 (en) | Database update execution according to power management schemes | |
WO2014186057A1 (en) | Supporting combination of flow based etl and entity relationship based etl | |
CN110019314B (zh) | 基于数据项分析的动态数据封装方法、客户端和服务端 | |
CN117093599A (zh) | 面向异构数据源的统一sql查询方法 | |
CN116628066B (zh) | 数据传输方法、装置、计算机设备和存储介质 | |
CN105975489A (zh) | 一种基于元数据的在线sql代码补全方法 | |
CN108228762B (zh) | 用于配置主数据库通用模板的方法和系统 | |
CN117216042A (zh) | 一种数据标准化平台的构建方法及装置 | |
CN109857390B (zh) | 一种Git仓库文件注解系统的注解传递方法 | |
CN103699746B (zh) | 基于数据库的cadds5管系三维设计方法及系统 | |
Bakken | maplib: Interactive, literal RDF model mapping for industry | |
WO2025035933A1 (zh) | 数据库实例处理方法、装置、电子设备、计算机可读存储介质及计算机程序产品 | |
CN118427218A (zh) | 状态信息配置方法及装置、电子设备、存储介质和计算机程序产品 | |
Sharma et al. | FLASc: a formal algebra for labeled property graph schema | |
CN116931912A (zh) | 一种基于Velocity模板引擎的代码生成方法、系统及介质 | |
TWI414995B (zh) | 開發及執行平台 | |
CN118410032B (zh) | 一种分布式数据库生成方法、装置、终端及存储介质 | |
CN103744989B (zh) | 一种层次节点数据的查询方法 | |
CN105741087A (zh) | 业务流程导入的方法及系统 | |
CN113703769B (zh) | 一种cli命令执行方法及相关装置 | |
Schmid | Towards Storing 3D Model Graphs in Relational Databases |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |