软件学报  2020, Vol. 31 Issue (11): 3448-3460   PDF    
基于词频-逆文件频率的错误定位方法
张卓1 , 雷晏2 , 毛晓光1 , 常曦3 , 薛建新1,3 , 熊庆宇2     
1. 国防科技大学 计算机学院, 湖南 长沙 410073;
2. 重庆大学 大数据与软件学院, 重庆 400044;
3. 上海第二工业大学 计算机与信息工程学院, 上海 200127
摘要: 错误定位方法大多通过分析语句覆盖信息来标识出导致程序失效的可疑语句.其中,语句覆盖信息通常以语句执行或语句未执行的二进制状态信息来表示.然而,该二进制状态信息仅表明该语句是否被执行的信息,无法体现该语句在具体执行中的重要程度,可能会降低错误定位的有效性.为了解决这个问题,提出了基于词频-逆文件频率的错误定位方法.该方法采用词频-逆文件频率技术识别出单个测试用例中语句的影响程度高低,从而构建出具有语句重要程度识别度的信息模型,并基于该模型来计算语句的可疑值.实验结果表明,该方法大幅提升了错误定位的效能.
关键词: 错误定位    词频    逆文件频率    可疑值    
Fault Localization Approach Using Term Frequency and Inverse Document Frequency
ZHANG Zhuo1 , LEI Yan2 , MAO Xiao-Guang1 , CHANG Xi3 , XUE Jian-Xin1,3 , XIONG Qing-Yu2     
1. College of Computer, National University of Defense Technology, Changsha 410073, China;
2. School of Big Data and Software Engineering, Chongqing University, Chongqing 400044, China;
3. College of Computer and Information Engineering, Shanghai Polytechnic University, Shanghai 200127, China
Abstract: Most existing fault localization approaches utilize statement coverage information to identify suspicious statements potentially responsible for failures. They generally use the binary status information to represent the statement coverage information, indicating a statement executed or not executed. However, the binary information just shows whether a statement is executed or not whereas it cannot evaluate the importance of a statement in a specific execution. Consequently, this may degrade fault localization performance. To address this issue, this study proposes a fault localization approach using term frequency and inverse document frequency. Specifically, the proposed approach constructs an information model to successfully identify the influence of a statement in a test case, and uses the information model to evaluate the suspiciousness of a statement of being faulty. The experiments show that the proposed approach significantly improves fault localization effectiveness.
Key words: fault localization    term frequency    inverse document frequency    suspiciousness    

软件调试在软件开发过程中耗费了大量的人力物力, 研究人员为了提高软件开发的效率, 降低开发成本, 提出了许多错误定位方法(例如文献1-5).其中最典型的方法是基于频谱的错误定位方法(spectrum-based fault localization, 简称SFL)[2].SFL方法的原理是, 首先, 通过分析测试用例集运行信息, 构建出语句覆盖信息矩阵; 然后, 基于该矩阵, 采用可疑值度量公式评估出语句为错误的可疑值; 最后, 依据可疑值对所有语句进行降序排列, 并根据语句排序列表来定位错误语句, 其中的语句覆盖信息矩阵是SFL方法的关键基础, 影响着后续可疑值计算模型的精度.

然而, 语句覆盖信息矩阵仅仅记录了语句是否被测试用例执行的二进制状态信息, 即被执行为1, 未被执行为0.二进制状态信息表达信息能力很有限, 无法展示出语句在具体测试用例执行中的重要程度, 限制着错误定位精度[6].目前, 一些研究[7]尝试将语句在测试用例中的执行次数融入到覆盖矩阵信息.然而, 这些研究并没有考虑到该语句在所有测试用例中的特征, 由此产生一些偏差, 对错误定位效果反而产生不利的影响.因此, 有必要研究如何融合更为丰富的有效信息到信息覆盖矩阵, 使其能够更准确地反映出语句和测试用例之间的关系, 解决信息表达能力弱对定位精度上限的限制问题.

基于上述分析, 本文提出基于词频-逆文件频率(term frequency and inverse document frequency, 简称TF-IDF)[8]的错误定位方法, 以增强信息表达能力来实现错误定位效力的提升.该方法试图将词频-逆文档频率技术融入到错误定位中, 综合全局与局部两个维度, 获取语句与测试用例之间更为丰富的有效关系信息, 以此构建出信息表达能力更强的信息模型.根据构建的信息模型, 利用SFL的方法原理重新定义其中的参数来计算语句的可疑值.本文在真实开源程序的大量错误版本上进行了实验.实验结果表明, 基于TF-IDF的错误定位方法能够大幅提升缺陷定位效能.具体来说, 本文方法在高效能区间(即检查可执行语句的比例5%~10%的区间)取得最明显的效能提升, 并且在严格统计学意义下, 本文方法取得7个更优结果和1个相似结果.

本文第1节介绍相关背景知识.第2节介绍基于词频-逆文件频率的错误定位方法.第3节为实验描述和结果分析.第4节为相关工作.第5节总结全文.

1 相关背景

(1) 词频-逆文档频率

在信息检索领域中, TF-IDF是一种数值统计技术, 旨在反映单词对文档集或一个语料库中的一份文件的重要程度.在自然语言处理领域, TF-IDF是最流行的词语加权方案之一, 通常应用于信息搜索、文本挖掘和用户建模[8].TF-IDF的主要思想是, 假设有一个文本集合由多个文本组成, 假设这个集合中某一个文本的某个词在所在文本中出现较多次而在其他文本中出现的较少, 则这个词对于区分这个文本集具有较好的能力, 比较适合用来做分类.TF表示词频(term frequency), IDF是逆文本频率指数(inverse document frequency).词频指的是一个词在一个文件中出现的次数, 逆文本频率指数指的是一个词在所有的文件中出现的频度[8].如果一个词在某个文件中出现的次数较多, 则它的词频值较高, 反之则词频值较低.这个次数是对词数量的归一化, 防止它偏向于较长的文本文件(同一个词无论重要与否, 在短文件中出现的次数可能较少, 而在长文件中较多).相反的, 一个词如果在许多文档中都出现, 则它的逆文本频率指数值较低; 反之, 在较少的文档中出现, 则逆文本频率指数值则较高.IDF是一个词语重要性的度量, 具有较低IDF的词语表示区分能力不强, 反之则是区分能力较强.下面举例说明TF-IDF的一般计算方法:

公式(1)是tf的计算公式, 假设一个文档集合D中的一个文本L包含k个词, 按照从1到k的顺序进行编号, 第i个词的编号为i, 则第i个词的TF值为tfi.公式(1)的分子为词i在文本L中出现的次数, 记为ni, 分母为文本L中从1到k所有词的出现次数之和, 它们的比值即为词iTF值.

$t{f_i} = \frac{{{n_i}}}{{\sum\nolimits_k {{n_k}} }}$ (1)

公式(2)是idf的计算公式, D为一个文档集合, 文档的总数为N, idf(t, D)表示一个单词t在文档集合D中的逆文本频率指数.对于文档集合D, dD中的一个文档, 如果这个td中出现, 则t的数目加1, |{dD:td}|指的是在文档集合D中包含词语t的文档d的个数.为了防止分母为0, 某些情况下会在分母的后面加1.

$idf({t_i}, D) = \log \frac{N}{{|\{ d \in D:{t_i} \in d\} |}}$ (2)

TF-IDF值TFIDFi是指tfidf的乘积, 如公式(3)所示.如果一个词语在整个文件集合中具有较低的频率, 但是在其中一个文件中具有较高的频率, 那么这个词具有较高的TF-IDF值.因此, TF-IDF技术可以对重要信息进行保留.

$ TFID{F_i} = t{f_i} \times idf\left( {{t_i}, D} \right) $ (3)

例如, 图 1为TF-IDF示例.假设文本集D中有两个文本, 分别为文本1和文本2.文本1中有内容“这是一个例子甲”, 文本2中有内容“这是另一个例子乙”.则根据公式(1)~公式(3):tf(甲, 文本1)=tf(甲, 文本2)=1/5; idf(甲, D)=log(2/1)=0.3010;TFIDF(甲, 文本1)=tf(甲, 文本1)×idf(甲, D)=0.0602;同理可以计算出TFIDF(乙, 文本2)=0.0602, 而“这”“是”“一个”“例子”这4个词的TF-IDF值为0.从上述计算可以看出, 由于“这”“是”“一个”“例子”这4个词在文本集合D中的文本1和文本2中都有出现, 因此这4个词不属于文本的关键词, 也就是说, 这4个词对区分文档的贡献度为0, 文本1中的“甲”和文本2中的“乙”TF-IDF值最高, 这表明“甲”和“乙”分别是文本1和文本2的关键词, 这两个词对文本的贡献度最高.

Fig. 1 An example illustrating TF-IDF 图 1 TF-IDF示例

在搜索领域当中, 如果一个词在一个文件中出现的次数较少, 那么这个词的权重也应该比较大; 反之, 如果一个词在大量文件中都存在, 那么根据这个词是不清楚要找的目标, 这个词的权重应该较小.因此, TF-IDF技术可以应用到错误定位领域中, 如果一个语句在所有的测试用例中都被运行, 那么这个语句对于区分不同的测试用例意义并不大, 这样的语句应该被赋予较小的权值; 如果一个语句只有在部分测试用例中执行, 而且这些测试用例执行的语句数也比较少, 那么这个语句对这个测试用例的意义就会比较大, 也应该被赋予较高的权值.

(2) 基于频谱的错误定位

程序谱(program spectrum)是指一个程序在特定测试用例下的运行信息, 比如语句覆盖信息、条件分支以及循环路径等[9].程序谱可以用来追踪程序的行为, 当一个程序执行导致程序失效时, 这个程序行为就可以用来寻找导致程序失效的可疑代码的位置.程序覆盖信息指的是在一个测试用例运行完之后, 程序的哪些部分被这个测试用例覆盖到.获得程序覆盖信息后, 就可以确定程序的哪些部分和错误输出有着关联关系, 也就缩小了错误查找的搜索域[6].SFL的主要思想就是, 利用程序在运行完某些测试用例之后的语句覆盖信息构建程序谱, 然后利用可疑值计算公式, 以程序谱作为输入来计算出程序中每个语句的可疑值并进行排序[9].下面是SFL的一些定义.

P:一个程序, 包含N个语句.

T:程序P的测试用例集, 共包含M个测试用例.

si:程序P中第i个可执行语句.

ti:测试用例集T中第i个测试用例.

anp(si):未执行语句si的通过测试用例数.

anf(si):未执行语句si的失败测试用例数.

aep(si):执行语句si的通过测试用例数.

aef(si):执行语句si的失败测试用例数.

根据以上定义, 图 2为程序P执行完测试用例集T后的语句覆盖信息.P={s1, s2, ..., sN}, T={t1, t2, ..., tM}.t1tM中至少包含一个错误的测试用例.xij表示程序P中的语句sj在测试用例ti执行下的覆盖情况:1表示被覆盖, 即测试用例ti执行了语句sj; 0表示未被覆盖, 即测试用例ti没有执行语句sj.左侧的M×N矩阵即为语句的覆盖情况, 右侧为结果向量e.如果ti是成功的测试用例, 则ei为0;否则为1.

Fig. 2 Coverage information of M test cases' executions 图 2 M个测试用例执行后的覆盖信息

根据SFL定义中的4个参数anp, anf, aep, aef, 可以由可疑值计算公式计算出程序PN个语句的可疑值.如果一个语句具有相对较高的aef值、较低的aep值, 则这个语句具有较高的可疑值[1].表 1列举了SFL最优的典型可疑值计算公式.Xie等人[2, 10]在理论分析的基础上总结了几种典型的最优SFL公式, 即ER1'、ER5、GP02、GP03和GP19.除了这5种理论最优公式以外, D*是实证调查[4]中错误定位效力最优的定位方法.

Table 1 Optimal formulas of SFL 表 1 最优SFL公式

需要特别进行说明的是, D*公式中的*通常被赋值为2[4].

SFL以其较为简单的工作原理和较好的定位效果得到了广泛研究和应用.然而, 它使用的信息覆盖矩阵只是简单的二进制信息矩阵, 0和1仅代表语句是否被测试用例执行.其信息表达能力有限, 无法显示语句执行对测试用例的影响程度, 限制了其错误定位精度.尤其在程序规模大的情况下, 不相关的语句将迅速增加, 这对软件调试带来更大干扰.因此, 融入丰富的有效信息对覆盖信息矩阵进行优化, 获得更为精准的定位有效信息, 有利于提高错误定位精度.

2 基于词频-逆文档频率的错误定位方法

(1) 方法原理

基于词频-逆文档频率的错误定位方法的基本思想是, 利用TF-IDF技术构建覆盖信息矩阵.这个矩阵中的每一个元素的值不再是代表执行或未执行的二进制信息, 而是表示语句对测试用例的影响程度.TF(s, t)对应的是语句s在测试用例t中的TF值.一个测试用例中执行的语句数越多, 按照公式(1)中TF值的计算, 测试用例t中每个语句出现一次, 分子为1, 分母为语句数的总和, 因此TF(s, t)值越小.IDF(s)是语句s在所有测试用例的执行频度:如果s在许多测试用例中执行, 则IDF(s)值较小; 如果s在少数测试用例中执行, 则IDF(s)值较大.

假设程序P包括N个语句, 分别为{s1, s2, …, sN}, 这些语句被M个测试用例T执行.测试用例T为{t1, t2, .., tM}, T中至少包含一个失败的测试用例.图 3左侧的M×(N+1)矩阵为测试用例运行后的语句覆盖信息矩阵以及测试用例的运行结果.如果语句si被测试用例tk执行, 则xik为1, 否则为0.errors表示测试用例执行结果, 它是由M个测试用例的结果{e1, e2, .., eM}组成. ei的值为为0表明ti是成功的测试用例, 值为1表明ti是失败的测试用例.可以发现, 二进制矩阵仅表示语句在测试用例中是否被执行, 并不能得出语句对测试用例的影响程度.因此, 本文方法采用TF-IDF对矩阵进行重新计算.在左侧M×(N+1)的二进制矩阵的基础上, 对矩阵中的元素xij计算出TFIDF(xij), 具体计算方法为公式(4)~公式(6).

Fig. 3 Binary matrix and the TF-IDF matrix of M executions 图 3 M个测试用例的二进制矩阵和TF-IDF矩阵

$TF({x_{ij}}) = {x_{ij}} \times \frac{1}{{1 + \log (N({t_i}))}}$ (4)
$ I D F\left(x_{i j}\right)=\log _{10}\left(M / D F\left(s_{j}\right)\right) $ (5)
$ TFIDF\left( {{x_{ij}}} \right) = TF\left( {{x_{ij}}} \right) \times IDF\left( {{x_{ij}}} \right) $ (6)

公式(4)计算xijTF值.在公式(4)中, xij图 3左侧二进制矩阵中的一个元素, 值为1或0.N(ti)为测试用例ti中被执行的语句的个数, 即图 3左侧二进制矩阵M×N中第i行值为1的个数.公式(5)计算xijIDF值.M为测试用例的总数, DF(sj)为所有测试用例中执行语句sj的测试用例数(如果DF(sj)为0时, 取IDF(xij)为0).参照实验数据, 公式(4)和公式(5)选取常用的log和log10.最后, 基于公式(4)和公式(5), 公式(6)计算xij的TF-IDF值.

本文基于构建的TF-IDF矩阵重新定义语句sj的4个参数anp, anf, aep, aef.公式(7)~公式(10)分别为语句sj的4个参数anp, anf, aep, aef的计算公式.

${a_{np}}({s_j}) = \sum\nolimits_{i = 1}^M {(1 - TFIDF({x_{ij}})) \times (1 - {e_i})} $ (7)
${a_{nf}}({s_j}) = \sum\nolimits_{i = 1}^M {(1 - TFIDF({x_{ij}})) \times {e_i}} $ (8)
${a_{ep}}({s_j}) = \sum\nolimits_{i = 1}^M {TFIDF({x_{ij}}) \times (1 - {e_i})} $ (9)
${a_{ef}}({s_j}) = \sum\nolimits_{i = 1}^M {TFIDF({x_{ij}}) \times {e_i}} $ (10)

最后, 本文方法根据4个重新定义的参数, 采用表 1的可疑值计算公式计算出每个语句的可疑值.

(2) 例子演示

图 4所示, 本小节通过包含错误语句s6的程序P展示基于TF-IDF的错误定位方法工作原理.这个例子选择Russel & Rao作为语句可疑值计算公式.左侧s1s8之下的单元格表示语句被测试用例覆盖的二进制值, 1表示语句被测试用例覆盖, 0表示未被覆盖; 右侧s1s8之下的单元格表示该语句在相对应测试用例中的TF-IDF值; R为测试用例t1~t6的执行结果(R为0表示ti为成功的测试用例, 为1表示ti为失败的测试用例).根据左侧的二进制值和R, Russel & Rao输出可疑值降序排列的语句表:{s1, s2, s3, s4, s6, s7, s8, s5}.由于s1~s4这4个语句在6个测试用例均被执行, 二进制信息矩阵无法体现出这些语句对测试用例结果的差异性影响.转换为TF-IDF信息矩阵之后, 根据新的anpanfaepaef, Russel & Rao计算出新语句排序表:{s6, s7, s8, s4, s5, s1, s2, s3}.由于s1~s4这4个语句的TF-IDF值均为0, 错误语句s6则由原来二进制矩阵下的第5名提升到了第1名.因此, 基于TF-IDF的方法改进了错误定位的效力.

Fig. 4 An example illustrating the TF-IDF-based fault localization approach 图 4 基于TF-IDF的错误定位方法例子说明

3 实验

(1) 实验设计

实验在8组典型程序集上, 对比基于TF-IDF的错误定位方法与表 1中的8种典型的SFL方法.表 2为实验程序对象.从表 2第3列~第5列可以看出, 这些程序代码错误版本数为5个~35个不等; 行数最少为5 000行, 最多为491 000行; 测试用例数为12个~13 585个不等.其中, python、gzip和libtiff从ManyBugs[11]获取, space、nanoxml_v1、nanoxml_v2、nanoxml_v3和nanoxml_v5从SIR[12]获取.

Table 2 Subject programs for experiment 表 2 实验程序对象

实验采用错误定位精度(称为Exam)[13]作为评价标准.Exam表示在找到真正的错误语句之前要检查的可执行语句的百分比, 即缺陷语句在排序表中的排名除以整个程序可执行语句总数.越低值的Exam, 表示查找到真正的错误语句时检查的语句的百分比越低, 代表越好的缺陷定位性能[14].

实验环境为:CPU为I5-2640、16GB物理内存、GPU为12GB的NVIDIA TITAN X Pascal、操作系统版本为Ubuntu16.04.3、matlab版本为MATLAB R2016b.

(2) 结果分析

图 5为基于TF-IDF的方法和8种SFL方法的Exam对比图, 对于每个子图, 横坐标表示根据错误定位结果按照降序排列的语句列表中检查的语句数的百分比, 纵坐标表示定位到缺陷的错误版本数的百分比.从图中可以看出:除了Ochiai之外, 其余方法在检查可执行语句到5%或10%时则出现了明显的效果提升.其中, Tarantula、Russel & Rao、GP02、Dstar和GP19在检查可执行语句到5%时出现了明显的效果提升, GP03和Optimal_P在检查可执行语句到10%时出现了明显的效果提升.因此, 基于TF-IDF的方法提升了缺陷定位的性能.

Fig. 5 Exam comparison of TF-IDF over SFL 图 5 基于TF-IDF的方法和SFL的Exam对比

表 3显示了基于TF-IDF的方法和5种SFL方法的Exam对比情况.对于每种SFL方法, 实验提供了3种类型的Exam对比, 分别为best、average和variance.Best是指在程序的所有错误版本中最小的Exam值, 即表示最好的定位效果; average为所有错误版本的Exam平均值, 即表示平均定位效果; variance表示所有错误版本的Exam方差, 即表示定位效果的稳定性.表 3中标粗的数据代表最优值.以ER1'为例, 基于TF-IDF的ER1'和原始的ER1'对比, 它获得8个最优best、8个最优average和5个最优variance.这表明基于TF-IDF的ER1'与原始的ER1'相比, 其最好定位效果和平均定位效果高于ER1', 并且定位效果具有更好的稳定性.表 3的实验结果表明:基于TF-IDF的错误定位方法能提高错误定位效果, 且具有更好的稳定性.

Table 3 Best, average and variance of Exam comparison of TF-IDF over SFL 表 3 基于TF-IDF的方法和SFL的最好Exam、平均ExamExam方差对比

同时, 表 3显示出应用了TF-IDF技术后, 在一些实验程序取得的average值并没有取得更好的效果.本文深入分析实验数据后, 发现实验程序中少数错误版本定位效能的高偏向性, 会影响整个实验对象的结果.以一个例子来描述这种高偏向性带来的这种结果.假定在实验程序的少数错误版本上, 错误定位方法FL1的效能比FL1 (TF-IDF)显著高出很多; 在其他大多数错误版本上, FL1的效能低于FL1(TF-IDF), 而效能低出量不大.在这种情况下, FL1在少数错误版本上取得的效能高偏向性, 会抵消和扭转其在大多数版本上取得效能劣势, 最终呈现出FL1(TF-IDF)的average值比FL1会低很多, 即FL1的效能要好于FL1(TF-IDF).因此, 这种情况存在少数错误版本的效能高偏向性问题, 并不能得出FL1优于FL1(TF-IDF)的结论.为了消除这种偏向性并更深入地评价本文方法, 实验采用Wilcoxon-signed-rank test[15].它在数据进行成对比较时具有较强的说服力[15].Wilcoxon-Signed- Rank Test结果为Better表明定位效果较好, Similar表明定位效果相似, Worse表明定位效果较差.

具体来说, 给定一个程序, 错误定位方法FL1在该程序所有错误版本的Exam值为G(y); FL1(TF-IDF)在该程序所有错误版本的Exam值为F(x).在给定的显著性水平$\varphi$下(本文设定$\varphi$值为0.05), 可以使用2-tailed的p值和1-tailed的p值来得出结论.在2-tailed检验中, 如果p$\varphi$, 那么接受原假设H0:FL1(TF-IDF)在所有错误版本的Exam值与FL1不存在显著差异, 从而FL1(TF-IDF)和FL1具有相似的定位效能(用Similar表示); 否则, 备择假设H1:FL1(TF-IDF)和FL1存在显著差异会被接受.对于1-tailed的p值, 有两种情况:1-tailed(right)和1-tailed(left).在1-tailed(right)检验中, 如果p$\varphi$, 那么接受原假设H0:FL1(TF-IDF)在所有错误版本的Exam值不趋于显著地大于FL1;否则接受假设H1:FL1(TF-IDF)在所有错误版本的Exam值趋于显著地大于FL1, 从而FL1(TF-IDF)的定位效能低于FL1(用Worse表示).在1-tailed(left)检验中, 如果p$\varphi$, 那么假设H0:FL1(TF-IDF)在所有错误版本的Exam值不趋于显著地小于FL1会被接受; 否则, 备择假设H1:FL1(TF-IDF)在所有错误版本的Exam值趋于显著地小于FL1, 即FL1(TF-IDF)的定位效能高于FL1(用Better表示).

表 4展示了在真实错误(real fault)、植入错误(seeded fault)和所有错误(total)这3种情况下的Wilcoxon- signed-rank Test统计结果, 给出具体的p值和对比结果.以ER1'(TF-IDF)和ER1'在真实错误上的对比为例, 其2-tailed、1-tailed(right)和1-tailed(left)的p值分别为6.55e-03, 8.14e-01和4.32e-02.这表明在真实错误上, 运用TF-IDF方法后, ER1'的Exam值减小了.因此在真实错误上, 基于TF-IDF的定位方法改进了ER1'的定位效果, 结果为Better.如表 4所示, 与8种定位方法(即ER1'、GP02、GP03、GP19、ER5、Dstar、Ochiai和Tarantula)的对比结果可以看出, 在真实错误、植入错误和所有错误这3种情况上, 基于TF-IDF的方法均取得了7个Better和1个Similar的结果.同时可以看出, 基于TF-IDF方法在不同的SFL公式中有不同的效能.究其原因是, 不同的SFL公式对4个参数anpanfaepaef计算时的侧重不同, 导致基于TF-IDF方法在对这4个参数重新计算后的侧重也存在不同, 从而在不同的SFL公式上得到了不同的效能提升结果.

Table 4 Wilcoxon-signed-rank Test of the effectiveness comparison 表 4 基于Wilcoxon-signed-rank Test的有效性对比

由以上实验结果可以看出, 基于TF-IDF的定位方法提升了程序缺陷的定位效能.基于二进制状态信息仅能表示执行和未执行两种状态, 无法提供更多的语义信息.与二进制状态信息相比, 基于TF-IDF的定位方法利用词频(TF)获取语句在单个测试用例执行情况和利用逆文本频率指数(IDF)获取语句在整个测试用例集执行情况, 最后综合局部和全局两个维度的信息, 形成更丰富的语句和测试用例的关系信息, 能识别更多二进制状态信息无法发现的差异性影响, 从而提升定位效能.以gzip程序中错误版本v3为例.其中, 第405行为非缺陷语句.该语句被所有的测试用例覆盖, 基于二进制状态信息的矩阵无法体现出第405行语句对测试用例结果的差异性影响.而基于TF-IDF的方法能将第405行对测试用例结果的影响降为0, 有效防止了第405行对缺陷定位结果的干扰.因此, 基于TF-IDF的方法融合了更丰富的有效信息到信息覆盖矩阵中, 更准确地反映出语句和测试用例之间的关系, 从而解决了信息表达能力弱对定位精度上限的限制问题, 提升了缺陷定位效能.

(3) 有效性威胁

本文实验有如下有效性威胁.

● 本实验的前提是失败的测试用例运行的时候含有缺陷的语句是被执行的, 但是当程序存在多个缺陷并且这些缺陷是在一个传播链上进行传播的时候, 这个假设并不成立, 比如多个缺陷中有的缺陷是在其他缺陷激活时才会发生的情况.但是本实验进行的单错误的研究是多错误研究的基础, 因此这也是当前的研究大都基于单错误的原因.

● 其次, 本实验选用的实验对象只是广泛应用于缺陷定位研究的典型程序, 现实世界中的程序多种多样, 这些实验程序并不能覆盖现实中的各种类型的错误, 也不能预测到现实程序调试中的许多未知因素.但是本实验选用的程序是错误定位领域具有代表性的实验程序, 具有说服力.同时, 在将来的工作中, 我们将关注更多的现实工程中的程序, 并在其基础上进行实验.

4 相关工作

基于覆盖信息的错误定位技术研究是当前研究的热点, 本节将对这些工作进行简要的介绍, 更多的关于各类错误定位的工作可以参考综述文献[1].

基于程序覆盖信息的错误定位技术的基本思想是:首先, 对大批量的测试用例在目标程序上的运行信息进行收集; 然后, 根据这些信息试图寻找与程序错误输出相关联的位置信息, 即程序实体为缺陷的可疑值.SFL[16]是最典型的基于程序覆盖信息的错误定位技术.使用SFL技术的时候不需要分析程序内部纷繁复杂的依赖关系和逻辑结构, 只需根据外部测试用例的运行情况就能成功定位程序的错误所在.SFL技术中有许多代表性的工作, 比如Jaccard技术和Tarantula技术, 它们分别是由Chen等人[17]和Jones等人[18]提出的, 其中, Tarantula是在后续研究中被广泛使用和对比的技术.之后, Abreu等人[19]提出了Ochiai技术, 在与Tarantula进行的实验对比中, EXAM值平均提高了5%.后来, 他们又对Tarantula等技术进行了有效性的评估, 并应用Ochiai评估了测试用例[20].Wong等人[21, 22]在研究了程序的数据和控制流程的基础上, 提出了Wong1-3、Wong3'和一些缩减搜索域的方法.Wong等人[23, 24]还提出当前最优的SFL技术Dstar(D*), 它是一种基于交叉表的方法, 本文实验和Dstar进行了对比.Lee[7]提出了根据语句执行次数来判断其可疑值的错误定位技术.Xie等人[10]理论上研究了GP进化公式.Tan等人[25]提出通过增大边际权重提高基于频谱的错误定位方法.Dean等人[26]为提升多错误定位效能提出了基于linear的方法.Jones等人[27]运用聚类技术将由同一个缺陷引发的程序错误的失败测试用例归为一类, 之后对每一个类别中的单缺陷再进行缺陷定位, 但是此种方法对互相影响和传播的错误没有办法实现很好的定位.Abreu等人[28, 29]通过将SFL技术与基于模型的诊断技术进行集成, 以此提出基于频谱的多错误定位方法Zoltar-M, 实现了多错误的有效定位.Abreu等人[30]为缓解“预言家难题”提出了使用程序状态的错误定位方法. Xie等人[31, 32]提出使用蜕变测试的方法来缓解“预言家难题”.本文方法在上述SFL方法的基础上, 采用TF-IDF优化覆盖信息矩阵, 提高了错误定位效能.

偶然正确性(coincidental correctness)问题是指出现执行了错误语句的成功测试用例的情况.偶然正确性问题会对错误定位性能产生不利的影响, 如何识别出这种执行力错误语句的成功测试用例, 是解决偶然正确性问题的关键所在.Wang等人[33]提出使用匹配上下文模型(context pattern)的方法来识别偶然正确性问题.Gopinath等人[34]在SFL方法中融入了规约分析, 并提升了错误定位的性能.Masri等人[35, 36]定义了描述具有偶然正确性问题的成功测试用例的方法, 并度量出了成功测试用例和失败测试用例之间的相似度, 这个相似度是基于Euclidean标准的.Miao等人[37]采用聚类的思想对不同类型的测试用例进行分类, 从而有助于发现. Bandyopadhyay[38]对具有偶然正确性问题的成功测试用例进行预测, 并根据预测结果提升错误定位的有效性. Lei等人[39, 40]系统研究了测试用例集的效能, 并提出了偶然正确性问题是影响错误定位效能最大的因素.本文方法关注程序覆盖信息矩阵的重塑和优化.本文方法不关注优化具有偶然正确性问题的成功测试用例, 且采用的TDIDF技术不能根除偶然正确性, 然而, 本文方法对信息矩阵元素的重新赋值, 抑制了具有偶然正确性问题的成功测试用例的负效应, 从而间接地缓解了偶然正确性问题.

此外, TF-IDF技术也被应用到缺陷查找等工作.Saha等人[41]提出BLUiR, 利用错误报告的错误相似数据进行缺陷查找.Wang等人[42]提出用于查找相关错误文件的方法AmaLgam+.Wang等人[43]还提出了VSMcomposite方法, 通过分析AspectJ、Eclipse和SWT的错误报告来进行相关的关键报告的检索.实验中, VSMcomposite方法和基于TF-IDF技术的VSMnatural方法进行了比较.这些方法主要使用TF-IDF技术来处理错误报告.本文方法与这些方法不同, 将TF-IDF技术用于信息覆盖矩阵的重构, 从而构建出信息表达能力更强的信息模型, 以此提升错误定位效能.

5 结论

本文提出了一种基于词频-逆文档频率的错误定位方法.该方法以TF-IDF技术识别出语句执行的影响程度, 重新构建具有影响识别度的信息模型, 并结合SFL的可疑性度量方法构建语句的可疑值排序.实验结果表明, 与5种典型的SFL定位方法对比, 基于TF-IDF的方法能够显著缩减代码检查的范围, 大幅提升错误定位性能.未来的工作包括方法优化和多错误定位的应用, 并进一步提高其准确性.

参考文献
[1]
Wong WE, Gao R, Li Y, Rui A. A survey on software fault localization. IEEE Trans. on Software Engineering, 2016, 42(8): 707-740. [doi:10.1109/TSE.2016.2521368]
[2]
Xie X, Kuo FC, Chen TY, Yoo S, Harman M. Provably optimal and human-competitive results in SBSE for spectrum based fault localisation. In: Proc. of the 5th Symp. on Search-based Software Engineering. St. Petersburg, 2013. 224-238.
[3]
Acharya M, Robinson B. Practical change impact analysis based on static program slicing for industrial software systems. In: Proc. of the Int'l Conf. on Software Engineering, Vol.111. 2011. 746-765.
[4]
Pearson S, Campos J, Just R, et al. Evaluating and improving fault localization. In: Proc. of the Int'l Conf. on Software Engineering. Buenos Aires, 2017. 609-620.
[5]
Yoo S. Evolving human competitive spectra-based fault localisation techniques. In: Proc. of the 4th Int'l Symp. on Search-based Software Engineering. 2012. 244-258.
[6]
Zhang Z, Tan QP, Mao XG, Lei Y, Chang X, Xue JX. Effective fault localization approach based on enhanced contexts. Ruan Jian Xue Bao/Journal of Software, 2019, 30(2): 266-281(in Chinese with English abstract). http://www.jos.org.cn/1000-9825/5677.htm [doi:10.13328/j.cnki.jos.005677]
[7]
Lee HJ, Naish L, Ramamohanarao K. Effective software bug localization using spectral frequency weighting function. In: Proc. of the 34th Annual Computer Software and Applications Conf. (COMPSAC). Seoul, 2010. 218-227.
[8]
Rajaraman A, Ullman JD. Mining of Massive Datasets. Cambridge: Cambridge University Press, 2011.
[9]
Naish L, Lee HJ, Ramamohanarao K. A model for spectra-based software diagnosis. ACM Trans. on Software Engineering and Methodology, 2011, 20(3): 1-32. http://dl.acm.org/doi/10.1145/2000791.2000795
[10]
Xie X, Chen TY, Kuo FC, Xu B. A theoretical analysis of the risk evaluation formulas for spectrum-based fault localization. ACM Trans. on Software Engineering and Methodology, 2013, 22(4): 1-40.
[11]
[12]
[13]
Mao XG, Lei Y, Dai Z, Qi Y, Wang C. Slice-based statistical fault localization. Journal of Systems and Software, 2014, 89(1): 51-62. http://www.sciencedirect.com/science/article/pii/S0164121213002185
[14]
Lei Y, Mao XG, Dai Z, Wang C. Effective statistical fault localization using program slices. In: Proc. of the 36th Annual Int'l Computer Software and Applications Conf. Izmir, 2012. 1-10.
[15]
Corder GW, Foreman DI. Nonparametric statistics for non-statisticians: A step-by-step approach. Int'l Statistical Review, 2011, 78(3): 451-452. http://onlinelibrary.wiley.com/book/10.1002/9781118165881
[16]
Abreu R, Zoeteweij P, van Gemund A. Spectrum-based multiple fault localization. In: Proc. of the 24th Int'l Conf. on Automated Software Engineering (ASE). Auckland, 2009. 88-99.
[17]
Chen M, Kiciman E, Fratkin E, Fox A, Brewer E. Pinpoint: Problem determination in large, dynamic Internet services. In: Proc. of the Int'l Conf. on Dependable Systems and Networks. Bethesda, 2002. 595-604.
[18]
Jones JA. Fault localization using visualization of test information. In: Proc. of the 26th Int'l Conf. on Software Engineering. Edinburgh, 2004. 54-56.
[19]
Abreu R, Zoeteweij P, van Gemund AJC. An evaluation of similarity coefficients for software fault localization. In: Proc. of the 12th Pacific Rim Int'l Symp. on Dependable Computing. Riverside, 2006. 39-46.
[20]
Abreu R, Zoeteweij P, Golsteijn R, van Gemund AJC. A practical evaluation of spectrum-based fault localization. Journal of Systems and Software, 2009, 82(11): 1780-1792. [doi:10.1016/j.jss.2009.06.035]
[21]
Wong WE, Qi Y, Zhao L, Cai KY. Effective fault localization using code coverage. In: Proc. of the 31st Annual Int'l Computer Software and Applications Conf. Beijing, 2007. 449-456.
[22]
Wong WE, Debroy V, Choi B. A family of code coverage-based heuristics for effective fault localization. Journal of Systems and Software, 2010, 83(2): 188-208. http://www.wanfangdata.com.cn/details/detail.do?_type=perio&id=30334be6878a5516fe3b4a62168b82ef
[23]
Wong WE, Wei T, Qi Y, Zhao L. A crosstab-based statistical method for effective fault localization. In: Proc. of the 1st Int'l Conf. on Software Testing, Verification and Validation. Lillehammer, 2008. 42-51.
[24]
Wong WE, Debroy V, Li YH, Gao RZ. Software fault localization using DStar (D*). In: Proc. of the 6th IEEE Int'l Conf. on Software Security and Reliability. Gaithersburg, 2012. 21-30.
[25]
Tan DG, Chen L, Wang ZY, Ding H, Zhou YM, Xu BW. Spectra-based fault localization by increasing marginal weight. Chinese Journal of Computers, 2010, 33(12): 2335-2342(in Chinese with English abstract). http://www.wanfangdata.com.cn/details/detail.do?_type=perio&id=jsjxb201012013
[26]
Dean BC, Pressly WB, Malloy BA, Whitley AA. A linear programming approach for automated localization of multiple faults. In: Proc. of the 24th Int'l Conf. on Automated Software Engineering (ASE). Auckland, 2009. 640-644.
[27]
Jones JA, Bowring JF, Harrold MJ. Debugging in parallel. In: Proc. of the Int'l Symp. on Software Testing and Analysis (ISSTA). London, 2007. 16-26.
[28]
Abreu R, Zoeteweij P, van Gemund A. Localizing software faults simultaneously. In: Proc. of the 9th Int'l Conf. on Quality of Software (QSIC). Jeju, 2009. 367-376.
[29]
Abreu R, Zoeteweij P, van Gemund A. Simultaneous debugging of software faults. Journal of Systems and Software, 2010, 84(4): 573-586. http://www.sciencedirect.com/science/article/pii/0167718795005161
[30]
Abreu R, Gonzalez A, Zoeteweij P, van Gemund A. Automatic software fault localization using generic program invariants. In: Proc. of the ACM Symp. on Applied Computing (SAC). Fortaleza, 2008. 712-717.
[31]
Xie X, Wong WE, Chen TY, Xu B. Metamorphic slice: An application in spectrum-based fault localization. Information and Software Technology, 2013, 55(5): 66-879. http://dl.acm.org/doi/10.1016/j.infsof.2012.08.008
[32]
Xie X, Wong WE, Chen TY, Xu B. Spectrum-based fault localization: Testing oracles are no longer mandatory. In: Proc. of the 11th Int'l Conf. on Quality Software (QSIC). Madrid, 2011. 1-10.
[33]
Wang X, Cheung SC, Chan WK. Taming coincidental correctness: Coverage refinement with context patterns to improve fault localization. In: Proc. of the Int'l Conf. on Software Engineering. Vancouver, 2009. 45-55.
[34]
Gopinath D, Zaeem RN, Khurshid S. Improving the effectiveness of spectra-based fault localization using specifications. In: Proc. of the 27th Int'l Conf. on Automated Software Engineering (ASE). Essen, 2012. 40-49.
[35]
Masri W, Assi RA. Cleansing test suites from coincidental correctness to enhance fault-localization. In: Proc. of the Software Testing, Verification and Validation. 2010. 165-174.
[36]
Masri W, Assi RA. Prevalence of coincidental correctness and mitigation of its impact on fault localization. ACM Trans. on Software Engineering and Methodology, 2014, 23(1): 1-28. http://www.wanfangdata.com.cn/details/detail.do?_type=perio&id=918c65a0122a34041c634d1a3cc9839b
[37]
Miao Y, Chen ZY, Li SH, Zhao ZH, Zhou YM. Identifying coincidental correctness for fault localization by clustering test cases. In: Proc. of the 24th Int'l Conf. on Software Engineering and Knowledge Engineering (SEKE 2012). Redwood City, 2012. 267-272.
[38]
Bandyopadhyay A. Mitigating the effect of coincidental correctness in spectrum based fault localization. In: Proc. of the 5th Int'l Conf. on Software Testing, Verification and Validation. Kolkata, 2012. 479-482.
[39]
Lei Y, Sun CN, Mao XG, Su ZD. How test suites impact fault localisation starting from the size. IET Software, 2018, 12(3): 190-205. [doi:10.1049/iet-sen.2017.0026]
[40]
Lei Y. Research on fault localization using correlation analysis[Ph.D. Thesis]. Changsha: National University of Defense Technology, 2014 (in Chinese with English abstract).
[41]
Saha RK, Lease M, Khurshid S, Perry DE. Improving bug localization using structured information retrieval. In: Proc. of the 2013 28th IEEE/ACM Int'l Conf. on Automated Software Engineering (ASE). 2013. 345-355.
[42]
Wang S, Lo D. Amalgam+: Composing rich information sources for accurate bug localization. Journal of Software: Evolution and Process, 2016, 28(10): 921-942. [doi:10.1002/smr.1801]
[43]
Wang S, Lo D, Lawall J. Compositional vector space models for improved bug localization. In: Proc. of the 2014 IEEE Int'l Conf. on Software Maintenance and Evolution. 2014. 171-180.
[6]
张卓, 谭庆平, 毛晓光, 雷晏, 常曦, 薛建新. 增强上下文的错误定位技术. 软件学报, 2019, 30(2): 266-281. http://www.jos.org.cn/1000-9825/5677.htm [doi:10.13328/j.cnki.jos.005677]
[25]
谭德贵, 陈林, 王子元, 丁晖, 周毓明, 徐宝文. 通过增大边际权重提高基于频谱的错误定位效率. 计算机学报, 2010, 33(12): 2335-2342. http://www.wanfangdata.com.cn/details/detail.do?_type=perio&id=jsjxb201012013
[40]
雷晏.基于关联性分析的缺陷定位技术研究[博士学位论文].长沙: 国防科技大学, 2014.