Skip to content

DeepFL Integrating Multiple Fault Diagnosis Dimensions for Deep Fault Localization

Introduction

ISSTA‘19 best paper

程序故障定位(指的是分析代码,找到故障的代码片段)很重要,有很多相关的研究。

SBFL轻量,高校。它通过对单元测试的统计分析给出定位结果,基本的思想是故障代码会让测试失败。然而问题是失败的测试执行的代码不全是让其失败的部分,而故障代码也可能会被成功的测试执行到。

MBFL基于对代码的变换(mutation)以及变换引起的测试结果的变化,从而分析代码段对故障的影响。但是问题是有的代码段的mutation难以定义。因此在一些情况下MBFL效果也很不好。

由于传统方法没法适应所有的情况,因此研究者开始通过机器学习综合不同的传统方法。

Learning-to-rank(好像说的只是线性回归而已啊…)在很多方法中被采用并证明了其效果,但是learning-to-rank不能学习到数据中关键的feature。

DeepFL使用深度学习解决这个问题,使用SBFL,MBFL,以及复杂度分析,文本相似度比较等传统方法作为feature,提出了一个MLP_DFL架构。DeepFL发现MBFL是最重要的feature。

Methodology

基本架构

作者claim不同来源的feature有不同的特性,有必要分开考虑。

作者先介绍了利用RNN做这个的思路:

DeepFL Integrating Multiple Fault Diagnosis Dimensions for Deep Fault Localization_image_1

但是RNN架构的缺点就是不同的group是共享权重的,并且无法引入更复杂的设计

因此作者提出了这样的多层次的MLP的设计:

DeepFL Integrating Multiple Fault Diagnosis Dimensions for Deep Fault Localization_image_2

Features

SBFL 34个

MBFL 140个

statistical code metric 21(源代码) + 37 (字节码)

textual similarity 用代码和failed test的field(分别有5个(方法名,类名,变量,注释,调用的方法)和3个(测试名,代码,失败信息),组合起来就是15个)进行文档搜索,用TF-IDF作为feature。

一个training instance是一个代码段(statement,block,method等)

Loss Function

pairwise learning to rank的loss或者cross entropy

Evaluation

数据集,公开数据集

RQ1: 定位性能是不是达到了state-of-the-art。是的。用的是留一验证,验证一个故障的时候,把其他所有故障作为训练集。

RQ2: DeepFL的不同组件和feature对结果的影响。对比了不同的网络结构,不同feature

RQ3: 训练epoch和loss function如何影响结果。

RQ4: 迁移性如何,能不能在其他Project上工作?可以。做了两个模式的对比,验证在某个project的性能时,用其他所有project的数据做训练集;把故障打乱,用10-fold cross validation做验证。

Thinking and Conclusion

为了解决传统方法只能针对特定场景的问题,DeepFL用机器学习方法(一个MLP的简单变种)综合了很多(100多个feature)传统方法。

当然DeepFL不是第一篇,但是DeepFL第一个提出了使用DL,之前的使用的是SVM这种传统机器学习模型。

从结果上来看,DeepFL的性能比SOTA的传统机器学习综合定位工作(用的是SVM,Adaboost这种)高了一些,DL是有用的。

但是文章一开始是说传统的learing-to-rank工作没有自动选择合适的feature或者选到更高级的feature(所以就需要人工选择feature),而DL的优点就是可以输入(相对)原始的数据,没有特征工程,相当于自动学到有用的feature。

性能的差距可以indicates DeepFL确实学到了什么潜在的内涵,但是到底是不是这样呢?也可以猜测是不是只是因为DL算法的capacity比其他算法大,或者DL比SVM之类的好调参数?这篇文章只是简单对比了一个四类feature哪一类对结果影响更大

有监督方法的最大的缺点就是标注数据不好获得。

DeepFL应对这个问题的方法是证明了他们的方法可以在一个project上训练,直接应用到其他project上。感觉这样已经足够了。

如果还需要进一步的话,1)可以说明训练集覆盖的类型对结果的影响变化曲线 2)可以说明fine tuning性能


Last update : February 13, 2023
Created : February 13, 2023