关键词:
软件测试
差分测试
白盒测试
神经元覆盖率
神经元覆盖系数
摘要:
伴随着社会的进步,计算机科学已经步入了人们的生活,因此,各种各样的智能系统被应用到人们的实际生活中,如自动驾驶汽车系统等。然而,这种系统的正确性和可预测性是至关重要的,尤其在角落案例的情况下。因此如何为深度学习(Deep Learning,DL)系统自动的生成测试输入成为软件测试领域研究的重点。为了将传统软件测试方法应用到DL系统,测试方法Deep Xplore被提出来,但是,该方法存在以下两个缺陷:第一,该方法在定义不同的DNN(Deep Neuron Network)模型对于同一个测试输入表现出的差异行为时,没有考虑不同DNN模型自身还存在着差异行为;第二,在做联合优化的过程中,仅仅提高神经元覆盖率是不能够充分的指导测试输入的生成,没有需要考虑DNN中每一层的神经元的覆盖率的情况。为了解决这两个缺陷,本文重新定义了不同DNN模型之间的差异行为,还引入了神经元覆盖系数来考虑隐层神经元的覆盖情况,最后,现了一个测试输入生成、分析原型系统并进行了实验验证。实验结果表明本文定义的差异行为以及神经元覆盖系数能够获得更具有多样性的测试输入。本文的主要工作如下:(1)本文重新定义了不同DNN之间的差异行为,然后又定义了神经元覆盖系数,提出了新的DNN模型的测试框架Deep Gradient。首先,本文在定义差异行为时是先将一组测试输入输入到被测DNN中,然后通过添加特定领域的约束条件,再次输入到被测的DNN中,利用两次获得的神经元输出的差值的绝对值来衡量不同DNN模型之间的差异行为。接着,为了考虑DNN模型隐层神经元的覆盖率情况,又定义了神经元覆盖系数的概念,这样可以使得获得的测试输入更具有多样性。最后,本文将测试输入的生成问题表示为一个三个目标的优化问题,通过构建损失函数再利用梯度上升算法求解该优化问题。本文进行了一系列的实验评估了该方法,发现通过重新定义不同DNN模型之间的差异行为和引入神经元覆盖系数,确实能够产生更具有多样性的测试输入。(2)为了解决Deep Gradient框架之下的三个目标的优化问题,本研究联想到计算机领域还有更直接的多目标优化算法,因此在Deep Gradient方法的框架之下提出了DEEP-NGSA方法,该方法的引入主要是避免多个超参数的调参问题,由于在调参过程中很难找到合适的参数去求损失函数的最值。因此,利用多目标优化算法直接优化差异行为,神经元覆盖率,神经元覆盖系数就更为直接。本研究通过一系列的实验评估了该方法,该方法在维持了Deep Xplore和Deep Gradient两个方法的效率之下,同样可以生成具有多样性的测试输入,符合我们预期的目标。(3)设计并实现了基于上述两个算法和RT、Adversarial Testing和Deep Xplore的DNN模型的测试输入生成的原型系统(DNNTESTING_SY)。本文介绍了DNNTESTING_SY的整体架构设计和测试流程,展示了测试原型系统的界面设计,并对DNNTESTING_SY的3个主要功能模块进行了详细的说明。调试后,DNNTESTING_SY能够实现自动化测试。