Page 136 - 《软件学报》2026年第7期
P. 136

徐美秋 等: CAnalyzer: 面向  C/C++源代码的软件成分分析技术                                         2821


                 以评估其在实际应用中的可靠性和效果.
                                            TP
                    (5) 召回率 (Recall):  Recall =  , 该指标评估   CAnalyzer 全面检测  TPL  成分及其依赖关系的能力.
                                          TP+FN
                  4.3   参数设置分析实验
                    为了探究    RQ1, 我们通过调整     α (公式  (4))、β (公式  (5)) 和  θ (公式  (6)) 这  3  个关键参数的不同组合, 评估其
                 对检测结果的影响. α、β      和  θ 分别表示从函数、文件及库维度判断软件复用的阈值 (见第                   3.2  节). CAnalyzer 将  α
                 设置为   0.1, 假设当两个项目之间的函数重合度超过            10%  时, 可能发生软件复用. α    采用固定值主要基于以下考虑:
                 α  的作用在于过滤掉零散的偶然函数匹配, 10%            已被既有研究证明是合理的经验阈值             [13,14] . CAnalyzer 研究重点在
                 于探索文件级     β  与库级  θ 阈值组合对检测结果的影响而非重复已有研究对                α  的参数敏感性进行验证. 因此, 为避
                 免引入额外变量, CAnalyzer 保持     α  不变专注于 β  与  θ 的参数设置实验.
                    为了全面评估参数的影响, 我们首先从标准集中的                 200  个项目中随机抽取     100  个项目进行参数设置分析实验
                 (涵盖  314  个组件), 其余  100  个项目则用于有效性对比实验. 这样的划分的目的: (1) 避免数据泄漏. 通过将数据集
                 一分为二, 确保参数调优过程中使用的数据不会与有效性评估的数据重叠, 从而保证实验结果的独立性与可靠性;
                 (2) 提高泛化性. 在一个子集上探索合理的阈值区间, 在另一独立子集上验证工具的性能, 可以更好地评估所选参
                 数在不同项目上的适应性. 在随机划分这             200  个项目时, 我们采用分层抽样策略, 确保两个来源在参数实验集和效
                 果验证集中的分布比例保持一致, 避免因来源差异导致的偏向性. 最终, 参数实验结果显示: 这些项目平均复用
                 TPL 79%  的文件, 且这些文件中有      80%  的函数被复用. 基于该统计分布, 我们将           β  与  θ 的取值范围设定为     [0.5,
                 0.6, 0.7, 0.8, 0.9, 1]. 如图  9  所示, 不同的  β  和  θ 组合对精确率 (Precision) 和召回率 (Recall) 有显著影响. 随着  β  和
                 θ 值的增加, 精确率通常提高        (因为更严格的阈值减少了假阳性), 但召回率下降               (因为一些真实的      TPLs 未达到阈
                 值). 这表明  β  和  θ 在精确率与召回率之间存在反向作用.

                                                        0.98
                                                                                                  0.85
                                                        0.96
                                                        0.94                                      0.80
                                                        0.92                                      0.75
                      β                                         β
                                                        0.90
                                                                                                  0.70
                                                        0.88
                                                                                                  0.65
                                                        0.86
                                                                                                  0.60
                                                        0.84
                                      θ                                          θ
                                  (a) Precision                               (b) Recall
                                            图 9 不同   β  和  θ 组合精确率和召回率分布

                    ● 实验结论 (RQ1). CAnalyzer 的主要参数 (α、β    和  θ) 对其检测  TPLs 的能力具有显著影响. β      和  θ 在精确率
                 与召回率之间存在反向关系. 为了平衡精确率和召回率, 我们使用调和平均值                        F1  分数  [34] 作为综合评价指标. 计算
                 结果表明, 当   β=0.7  且  θ=0.6  时, F1  分数达到最高值  0.88, 表明该参数组合在精确率和召回率之间取得最佳平衡.
                  4.4   有效性对比实验
                    本节实验旨在回答       RQ2, 我们将   CAnalyzer 与  CENTRIS  [13] 、TPLite [14] 、OSSFP [15] 在标准集上进行比较. 剔除
                 第  4.3  节中用于统计阈值的项目后, 我们使用这些工具对剩余的                100  个项目进行检测, 并分析实验结果, 探讨假阳
                 性和假阴性出现的原因.
                    ● 与  CENTRIS  比较. 鉴于  CENTRIS  已发布特征库和源代码, 我们直接在其特征库的基础上对                 100  个项目进
                 行了检测. CENTRIS   通过函数诞生时间来判定公共函数归属, 认为诞生时间较早的库更可能是公共函数的“发源
                 地”. 因此, 特征库构建时, 晚诞生库中的公共函数被视为非关键特征并剔除. 当目标代码与                          TPL  相同的函数占比
                 达到  10%  时, 认为该  TPL  是目标代码的有效成分.
   131   132   133   134   135   136   137   138   139   140   141