一种代码方法级缺陷预警方法[发明专利]
(12)发明专利申请
(10)申请公布号 CN 111562937 A(43)申请公布日 2020.08.21
(21)申请号 202010305228.7(22)申请日 2020.04.17
(71)申请人 北京简单一点科技有限公司
地址 100000 北京市海淀区关村大街18号
12层1225-108(72)发明人 刘庆 (51)Int.Cl.
G06F 8/71(2018.01)G06F 11/36(2006.01)
权利要求书1页 说明书3页 附图1页
CN 111562937 A(54)发明名称
一种代码方法级缺陷预警方法(57)摘要
本发明提供了一种代码方法级缺陷预警方法,包括用户代码提交客户端、缺陷管理系统和代码托管平台,在用户代码提交客户端与代码托管平台之间设置提交信息提取模块和缺陷分析模块;具有以下步骤:(1)用户进行软件代码开发时,从缺陷管理系统中查询出本次代码开发相关的缺陷修复任务,记为bug A;(2)用户代码编写完成,通过代码提交客户端向代码托管平台进行代码提交,并将此次代码提交关联的bug A的信息填入提交日志信息中;(3)通过在代码提交客户端和代码托管平台之间增加的提交信息提取模块对代码提交进行拦截,并对代码提交数据报文进行解析;本发明能够基于对研发历史数据进行分析,进行方法级的精确业务逻辑缺陷预警。
CN 111562937 A
权 利 要 求 书
1/1页
1.一种代码方法级缺陷预警方法,其特征在于,包括用户代码提交客户端、缺陷管理系统和代码托管平台,在用户代码提交客户端与代码托管平台之间设置提交信息提取模块和缺陷分析模块;具有以下步骤:
(1)用户进行软件代码开发时,从缺陷管理系统中查询出本次代码开发相关的缺陷修复任务,记为bug A;
(2)用户代码编写完成,通过代码提交客户端向代码托管平台进行代码提交,并将此次代码提交关联的bug A的信息填入提交日志信息中;
(3)通过在代码提交客户端和代码托管平台之间增加的提交信息提取模块对代码提交进行拦截,并对代码提交数据报文进行解析,解析出提交日志信息中的bug A信息;
(4)提交信息提取模块将用户代码合入代码托管平台,并获取此次代码提交的变更,其中,代码变更分为新增、删除和修改三类;
(5)提交信息提取模块将此次代码变更中设计的新增、修改部分的代码路径及方法名进行联合签名,对每个变更的方法形成唯一可识别的标识;
假设此次代码提交新增及修改部分的代码涉及N个方法,每个方法及其完整文件路径经过签名后记为method 1、method 2....method N。
(6)提交信息提取模块将N个方法中的每一个与bug A的关联权重值记为1/N,并且将每个方法、bug A、关联权重值记录为<方法签名、bug A、关联权重>的三元数据,例如 (7)提交信息提取模块将步骤(6)中生成的三元数据发送至缺陷分析模块;(8)缺陷分析模块根据该方法签名method 2,查询数据库中的历史数据中是否存在和method 2关联的缺陷; 如果存在,则取出权重最高的若干个缺陷,并返回提交信息提取模块,并回传告知用户,作为缺陷预警信息;如果不存在,则无缺陷预警; (9)缺陷分析模块根据该方法签名method 2,查询数据库中是否存在method 2与bug A的关联信息;如果不存在,则将步骤(7)中的三元数据存储到缺陷分析模块的数据库中;如果存在,且关联权重为r,则将数据库中method 2与bug A的关联权重更新为(1/N)+r; (10)在缺陷分析模块建立起代码方法与缺陷的关联关系及权重数据后,缺陷分析模块提供数据接口,向除了步骤(8)之外的其他需要进行缺陷预警的场合提供缺陷预警数据;接口输入参数为方法签名,输出则为与指定方法关联权重最高的若干个缺陷信息。 2 CN 111562937 A 说 明 书 一种代码方法级缺陷预警方法 1/3页 技术领域 [0001]本发明涉及代码缺陷预警,具体是一种代码方法级缺陷预警方法。 背景技术 [0002]随着现代软件规模越来越大,逻辑也越来越复杂,代码间的相互关系千丝万缕,靠人脑完全理清业务逻辑,变得异常困难。对同一个代码方法的修改,稍有不慎,就可能会导致历史缺陷重复出现。如果通过对研发历史数据进行分析,建立起代码方法和历史缺陷数据的关联关系及关联权重,后续在修改同一个代码方法时,对关联权重最高的若干个历史缺陷进行预警,就能有效的协助工程师规避缺陷。[0003]目前对于代码缺陷的预警,都是通过源代码扫描工具实现。这种源代码扫描工具,一般都是基于对代码源文件或者编译后的产出进行语法分析,国际上也有不少成熟的商用产品。但是通常只能检测出语法或者代码规范这种类型的代码本身问题,无法发现和业务相关的缺陷。其次是这种检测方法需要分析代码的语法树,算法复杂。发明内容 [0004]本发明的目的在于提供一种代码方法级缺陷预警方法,以解决上述背景技术中提出的问题。 [0005]为实现上述目的,本发明提供如下技术方案:[0006]一种代码方法级缺陷预警方法,包括用户代码提交客户端、缺陷管理系统和代码托管平台,在用户代码提交客户端与代码托管平台之间设置提交信息提取模块和缺陷分析模块;具有以下步骤:[0007](1)用户进行软件代码开发时,从缺陷管理系统中查询出本次代码开发相关的缺陷修复任务,记为bug A;[0008](2)用户代码编写完成,通过代码提交客户端向代码托管平台进行代码提交,并将此次代码提交关联的bug A的信息填入提交日志信息中;[0009](3)通过在代码提交客户端和代码托管平台之间增加的提交信息提取模块对代码提交进行拦截,并对代码提交数据报文进行解析,解析出提交日志信息中的bug A信息;[0010](4)提交信息提取模块将用户代码合入代码托管平台,并获取此次代码提交的变更,其中,代码变更分为新增、删除和修改三类;[0011](5)提交信息提取模块将此次代码变更中设计的新增、修改部分的代码路径及方法名进行联合签名,对每个变更的方法形成唯一可识别的标识;[0012]假设此次代码提交新增及修改部分的代码涉及N个方法,每个方法及其完整文件路径经过签名后记为method 1、method 2....method N。[0013](6)提交信息提取模块将N个方法中的每一个与bug A的关联权重值记为1/N,并且将每个方法、bug A、关联权重值记录为<方法签名、bug A、关联权重>的三元数据,例如 3 CN 111562937 A[0014] 说 明 书 2/3页 (7)提交信息提取模块将步骤(6)中生成的三元数据发送至缺陷分析模块; [0015](8)缺陷分析模块根据该方法签名method 2,查询数据库中的历史数据中是否存在和 method 2关联的缺陷;[0016]如果存在,则取出权重最高的若干个缺陷,并返回提交信息提取模块,并回传告知用户,作为缺陷预警信息;如果不存在,则无缺陷预警;[0017](9)缺陷分析模块根据该方法签名method 2,查询数据库中是否存在method 2与bug A 的关联信息;如果不存在,则将步骤(7)中的三元数据存储到缺陷分析模块的数据库中;如果存在,且关联权重为r,则将数据库中method 2与bug A的关联权重更新为(1/N)+r;[0018](10)在缺陷分析模块建立起代码方法与缺陷的关联关系及权重数据后,缺陷分析模块提供数据接口,向除了步骤(8)之外的其他需要进行缺陷预警的场合提供缺陷预警数据;接口输入参数为方法签名,输出则为与指定方法关联权重最高的若干个缺陷信息。[0019]与现有技术相比,本发明的有益效果是: [0020]本发明能够基于对研发历史数据进行分析,进行方法级的精确业务逻辑缺陷预警。在用户代码提交客户端及代码托管平台之间增加提交信息提取模块,基于代码提交日志信息的分析,建立代码方法与缺陷的关联信息与关联权重,并存储到缺陷分析模块中。在产生代码变更的场景中,缺陷分析模块可提供与变更的代码方法关联权重最高的若干个历史缺陷作为预警信息。从而有效避免现现代软件规模大、逻辑复杂的场景下,对代码方法进行变更时,重复导致历史类似缺陷的发生。附图说明 [0021]图1为一种代码方法级缺陷预警方法的整体系统示意图。[0022]图2为一种代码方法级缺陷预警方法中工作流程示意图。 具体实施方式 [0023]下面结合具体实施方式对本专利的技术方案作进一步详细地说明。[0024]请参阅图1-2,一种代码方法级缺陷预警方法,包括用户代码提交客户端、缺陷管理系统和代码托管平台,在用户代码提交客户端与代码托管平台之间设置提交信息提取模块和缺陷分析模块。其中,提交信息提取模块的主要工作原理是对用户提交数据进行拦截和报文分析;缺陷分析模块的主要工作原理是对代码方法、缺陷、代码方法和缺陷的关联权重进行分析并提供查询接口。[0025]用户通过代码提交客户端向代码托管平台进行代码提交时,通过提交信息提取模块将代码变更涉及的方法及缺陷信息提取出来,并通过缺陷分析模块中的历史数据对变更代码中的方法进行缺陷预警。同时,将本次代码提交提取出来的代码方法及缺陷信息更新至缺陷分析模块的数据库中。本方法具有以下步骤:[0026](1)用户进行软件代码开发时,从缺陷管理系统中查询出本次代码开发相关的缺陷修复任务,记为bug A;如图2箭头1、2所示。[0027](2)用户代码编写完成,通过代码提交客户端向代码托管平台进行代码提交,并将此次代码提交关联的bug A的信息填入提交日志信息中,如图2箭头3所示。其中,步骤(1)及步骤(2)为软件开发流程的标准做法。 4 CN 111562937 A[0028] 说 明 书 3/3页 (3)通过在代码提交客户端和代码托管平台之间增加的提交信息提取模块对代码 提交进行拦截,对代码提交数据报文进行解析,解析出提交日志信息中的bug A信息;[0029](4)提交信息提取模块将用户代码合入代码托管平台,如图2箭头4所示,并获取此次代码提交的变更,其中,代码变更分为新增、删除和修改三类;如图2箭头5所示。[0030](5)提交信息提取模块将此次代码变更中设计的新增及修改部分的代码路径及方法名进行联合签名,对每个变更的方法形成唯一可识别的标识;假设此次代码提交新增及修改部分的代码涉及N个方法,每个方法及其完整文件路径经过签名后记为method 1、method 2....method N。[0031](6)提交信息提取模块将N个方法中的每一个与bug A的关联权重值记为1/N,并且将每个方法、bug A、关联权重值记录为<方法签名、bug A、关联权重>的三元数据,例如 5 CN 111562937 A 说 明 书 附 图 1/1页 图1 图2 6 因篇幅问题不能全部显示,请点此查看更多更全内容