Page 135 - 《软件学报》2026年第7期
P. 135
2820 软件学报 2026 年第 37 卷第 7 期
● RQ1: CAnalyzer 的参数如何影响 TPL 检测能力? 通过统计 100 个项目的参数 α (公式 (4)) 、β (公式 (5)) 和 θ (公
式 (6)) 的数据, 设定合理的参数范围, 并设置不同的参数组合, 对其余 100 个项目进行分析.
● RQ2: CAnalyzer 的 TPL 检测能力与相关工具相比表现如何? 我们使用 100 个项目, 分别通过 CAnalyzer、
CENTRIS [13] 、TPLite [14] 和 OSSFP [15] 进行检测, 并对比检测结果与标准集数据, 分析精确率和召回率.
● RQ3: CAnalyzer 的特征库预处理和 TPL 识别算法的改进对 SCA 能力有何影响? 我们设置了 3 种特征库和
两种成分识别方法的 6 种组合, 并在 100 个项目上进行了检测, 分析这些改进对检测精确率和召回率的影响.
● RQ4: CAnalyzer 是否能准确检测文件集之间的依赖关系? 通过解析 OpenHarmony 4.0 中 14 783 个
BUILD.gn 文件, 获得 1 784 对文件集为标准数据, 评估 CAnalyzer 在直接和间接依赖检测方面的准确性.
● RQ5: CAnalyzer 的检测效率与相关工具相比表现如何? 我们使用 100 个项目, 分别通过 CAnalyzer、
CENTRIS [13] 、TPLite [14] 和 OSSFP [15] 进行执行效率分析, 包括: 特征提取和 TPL 检测的执行时间.
4.1 标准集构建
我们从 GitHub 随机筛选了包含 TPL 复用结构 (如 arangodb/3rdParty/abseil-cpp) 的项目. 同时, 为了验证工具
在实际场景中的有效性, 我们特别关注了 OpenHarmony 4.0 的真实项目, 筛选出具有明确构建配置 (如 BUILD.gn)
和依赖声明 (如 README.OpenSource) 的项目, 并通过分析其目录结构和配置文件构建标准集. 在库粒度复用的
场景中, 开发者通常采用特定的组织方式来存放复用的 TPL 代码, 如“arangodb/3rdParty/abseil-cpp”. 我们将这种映
射关系 (如 arangodb 与 abseil-cpp) 视为标准集数据, 表示 arangodb 复用了组件 abseil-cpp.
(1) 排除非源代码目录. 若子目录仅包含头文件或其他语言文件, 则认定该映射关系无效并排除.
(2) 版权文件存在. 如果相应目录下存在版权信息 (如 LICENSE、COPYING 文件) , 通常包括供应商名称、作
者名称和库名称, 则认为该映射关系有效, 并将其视为标准集数据.
(3) 自述文件存在. 如果相应目录下存在 TPL 的 README 文件, 同样认定映射关系有效. OpenHarmony 4.0 的
真实项目使用 README.OpenSource 文件来标识软件复用, 记录了复用组件名称, 这为我们提供了一组映射关系
作为标准集数据. 根据上述过程和规则, 我们审查了 1 000 多个 C/C++项目, 筛选出 200 个可用于构建标准集的软
件项目, 并识别出 515 组复用关系 (见表 3).
表 3 实验标准集
项目来源 项目总数 BUILD.gn数量 构建模块数量 依赖关系数量 复用TPL数量
Gitee/OpenHarmony 100 14 873 12 277 1 784
515
GitHub 100 - - -
注: “-”表示不适用. GitHub实验项目仅用于TPL复用检测评估, 不涉及BUILD.gn文件、构建模块及依赖关系统计
需要指出的是, 我们在标准集构建中优先采纳了“显式声明来源”的外部依赖, 如目录结构、版权文件或自述
文件中直接标识出的复用关系, 能够确保标准集的可靠性和可验证性, 避免因人工推断或不确定性信息而引入噪
声. 然而, 这一策略可能会遗漏部分未显式声明的 TPL, 例如, 某些开发者直接拷贝了第三方库的部分代码片段但
未在目录或说明文件中保留来源标识. 我们在“有效性威胁”中明确讨论了该问题.
4.2 评估指标
评估中, 我们采用以下指标全面衡量 CAnalyzer 工具的性能.
(1) 真阳性 (TP): CAnalyzer 正确检测出的 TPL 成分, 这些成分在标准集中明确标记; 或工具正确识别出
source 模块依赖于 dep 模块的关系, 与标准集一致.
(2) 假阳性 (FP): CAnalyzer 检测到的 TPL 成分, 但这些成分在标准集中未被标记为 TPL; 或工具错误地表示
dep 模块依赖于 source 模块的关系, 而标准集中并不存在该依赖.
(3) 假阴性 (FN): 标准集中明确标记的 TPL 成分, 但 CAnalyzer 未能检测到; 或工具未能识别标准集中记录的
模块间依赖关系.
TP
(4) 精确率 (Precision): Precision = , 该指标衡量 CAnalyzer 识别 TPL 成分或检测依赖关系的准确性,
TP+FP

