Page 159 - 《软件学报》2025年第5期
P. 159
邓文涛 等: 基于图神经网络的多粒度软件系统交互关系预测 2059
况下 [49] . 通过这种方式, 迁移学习策略显著降低了模型在面对新版本时的学习难度, 并优化了模型对版本演进中
交互关系变化的适应性. ② 采用多版本学习策略, 依托于丰富的多版本数据资源, 旨在综合捕捉软件系统随时间
演化的脉络. 这种策略使得模型能够全面理解随软件版本迭代而产生的交互模式变迁, 从而提高了模型对软件系
统发展趋势的预测精度 [50] . 通过对多个版本的深入分析, 模型学习到的是软件系统演化的内在规律, 而非某一特
定版本的特殊性质, 从而确保了跨版本预测的准确性和鲁棒性.
迁移学习与多版本学习策略的引入, 为模型提供了一个更为丰富和连贯的学习环境. 这不仅有助于模型充分
利用历史版本的知识资源, 还能够使模型适应软件系统演化的动态变化, 进一步增强了模型对软件演化过程中新
交互关系出现的预测能力. 正是基于这两种策略各自的优势和互补, 使得我们后续的工作计划采用此二者的融合
策略以有效提升跨版本预测的准确性.
(2) 大规模数据性能优化: 随着软件系统规模的增大, 本文 Graph Transformer 处理大规模数据可能会导致模
型性能下降 [33] . 参考跨版本和跨项目缺陷预测的相关研究 [47,48] , 再结合本文实际情况归纳出几点切实可行的优化
方案: ① 使用分布式计算框架 (如 Apache Spark、Dask 等) 来并行处理大规模数据. 将数据分成小块, 分配给不同
的计算节点进行处理, 从而提高整体处理速度. ② 采用增量学习的方法, 逐步更新模型而不是一次性使用所有数
据进行训练. 减轻对内存和计算资源的压力, 使模型更适应大规模数据的动态变化 [51] . ③ 利用 GPU 等硬件加速技
术, 加速模型的训练和推断过程. 这对于处理大规模数据时提升计算效率非常有效.
(3) 多粒度关联性捕捉增强. 改善模型在不同粒度之间的关联性捕捉能力, 参考相关研究 [47] : ① 引入多粒度的
特征提取机制, 使模型能够同时关注不同粒度的信息. 如设计多尺度的卷积核、构建多粒度的异构图神经网络、
多粒度超图神经网络模型等. ② 构建层次化的模型结构, 使得模型能够在不同粒度层次上学习节点和信息特征.
每一层专注于不同粒度的交互关系, 类似于参考 GoGCN [38] 的图中图结构. ③ 设计有效的特征融合策略, 将来自不
同粒度的特征有机地融合在一起. 可以使用注意力机制或者特征融合层等, 确保模型能够有效地结合不同粒度的
信息. ④ 引入跨粒度的训练策略 [46] , 使得模型在不同粒度上特征学习都能够得到有效的更新, 提高模型在不同关
系层次上的泛化性能.
(4) 构建更多元多样的数据集. 在未来的研究中, 我们将致力于提高研究方法的复用性和广泛性, 计划构建更
为多元和多样的公开数据集 [49] , 以验证我们方法的有效性. 具体从以下几个方面展开: ① 从不同领域和规模的开
源项目中获取数据, 包括 GitHub、Bitbucket 等平台上的项目, 确保项目的多元性. ② 选择具有不同特征和项目结
构, 覆盖不同的应用领域, 如 Web 开发、机器学习、嵌入式系统等, 确保方法的适用性跨足多个领域 [52] , 囊括多种
软件系统的交互关系, 以促进软件交互关系预测领域的研究进展. ③ 整合已有的公开数据集, 以扩充我们构建的
数据集, 充分利用已有的研究成果 [49] .
5 效度威胁
本节中, 将讨论对研究结果的有效性构成威胁的几点原因.
5.1 内部效度
内部效度涉及实验中的因果关系是否真实存在. 本研究可能存在内部效度威胁, 因为研究中使用的模型、特
征提取方法或参数选择可能会影响结果. 具体可能存在的几点威胁有: (1) 特征表达不全面. 中间隐藏层特征维度
为 128 维可能无法充分捕捉函数粒度下的细微差异和交互关系, 这种情况可能导致在函数粒度下模型的准确率下
降, 并且使得模型难以准确预测函数级别的交互关系. (2) 过拟合或欠拟合. 训练周期为 200, 隐藏层特征维度为
1 024 可能导致模型过度拟合训练数据, 过拟合可能使得模型在训练数据上表现良好, 但在未见过的数据上泛化能
力下降, 影响了模型的实际效果. (3) 标签不准确或不全面. 实验中可能存在对交互关系的标签不准确或缺失, 不准
确的标签会影响模型的训练和预测, 导致模型学习到错误的交互特征或无法捕捉到真实的关系. 例如, 对于同一函
数内部的多个代码块之间的交互是否被认定为一个交互关系, 或者误将某些函数间的调用或依赖标记为未交互,
或者将不存在实际交互的函数误标记为存在交互. (4) 实验设置不完备. 实验中可能存在未考虑的变量或未充分控
制的因素, 未控制的因素可能干扰了实验结果, 使得实验结果不够可靠和稳定. 例如, 代码的结构特征、编程语言