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

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


                 而确保在整个训练过程中始终满足严格的差分隐私要求.
                  3.6   算法实现与优化

                    PRIDE-SDP  框架的实现涉及多个组件的协调配合. 主算法控制整个训练流程, 包括客户端选择、本地训练、
                 差分隐私保护和全局聚合等步骤. 在每个通信轮次开始时, 服务器根据贡献度评估和多样性约束选择参与训练的
                 客户端子集. 被选中的客户端使用本地数据执行个性化训练, 训练过程中应用组合损失函数处理类不平衡和模型
                 一致性约束问题. 本地训练算法在每个客户端独立执行, 包含多个训练                     epoch. 每个  epoch  内, 算法遍历本地数据集
                 的所有批次, 计算损失函数和梯度, 然后应用梯度裁剪和参数更新. 训练完成后, 客户端将模型参数发送给差分隐
                 私保护模块进行处理, 差分隐私保护算法负责为模型参数添加校准噪声. 算法首先根据当前轮次和隐私预算计算
                 噪声标准差, 然后为每个模型参数添加独立的高斯噪声. 处理后的参数被发送给服务器进行全局聚合. 服务器端的
                 聚合算法收集所有客户端的更新, 根据贡献度权重计算加权平均, 生成新的全局模型参数. 更新后的全局参数被分
                 发给各客户端, 指导下一轮的个性化训练. 整个过程持续迭代, 直到模型收敛或达到预设的训练轮次. 为提升算法
                 的实用性, 系统还实现了多项优化技术. 通信压缩技术通过量化和稀疏化减少客户端与服务器间的通信开销. 异步
                 更新机制允许不同客户端以不同的速度进行训练, 提升系统的鲁棒性. 容错机制处理客户端离线或通信失败的情
                 况, 确保训练过程的连续性. 这些优化措施使得              PRIDE-SDP  框架能够在实际的分布式环境中稳定运行, 为跨项目
                 软件缺陷预测提供可靠的技术支撑.

                  4   实 验

                  4.1   数据集
                    为验证本文所提方法的有效性, 本文在公开缺陷数据集上进行实验, 包括                          PROMISE、MDP、AEEEM、
                 GitHub-Python  和  ReLink. 数据集涉及  C、C++、Python、Java 等编程语言. 表  1  给出了数据集所对应的详细项目
                 信息. MDP  数据集来源于美国国家航空航天局, 每个项目数据集由                  40  个度量指标组成, 本文为补充其他实验数据
                 集不涉及    C/C++的情况, 故仅选择     C/C++项目的数据. GitHub-Python  包括  3  个  Python  项目, 即  CoreFX、Django
                 和  Nova, 每个项目具有   29  个度量指标. ReLink  包括  3  个开源项目, 每个项目     ReLink  中的数据集有    26  个复杂性
                 指标. AEEEM  中的每个项目数据集由        61  个软件指标组成. PROMISE 由多个开源        Java 项目组成, 其中每个项目数
                 据集包括 20 个类级软件指标.

                                                      表 1 实验数据集

                          分组                项目             样本数量            度量数量             缺陷率 (%)
                                            CM1              505                               10
                                            MW1              403                               8
                                             PC1            1 107                              7
                            [50]
                         MDP                                                  40
                                             JM1            10 878                             19
                                            KC1             2 107                              15
                                            MC1             9 466                             0.7
                                           CoreFX           26 627                            6.91
                      GitHub-Python [51]    Django          26 360            29              42.64
                                            Nova            26 313                            44.34
                                            Apache           194                              50.52
                        ReLink [52]          Safe            56               26              39.81
                                            ZXing            399                              29.57
                                             EQ              324                              39.81
                                             JDT             997                              20.66
                        AEEEM [53]          Lucene           691              61              9.26
                                            Mylyn           1 862                             13.16
                                            PDE             1 497                             13.96
   230   231   232   233   234   235   236   237   238   239   240