[发明专利]一种基于动态类型感知的Python软件模糊测试方法有效

专利信息
申请号: 201910663726.6 申请日: 2019-07-22
公开(公告)号: CN110399300B 公开(公告)日: 2021-06-22
发明(设计)人: 陈林;罗阳;赵恒辉 申请(专利权)人: 南京大学
主分类号: G06F11/36 分类号: G06F11/36;G06F8/41
代理公司: 暂无信息 代理人: 暂无信息
地址: 210023 江苏*** 国省代码: 江苏;32
权利要求书: 查看更多 说明书: 查看更多
摘要: 发明提供一种基于动态类型感知的Python软件模糊测试方法,包括下列步骤:1)从github获取开源Python软件项目的源程序代码;2)生成源程序代码对应的抽象语法树;3)从抽象语法树中识别并提取函数定义节点;4)根据函数定义节点的信息使用动态类型感知策略生成参数,并生成对应函数定义的测试用例集合;5)执行测试用例生成测试结果报告,根据测试报告的结果进行基于变异的模糊测试和提供潜在缺陷的测试用例。本发明解决了目前缺乏针对Python软件的模糊测试方法的问题,并且能够提供触发潜在缺陷的输入,进而帮助开发者进行调试和修复缺陷,提高软件的可维护性和鲁棒性,从而能更好地控制软件产品的质量。
搜索关键词: 一种 基于 动态 类型 感知 python 软件 模糊 测试 方法
【主权项】:
1.一种基于动态类型感知的Python软件模糊测试方法,其特征在于,从github获取开源Python软件项目的源程序代码,生成源程序代码对应的抽象语法树,从抽象语法种中识别并提取函数定义节点,根据函数定义节点的信息使用动态类型感知策略生成整数类型、浮点类型、字符串类型、布尔类型、列表类型和字典类型的参数,并生成对应函数定义的测试用例集合,执行测试用例生成测试结果报告,根根测试报告的结果进行基于变异的模糊测试和提供触发潜在缺陷的测试用例;该方法包括下列步骤:1)从github获取开源Python软件项目的源程序代码;开源Python软件项目将项目的源代码托管在github平台上,通过使用git clone命令获取项目的源代码;定义1:github是一个面向开源及私有软件项目的托管平台,支持git作为唯一的版本库格式进行托管;定义2:git是一个分布式版本控制系统;定义3:git clone命令通过git将远程软件项目源程序代码拷贝到本地,在本地目录下生成一份远程项目源代码的拷贝;2)生成源程序代码对应的抽象语法树;对步骤1)中已经收集好的软件项目源代码进行词法分析和语法分析,利用Python标准库中的ast模块生成对应的抽象语法树;定义1:抽象语法树是源程序代码抽象语法结构的树状表现形式,每个节点代表源代码中的一种结构;定义2:Python标准库随Python语言一起发行,包含了诸多能提供系统级功能访问的内建模块;定义3:ast模块是Python标准库中的一个内置模块,帮助解析Python的抽象语法;3)从抽象语法树中识别并提取函数定义节点;先序遍历步骤2)中生成的抽象语法树,依次匹配各个节点的类型,识别其中的函数定义节点,对于每一个函数定义节点,用元组F=(module,name,args)记录函数定义的信息;定义1:函数定义节点是Python软件项目源代码转化为抽象语法树后,抽象语法树中的节点类型为FunctionDef的节点;定义2:module是一个Python文件,能够有效地组织Python代码,提高代码的可读性,也可作为唯一标识函数的信息;定义3:name是函数定义节点所对应函数名字的文本标识,函数名信息来自Python抽象语法;定义4:args是函数定义节点所对应的函数接收的参数名列表,参数名列表信息来自Python抽象语法;定义5:元组集合C={F1,F2,...,Fn}记录了Python软件项目中所有的函数定义信息,n表示项目中函数定义的数量;4)对每个函数定义使用动态类型感知策略生成测试用例集合;集合δ={int,float,str,bool,list,dict}表示生成参数的类型集合,集合内元素依次表示整数类型、浮点类型、字符串类型、布尔类型、列表类型和字典类型;根据步骤3)提取得到的函数定义节点的结构信息,对于参数使用动态类型感知策略生成测试用例,继而生成对应函数的测试用例集合;定义1:动态类型感知策略生成测试用例的方法将通过如下方法对Python软件项目函数定义信息集合C中的每一个函数定义F生成测试用例:1.从函数定义F中可以得到该函数定义的参数列表信息args,len表示参数列表args的长度;2.初始化i=1,param0={},i表示生成参数的位置,paramj表示在生成第j个参数时已生成的参数列表;3.对于参数列表中的参数argsi,枚举参数的类型集合δ中的每一种类型t,使用Python第三方库faker生成类型为t的参数p,parami=parami‑1∪{p};4.当i≤len时,i=i+1,转至步骤3;当i>len时,生成一个测试用例input;上述步骤中,运算符“∪”表示列表的拼接操作;定义2:faker是一个生成Python假数据的Python第三方库;定义3:对于函数定义信息集合C中的每一个函数定义F生成测试用例集合TF={input0,input1,...,inputm},对于每一个函数定义的测试用例集合TF,其中m是为函数定义F生成的测试用例个数;5)执行测试用例生成测试结果报告,根据测试报告的结果进行基于变异的模糊测试和提供触发潜在缺陷的测试用例;使用pytest执行步骤4)中生成的测试用例,根据执行测试用例后得到的每个测试用例的执行结果,进行相应后续处理,报告触发潜在缺陷的测试用例;定义1:基于变异的模糊测试是对于待测软件已有的种子测试用例进行变异生成新的测试用例,将新生成的测试用例作为待测软件的测试用例进行后续测试流程的测试方法;定义2:潜在缺陷是在特定输入input下,软件运行抛出异常、产生崩溃或发生错误,则称软件存在潜在缺陷;定义3:pytest是一个成熟、特性完备的Python测试工具,能够支持复杂的功能测试;定义4:对于函数定义F的测试用例集合TF,对于测试用例inputi∈TF,根据执行测试用例的结果进行相应的后续操作:●当result(inputi)=pass时,将inputi作为基于变异的模糊测试工具AFL的种子测试用例,进行持续时间为t小时的模糊测试,该过程中变异产生的导致程序异常的测试用例为触发潜在缺陷的测试用例;●当result(inputi)=fail时,inputi为触发潜在缺陷的测试用例;其中result(inputi)表示测试用例inputi的执行结果,结果为pass表示测试用例执行通过,结果为fail表示测试用例执行失败,i表示测试用例的序号,t表示AFL进行模糊测试的持续时间,t默认设定为6,用户也可根据实际需求进行配置;定义4:AFL,全称American fuzzy lop,是一个面向安全的模糊测试工具;它采用一种新型的编译时插桩和遗传算法来自动化地探索能够触发目标程序中新的内部状态的简约的测试用例。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/patent/201910663726.6/,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top