测试深度学习库中的Oracle近似研究
mhr18 2024-10-17 10:33 17 浏览 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 级博士杨乙霖翻译转述
相关推荐
- 【预警通报】关于WebLogic存在远程代码执行高危漏洞的预警通报
-
近日,Oracle官方发布了2021年1月关键补丁更新公告CPU(CriticalPatchUpdate),共修复了包括CVE-2021-2109(WeblogicServer远程代码执行漏洞)...
- 医院信息系统突发应急演练记录(医院信息化应急演练)
-
信息系统突发事件应急预案演练记录演练内容信息系统突发事件应急预案演练参与人员信息科参与科室:全院各部门日期xxxx-xx-xx时间20:00至24:00地点信息科记录:xxx1、...
- 一文掌握怎么利用Shell+Python实现完美版的多数据源备份程序
-
简介:在当今数字化时代,无论是企业还是个人,数据的安全性和业务的连续性都是至关重要的。数据一旦丢失,可能会造成无法估量的损失。因此,如何有效地对分布在不同位置的数据进行备份,尤其是异地备份,成为了一个...
- docker搭建系统环境(docker搭建centos)
-
Docker安装(CentOS7)1.卸载旧版Docker#检查已安装版本yumlistinstalled|grepdocker#卸载旧版本yumremove-ydocker.x...
- 基础篇:数据库 SQL 入门教程(sql数据库入门书籍推荐)
-
SQL介绍什么是SQLSQL指结构化查询语言,是用于访问和处理数据库的标准的计算机语言。它使我们有能力访问数据库,可与多种数据库程序协同工作,如MSAccess、DB2、Informix、M...
- Java21杀手级新特性!3行代码性能翻倍
-
导语某券商系统用这招,交易延迟从12ms降到0.8ms!本文揭秘Oracle官方未公开的Record模式匹配+虚拟线程深度优化+向量API神操作,代码量直降70%!一、Record模式匹配(代码量↓8...
- 一文读懂JDK21的虚拟线程(java虚拟线程)
-
概述JDK21已于2023年9月19日发布,作为Oracle标准Java实现的一个LTS版本发布,发布了15想新特性,其中虚拟线程呼声较高。虚拟线程是JDK21中引入的一项重要特性,它是一种轻量级的...
- 效率!MacOS下超级好用的Linux虚拟工具:Lima
-
对于MacOS用户来说,搭建Linux虚拟环境一直是件让人头疼的事。无论是VirtualBox还是商业的VMware,都显得过于笨重且配置复杂。今天,我们要介绍一个轻巧方便的纯命令行Linux虚拟工具...
- 所谓SaaS(所谓三维目标一般都应包括)
-
2010年前后,一个科技媒体的主编写一些关于云计算的概念性问题,就可以作为头版头条了。那时候的云计算,更多的还停留在一些概念性的问题上。而基于云计算而生的SaaS更是“养在深闺人未识”,一度成为被IT...
- ORA-00600 「25027」 「x」报错(报错0xc0000001)
-
问题现象:在用到LOB大对象的业务中,进行数据的插入,失败了,在报警文件中报错:ORA-00600:内部错误代码,参数:[25027],[10],[0],[],[],[],[],[...
- 安卓7源码编译(安卓源码编译环境lunch失败,uname命令找不到)
-
前面已经下载好源码了,接下来是下载手机对应的二进制驱动执行编译源码命令下载厂商驱动https://developers.google.com/android/drivers?hl=zh-cn搜索NGI...
- 编译安卓源码(编译安卓源码 电脑配置)
-
前面已经下载好源码了,接下来是下载手机对应的二进制驱动执行编译源码命令下载厂商驱动https://developers.google.com/android/drivers?hl=zh-cn搜索NGI...
- 360 Vulcan Team首战告捷 以17.5万美金强势领跑2019“天府杯“
-
2019年11月16日,由360集团、百度、腾讯、阿里巴巴、清华大学与中科院等多家企业和研究机构在成都联合主办了2019“天府杯”国际网络安全大赛暨2019天府国际网络安全高峰论坛。而开幕当日最激荡人...
- Syslog 日志分析与异常检测技巧(syslog发送日志配置)
-
系统日志包含有助于分析网络设备整体运行状况的重要信息。然而,理解并从中提取有效数据往往颇具挑战。本文将详解从基础命令行工具到专业日志管理软件的全流程分析技巧,助你高效挖掘Syslog日志价值。Gr...
- 从Oracle演进看数据库技术的发展(从oracle演进看数据库技术的发展的过程)
-
数据库技术发展本质上是应用需求驱动与基础架构演进的双向奔赴,如何分析其技术发展的脉络和方向?考虑到oracle数据库仍然是这个领域的王者,以其为例,管中窥豹,对其从Oracle8i到23ai版本的核...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (74)
- oracle基目录 (50)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (53)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)