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 个语句.
   129   130   131   132   133   134   135   136   137   138   139