基于代码组装的深度学习框架测试方法

文档序号:35992782发布日期:2023-11-16 02:30阅读:63来源:国知局
基于代码组装的深度学习框架测试方法

本发明涉及一种基于代码组装的深度学习框架测试方法,属于软件测试与深度学习框架测试。


背景技术:

1、深度学习(dl)已越来越多地应用于诸如身份验证、自动驾驶等关键任务。目前,许多工作都集中在确保深度学习相关应用的质量,例如测试已训练好的深度学习模型或测试由软件开发人员编写的深度学习应用程序。然而,关于测试深度学习框架(如tensorflow,pytorch,jittor)的研究工作有待完善。这些深度学习框架是当前深度学习应用程序开发和部署的基础。然而,最近的研究发现这些库经常出现编码错误。因此,尽早发现这些错误至关重要。

2、以前的工作主要遵循同样的测试范式,即提供各种模型(称为测试输入)以测试深度学习框架中的特定模块(例如模型加载、构建和推理模块)。为了获得足够的测试输入(即深度学习模型),现有的工作要么通过对已发布的模型(例如resnet和inceptionnet)的网络结构、参数或输入值进行变异,要么基于预定义的模型结构模板(例如链式结构)从头开始构建深度学习模型。

3、然而,现有工作的测试充分性远远不够令人满意(例如,测试覆盖率低,效率低,定位不准确)。即使使用最新的测试技术,也无法达到高效率、高覆盖率、定位准确的效果。不令人满意的结果揭示了现有技术的不足之处。仔细观察后,我们发现一个主要原因是测试输入的匮乏,即模型数量和多样性不足。具体来说,现有技术旨在生成dl模型以扩大差分测试中的预测不一致性,增加层api的覆盖范围或增加图结构的多样性。然而,它们在生成dl模型以揭示一些特定层api调用中存在的漏洞方面较弱。然而,无论覆盖更多类型的层api还是多样化图结构,都无法鼓励生成大量具有不同层参数值或生成不同层结构的模型。在此基础上,现有技术无法有效地检测存在于特定层api调用和特定结构的模型触发的漏洞,现有技术生成的模型在数量上和质量上对深度学习框架的测试效果都有待进一步提高。


技术实现思路

1、本发明的目的在于,克服现有技术存在的技术缺陷,解决上述技术问题,提出一种基于代码组装的深度学习框架测试方法,在现有深度学习框架测试方法的基础上增加了重要的创新和改进。本发明旨在通过新的代码组装方法来检验深度学习框架在各个方面的可靠性,帮助开发者和测试人员对框架进行全面的测试和评估,以揭示潜在的问题,并确保测试框架的健康稳定运行,从而完善深度学习框架的质量保障工作,推动该领域的进一步发展和创新。

2、本发明具体采用如下技术方案:基于代码组装的深度学习框架测试方法,包括如下步骤:

3、步骤ss1:相似度计算与约束获取步骤,包括:分析官方文档接口信息获取接口约束信息,根据所述接口约束信息进行接口相似度计算,获得可信的相似度和接口约束信息以及加载所述接口约束信息和所述相似度的入口;

4、步骤ss2:种子模型收集与模型拆分步骤,包括:从流行的深度学习应用中收集n个经典的神经网络模型作为种子模型,所述n个经典的神经网络模型中的每一个都有对应框架的版本;对所述种子模型进行特定结构的拆分获得进行后续变异、组装、生成测试用例用的模板、定义语句、执行语句;

5、步骤ss3:设计变异算法,具体包括:在步骤ss1获得的接口约束信息和相似度的基础上,对接口的定义语句设计一个变异算法,所述变异算法包括随机改变接口名的接口名变异算法api_mutate和参数变异算法param_mutate。

6、步骤ss4:代码组装步骤,包括:基于步骤ss2中得到的模板、定义语句、执行语句进行代码组装;

7、步骤ss5:代码树生成步骤,包括:在步骤ss4的基础上,对拆分后的种子模型进行基于变异和组装的代码树生成;

8、步骤ss6:剪枝、过滤与记录步骤,包括:准确定位触发报错的api调用。

9、作为一种较佳的实施例,所述步骤ss1具体包括:

10、步骤ss11:收集框架作者或发行公司提供的官方文档中所给出的文档,以及源代码中的api定义和注释在内的文档接口信息,对所述文档接口信息进行分析和对细节处的调整、校对之后,形成具有一定格式的约束说明,然后设计接口以使得测试工具的其他模块能读取到包含所述约束说明和所述文档接口信息的接口约束信息并进行相应的处理;

11、步骤ss12:根据获得的所述接口约束信息进行接口相似度计算,所述接口相似度计算包括使用文本分析模型对接口功能描述的相似度进行计算,以及使用特定算法对接口的参数列表进行计算,计算过后将每个接口的相似度信息存入文件,并提供一个接口以使得测试工具的其他模块能读取到相似度信息并基于所述相似度信息进行后续运算。

12、作为一种较佳的实施例,所述步骤ss2中的所述种子模型进行特定结构的拆分具体包括:首先,分析种子模型的结构,在不改变种子模型的运算规则和功能的基础上,对种子模型做出语句调用方式以及语句书写规格的结构性调整;然后,对每个种子模型拆分出一个基本模板template、若干接口定义语句api、接口执行语句execute,在本拆分方式下,每个种子模型会拥有一个嵌入语句后保证不发生代码结构错误的基本模板,待变异的若干接口定义语句,以及与定义语句逐条对应的接口执行语句。

13、作为一种较佳的实施例,所述步骤ss3包括:所述接口名变异算法api_mutate接受一个接口定义语句api输入,然后基于相似度选择一个新的接口,其中,相似度越高被选中的几率越高,在接口名变异之后,基于接口约束信息,对新的接口定义进行最保守的参数适配,确保变异后的语句在语法上是合格的,最后,接口名变异算法api_mutate会输出一个与原定义使用接口不同的新接口定义语句mut_api。

14、作为一种较佳的实施例,所述步骤ss3还包括:参数变异算法param_mutate接受一个层定义输入语句api,然后根据步骤ss1中得到的接口约束信息,对其中的参数进行合法范围内的变异,这其中包括api原有参数值的改变,也包括新增原语句未曾出现的参数,同样,在约束信息下,参数变异算法param_mutate会输出一个语法上和规则上都合格,但是与原语句参数不尽相同的新接口定义语句mut_api。

15、作为一种较佳的实施例,所述步骤ss4具体包括:将单条定义语句api与执行语句execute作为一对一一映射的代码嵌入模板template中,即可生成一个新的、可执行的、完整的模型,该模型在作为测试用例的同时,也能作为新的模板,进行下一代组装,生成更多的新模型。

16、作为一种较佳的实施例,所述步骤ss5具体包括:首先扫描种子模型的execute语句,若能找到api中对应的定义语句,就将他们作为一对;然后,使用变异算法对api进行若干次变异,得到n个新的、不同的mut_api,将execute与每个新api嵌入模板template中,组合生成这一代的n个模型;同时,这n个新模型将作为下一代组装的模板template,继续进行扫描、变异、组装,直到扫描完成;最后,以此本方式生成指数级数量的新模型,作为测试用例,对深度学习框架进行模糊测试。

17、作为一种较佳的实施例,所述步骤ss6具体包括:模糊测试采用边生成边运行的方式,在生成一个新的用例模型之后,对所述用例模型进行试运行,若没有报错则作为新模板进入下一代的变异和组装过程,若有报错,则移出队列,该用例模型将作为一个叶子节点,表明已在该层定位到错误,不再向下继续延申。

18、作为一种较佳的实施例,所述步骤ss6具体还包括:捕获在模糊测试中的报错信息,并分析无效报错信息的特点,包含形状框架正常报错信息,在这之后,设计一个过滤器并添加到运行过程中,使得无效报错被忽略,并记录其他的未知原因报错的信息。

19、作为一种较佳的实施例,所述步骤ss6具体还包括:模糊测试完毕之后,程序会提供一个记录着过程中所有报错叶子节点的信息并保存能定位到错误的模型,这些信息与模型最终将作为深度学习框架缺陷分析的依据,以供揭示其触发的潜在bug。

20、本发明所达到的有益效果:本发明提供一种基于代码组装的深度学习框架测试方法,在现有深度学习框架测试方法的基础上增加了重要的创新和改进,帮助开发者和测试人员对框架进行全面的测试和评估,以揭示潜在的问题,并确保测试框架的健康稳定运行,从而完善深度学习框架的质量保障工作,推动该领域的进一步发展和创新。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1