Page 232 - 《软件学报》2026年第7期
P. 232
刘子扬 等: 基于个性化联邦学习的跨项目软件缺陷预测方法 2917
6. for each client i ∈ S t parallel do
7. D i ← LocalDataPreprocess(client i ) //数据预处理
σ i ← AdaptiveNoiseScale(ε t , δ, D i ) //自适应噪声尺度
8.
9. θ i ← PersonalizedTraining(D i , G, σ i ) //个性化训练
10. r i ← ContributionEvaluation(θ i , G, D i ) //多维度贡献度评估
11. P[i] ← θ i
12. R[i][t] ← r i
13. end for
//动态权重聚合与模型更新阶段
14. W ← ComputeAggregationWeights(R, t)
15. G ← WeightedAggregate(P, W, σ t )
//模型质量控制阶段
16. for each client i ∈ S t do
17. P[i] ← AdaptPersonalizedModel(P[i], G) //基于全局模型调整个性化模型
18. end for
19. end for
20. return G, P
3.2 数据收集与预处理
数据质量直接影响缺陷预测模型的性能, 因此 PRIDE-SDP 框架设计了完整的数据收集与预处理流水线. 各项
目组从多个开源软件仓库 (如 GitHub、ReLink、MDP 等) 收集历史项目数据, 包括代码度量数据、面向对象度量、
过程度量和缺陷标签信息. 代码度量数据涵盖圈复杂度、代码行数、函数数量等传统指标, 面向对象度量包括继
承深度、子类数量、方法响应集合等反映软件结构复杂性的特征, 而过程度量则捕获代码变更频率、缺陷修复时
间、开发者经验等动态演化信息. 数据预处理是确保模型训练效果的关键环节. 本文首先执行数据清洗操作, 去除
重复记录并处理缺失值和异常值. 对于连续特征, 采用基于统计分布的方法检测并处理异常值, 而类别特征则使用
众数填充策略处理缺失数据. 考虑到不同软件度量指标的量纲和数值范围存在显著差异, 本文采用 Z-score 标准化
方法对特征进行归一化处理, 确保各特征在模型训练中具有相等的重要性权重. 特征工程是提升模型预测能力的
重要手段. 针对历史缺陷数据稀疏的问题, 系统计算函数级、类级和文件级的缺陷率特征, 提供更丰富的历史信
息. 同时, 通过组合多个基础度量构建复合指标, 如复杂度密度、耦合强度等, 以捕获更深层次的代码质量信息. 此
外, 系统从代码提交历史中提取时序模式特征, 反映开发过程的动态变化规律. 软件缺陷数据普遍存在严重的类不
平衡问题, 有缺陷模块的比例通常低于 30%. 为缓解类不平衡问题, 本文采用 SMOTE 过采样技术, 通过在少数类
样本与其 K 近邻之间进行线性插值生成合成样本, 其数学表达式为:
x i +λ × (x nn − x i ) (1)
其中, x i 为少数类样本, x nn 为其 K 近邻样本, λ ∈ [0,1] 为随机系数. 这种方法能够有效平衡正负样本分布, 同时避
免简单复制造成的过拟合问题.
3.3 时间-上下文融合网络设计
PRIDE-SDP 框架在 Transformer 编码器的基础上, 设计了名为时间-上下文融合网络 (TCFN) 的混合神经网络
架构的深度神经网络作为客户端预测模型. 与仅依赖单一结构的传统方法不同, TCFN 采用串行级联策略, 旨在同
时捕捉软件开发过程中动态演化特征与静态代码度量间的复杂交互关系. 如图 3 所示, 该架构结合了长短期记忆
网络 (LSTM) 序列编码、Transformer 以及全连接层的优势, 以充分挖掘数据中蕴含的深层模式.
模型的数据流转过程始于输入层. 一个输入的软件度量特征向量 x 首先经过批量归一化 (batch normalization)

