Page 336 - 《软件学报》2021年第7期
P. 336

2254                                     Journal of Software  软件学报 Vol.32, No.7,  July 2021

                                            Table 6  Fingerprint generation efficiency
                                                  表 6  3 种指纹的计算效率
                                          指纹计算方法          耗时(s)      平均速度(工程/s)
                                             MD 5         2 144.36       10.72
                                         相似哈希-改进前         2 959.34       14.8
                                         相似哈希-改进后         2 143.7        10.71

                 4.2    对研究问题2的分析
                    在 RQ1 的实际检测结果中,出现了大量相似文件对均为文件名相同的文件的情况.在 Mockus                           [27] 关于开源
                 软件中大规模代码复用的研究中,曾使用基于文件名的比较方法,以代码功能模块为检测的粒度进行实验,将文
                 件名相同的文件均判定为相似,若两个文件夹下超过一定比例的文件名称相同,则将其视作一对克隆的功能模
                 块对.为了验证能否简单地通过文件名匹配取得 RQ1 中相近的检测结果,仅使用文件名作为匹配标准对数据集
                 进行检测,获取的结果见表 7.
                                              Table 7    Experimental results of RQ2
                                                   表 7   RQ2 的实验结果
                                        匹配工程总数      总工程对数      总匹配对数       精确度(%)
                                           200        19 900     849 757    12.65

                    事实证明,仅靠文件名匹配的相似文件对中会有大量的误报情况,因此在实际同源检测过程中,仅靠文件名
                 匹配会报出大量不正确的结果,结果的精确度会随着库规模的扩大越来越低,因此在小规模库上或许可以通过
                 文件名匹配来缩小检测范围,但在大规模数据集上,这种方法是不可行的.另外,对 RQ1 中的改进后相似哈希的
                 文件匹配结果进行统计后可以发现,虽然大部分结果中文件名是相同的,但仍然有 17%的正确文件对文件名并
                 不相同,这些相似文件对仅通过文件名匹配的方法是无法被发现的.
                    然而,通过对比文件名匹配的结果,改进后的相似哈希算法也暴露出一些漏报的问题.文件名匹配的方法精
                 确度较低,仅为 12.65%,但实际匹配出的正确文件对数量达 107 512 对,而在相同数据集下改进后的相似哈希方
                 法仅报出 40 082 对.为了分析本文方法产生漏报的主要原因,对漏报的文件随机抽取了其中 30 对进行人工核验
                 统计与分析,分析结果如图 6 所示.由分析结果可见,漏报的出现主要分为以下几种情况.
                    (1)  行筛选后文件为空
                    由于在本文提出的方法中,对不同语言的文件所对应的常见行进行了筛选,因此会出现一些小文件中所有
                 行都是常见行,筛选后文件的所有特征都被筛除的情况,约有 27%的漏报属于此类原因.此类文件中包含的语义
                 信息通常较少,因此同源分析价值比较低,文件的漏报对结果的影响也较低.在未来的工作中,也可以对目前统
                 计的不同语言的常见行进行筛选和取舍,以减少非必要的筛选对结果的影响.
                    (2)  两文件行数相差 1.5 倍及以上
                    此类情况约占漏报情况中的 17%,主要是由相似哈希的计算特点所致.相似哈希的原理是将所有特征转化
                 为哈希值并累加起来得到最终的指纹结果,在本文的方法中,这些特征就是文件的每一行.当两个文件行数相差
                 较大时,如一个文件的行数达到了另一个行数的 1.5 倍,那么即使两文件共同行数占据了小文件的绝大部分(若
                 超过 70%,则按目前的标准将判定两文件为相似),大文件额外多出的行数仍会对大文件的指纹造成较大的额外
                 影响,从而导致两者的指纹距离超过了阈值.因此,本方法不适用于行数差距过大的相似文件对的比较,对于这
                 些文件可以考虑将指纹采集的对象从文件细化到方法和函数,以获得更加精准的匹配结果.
                    (3)  其他情况
                    最后,对不同海明距离的情况进行统计.可见,有将近一半的情况是距离大于 8 小于等于 15 的情况,这些情
                 况下的文件可以通过对海明距离阈值的向上调整而被检测到,需要注意的是,上调阈值可能会伴随着精确度的
                 降低.另一半的海明距离大于 15,无法通过少量提高阈值检测到这部分漏报文件.为了进一步分析漏报原因,对
                 图 6 所示其他情况的文件对作进一步统计分析,结果如右侧饼状图所示.在其他情况中,44%的文件行数小于等
                 于 50,由于小文件本身的特征较少,较小的修改就会导致文件整体指纹有较大波动,因此在小文件上大规模相似
   331   332   333   334   335   336   337   338   339   340   341