代码参数的检测方法、装置、存储介质及电子设备制造方法及图纸

技术编号:37279634 阅读:22 留言:0更新日期:2023-04-20 23:46
本发明专利技术公开了一种代码参数的检测方法、装置、存储介质及电子设备。其中,该方法包括:响应对目标编程代码的参数检测请求,提取目标编程代码中多个目标类,其中,参数检测请求用于检测目标编程代码中是否存在导致代码运行出错的缺失参数,目标类为目标编程代码中进行参数检测的类;对每个目标类中的函数进行识别,得到多个函数,并确定每个函数中的第一参数数据,其中,第一参数数据至少包括:函数的必填参数数据;基于每个函数中的必填参数数据和字符串匹配策略,确定目标编程代码的参数检测结果。本发明专利技术解决了相关技术中在检测进行版本升级的编程语言php的传递参数是否过少时,检测效果不佳的技术问题。效果不佳的技术问题。效果不佳的技术问题。

【技术实现步骤摘要】
代码参数的检测方法、装置、存储介质及电子设备


[0001]本专利技术涉及计算机
,具体而言,涉及一种代码参数的检测方法、装置、存储介质及电子设备。

技术介绍

[0002]目前,php(Hypertext Preprocessor,超文件预处理器,一种通用开源脚本语言)编程语言越来越严格,升级时面临兼容性问题,在兼容性问题中的传递参数过少的情况下,在php7.0版本中传递参数过少时无影响,但是在php7.1及以上版本时,传递参数过少时会报错。传递参数过少时报错的情况,如:定义时有一个参数$param,在该定义中$param没有默认值,但是调用时不传该默认值就会报错,会出现致命错误(如:Fatal error),具体如:Fatal error:Uncaught ArgumentCountError:Too few arguments to function test(),0passed in%s on line%d and exactly 1expected in%s:%d。但是,如果写了默认值(如:function test($param=123){})就不会报错,当项目从php7.0及之前的版本升级到php7.1及之后版本时,面临老代码参数不一致,容易出现各处报错的问题。
[0003]在相关技术中,对于如何检查以发现这类报错的问题,一般通过以下两种方式进行检查;
[0004]方式一:执行业务代码的方式进行检测及修改,也即是哪里报错改哪里。但是,由于代码较多,业务逻辑条件较多,因此,该方式不一定能执行到有问题的代码,很容易改不全。
[0005]方式二:使用静态代码检查工具(例如:phpstan),批量检查此类错误,但是方式二对于继承等依赖关系清晰的代码,如phpstan能够检查参数个数的匹配情况。但是对于很多场景,无法找到依赖的方法定义。具体的:一个对象,会被多种类创建。无法找到唯一来源,如:
[0006]classA中定义function aaa($a,$b,$c){}
[0007]$classObj=null;
[0008]if($value===”v1”){
[0009]$classObj=new classA();
[0010]}
[0011]else{
[0012]$classObj=new classB();
[0013]}
[0014]$classObj

>aaa(1,2);
[0015]但是,此处phpstan无法找到准确来源classA,因此检测不出问题。
[0016]使用反射生成的对象。对象的class路径由配置文件等动态生成,如:
[0017]classA中定义function aaa($a,$b,$c){}
[0018]$reflector=new ReflectionClass(“class”.”A”);
[0019]$classObj=$reflector

>newInstance();
[0020]$classObj

>aaa(1,2);
[0021]但是此处phpstan无法找到准确来源classA,检测不出问题。
[0022]针对上述的问题,目前尚未提出有效的解决方案。

技术实现思路

[0023]本专利技术实施例提供了一种代码参数的检测方法、装置、存储介质及电子设备,以至少解决相关技术中在检测进行版本升级的编程语言php的传递参数是否过少时,检测效果不佳的技术问题。
[0024]根据本专利技术实施例的一个方面,提供了一种代码参数的检测方法,包括:响应对目标编程代码的参数检测请求,提取所述目标编程代码中多个目标类,其中,所述参数检测请求用于检测所述目标编程代码中是否存在导致代码运行出错的缺失参数,所述缺失参数为所述目标编程代码对历史版本代码进行版本升级后缺失的参数,所述目标类为所述目标编程代码中进行参数检测的类;对每个所述目标类中的函数进行识别,得到多个函数,并确定每个所述函数中的第一参数数据,其中,所述第一参数数据为每个所述函数在所述目标编程代码进行版本升级后不存在缺失参数的数据,所述第一参数数据至少包括:所述函数的必填参数数据;基于每个所述函数中的所述必填参数数据和字符串匹配策略,确定所述目标编程代码的参数检测结果,其中,所述字符串匹配策略用于确定每个所述函数中的实际参数数据。
[0025]进一步地,对每个所述目标类中的函数进行识别,得到多个函数,并确定每个所述函数中的第一参数数据,包括:通过第一反射对每个所述目标类进行反射,得到每个所述目标类中的多个所述函数;通过第二反射对每个所述函数进行反射,得到每个所述函数中的目标参数集合,其中,所述目标参数集合包括所述函数在不缺少参数情况下的所有参数;基于每个所述函数中的目标参数集合,统计每个所述函数中的所述第一参数数据。
[0026]进一步地,在基于每个所述函数中的目标参数集合,统计每个所述函数中的所述第一参数数据之后,还包括:基于每个所述函数的函数标识,统计多个所述函数中的重复函数;判断所述重复函数的必填参数数据是否相同,得到判断结果;在所述判断结果指示所述重复函数的所述必填参数数据不相同的情况下,输出所述重复函数;将所述重复函数发送至目标对象操控的对象终端中,由所述对象终端对所述重复函数进行参数检测。
[0027]进一步地,所述字符串匹配策略至少包括:目标字符组合,基于每个所述函数中的所述必填参数数据和字符串匹配策略,确定所述目标编程代码的参数检测结果,包括:统计每个所述函数中包含所述目标字符组合的数据,得到每个所述函数的第二参数数据,其中,所述第二参数数据为待检测的每个所述函数的实际参数数据;通过每个所述函数的所述第二参数数据与所述必填参数数据比较,确定所述目标编程代码的参数检测结果。
[0028]进一步地,所述目标字符组合至少包括:括号与目标标点符号的组合,统计每个所述函数中包含所述目标字符组合的数据,得到每个所述函数的第二参数数据,包括:识别每个所述函数中存在所述括号与所述目标标点符号的目标代码;基于所述目标代码中所述目标标点符号的个数,统计所述目标代码关联的函数的实际参数数量,得到每个所述函数的第二参数数据,其中,所述第二参数数据至少包括所述实际参数数量。
[0029]进一步地,所述必填参数数据至少包括:必填参数数量,通过每个所述函数的所述第二参数数据与所述必填参数数据比较,确定所述目标编程代码的参数检测结果,包括:通过每个所述函数的实际参数数量与所述必填参数数量比较,得到比较结果;在所述比较结果表示所述实际参数数量大于或等于所述必填参数数量的情况下,确定所述比较结果关联的函数的参数检测结果为不存在所述缺失参数;在所述比较结果表示所述实际参数数量小于所述必填参数数量的情况下,确定所述比较结果关联的函数的参数检测结果为存在所述缺失参数;统计多个所述本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种代码参数的检测方法,其特征在于,包括:响应对目标编程代码的参数检测请求,提取所述目标编程代码中多个目标类,其中,所述参数检测请求用于检测所述目标编程代码中是否存在导致代码运行出错的缺失参数,所述缺失参数为所述目标编程代码对历史版本代码进行版本升级后缺失的参数,所述目标类为所述目标编程代码中进行参数检测的类;对每个所述目标类中的函数进行识别,得到多个函数,并确定每个所述函数中的第一参数数据,其中,所述第一参数数据为每个所述函数在所述目标编程代码进行版本升级后不存在缺失参数的数据,所述第一参数数据至少包括:所述函数的必填参数数据;基于每个所述函数中的所述必填参数数据和字符串匹配策略,确定所述目标编程代码的参数检测结果,其中,所述字符串匹配策略用于确定每个所述函数中的实际参数数据。2.根据权利要求1所述的检测方法,其特征在于,对每个所述目标类中的函数进行识别,得到多个函数,并确定每个所述函数中的第一参数数据,包括:通过第一反射对每个所述目标类进行反射,得到每个所述目标类中的多个所述函数;通过第二反射对每个所述函数进行反射,得到每个所述函数中的目标参数集合,其中,所述目标参数集合包括所述函数在不缺少参数情况下的所有参数;基于每个所述函数中的目标参数集合,统计每个所述函数中的所述第一参数数据。3.根据权利要求2所述的检测方法,其特征在于,在基于每个所述函数中的目标参数集合,统计每个所述函数中的所述第一参数数据之后,还包括:基于每个所述函数的函数标识,统计多个所述函数中的重复函数;判断所述重复函数的必填参数数据是否相同,得到判断结果;在所述判断结果指示所述重复函数的所述必填参数数据不相同的情况下,输出所述重复函数;将所述重复函数发送至目标对象操控的对象终端中,由所述对象终端对所述重复函数进行参数检测。4.根据权利要求1所述的检测方法,其特征在于,所述字符串匹配策略至少包括:目标字符组合,基于每个所述函数中的所述必填参数数据和字符串匹配策略,确定所述目标编程代码的参数检测结果,包括:统计每个所述函数中包含所述目标字符组合的数据,得到每个所述函数的第二参数数据,其中,所述第二参数数据为待检测的每个所述函数的实际参数数据;通过每个所述函数的所述第二参数数据与所述必填参数数据比较,确定所述目标编程代码的参数检测结果。5.根据权利要求4所述的检测方法,其特征在于,所述目标字符组合至少包括:括号与目标标点符号的组合,统计每个所述函数中包含所述目标字符组合的数据,得到每个所述函数的第二参数数据,包括:识别每个所述函数中存在所述括号与所述目标标点符号的目标代码;基于所述目标代码中所述目标标点符号的个数,统计所述目标代码关联...

【专利技术属性】
技术研发人员:黄俞荣唐春鸽宋永政王振吴意乐
申请(专利权)人:山石网科通信技术股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1