APP下载

机器学习图像分类程序的蜕变测试框架

2020-09-04刘佳洛惠战伟寇大磊张仲伟

计算机工程与应用 2020年17期
关键词:正确性分类器变异

刘佳洛,姚 奕 ,黄 松,惠战伟,陈 强,寇大磊 ,2,张仲伟,3

1.陆军工程大学 指挥控制工程学院,南京 210007

2.中国人民解放军68023部队

3.中国人民解放军73671部队

1 引言

软件测试是保证软件可靠性和软件质量的重要手段,是评估软件能否满足设计需求的过程。软件测试旨在检测现有行为与预想行为之间的差异。软件测试是一种可以揭露软件问题并有助于软件的可信度的有效的方式。机器学习(Machine Learning)在计算机视觉、语音识别和自然语言处理等实际应用中已经取得了显著的成功。图像分类已经成为计算机视觉的一个最为重要的分支。因此对于研究机器学习图像分类器的测试就十分有意义。传统的测试技术构建了一组测试用例(<输入,输出>)。测试人员将该输入放入到待测程序中执行并且检查从待测程序中得到的输出是否和预期的输出一致。这种利用预期输出与实际输出做比较的技术对于软件测试而言是十分普遍的。然而,当测试人员测试基于机器学习的应用程序时,通过(<输入,输出>)对验证机器学习应用程序很大程度上是不可行的。这是因为[1]:

(1)这个待测程序需要大量的输入;

(2)在许多情况下,输入的预期输出是未知的或者太昂贵而无法构建;

(3)与传统应用程序的测试不同,找到一个或一些机器学习系统错误分类的实例并不表示存在错误。

当机器学习算法输出不正确时(例如对特定输入进行错误分类),可能存在多种潜在原因。这些包括:缺乏训练数据、使用不恰当的机器学习框架、学习算法存在实现错误;在当前实验阶段,几乎所有的不正确的输出都归因于缺乏训练数据,并敦促开发人员收集更多不同的训练数据。但是如果学习算法本身实现就存在错误,那么收集更多的训练数据将无济于事。正如Weyuker 所说[2],机器学习图像分类器本身就是用来解决疑难问题的程序,这类程序的输出就是疑难问题的答案。如果答案已知,那么这种程序也就没有存在的价值。这导致了机器学习图像分类器的测试面临着测试判定问题。

为了缓解测试判定问题,香港中文大学的Chen T Y提出了蜕变测试技术(Metamorphic Testing,MT)[3]。该技术针对程序在预期输出难以获取的情况下,将检查程序的实际输出是否符合预期输出转变为检查程序的多个输入所对应的执行结果之间是否满足某特性关系,这种关系被称为“蜕变关系”。蜕变测试以原始输入为基础,以蜕变关系为判断准则,当测试用例之间满足一定的输入关系时,检查所对应的输出之间是否符合相应的蜕变关系,若不满足,则可以认为软件存在缺陷,这就为缓解测试判定问题提供了一种有效途径。显然,蜕变测试开展的基础就是蜕变关系的正确性,即需要事先确定蜕变关系一定是程序的必要关系。这样在难以判定测试结果是否正确的情况下,就可以应用蜕变关系提供测试判定。

当前蜕变测试的研究热点是蜕变关系的构造和其在不同领域的应用,对测试过程的标准规范研究不是很多,这就造成了测试过程的随意性和盲目性。为了减少人为因素对测试过程的干扰,规范蜕变测试流程,本文提出了适用于机器学习图像分类程序的蜕变测试框架,并对其中的相关模块的实现方法做出了介绍。

2 机器学习图像分类程序的蜕变测试框架

针对机器学习图像分类程序的特点,提出了由蜕变关系构造、蜕变关系正确性判定、变异算子的构造、测试有效性度量等模块组成的蜕变测试框架。如图1所示。

在整个机器学习图像分类程序的蜕变测试框架中,由于本文针对于机器学习图像分类程序的实现错误,因此需要先排除数据以及机器学习框架的错误,首先将已收集好的原始训练集S和原始测试集T结合蜕变关系即可得到衍生训练集S′和衍生测试集T′;其次把原始训练集S和衍生训练集S′分别对已经编写好的机器学习图像分类算法A进行训练,分别得到图像分类器AT和图像分类器AT′;再次将原始测试集T和衍生测试集T′分别对图像分类器AT和图像分类器AT′进行测试;然后判断两个分类器的测试结果OAT与OAT′是否满足蜕变关系从而对蜕变关系进行正确性判定。接下来再通过执行变异算子得到机器学习图像分类算法A′,再将原始训练集S和衍生训练集S′分别对变异机器学习图像分类算法A′进行训练,分别得到图像分类器AT′和图像分类器A′T′;再次将原始测试集T和衍生测试集T′ 分别对图像分类器A′T和图像分类器A′T′进行测试;最后通过判断两个分类器的测试结果OA′T与OA′T′是否一致来度量蜕变关系的有效性。该框架主要分为以下几个模块:蜕变关系的构造、蜕变关系正确性判定、变异体的构造、测试有效性度量等。

2.1 蜕变关系构造及正确性判定

蜕变关系作为蜕变测试的核心,其正确性直接影响着蜕变测试的有效性[4]。通常蜕变关系来源于被测程序函数或者需求规格的必要属性,而这些必要属性自身的正确性就需要测试人员事先验证。因此,可以认为蜕变关系自身正确性是蜕变测试的前提条件。

蜕变测试可以有效地缓解测试判定问题。蜕变关系是目标算法的多次输出与预期输出之间关系的必要属性。往往这些属性的数量是很多的,几乎不能得到目标算法所有的蜕变关系,即便有可能获得所有的蜕变关系,但是由于必要性,它们仍然无法被证明是完备的。然而,最近的一项实例研究[5]取得了非常令人鼓舞的结果,该研究表明少数不同的蜕变关系的检错能力就十分接近测试判定的检错能力了。对于研究的全部待测程序,蜕变测试平均使用3到6个蜕变关系就可以检测到超过90%可能出现的故障。为了提高测试效益并减少测试成本,本文将针对机器学习图像分类算法构造3到6个蜕变关系来检测机器学习图像分类器是否存在实现错误。

一般来说,有两种验证蜕变关系正确性的方法:一方面可以根据人们的公理或者人们取得共识的定理构造蜕变关系,这类蜕变关系一般就不需要进一步验证[6-8]。对于程序函数为数学函数的程序,这种蜕变关系较为常见。另一方面,也可以根据被测程序的领域属性构造蜕变关系。通常,除非这类属性刚好是用户设定的特定需求[9-11],不然这类属性通常需要测试人员预先证明。针对机器学习图像分类程序的特点,可以从以下两个方面着手构建蜕变关系:

图1 机器学习图像分类程序的蜕变测试框架

(1)几何属性。对原始测试图像做几何变换可以得到新的测试图像,这样并未影响图像的内部布局,因此两幅图像的分类结果应当保持一致。

(2)算法特性。待测程序确定时,训练数据的改变会影响待测程序的参数进而影响测试结果,因此可以改变训练数据集的性质,查看输出是否符合预期。

2.2 变异测试及蜕变测试有效性度量

验证蜕变测试的效率和有效性都需要一定数量的被测件,并且这些被测件中必须包含一定数量的故障或者错误。而实际中,要得到被测软件真实故障的信息并不容易,这也就限制了蜕变测试效率的验证。

针对此问题,通常存在两种构造目标故障的方法:真实故障和变异测试[12]。变异测试中用于构造目标故障的人工构造的小错误也称为变异算子(Mutation Operator)[13],而变异算子产生的新程序称为变异体(Mutant),又称变异程序。这样对于相同的测试用例,如果变异体和原程序的输出不一致性,则认为变异被杀死。现有研究表明[14],能够发现简单变异构造的故障,也能够发现其他的复杂故障。同时,Andrews 等人[15]还发现,变异测试也可以用于评价蜕变测试的有效性。为了进一步了解现有研究中分别采用这两种方法的比例,对已公开发表文献中分别采用这两种故障构造方法的数量进行了统计,如图2所示。由图可见,显然绝大多数研究中都采用了变异测试方法来验证蜕变测试的效率或有效性,而只有约6%的文献中采用的存在真实故障的被测件。

图2 分别采用两个目标构造方法的文献数量统计图

通常,传统软件主要由开发人员以源代码的形式编程(图3),这可能是缺陷引入的主要来源。变异测试稍微修改程序代码以引入故障。

图3 传统软件开发和面向机器学习软件开发

对于机器学习应用程序而言(图3),借鉴上面的方法,在编写机器学习应用程序时,直接将潜在缺陷注入也是可行的。不过不同的是,由于机器学习应用程序参数同时也受到数据集的影响。因此,提出了两组变异算子,即数据变异算子和程序变异算子,它们对源程序进行相应的修改以引入潜在的故障。

3 面向SVM与VGG16图像分类器的蜕变测试研究

监督学习是从已标记的训练数据中推导出一个预测函数,用以预测测试数据上的未知标签的一项任务。训练数据可以有两个大小为k的向量表示。一个向量是训练样本S=s0,s1,…,sk-1,另一个是类标签C=c0,c1,…,ck-1。其中,ci是si的类标签。每个样本si具有m个特征提供给预测函数学习。类标签是有限集,每个类标签ci是它的一个元素,即c∈L=l0,l1,…,ln-1,其中n是类标签的数量[16]。监督机器学习应用程序执行分为两个阶段:训练阶段和测试阶段。在训练阶段中,监督分类算法使用训练样来学习预测函数。监督学习算法会分析属性与类标签之间的相互关联,从而尽可能地学习更好的预测函数。在测试阶段,将预测函数应用于无标签的数据集(测试集),其中类标签未知。该应用程序使用通过学习得到的预测函数来预测每个实例的类标签[16]。

本章主要研究SVM 和VGG16 图像分类器的蜕变测试方法。根据机器学习图像分类器的蜕变测试框架,首先为这两种图像分类器构造蜕变关系并对构造出的蜕变关系进行正确性判定,其次结合变异测试技术验证了该蜕变关系能有效地检测出机器学习图像分类器的实现错误。

3.1 面向SVM图像分类器的蜕变测试研究

3.1.1 蜕变关系的构造

首先选择了SVM算法,数据集选用digits手写体数据集,它将手写数字图像分为0 到9 的类。该算法可以分为基于线性核函数或非线性核函数实现。然后对线性核函数SVM 算法和非线性核函数SVM 算法均构造了蜕变关系。SVM 算法采用手写数字的标记数据,并学习这些训练数据中的内在属性是怎样分隔这些类别从而得到决策边界。每个标记数据都是8×8 像素的图像。像素是在灰度级别中,一个手写体数字图像例子由64 个数字的数组表示。有关一些digits 数据集的可视化,如图4 所示,接下来用已经训练好的模型预测测试图像的类别。该模型的输出为混淆矩阵和测试准确率。测试准确率越高就意味着模型对该测试图像正确分类越高。

图4 手写体数字图像和经蜕变关系之后的图像

根据原始数据集的几何属性以及SVM算法特性构造出了下面4种蜕变关系:

(1)MR-1:训练数据集和测试数据集特征排列改变,分类精度不变。

(2)MR-2:训练数据集中训练用例的顺序改变,分类精度不变。

(3)MR-3:训练数据集和测试数据集特征扩大常量倍,分类精度不变(只针对非线性内核)。

(4)MR-4:测试数据集特征线性缩放之后,分类精度不变(只针对线性内核)。

构造的四种MR 中的每一种都可以具有多种变化的方式。例如,在MR-1中,可以以多种方式对特征进行置换。针对每个MR只创建了一个变体。然而,该变体确保了该方面的每个方面数据实例已更改。例如,在MR-1中,每个特征都发生置换。在MR-2中,每个训练数据实例的顺序被改变了。同理,对于MR-3和MR-4,相应地也构建了一个变体。

3.1.2 蜕变关系的正确性判定

接下来从以上4 种蜕变关系分别选出一个蜕变关系,并用实验证明其正确性。针对MR-1,改变训练数据集和测试数据集的特征排列,得到衍生训练集和衍生测试集。并依照机器学习蜕变测试框架,分别将原始的训练集和衍生训练集放入SVM 算法进行训练,可得到原始的训练模型和衍生训练模型,再将这两个训练模型分别对原始的测试集和衍生测试集进行测试,图5为两个训练模型的测试结果。

图5 数据满足同分布时的测试结果

上述实验测试集和训练集满足同分布特性,下面针对原有数据集构造不同分布的测试集和训练集进行上述同样的实验,图6为测试集和训练集不满足同分布特性时的测试结果。

对比上述两个实验可得训练数据集与测试数据集在不满足同分布特性情况下,蜕变关系依旧正确。由图6测试结果可以得到,改变训练数据集和测试数据集特征排列,其分类精度不改变。因此证明了MR-1的正确性。同理,针对MR-2、MR-3、MR-4 依次按照机器学习蜕变测试框架进行实验,实验结果表明该4条蜕变关系的正确性。

图6 数据不满足同分布特性时的测试结果

3.1.3 变异体的构造

采用变异测试技术来证明基于机器学习图像分类器的蜕变关系的有效性及检错能力。变异测试是测试质量评估和测试充分性度量的有效技术手段。在该实验中,使用一款针对python程序变异算子的生成工具(Mutpy)[17]来生成变异算子,通过变异测试技术[18]有目的地引入实现错误,用来证明基于这两种机器学习程序构造出的蜕变关系的正确性。变异测试系统地更改原始源文件中的代码行并生成多个新的源代码文件。每个文件都只携带一个bug。这个带有bug的文件成为变异体。一般来说,由变异测试生成的变异代表程序员通常犯的错误。

采用上述的Mutpy 工具为线性内核和非线性内核的SVM 应用程序分别构造了6 个变异算子,其具体变异算子如表1所示。

3.1.4 实验结果

将提供的原始训练数据集和测试集根据蜕变关系生成新的训练集和测试集,然后用新得到的数据集和原始数据集分别执行6 个变异体。如果变异体和原程序的输出不一致,则认为变异被杀死。表2 为线性SVM分类器杀死变异体的结果,表3 为非线性SVM 分类器杀死变异体的结果,表中的√表示变异体被杀死。

实验结果表明,线性内核和非线性内核的SVM 应用程序构造的6 个变异体均能被以上4 种蜕变关系杀死。同时,MR-1(改变数据集的特征排列)杀死了所有变异体。这是因为构造的6 个变异体均对应于输入数据不正确,MR-1改变了数据集的特征排列,因此该蜕变关系可以杀死所有变异体。同理,MR-3(同时增加或减少数据集特征)也能杀死所有的变异体。

表1 支持向量机变异构造列表

表2 线性SVM分类器杀死变异体的结果

表3 非线性SVM分类器杀死变异体的结果

3.2 面向VGG16图像分类器的蜕变测试研究

3.2.1 蜕变关系的构造

选择的第二个图像分类器是深度学习的图像分类器被称为VGG16。VGG16 模型的出现,使得卷积神经网络取得了突破性的成就。该模型能将图像分类这一任务很好地完成,并在2014年ILSVRC竞赛中取得了优异的成绩。本文基于tensorflow 框架实现VGG16。VGG16图像分类器对已标记数据进行训练和测试,选用CIFAR-10 数据集[19]。该数据集的每个数据实例都是32×32 像素彩色图像,即每个实例具有32×32×3特征数字并已被分为10 个互斥类。图7 中显示了一些数据实例的可视化。对于给定的一组测试实例,VGG16图像分类器输出分为测试分类准确度和测试损失,测试损失表示预测类和实际类之间的交叉熵用来衡量分类效果的值。

图7 CIFAR-10数据实例可视化

根据原始数据集的几何属性以及VGG算法特性构造出了下面3种蜕变关系:

(1)MR-1:训练数据集和测试数据集输入RGB 通道排列改变,分类精度不变。

(2)MR-2:训练数据集和测试数据集卷积操作排列改变,分类精度不变。

(3)MR-3:测试数据集特征均乘以一个常数k,分类精度不变。

图8 为原始训练图像和将该图像经过RGB 通道置换后的训练图像的可视化,图9为原始训练图像和将该图像经过CONV 顺序置换后的训练图像的可视化,图10为原始测试图像和将该图像每个特征乘以一个常数k以后的测试图像的可视化。

图8 图像经RGB通道置换后的训练图

图10 特征乘以一个常数k 以后的测试图像

3.2.2 蜕变关系的正确性判定

接下来从以上3 种蜕变关系分别选出一个蜕变关系,并通过实验证明该蜕变关系正确性。对于MR-1,改变训练数据集和测试数据集RGB 通道排列顺序,得到衍生训练集和衍生测试集。并按照机器学习蜕变测试框架,分别将原始的训练集和衍生训练集放入VGG16进行训练,可得到原始的VGG16 图像分类器和衍生的VGG16 图像分类器,再将这两个图像分类器分别对原始的测试集和衍生测试集进行测试,图11 为训练模型的测试结果。由于测试损失和测试精度都是能很好反应测试性能的,又因为测试精度本身差值最多为100%,这里选用测试损失更好地反应不同的 RGB 通道变化曲线。

图11 MR-1测试结果

表4 VGG变异构造列表

由图11 测试结果可以得到,改变训练数据集和测试数据集RGB 通道排列顺序,其测试损失大致不变。因此证明了MR-1的正确性。

同理,针对MR-2、MR-3 依次按照机器学习蜕变测试框架进行实验,实验结果表明该3 条蜕变关系的正确性。

3.2.3 变异体的构造

采用上述的Mutpy工具为VGG图像分类模型一共构造了10个变异体,10个变异体类型如表4所示。该表显示了编写深度学习Python程序可能产生的常见错误。

3.2.4 实验结果

图12 显示了 MR-1、MR-2、MR-3 在杀死以上变异体的测试损失图,计算了每个变异体的最大偏差σ,如果σ超过最大阈值,则认为该蜕变关系杀死了变异体。比较无变异体的图11 可以得到,图12 中可以很好地看到一些比较异常的测试损失,表5 为这3 种蜕变关系执行所有的变异体之后的结果。表中的√表示变异体被杀死。从表中可以看出MR-1 杀死了M6、M7、M8 这3个变异体,MR-2杀死了M2、M4、M5、M8这4个变异体,同样可以得出MR-3也能杀死变异体,这将是非常有用的,因为MR-3可以在已经运用训练好的模型上。这将更好地推进整个过程的自动化。

4 总结与讨论

与测试机器学习应用程序相比,已经有大量的工作投入在通过机器学习方法来解决软件测试问题。例如,机器学习已被用来预测给定程序的蜕变关系[20]。蜕变测试已应用于测试不同类型的机器学习应用[21]。一个现实世界的案例研究机器学习应用程序框架表明蜕变关系可以有效地检测故障。

表5 3种蜕变关系执行所有的变异体之后的结果

蜕变关系已被证明是蜕变测试的核心要素。Jameel等将蜕变测试用于图像处理应用[22]。他们证明与特定图片相关的蜕变关系在检测故障能力更有效。在进行蜕变测试时,使用蜕变关系来增强机器学习。这里通过输入数据的属性和二进制分类模型的用法来识别蜕变关系。惠战伟等人[23]提出了一种用于GIS 测试的半自动蜕变方法,通过表面积计算程序来说明测试方法的过程。同时开发了一个蜕变关系模型生成复合蜕变关系。

怎样识别有效的蜕变关系也尤为重要,Asrafi 等[24]已经观察到MR 实现的测试代码覆盖率与其故障检测有效性之间的相关性。在面向对象的软件测试中,已经提出了一种基于代数规范构造蜕变关系的方法[25]。该方法提供低蜕变冗余并提高软件测试的效率。μMT[26]一种MR 构造工具,它使用数据变异来构造输入关系,以及与每个变异算子相关的通用映射规则来构造输出关系。

图12 MR-1,MR-2,MR-3杀死以上变异体的测试损失图

在本文中,研究了基于机器学习图像分类器的实现错误的问题,由于机器学习图像分类器存在着测试预言问题,采用了蜕变测试技术,同时,为了规范测试流程、提高测试效率,提出了一种适用于机器学习图像分类程序的蜕变测试框架。并且通过测试基于SVM和VGGNet图像分类程序,验证了该测试框架的合理性和有效性。实验结果表明,平均有75%的实现错误能被本文方法所发现,这为下一步自动化测试机器学习应用程序奠定了良好的基础。

猜你喜欢

正确性分类器变异
变异危机
变异
一种基于系统稳定性和正确性的定位导航方法研究
基于差异性测度的遥感自适应分类器选择
基于实例的强分类器快速集成方法
浅谈如何提高水质检测结果准确性
“正确性”与“实用性”的初探
变异的蚊子
基于层次化分类器的遥感图像飞机目标检测
一种基于置换的组合分类器剪枝方法