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

2812                                                       软件学报  2026  年第  37  卷第  7  期



                                            表 1 C/C++ TPL  索引库和特征库统计数据

                                          C/C++ TPL索引数据库 (包含源代码存储库地址等信息)
                  托管仓库类型      托管仓库名称                                               特征数据库中C/C++ TPL数量
                                         Git管理存储库数量     非Git管理存储库数量 存储库总数量
                                Conan          903            119          1 022            569
                                Vcpkg         1 253           308          1 561            726
                                 Clib          239             52           291             205
                   应用程序级
                                Cppget         250             51           301             87
                   托管仓库
                                Xrepo          290             39           329             146
                               Buckaroo        274             11           285             140
                                Hunter         251            111           362             80
                                Ubuntu        11 531          3 546        15 077          2 511
                                Debian        20 638          6 232        26 870          7 016
                   操作系统级       Archlinux      4 982           8 163        13 145          1 123
                   托管仓库
                               Fedora37       5 303           9 801        15 104          1 101
                               openEuler       924            1 032        1 956            155
                                GitHub                                                     16 756
                   源代码级          Gitee                      -                               851
                   托管仓库
                                GitLab                                                     1 634
                           总计              46 838 (61.4%)  29 465 (38.6%)  76 303          33 100
                 注: “-”表示该类源代码托管平台统一采用Git进行版本管理, 因此不再区分Git与非Git管理存储库, 也不统计相应数量


                                            表 2 采用   Git 管理的  C/C++ TPL  统计数据

                    版本管理不完善的C/C++ TPL数量          版本管理完善的C/C++ TPL数量           函数总数量         公共函数数量
                              6 606                       26 494              30 047 290     11 453 633

                                             目标代码                      特征库

                                           应用程序代码                     SwiftShader2
                                                         特征匹配失败: 假阴性

                                                         特征匹配成功: 假阳性   Library: A
                                           TPL: SwiftShader
                                                                     TPL: SwiftShader1

                                                图 2 版本管理不善的情况示例

                    (3) 迁移托管仓库导致丢失        TPL  历史版本的函数诞生时间. 例如, 开源解压软件             7-Zip  最初仅在  SourceForge
                 托管源码   [24] , 后仅将最新版本迁移至      GitHub  的  ip7z@7zip [25] 存储库. 与此同时, 多个非官方存储库 (如    p7zip-
                 project@p7zip [26] ) 已在迁移前出现, 与  ip7z@7zip  存在相同函数片段. 若以诞生时间判断函数归属, 会错误地将这
                 些函数归为    p7zip-project@p7zip  的一部分, 进而影响到  SCA  结果准确性.
                    挑战   1. 利用函数诞生时间划分公共函数归属面临多重局限: (1) 非                  Git 管理的  TPL  难以获取诞生时间;
                 (2) TPL  版本管理不完善获取到不准确的诞生时间; (3) TPL          迁移托管库丢失诞生时间, 进而威胁到            SCA  结果的准
                 确性.
                  2.2   依赖关系缺失
                    现有的   SCA  工具在揭示    TPL  之间复杂依赖关系方面存在不足, 流行的            SCA  工具如  CENTRIS  等, 通常未能
                 提供目标代码中引用的        TPL  之间的依赖关系. 这给软件安全、合规性以及维护带来了诸多挑战. 以下两方面凸显
                 了研究   TPL  依赖关系分析算法的紧迫性和重要性.
                    ● 安全漏洞的影响范围分析. 在软件项目中, 外部             TPL  的引入虽为开发带来了便利, 但同时也可能不经意间引
   122   123   124   125   126   127   128   129   130   131   132