Page 134 - 《软件学报》2020年第11期
P. 134
3450 Journal of Software 软件学报 Vol.31, No.11, November 2020
是在文档集合 D 中包含词语 t 的文档 d 的个数.为了防止分母为 0,某些情况下会在分母的后面加 1.
N
(, ) =
idf t D log (2)
i
|{d ∈ D :t ∈ i d }|
TF-IDF 值 TFIDF i 是指 tf 与 idf 的乘积,如公式(3)所示.如果一个词语在整个文件集合中具有较低的频率,
但是在其中一个文件中具有较高的频率,那么这个词具有较高的 TF-IDF 值.因此,TF-IDF 技术可以对重要信息
进行保留.
TFIDF i =tf i ×idf(t i ,D) (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 个语句.