李铮(1998-), 男, 硕士生, CCF学生会员, 主要研究领域为智能软件工程
崔展齐(1984-), 男, 博士, 副教授, CCF高级会员, 主要研究领域为软件测试及分析, 智能软件工程
陈翔(1980-), 男, 博士, 副教授, CCF高级会员, 主要研究领域为软件缺陷预测, 软件缺陷定位, 回归测试, 组合测试
王荣存(1979-), 男, 博士, 副教授, CCF专业会员, 主要研究领域为软件测试, 缺陷定位, 软件维护
刘建宾(1963-), 男, 博士, 教授, CCF专业会员, 主要研究领域为程序建模理论与方法, 智能化软件开发技术, 模型驱动软件工程
郑丽伟(1979-), 男, 博士, 副教授, CCF专业会员, 主要研究领域为需求工程, 群体协同, 大数据挖掘
深度神经网络已经在自动驾驶和智能医疗等领域取得了广泛的应用. 与传统软件一样, 深度神经网络也不可避免地包含缺陷, 如果做出错误决定, 可能会造成严重后果. 因此, 深度神经网络的质量保障受到了广泛关注. 然而, 深度神经网络与传统软件存在较大差异, 传统软件质量保障方法无法直接应用于深度神经网络, 需要设计有针对性的质量保障方法. 软件缺陷定位是保障软件质量的重要方法之一, 基于频谱的缺陷定位方法在传统软件的缺陷定位中取得了很好的效果, 但无法直接应用于深度神经网络. 在传统软件缺陷定位方法的基础上提出了一种基于频谱的深度神经网络缺陷定位方法Deep-SBFL. 该方法首先通过收集深度神经网络的神经元输出信息和预测结果作为频谱信息; 然后将频谱信息进行处理作为贡献信息, 以用于量化神经元对预测结果所做的贡献; 最后提出了针对深度神经网络缺陷定位的怀疑度公式, 基于贡献信息计算深度神经网络中神经元的怀疑度并进行排序, 以找出最有可能存在缺陷的神经元. 为验证该方法的有效性, 以
Deep neural networks have been widely used in fields such as autonomous driving and smart healthcare. Like traditional software, deep neural networks inevitably contain defects, and it may cause serious consequences if they make wrong decisions. Therefore, the quality assurance of deep neural networks has received extensive attention. However, deep neural networks are quite different from traditional software. Traditional software quality assurance methods cannot be directly applied to deep neural networks, and targeted quality assurance methods need to be designed. Software fault localization is one of the important methods to ensure software quality. The spectrum-based fault localization method has achieved good results in traditional software fault localization methods, but it cannot be directly applied to deep neural networks. In this study, based on the traditional software fault localization methods, a spectrum-based fault localization approach named Deep-SBFL for deep neural network is proposed. The approach firstly collects the neuron output information and the prediction results of deep neural network as the spectrum. The spectrum is then further calculated as the contribution information, which can be used to quantify the contribution of neurons to the predicted results. Finally, a suspicious formula for the defect localization of deep neural network is proposed. Based on the contribution information, the suspiciousness scores of neurons in deep neural network are calculated and ranked to find out the most likely defective neurons. To verify the effectiveness of the method,
作为一种重要的机器学习模型, 深度神经网络(deep neural network, DNN)已在很多领域中取得了广泛的应用. 在医学图像分析[
目前, 适用于DNN的缺陷检测技术受到了广泛关注, 如使用蜕变关系对DNN进行测试[
传统软件通常是根据预先编写好的程序生成一组规则[
在使用过程中, DNN可被视为一个黑盒, 它可以通过大量神经元中的简单函数来模拟任何一个连续函数. 以全连接DNN为例, 其中每个神经元都有输出, 这些输出经过权重将影响传递到下一层的神经元, 或者经过激活函数计算出新的输出. DNN中的组成元素都有可能对最终结果产生影响, 无法准确找出某一个神经元、某种结构或者某种激活函数对DNN所产生结果的具体影响. 从这个角度来看, 其存在的缺陷难以被定位. 如果DNN的输出结果错误, 则难以准确找出造成错误的具体元素, 也就无法有针对性地构造数据集进行重训练或调试. 因此, 如何定量分析DNN的组成元素对预测结果的影响就成了定位DNN缺陷的一个切入点.
基于频谱的缺陷定位方法[
本文的主要贡献如下.
(1) 提出一种基于频谱的DNN缺陷定位方法Deep-SBFL, 该方法能在神经元的粒度上定位DNN中隐含的缺陷.
(2) 基于所提出的方法实现原型工具, 在MNIST数据集上开展实验, 验证Deep-SBFL的有效性.
本文第2节介绍研究背景和相关工作. 第3节介绍Deep-SBFL的框架和具体流程. 第4节介绍实验设计. 第5节对实验结果进行分析和讨论. 第6节进行总结并对未来工作加以展望.
本节将分别从软件缺陷定位和DNN缺陷检测及调试两个方面对已有研究工作进行总结.
软件缺陷定位的目标是识别与软件缺陷相关的程序元素, 它可以帮助程序开发人员更快、更准确地发现程序中需要修复的地方, 以提升程序的可靠性. 早期以人工调试为主的缺陷定位不仅耗时长, 而且难度大. 为此, 研究人员提出了多种不同类型的缺陷定位方法.
基于频谱的缺陷定位方法是目前传统软件缺陷定位研究中的重要方法[
程序频谱[
基于变异的缺陷定位方法将变异分析[
程序切片由Weiser等人[
Reiter等人[
上述缺陷定位方法主要针对传统软件, 传统软件的编程范式与DNN的编程范式具有显著差异[
Ma等人[
DNN结构复杂, 且相对使用者来说是一个黑盒, 数据中的微小变化即有可能对其最终结果产生明显影响. 随着DNN被更多地应用于安全性要求高的场景中, 甚至有时会代替人做出重要的决定, 如何保障其可靠性就成为一个重要的问题.
目前研究人员针对DNN的缺陷检测已经展开了深入研究, 如蜕变测试、变异测试和DNN的覆盖准则等. Dwarakanath等人[
还有一些工作主要关注于DNN缺陷的实证研究. Zhang等人[
Pham等人[
现有的DNN缺陷修复方法主要是通过重训练或直接修改的方式来调整权重, 以达到修复的目的. Ma等人[
本节将从方法框架、怀疑度公式和方法具体实现3个方面详细介绍所提出的基于频谱的DNN缺陷定位方法Deep-SBFL.
DNN模型中每层包含一组神经元, 两个连续层中的神经元通过边连接起来, 每条边上都有表征其连接强度的权重. 神经元间可以通过带权重的边来传递信号. 两个连续层间的连接关系由一个矩阵表示, 矩阵中每个单元的值为对应神经元间权重. 训练神经网络模型的本质就是更新权重, 以便最后一层神经元可以产生正确的预测输出. 反向传播是用于训练的核心方法, 它根据权重参数计算输出损失的梯度. 直观地讲, 较大的梯度表示如果更改了相应的权重参数, 结果将产生大的变化. 在反向传播中, 梯度会向后反馈以更新权重矩阵. 所以如果矩阵的权重没有被恰当的更新, 那么这样的模型给出的结果就会出现错误. 除了权重以外, DNN的结构和其所使用的激活函数也会对结果产生较大影响. DNN隐藏层的数目越多, DNN越能学习到抽象的特征, 但是当层数过多时, DNN学习到的特征会变得过于抽象而导致过拟合. 激活函数也一样, 选择合适的激活函数可以使神经网络的效果更好. 但是无论是权重还是激活函数, 最后都会作用在神经元的输出上, 然后再作为输入传入下一层神经元或者作为最终结果.
基于上述特征, 本文提出了基于频谱的DNN缺陷定位方法Deep-SBFL, 其框架如
基于频谱的深度神经网络缺陷定位方法框架图
与神经元覆盖率不同, 神经元频谱不是简单统计在某一测试数据集下, 神经元是否被激活过, 也不像传统基于频谱的缺陷定位方法那样统计神经元的覆盖数. 在本方法中, 通过提取贡献信息来量化神经元对结果的贡献程度. 在Deep-SBFL中, 可以正向计算贡献信息(以下简称正向计算)和反向计算贡献信息(以下简称反向计算). 在获取贡献信息之前, 假定已经获得了各条测试数据的预期输出, 每条测试数据及其预期输出组成为一条测试用例. 在执行测试用例集的过程中, 若是DNN的输出与测试用例的预期输出不一致, 则称该测试用例为负效测试用例, 反之则称为正效测试用例.
在正向计算中, 获取每个测试用例执行时, 各个神经元的输出作为用例贡献值, 然后分别累加单个神经元在正效测试用例和负效测试用例下的输出. 正效测试用例下的输出之和代表了神经元对于结果正确所做的贡献, 称之为正贡献; 负效测试用例下的输出之和代表了神经元对于结果错误所做的贡献, 称之为负贡献.
另一种是反向计算, 它从测试集的输出结果出发, 首先获取每一个测试用例的输出结果, 然后计算与该输出相连的权重各自所占的比例, 最后将该输出与各个权重所占的比例相乘, 作为上一层的神经元对下一层的神经元所做的用例贡献值. 之后与正向计算相似, 分别累加单个神经元在正效测试用例和负效测试用例下的贡献值, 正效测试用例下的贡献值之和代表了神经元对于结果正确所做的贡献, 为正贡献, 负效测试用例下的贡献值之和代表了神经元对于结果错误所做的贡献, 为负贡献.
对于神经元来说, 正贡献所对应的数值越大, 代表该神经元对结果正确所做的贡献越大, 即该神经元存在缺陷的概率越小, 反之, 负贡献所对应的数值越大, 代表该神经元对结果错误所做的贡献越大, 即神经元存在缺陷的概率越大. 这种关系与传统的基于频谱的缺陷定位技术中程序频谱与怀疑度的关系类似. 我们将传统频谱测试中的怀疑度公式进行了调整, 使其能够应用于定位DNN.
DStar[
DNN模型可定义为一个5元组
基于频谱的深度神经网络缺陷定法如算法1所示. 算法1的输入包括待测DNN模型
算法
输入: DNN模型
输出: 神经元序列
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
深度神经网络的贡献信息是在模型的运行过程中提取的, 用来量化分析各个神经元为每条测试数据做出预测结果贡献程度的信息. 每个神经元的贡献信息包含两个数据, 即正贡献和负贡献. 除了权重的变化会影响到神经元的输出外, 无论是激活函数还是神经网络结构的缺陷, 最终都会表现在神经元上, 如修改或删除激活函数会使神经元对下一层的输出发生变化. 神经网络结构的缺陷, 如多了一层神经元或是少了一层神经元亦会使神经元的输出发生变化. 因此本方法主要在神经元粒度进行缺陷定位, 即识别包含缺陷的神经元所在位置(如权重异常增大, 则应定位到该权重所连接的输出位置).
在Deep-SBFL中, 可使用正向计算和反向计算两种方式来获取神经元的贡献信息. 正向计算使用输入数据和权重按照神经网络的计算顺序从前向后计算正贡献和负贡献信息, 分别为各神经元对应所有成功测试数据的输出之和与所有失败测试数据的输出之和. 反向计算使用输出结果和权重从后往前计算获取贡献信息. 首先计算神经元中各个权重所占权重之和的比例, 然后从输出层开始, 将每层中各个神经元的输出分别乘以与之相连的权重所占的比例, 然后将对应权重得到的结果求和得到每个权重的贡献信息, 最后将神经元中所有权重的贡献信息求和作为神经元的贡献信息.
(1)对于待测DNN模型
(2)待测试用例集
(3)将第(2)步中获得的
(1)对于待测神经网络
(2)待测试用例集
(3)将第(2)步中获得的
如
示例神经网络结构图
在该示例中, 假设植入一个缺陷, 即连接输入1.1和2.1的权重1.0被扩大5倍变成5.0, 将造成神经元2.1存在缺陷. 使用差分测试[
我们选择了4条数据分别使用正向计算和反向计算来计算神经元的怀疑度. 如
示例测试数据
测试用例 | 数据 | 基于原始模型的预测结果 | 基于修改后模型的预测结果 |
#1 | (0.31, 0.10) | 1 | 1 |
#2 | (0.33, −0.055) | 0 | 1 |
#3 | (−0.30, 0.26) | 2 | 2 |
#4 | (−0.23, 0.33) | 1 | 2 |
正向计算首先需要获得每个神经元的输出, 在该示例中直接使用神经网络测试时的运行数据, 如
正向计算结果
神经元 | 测试用例贡献值 |
|
|
怀疑度 | 排名 | |||
#1 | #2 | #3 | #4 | |||||
2.1 | 2.8 | 2.7 | 0.068 | 0.54 | 2.9 | 3.2 | 7.7×1015 | 1 |
2.2 | 1.1 | 1.3 | 0.16 | 0.13 | 1.3 | 1.4 | 2.5×104 | 3 |
2.3 | 0.26 | 0.22 | 1.2 | 1.1 | 1.5 | 1.3 | 2.1×103 | 4 |
3.1 | −0.69 | −0.36 | −0.40 | −0.66 | −1.1 | −1.0 | 1.1×101 | 5 |
3.2 | 2.3 | 2.0 | −1.1 | −0.41 | 1.2 | 1.6 | 1.9×106 | 2 |
3.3 | −1.6 | −1.7 | 1.5 | 1.1 | −0.10 | −0.60 | 1.4×10−33 | 6 |
测试用例类型 | 正效 | 负效 | 正效 | 负效 | - | - | - | - |
反向计算需要获得与对应神经元相连的各权重占总权重的比例, 如连接神经元3.2与前一层神经元的权重分别为1.3、−0.59和0.37, 它们占总权重的比例分别为
反向计算结果
神经元 | 测试用例贡献值 |
|
|
怀疑度 | 排名 | |||
#1 | #2 | #3 | #4 | |||||
2.1 | 3.8 | 3.8 | 2.7 | 2.7 | 6.5 | 6.5 | 5.1×1025 | 1 |
2.2 | −1.7 | −1.7 | 1.6 | 1.6 | −0.1 | −0.1 | 5.0×10−33 | 5 |
2.3 | −1.1 | −1.1 | −3.3 | −3.3 | −4.4 | −4.4 | 1.9×1020 | 2 |
3.1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 6 |
3.2 | 1 | 1 | 0 | 0 | 1 | 1 | 0.5 | 3 |
3.3 | 0 | 0 | 1 | 1 | 1 | 1 | 0.5 | 3 |
测试用例类型 | 正效 | 负效 | 正效 | 负效 | - | - | - | - |
本文通过研究以下问题来验证所提出的缺陷定位方法Deep-SBFL和怀疑度计算公式
RQ1: 所提两种贡献信息计算方式对DNN中缺陷的定位效果如何? 对不同类型的缺陷, 不同计算方式的定位效果是否存在差异?
在Deep-SBFL中我们设计了正向计算和反向计算两种方式获取神经元的贡献信息, 为了探究两种方式的缺陷定位效果是否有差异, 我们设计了RQ1, 在Deep-SBFL中分别使用正向计算和反向计算获取待测DNN中神经元的贡献信息, 然后使用相同的怀疑度计算公式计算其怀疑度并排序, 观察其定位效果, 另外也将分析两种计算方式对不同类型缺陷的定位效果是否有差异.
RQ2: 缺陷所在层的位置是否会影响Deep-SBFL的缺陷定位效果?
DNN中可能存在很多层, 不同层中的缺陷对预测结果的影响不同, 因此也会影响到Deep-SBFL中对贡献信息的获取, 我们设计了RQ2, 分析缺陷所在层的位置是否会对缺陷定位的效果产生影响.
RQ3: 测试数据是否会影响Deep-SBFL的缺陷定位效果?
本文中使用差分测试的思想来区分正效和负效测试用例, 不同使用场景下, 正效测试用例和负效测试用例的数量会有不同. Deep-SBFL通过正效测试用例和负效测试用例来计算贡献信息中的正贡献和负贡献, 然后将其代入怀疑度公式计算怀疑度, 测试数据中不同比例的负效测试用例可能会影响该方法缺陷定位的效果, 因此我们设计了RQ3, 研究测试数据是否会影响缺陷定位的效果.
RQ4: DNN的准确率是否会影响Deep-SBFL的缺陷定位效果?
DNN的准确率是评价其性能的一个直观的指标, 缺陷会影响DNN的输出, 从而造成准确率差异, 我们通过设计RQ4, 来研究Deep-SBFL在准确率不同的DNN上的缺陷定位效果.
我们使用PyTorch基于MNIST数据集训练了一个全连接神经网络模型, 该模型一共有4层, 有784个输入神经元, 10个输出神经元, 中间有2个隐藏层, 分别有500个神经元, 使用激活函数为ReLU, 该神经网络模型在MNIST的测试集中的准确率为96.51%.
变异分析是指对程序代码执行变异操作生成变异体, 然后在变异体上执行测试用例, 获得执行结果, 最后结合程序结构分析测试用例的执行路径来优化或调试程序. 变异测试将变异分析应用于软件测试中, 根据程序的特性设计并应用变异算子为程序生成大量模拟程序错误的变异体[
与传统软件的变异测试思想类似, 研究人员提出了针对深度学习程序的变异方法. Shen等人[
本文在实验中使用DeepMutation[
实验中所用变异算子
变异算子 | 描述 |
Weight scaling | 选择一个神经元的权重对其进行一定程度的缩放 |
Weight shuffing | 选择一个神经元的权重和一个和它有联系(connection)的神经元交换 |
Neuron effect blocking | 将一个神经元对下一层的影响阻断, 通过将连接下一层的权重设为0, 移除了神经元对整个神经网络的影响 |
Neuron activation inverse | 逆转神经元的激活状态, 通过在运用激活函数之前将输出反转(正变负, 负变正) |
Neuron switch | 交换同一层的两个神经元, 也即是交换它们的角色和对下一层的影响 |
为了回答所提出的研究问题, 首先使用
变异体生成情况
变异算子 | 输入层 | 隐藏层1 | 隐藏层2 | 输出层 | 总计 |
Weight scaling | 100 | 100 | 100 | 100 | 400 |
Weight shuffing | 100 | 100 | 100 | - | 300 |
Neuron effect blocking | 100 | 100 | 100 | 10 | 310 |
Neuron activation inverse | 100 | 100 | 100 | 10 | 310 |
Neuron switch | 100 | 100 | 100 | 45 | 345 |
实验使用
本文中的所有实验均是在CPU (i5-9300H), 16 GB物理内存的64位Windows 10操作系统的计算机上进行的. 本实验的开发和运行环境为Python 3.6, 训练和测试神经网络模型的机器学习库为PyTorch.
我们使用差分测试[
在DNN模型上生成变异体之后使用Deep-SBFL对所有变异体进行缺陷定位, 将结果与真实缺陷位置进行对比, 其中
The
各类变异体的
从
为详细分析两种计算方式对不同类型的缺陷定位效果是否有差异,
The result of mutants with different
变异体在不同
计算方式 | Neuron activation
|
Neuron effect
|
Neuron switch (83) | Weight scaling (3) | Weight shuffing (1) | 合计 | |
正向计算 | 0 | 0 | 116 | ||||
反向计算 | 2 (1.57%) | 0 | 8 (9.64%) | 0 | 0 | 10 | |
正向计算 | 0 | 0 | 136 | ||||
反向计算 | 2 (1.57%) | 0 | 11 (13.25%) | 0 | 0 | 13 | |
正向计算 | 0 | 1 (100%) | 151 | ||||
反向计算 | 4 (3.15%) | 0 | 20 (24.10%) | 0 | 1 (100%) | 25 | |
正向计算 | 0 | 2 (66.67%) | 1 (100%) | 172 | |||
反向计算 | 10 (7.87%) | 0 | 53 (63.86%) | 1 (100%) | 67 | ||
正向计算 | 0 | 3 (100%) | 1 (100%) | 177 | |||
反向计算 | 22 (17.32%) | 0 | 56 (67.47%) | 3 (100%) | 1 (100%) | 82 |
对
对
对
Deep-SBFL中正向计算比反向计算效果更好, 整体
对RQ1的回答: Deep-SBFL中正向计算比反向计算的缺陷定位效果更好, 4类变异算子所生成变异体定位的EXAM平均数均低于0.08,中位数均低于0.01. Deep-SBFL对不同类型缺陷的定位效果不同, 在正向计算时, 对变异算子neuron effect blocking生成变异体的定位效果较差, 对变异算子neuron activation inverse生成变异体的定位效果较好, 体现了DNN中不同类型缺陷的差异性.
为了分析缺陷所在的不同位置对定位效果的影响, 统计了不同变异算子在DNN模型各层的变异体下的平均
The
缺陷分布在不同层中的
对RQ2的回答: 缺陷深度神经网络中所在层的位置会影响缺陷定位效果. 实验数据表明, 在大部分情况下, 存在缺陷的神经元越靠近输出层越容易被准确定位.
为分析测试数据是否会影响该方法的定位效果, 生成统计
The influence of negative test cases on defect localization
负效测试用例对DNN模型缺陷定位
变异算子neuron activation inverse和neuron switch所生成的变异体在不同比例负效测试用例下的
由于变异算子weight scaling和weight shuffing只对神经元中的1个或2个权重进行变异, 对最终结果生成的影响较小. 在实验中, 它们所生成的变异体只有少量个体准确率差异超过0.1%, 分别为3个和1个.
总体上看, 当测试集中负效测试用例所占比例越高, 缺陷定位的效果越好.
对RQ3的回答: 测试用例集中负效测试用例的比例会影响Deep-SBFL的缺陷定位效果. 通常情况下, 测试用例集中负效测试用例占的比例越大, Deep-SBFL的缺陷定位效果就越好.
The distribution of defect localization
不同准确率DNN模型缺陷定位的
对于变异算子neuron activation inverse所生成变异体, 当准确率差异在(0, 0.1%]间,
总体上看, 变异体相比原始DNN模型的准确率差异越大, 缺陷定位的效果就越好. 如
对RQ4的回答: DNN模型的准确率会影响Deep-SBFL的缺陷定位效果. 通常情况下, DNN模型的准确率与预期相差越大, Deep-SBFL的缺陷定位效果就越好.
本节从内部有效性、外部有效性和构造有效性3个方面进行有效性分析.
本方法内部有效性的影响主要在于两个方面, 一是实验所使用的变异体是否可以模拟真实的深度神经网络中的缺陷, 本文实现了DeepMutation中定义的神经网络变异算子来生成神经网络变异体, 使用这些变异算子生成的变异体可以用来模拟神经网络中的真实缺陷. 二是怀疑度公式的合理性, 基于程序频谱的传统软件缺陷定位方法中有很多种怀疑度公式, Ochiai和D*等公式在不同场景中都取得过最优的性能[
本方法外部有效性的影响主要在于所构建存在缺陷的DNN模型是否能代表真实的缺陷. 变异分析在DNN测试中是一种常用的方法[
本方法构造有效性的影响主要在于评价缺陷定位效果的评价指标, 本文采用了缺陷定位中常用的指标
本文分析了现有的软件缺陷定位和DNN缺陷检测方法, 并提出了一种基于频谱的深度神经网络缺陷定位方法Deep-SBFL, 用来定位深度神经网络中存在缺陷的神经元. 具体来说, 该方法首先输入测试用例集来运行模型, 获取模型中神经元的贡献信息, 然后将各神经元对应的贡献信息代入怀疑度公式计算, 并根据怀疑度进行排序, 以定位存在缺陷的神经元. 基于上述方法, 本文在使用MNIST数据集训练的深度神经网络上进行了实验, 以验证Deep-SBFL的其有效性. 实验结果表明, Deep-SBFL在深度神经网络的缺陷定位上取得了一定的效果, 其中对变异算子neuron switch所生成变异体的定位效果最好, 83个变异体的平均
在下一步工作中将考虑使用蜕变测试等方法来生成大量负效测试用例, 以提高缺陷定位的准确性. 其次, 怀疑度公式在本方法中占据重要的地位, 对其改进也是一个重要的研究方向. 再次, 尝试将本方法应用于Apricot等方法中, 以提升其修复DNN模型缺陷的效率. 最后, 基于变异的DNN缺陷定位方法也是未来我们研究的重点之一.
Litjens G, Kooi T, Bejnordi BE, Setio AAA, Ciompi F, Ghafoorian M, van der Laak JAWM, van Ginneken B, Sánchez CI. A survey on deep learning in medical image analysis. Medical Image Analysis, 2017, 42: 60–88. [doi: 10.1016/j.media.2017.07.005]
Vinayakumar R, Alazab M, Soman KP, Poornachandran P, Venkatraman S. Robust intelligent malware detection using deep learning. IEEE Access, 2019, 7: 46717–46738. [doi: 10.1109/ACCESS.2019.2906934]
https://www.nytimes.com/2018/03/23/technology/uber-self-driving-cars-arizona.html]]>
https://www.wired.com/story/hackers-say-broke-face-id-sec urity/]]>
Harrold MJ, Rothermel G, Sayre K, Wu R, Yi L. An empirical investigation of the relationship between spectra differences and regression faults. Software Testing, Verification and Reliability, 2000, 10(3): 171–194. [doi: 10.1002/1099-1689(200009)10:3<171::AID-STVR209>3.0.CO;2-J]
Wong WE, Debroy V, Gao RZ, Li YH. The DStar method for effective software fault localization. IEEE Transactions on Reliability, 2014, 63(1): 290–308. [doi: 10.1109/TR.2013.2285319]
Jia Y, Harman M. An analysis and survey of the development of mutation testing. IEEE Transactions on Software Engineering, 2011, 37(5): 649–678. [doi: 10.1109/TSE.2010.62]
Zhang J, Zhang LM, Harman M, Hao D, Jia Y, Zhang L. Predictive mutation testing. IEEE Transactions on Software Engineering, 2019, 45(9): 898–918. [doi: 10.1109/TSE.2018.2809496]
Weiser M. Programmers use slices when debugging. Communications of the ACM, 1982, 25(7): 446–452. [doi: 10.1145/358557.358577]
http://www.jos.org.cn/1000-9825/4342.htm]]>
http://www.jos.org.cn/1000-9825/4342.htm]]>
Reiter R. A theory of diagnosis from first principles. Artificial Intelligence, 1987, 32(1): 57–95. [doi: 10.1016/0004-3702(87)90062-2]
http://www.jos.org.cn/1000-9825/4708.htm]]>
http://www.jos.org.cn/1000-9825/4708.htm]]>
http://www.jos.org.cn/1000-9825/5951.htm]]>
http://www.jos.org.cn/1000-9825/5951.htm]]>
https://cs.gmu.edu/offutt/mujava/]]>
https://www.cs.waikato.ac.nz/ml/weka/]]>
https://github.com/tensorflow]]>
https://scikit-learn.org/stable/]]>
https://github.com/PaddlePaddle/Paddle]]>
http://caffe.berkeleyvision.org/]]>
Mckeeman WM. Differential testing for software. Digital Technical Journal, 1998, 10(1): 100–107.
Naish L, Lee HJ, Ramamohanarao K. A model for spectra-based software diagnosis. ACM Transactions on Software Engineering and Methodology, 2011, 20(3): 11. [doi: 10.1145/2000791.2000795]
Xie XY, Chen TY, Kuo FC, Xu BW. A theoretical analysis of the risk evaluation formulas for spectrum-based fault localization. ACM Transactions on Software Engineering and Methodology, 2013, 22(4): 31. [doi: 10.1145/2522920.2522924]
Zou DM, Liang JJ, Xiong YF, Ernst MD, Zhang L. An empirical study of fault localization families and their combinations. IEEE Transactions on Software Engineering, 2021, 47(2): 332–347. [doi: 10.1109/TSE.2019.2892102]
Mahapatra RP, Negi A. Effective software fault localization using ga-rbf neural network. Journal of Theoretical and Applied Information Technology, 2016, 90(1): 168–174.