百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

测试深度学习库中的Oracle近似研究

sinye56 2024-10-09 19:34 7 浏览 0 评论

摘要

深度学习(DL)应用程序日益普及,测试 DL 库日趋重要。与测试确定输出的通用软件(例如,将输出与 Oracle 进行相等性比较)不同,深度学习库的测试通常需要执行 Oracle 近似,即,输出允许在 Oracle 的限定范围内。然而,尚未有 Oracle 近似方面的相关研究。因此,本文研究测试四个流行的 DL 库而实施的 Oracle 近似断言。本文的研究表明,存在不可忽略的部分断言,这些断言在测试 DL 库时利用 Oracle 近似值。另外,本文通过全面的手动研究确定了正在执行 Oracle 近似的 Oracle 常见来源。此外,本文发现开发人员经常修改与 Oracle 近似相关的代码,即使用其他近似 API,修改 Oracle 或被测代码的输出,并使用不同的近似阈值。最后,本文进行了深入的研究,以了解 Oracle 逼近断言演变的原因。本文的发现揭示了随着 DL 库中代码的发展,开发人员在维护 Oracle 近似实践时可能面临的重要维护挑战。

关键字:软件质量保证,软件测试,测试深度学习库,测试 Oracle

1、 研究背景

深度学习(DL)技术被广泛应用于解决重要的现实世界问题,例如图像和语音识别以及自动驾驶汽车。由于深度学习技术的复杂性和广泛应用,从业人员构建了 DL 库,以使 DL 技术更易于应用程序开发人员访问。现代 DL 应用程序严重依赖于流行的 DL 库,例如 TensorFlow,PyTorch,Theano 和 Keras。DL 库的质量保证实践至关重要,因为它会影响基于其构建的数百万个应用程序。

但是,很少有人关注研究 DL 库中的质量保证实践(即,由 DL 库开发人员编写的测试用例)。这样的测试用例保证了 DL 库中实现的正确性。测试用例不足或质量不佳会影响 DL 库的质量。此外,从 DL 库生成的模型也可能受到负面影响。DL 库,尤其是核心算法模块,大量编码数学公式和算术运算。DL 库中的相应测试用例具有独特的属性,以前的测试用例经验研究并未对此进行研究。

测试 DL 库通常需要 Oracle 近似(简称 OA),而不是明确声明被测代码(CUT)的输出和 Oracle 之间的相等性。由于各种原因,DL 库中需要 Oracle 近似值。 DL 库中实现的输出在每次测试运行中可能会略有不同(例如,由于随机性)。对于测试预言浮动数字的情况,测试人员可能很难在代码中精确定义预言。此外,允许 CUT 的输出与计算的预言值略有不同,例如,当预言机是其他 DL 实现时(即差异测试)。Oracle 逼近是 DL 库在实现断言时采用的基本测试实践。下面是 Keras 的 OA 断言的示例。在代码段中,p 是定义的 Oracle(第 2 行)。 OA 断言(第 4 行)比较了来自二项分布(即 rand,Keras 函数的输出)的样本均值是否足够接近所定义的 Oracle p。定义可接受范围的值称为近似阈值,即下面的代码片段中的 0.015。

Oracle 近似对开发人员提出了新的挑战。首先,开发人员需要为 OA 断言选择合适的预言源。错误的测试预言可能会引入不稳定的测试结果,即不稳定的测试。在代码演化过程中,某些测试 Oracle 的来源可能比其他源更脆弱,并且需要更频繁的更新(即修改测试 Oracle 或可接受的 Oracle 范围)。其次,Oracle 近似值要求开发人员正确确定可接受的 Oracle 的范围。如果范围太宽松,则测试用例将无法检查实现的正确性。如果范围太小,则测试用例将不断失败,并向开发人员引入失败的错误警告。最后,开发人员可能会在 OA 断言的维护和演变中遇到挑战。例如,在 TensorFlow 中测试递归神经网络(RNN)组件时,开发人员将 Keras 的输出用作 Oracle,并使用 Oracle 逼近实现比较。但是,为了适应 Keras 的最新更新,TensorFlow 开发人员必须修改近似阈值(即放宽范围),以避免持续的测试失败。

因此,为了更好地应对挑战,了解 DL 库中当前的 OA 做法很重要。在这项工作中,本文迈出了重要的第一步,研究了 DL 库中的 OA 实践。特别地,本文在四个流行的 DL 库中研究 Oracle 近似的实践和演变。本文的研究提供了定量和定性的结论,以总结常见的实践并强调维护挑战,这些挑战可能会激发未来的研究,从而为开发人员在采用和维护 OA 实践方面提供更好的工具支持,并更好地利用 Oracle 近似值来保证 DL 库的质量。

2、 研究内容

本文通过研究四个流行的 DL 库(即 TensorFlow,PyTorch,Theano 和 Keras)来回答以下四个研究问题(RQ)。

RQ1:在测试深度学习库中实现了多少个 Oracle 近似(OA)断言?

本文研究了在测试 DL 库中 OA 断言的普遍性。本文调查了开发人员在实现 OA 断言时使用的常用 API。本文发现,在 DL 库中,OA 断言存在不可忽略的部分(5%-25%)。 TensorFlow,PyTorch,Theano 和 Keras 通常使用 Numpy 的断言 API 来表示 OA 断言。开发人员可能会大量使用自定义函数来表达 Oracle 近似断言(即 TensorFlow 中的 80%)。

RQ2:OA 断言中使用的常见的预言和阈值类型是什么?

本文进行了一项手动研究,以确定 OA 断言中使用的常见测试 Oracle 类型。本文派生了一个标签系统来指导这一分类过程。本文的研究表明,OA 断言中使用了各种不同的测试预言和阈值。研究还表明,有很大一部分(27%-72%)的测试预言是通过计算得出的。这表明应用自动化的非 Oracle 测试技术(例如,变质测试,差异测试)应仔细考虑并利用 Oracle 近似实践。

RQ3:开发人员对 OA 断言执行哪些代码更改?

本文发现开发人员经常更改 OA 断言,即占所有提交的 7%-20%。在 OA 断言的代码更改中,开发人员经常对 OA 断言执行非外观修改,即最多占所有更改的 34%。开发人员可以从将来的工具支持中受益,以帮助他们更好地管理基于 OA 断言的代码演化。

RQ4:开发人员为什么要对 OA 断言进行更改?

本文对 TensorFlow 中一个测试模块(即内核测试目录下)的所有与 OA 相关的提交进行了深入分析。总共,本文深入分析了 OA 断言中的 71 个提交,包括分析提交中的代码更改,分析其他相关代码,读取提交消息以及在提交之前和之后执行测试用例。

本文发现,OA 断言通常随着代码的发展而被修改。开发人员出于各种原因修改 OA 断言,例如增加测试范围,适应不同的硬件规格,支持不同的数据表示或避免测试失败。本文的研究表明,在保持 OA 断言方面存在挑战,因为没有系统的支持来帮助开发人员管理 OA 断言,例如,检测不正确的阈值以及在代码演变时建议对 OA 断言进行更改。

3、 总结

在本文中,我们提供了有关在测试 DL 库中使用 oracle 近似的实证研究。我们的研究是了解在计算密集型软件(例如 DL 库)中使用 oracle 近似值的当前实践的重要的第一步。我们的工作回答了四个研究问题。首先,我们研究 DL 库测试案例中 oracle 近似的普遍性。我们发现,多达 25%的断言使用 oracle 近似值。其次,我们研究并总结了预言机多样性和预言机近似中使用的阈值。在许多情况下,通过计算可以获得用于 oracle 近似中的 oracle。第三,我们研究开发人员对 oracle 近似断言执行的常见代码更改。最后,我们总结了在 oracle 近似值上代码更改背后的原因。我们的发现揭示了开发人员在 oracle 近似中可能面临的维护挑战,并可能激发未来的研究,以便为开发人员提供更好的工具支持,以更好地管理 oracle 近似实践。

4、 致谢

本文由南京大学软件学院 2018 级博士杨乙霖翻译转述

相关推荐

程序员:JDK的安装与配置(完整版)_jdk的安装方法

对于Java程序员来说,jdk是必不陌生的一个词。但怎么安装配置jdk,对新手来说确实头疼的一件事情。我这里以jdk10为例,详细的说明讲解了jdk的安装和配置,如果有不明白的小伙伴可以评论区留言哦下...

Linux中安装jdk并配置环境变量_linux jdk安装教程及环境变量配置

一、通过连接工具登录到Linux(我这里使用的Centos7.6版本)服务器连接工具有很多我就不一一介绍了今天使用比较常用的XShell工具登录成功如下:二、上传jdk安装包到Linux服务器jdk...

麒麟系统安装JAVA JDK教程_麒麟系统配置jdk

检查检查系统是否自带java在麒麟系统桌面空白处,右键“在终端打开”,打开shell对话框输入:java–version查看是否自带java及版本如图所示,系统自带OpenJDK,要先卸载自带JDK...

学习笔记-Linux JDK - 安装&配置

前提条件#检查是否存在JDKrpm-qa|grepjava#删除现存JDKyum-yremovejava*安装OracleJDK不分系统#进入安装文件目...

Linux新手入门系列:Linux下jdk安装配置

本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...

测试员必备:Linux下安装JDK 1.8你必须知道的那些事

1.简介在Oracle收购Sun后,Java的一系列产品就被整合到Oracle官网中,打开官网乍眼一看也不知道去哪里下载,还得一个一个的摸索尝试,而且网上大多数都是一些Oracle收购Sun前,或者就...

Linux 下安装JDK17_linux 安装jdk1.8 yum

一、安装环境操作系统:JDK版本:17二、安装步骤第一步:下载安装包下载Linux环境下的jdk1.8,请去官网(https://www.oracle.com/java/technologies/do...

在Ubuntu系统中安装JDK 17并配置环境变量教程

在Ubuntu系统上安装JDK17并配置环境变量是Java开发环境搭建的重要步骤。JDK17是Oracle提供的长期支持版本,广泛用于开发Java应用程序。以下是详细的步骤,帮助你在Ubuntu系...

如何在 Linux 上安装 Java_linux安装java的步骤

在桌面上拥抱Java应用程序,然后在所有桌面上运行它们。--SethKenlon(作者)无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序...

Windows和Linux环境下的JDK安装教程

JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...

linux安装jdk_linux安装jdk软连接

JDK是啥就不用多介绍了哈,外行的人也不会进来看我的博文。依然记得读大学那会,第一次实验课就是在机房安装jdk,编写HelloWorld程序。时光飞逝啊,一下过了十多年了,挣了不少钱,买了跑车,娶了富...

linux安装jdk,全局配置,不同用户不同jdk

jdk1.8安装包链接:https://pan.baidu.com/s/14qBrh6ZpLK04QS8ogCepwg提取码:09zs上传文件解压tar-zxvfjdk-8u152-linux-...

运维大神教你在linux下安装jdk8_linux安装jdk1.7

1.到官网下载适合自己机器的版本。楼主下载的是jdk-8u66-linux-i586.tar.gzhttp://www.oracle.com/technetwork/java/javase/downl...

window和linux安装JDK1.8_linux 安装jdk1.8.tar

Windows安装JDK1.8的步骤:步骤1:下载JDK打开浏览器,找到JDK下载页面https://d.injdk.cn/download/oraclejdk/8在页面中找到并点击“下载...

最全的linux下安装JavaJDK的教程(图文详解)不会安装你来打我?

默认已经有了linux服务器,且有root账号首先检查一下是否已经安装过java的jdk任意位置输入命令:whichjava像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...

取消回复欢迎 发表评论: