基于代码语义一致性的深度学习框架差分测试方法和系统
- 国知局
- 2024-08-05 12:18:58
本发明属于软件测试,特别是涉及到一种深度学习框架测试方法和自动化测试方法。
背景技术:
1、近年来,随着人工智能技术的不断发展和日益成熟,以深度学习软件系统为代表的智能软件系统逐渐融入到各行各业和不同的领域中,在人们的日常工作和生活中发挥着不可忽视的作用。例如,深度学习软件已经在交通、医疗、电子商务等多个领域提供包括图像识别、语音识别、数据分析和智能推荐等在内的多种服务。在军工领域,深度学习软件也体现着多重应用价值,拥有着多重优势。深度学习软件系统为不同行业的问题提供了解决方案,也为经济发展与社会进步提供了科技动力。但在这一过程中,深度学习软件中存在的质量问题也逐渐暴露并引起了人们的注意。不同于传统软件开发过程,深度学习软件系统的实现是基于数据驱动和底层的深度学习框架等支撑组件、面临着更开放的环境,也更容易产生难以预料的缺陷和行为。
2、目前,深度学习框架种类繁多,被广泛使用的包括google发布的tensorflow,由facebook发布的pytorch和以及国内由百度发布的paddlepaddle和由华为发布的mindspore,其它深度学习框架还包括了诸如mxnet、caffe、cntk、jittor等框架。其中,tensorflow是由谷歌团队的研究人员和工程师开发的,为用户提供了使用流程图创建神经网络和计算模型的功能,开发人员可以使用c++或者使用python来使用tensorflow库提供的丰富功能。pytorch是facebook发布的基于python的深度学习框架,可以帮助深度学习研究人员在动态计算图的环境下建立深度学习模型。具体地说,pytorch提供了一种简单有效的方式,让深度学习软件系统开发人员能够快速地定义神经网络,并在gpu上高效地运行它们。开发人员可以用它来实现各种深度学习算法,如卷积神经网络、循环神经网络、变分自编码器等。paddlepaddle是百度发布的深度学习框架。paddlepaddle以百度多年的深度学习技术研究和业务应用为基础,集深度学习核心训练和推理框架、基础模型库、端到端开发套件、丰富的工具组件于一体,是中国首个自主研发、功能完备、开源开放的产业级深度学习框架。mindspore是由华为发布的全场景深度学习框架,旨在实现易开发、高效执行、全场景覆盖三大目标,其中易开发表现为api友好、调试难度低,高效执行包括计算效率、数据预处理效率和分布式训练效率,全场景则指框架同时支持云、边缘以及端侧场景。深度学习框架是现阶段支撑智能软件开发的底层应用组件,深度学习软件开发人员可以通过调用深度学习框架提供的高层次应用程序接口(application programinterface,api)来实现各种复杂的深度学习算法和模型,而无需关注计算框架内部的具体实现。因此,深度学习软件的具体实现都需要依赖深度学习框架所提供的各类深度学习算法和接口。而一旦这些深度学习库或者接口存在代码实现错误等问题,可能会导致基于深度学习框架实现的深度学习软件存在一些难以察觉且难以预估危害的缺陷。
3、因此,随着智能软件中存在的缺陷逐渐引起人们的注意,越来越多的研究者和开发者针对智能软件系统的质量保证作为课题进行研究,并取得了一定的进展。然而,现有的这些研究大部分都集中在应用程序级上进行。这些研究往往能够对某个智能软件系统进行充分地测试,但对其底层组件的质量检测上还有所欠缺。而现有智能软件系统的功能缺陷也会来源于所使用的深度学习框架中存在的缺陷,因此,对深度学习框架进行测试显得尤为必要,然而,在现实中,实现深度学习框架的自动化测试主要存在包括测试预言缺失、测试输入数据和测试用例不充分且测试复杂性高等问题。
技术实现思路
1、发明目的:在传统软件测试中,测试用例的生成相对直接且测试预言的构建也更为明确,通常基于需求规格说明书或设计文档即可完成。但是对于深度学习框架来说,直接从高度抽象的深度学习模型的设计和需求中生成具体的测试用例非常困难。其次,由于深度学习模型输出结果的高度复杂性和上下文依赖性,为每个测试用例明确定义一个预期输出也非常具有挑战性。并且,深度学习模型具有数据驱动的特性,而现有的测试输入数据无法保证深度学习框架测试的广度,缺乏有效地输入数据去触发可能存在的缺陷。
2、针对现有技术中存在的问题与不足,本发明提供一种基于代码语义一致性的深度学习框架差分测试方法和系统,以解决当前深度学习框架测试中高质量的测试用例缺失、测试输入数据缺少和测试预言难以构建的问题。
3、技术方案:一种基于代码语义一致性的深度学习框架差分测试方法,首先,运用自然语言处理领域中的语义分析技术和程序分析领域中的静态代码分析技术完成跨框架的深度学习api匹配和api的参数对齐,以实现跨框架的语义一致的代码生成。然后,基于软件测试领域中的差分测试理论,通过运行语义一致的代码,比较不同框架对应代码的计算结果和运行状态,以捕获存在于深度学习框架中的缺陷。为了丰富输入数据的多样性,即用于代码运行的必需输入数据,本发明还会使用多种数据变换算子对已有数据集中的数据进行变异,以进一步地提升测试充分性。
4、本方法的输入是使用python实现的构建深度学习模型的种子代码文件,输出为捕获到的计算结果和运行状态不一致的多个代码文件,其数量由被测试的深度学习框架个数确定,最少为2个。
5、方法包括四个部分:
6、(1)语义一致的等价体识别:等价体指的是在不同深度学习框架中实现相同功能的api,以及深度学习框架中具有对齐关系的参数。跨框架的api之间可以是一对一的匹配关系,也可能是一对多的匹配关系,即在深度学习框架b中实现深度学习框架a中apipa对应的功能需要按序执行api序列深度学习框架中具有对齐关系的参数是指通过在具有匹配关系的api中设定它们的取值,能够实现相同功能。调用不同api的代码块是实现深度学习模型代码的基本组成单位,改变代码块中的参数即对应着不同的代码语义,因此获取到具有匹配关系的api和具有对齐关系的参数是后续步骤的基础。
7、(2)种子测试用例抽象:种子测试用例是指实现深度学习模型的代码文件,种子测试用例抽象是指将具体的实现深度学习模型的代码文件转化为表示该深度学习模型实现过程的抽象文件形式。该抽象文件涵盖的主要内容是实现的深度学习模型的结构信息,以及每一层的神经元信息。这些信息与种子代码文件中调用的层api的种类、参数和调用顺序密切相关。该步骤的设计是为了简化生成语义一致的跨框架代码的过程,将抽象文件看作跨框架代码转换过程的中介,将多对多的匹配问题转化为一对多的翻译问题。
8、(3)新测试用例生成:将抽象模型文件拆分为抽象模板和抽象层块,其中抽象模板确定了该模型能够接收的数据类型和维度,以及输出格式等信息,对应深度学习模型的输入层和输出层,其余的层信息被保存在抽象层块集合l中。为了提升生成的测试用例的多样性,本发明对抽象层实施了变异算子,以生成更多能够适配于当前抽象模板的抽象层块。在将抽象层块与模板按序依次组装生成多个抽象模型文件之后,将抽象文件根据步骤(1)中识别到的等价体和具有对齐关系的参数翻译成对应不同深度学习框架的模型实现代码,作为新测试用例。
9、(4)测试用例执行:将深度学习模型的过程分为两个阶段,一是模型定义阶段,二是模型训练和验证阶段。在模型定义阶段,基于代码的执行状态不一致来捕获可能存在的缺陷;在模型训练和验证阶段,基于计算结果的数值不一致来捕获可能存在的缺陷。并且,为了提升测试充分性,采用图像数据变换算子对现有图像测试集中的数据进行放缩、透视、仿射和加噪,再在训练和验证阶段输入给模型。
10、一种基于代码语义一致性的深度学习框架差分测试系统,包括看如下模块:
11、(1)语义一致的等价体识别模块:等价体指的是在不同深度学习框架中实现相同功能的api,以及深度学习框架中具有对齐关系的参数。跨框架的api之间可以是一对一的匹配关系,也可能是一对多的匹配关系,即在深度学习框架b中实现深度学习框架a中apipa对应的功能需要按序执行api序列深度学习框架中具有对齐关系的参数是指通过在具有匹配关系的api中设定它们的取值,能够实现相同功能。调用不同api的代码块是实现深度学习模型代码的基本组成单位,改变代码块中的参数即对应着不同的代码语义,因此获取到具有匹配关系的api和具有对齐关系的参数是后续步骤的基础。
12、(2)种子测试用例抽象模块:种子测试用例是指实现深度学习模型的代码文件,种子测试用例抽象是指将具体的实现深度学习模型的代码文件转化为表示该深度学习模型实现过程的抽象文件形式。该抽象文件涵盖的主要内容是实现的深度学习模型的结构信息,以及每一层的神经元信息。这些信息与种子代码文件中调用的层api的种类、参数和调用顺序密切相关。该步骤的设计是为了简化生成语义一致的跨框架代码的过程,将抽象文件看作跨框架代码转换过程的中介,将多对多的匹配问题转化为一对多的翻译问题。
13、(3)新测试用例生成模块:将抽象模型文件拆分为抽象模板和抽象层块,其中抽象模板确定了该模型能够接收的数据类型和维度,以及输出格式等信息,对应深度学习模型的输入层和输出层,其余的层信息被保存在抽象层块集合l中。为了提升生成的测试用例的多样性,本发明对抽象层实施了变异算子,以生成更多能够适配于当前抽象模板的抽象层块。在将抽象层块与模板按序依次组装生成多个抽象模型文件之后,将抽象文件依次翻译成对应不同深度学习框架的模型实现代码,作为新测试用例。
14、(4)测试用例执行模块:将深度学习模型的过程分为两个阶段,一是模型定义阶段,二是模型训练和验证阶段。在模型定义阶段,基于代码的执行状态不一致来捕获可能存在的缺陷;在模型训练和验证阶段,基于计算结果的数值不一致来捕获可能存在的缺陷。并且,为了提升测试充分性,采用数据变换算子对现有测试集中的数据进行变异,再在训练和验证阶段输入给模型。
15、一种计算机设备,该计算机设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行上述计算机程序时实现如上所述的基于代码语义一致性的深度学习框架差分测试方法。
16、一种计算机可读存储介质,该计算机可读存储介质存储有执行如上所述的基于代码语义一致性的深度学习框架差分测试方法的计算机程序。
17、有益效果:与现有技术相比,本发明提供的基于代码语义一致性的深度学习框架差分测试方法,具有如下效果:
18、(1)实现跨深度学习框架的api匹配和参数对齐。
19、(2)可基于实现深度学习模型的种子代码文件生成语义一致的适配多个框架的新代码文件。
20、(3)运用模型测试和差分测试的理论,基于执行状态不一致性和计算数值不一致性实现深度学习框架缺陷的捕获。
本文地址:https://www.jishuxx.com/zhuanli/20240802/262118.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。