[发明专利]代码参数的检测方法、装置、存储介质及电子设备在审
申请号: | 202211718826.2 | 申请日: | 2022-12-29 |
公开(公告)号: | CN115964293A | 公开(公告)日: | 2023-04-14 |
发明(设计)人: | 黄俞荣;唐春鸽;宋永政;王振;吴意乐 | 申请(专利权)人: | 山石网科通信技术股份有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F8/71 |
代理公司: | 北京康信知识产权代理有限责任公司 11240 | 代理人: | 黄海英 |
地址: | 215163 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 代码 参数 检测 方法 装置 存储 介质 电子设备 | ||
本发明公开了一种代码参数的检测方法、装置、存储介质及电子设备。其中,该方法包括:响应对目标编程代码的参数检测请求,提取目标编程代码中多个目标类,其中,参数检测请求用于检测目标编程代码中是否存在导致代码运行出错的缺失参数,目标类为目标编程代码中进行参数检测的类;对每个目标类中的函数进行识别,得到多个函数,并确定每个函数中的第一参数数据,其中,第一参数数据至少包括:函数的必填参数数据;基于每个函数中的必填参数数据和字符串匹配策略,确定目标编程代码的参数检测结果。本发明解决了相关技术中在检测进行版本升级的编程语言php的传递参数是否过少时,检测效果不佳的技术问题。
技术领域
本发明涉及计算机技术领域,具体而言,涉及一种代码参数的检测方法、装置、存储介质及电子设备。
背景技术
目前,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及之后版本时,面临老代码参数不一致,容易出现各处报错的问题。
在相关技术中,对于如何检查以发现这类报错的问题,一般通过以下两种方式进行检查;
方式一:执行业务代码的方式进行检测及修改,也即是哪里报错改哪里。但是,由于代码较多,业务逻辑条件较多,因此,该方式不一定能执行到有问题的代码,很容易改不全。
方式二:使用静态代码检查工具(例如:phpstan),批量检查此类错误,但是方式二对于继承等依赖关系清晰的代码,如phpstan能够检查参数个数的匹配情况。但是对于很多场景,无法找到依赖的方法定义。具体的:一个对象,会被多种类创建。无法找到唯一来源,如:
classA中定义function aaa($a,$b,$c){}
$classObj=null;
if($value===”v1”){
$classObj=new classA();
}
else{
$classObj=new classB();
}
$classObj-aaa(1,2);
但是,此处phpstan无法找到准确来源classA,因此检测不出问题。
使用反射生成的对象。对象的class路径由配置文件等动态生成,如:
classA中定义function aaa($a,$b,$c){}
$reflector=new ReflectionClass(“class”.”A”);
$classObj=$reflector-newInstance();
$classObj-aaa(1,2);
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于山石网科通信技术股份有限公司,未经山石网科通信技术股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202211718826.2/2.html,转载请声明来源钻瓜专利网。