Page 129 - 《软件学报》2025年第9期
P. 129
4040 软件学报 2025 年第 36 卷第 9 期
如, 通过矩阵分解将每个用户和项目的 ID 投影为特征向量, 并在它们之间进行卷积来预测交互 [14] . 但在个别场景
下由于缺乏与特定属性或与 bug 修复相关的数据, 导致推荐系统会遇到冷启动和数据稀疏性的问题 [18] , 致使推荐
系统无法识别出合适的开发人员予以推荐. 此外, 虽然 CF 通过卷积可以强制将用户和项目向量映射到一个彼此
观测到的范围, 但有时也难以挖掘二者的关系. 如 LightGCN 模型 [29] 表现出了较为突出的效率和性能, 但它的线性
特征不足以揭示用户和项目之间复杂的非线性关系. 为此, 最近的研究集中于利用深度学习技术来强化交互函数.
例如, NCF [30] 采用非线性神经网络作为交互函数, 捕获了用户和项目之间的非线性交互特征; CBCF [31] 采用内容增
强的 CF 将现有的 CBR [5,31] 和 CF 推荐器相结合, 提高了 bug 分派推荐质量. 再后来, 为了增强协同过滤向量表征
能力, 人们还投入了大量的精力来整合可用的项目或开发人员信息, 如项目内容 [32,33] 、社会关系 [34] 、项目关系 [35] 、
用户评论 [36] 和外部知识图谱 [37] 等, 希望采用数据增强的方式来提高推荐效果.
早期的数据增强主要是对用户-项目矩阵进行数据推断 [38] , 最近的研究主要围绕 GAN 等深度模型 [39] 来生成
新的数据. 后来, 在 GCF 的研究工作中出现了一些更为实用的数据增强技术. 例如, SGL [40] 通过边缘缺失来生成结
构特征; UserSim [41] 采用监督式生成对抗网络的方式模拟用户. 在 GCF 中无论选择何种技术来解决数据稀疏性问
题, 他们均表明, GCF 作为一种面向相关性推荐的范式 [42,43] , 具有处理图形等非结构化多模态数据的绝对优势. 为
了实现更泛化的 bug 与开发人员数据增强, 已有研究利用 bug-开发人员之间的相关性揭示开发人员的专业能力,
以及在修复记录中的开发人员与 bug 的隐式关系. 例如, 通过计算 bug b i 和已被开发人员 d j 修复的 bug 之间的语
义相似度, 实现 bug b i 和开发人员 d j 的匹配 [14] . 然而, 在分析二者的相关性时, 完全丢弃 bug 报告文本数据而将重
心仅放在 bug 与开发者所形成的图数据上时, 也会丢失图结构不能表达的重要信息, 如开发者专业背景、能力、
兴趣及 bug 的严重程度等. 这使得最终的分派结果也会不尽人意. 因此, 在多模态机器学习技术兴起的浪潮下, 软
件维护领域许多研究已将多模态技术用于挖掘和处理来自 bug 的多个模态数据信息. 例如, DeMoB [44] 将 bug 报告
和源文件视为两种模态, 并通过动态的神经网络捕获两种语言之间的差异, 以提高 bug 定位准确率. 此外, Wan 等
人 [45] 基于文本语义、语法树结构、控制流图等多模态信息的代码表征学习, 开发了一种综合性的多模态表示方
法来表示源代码的非结构化和结构化特性, 实现更全面的代码理解.
总结上述相关研究工作, 不难发现目前基于 bug 报告文本分类的方法受到 bug 数据不均衡性影响, 导致模型
在预测时偏向多数类, 对少数类的预测精度较低; 而基于相关性分析的方法多是以文本数据模态为主, 通过信息检
索的方式匹配, 这忽视了对开发者的建模; 基于协同推荐的 bug 分派受到冷启动和数据稀疏性等问题的影响, 难以
直接应用于 bug 分派. 因此, 借鉴已有场景的解决方案, 本文创造性地将 bug 分派建模为二部图中的相关节点的匹
配问题, 并基于协同分派模型融合 bug 报告文本和 bug-开发者二部图模态数据, 强化 bug 和开发者的语义信息,
为 bug 节点集合与开发人员节点集合建立联系, 深入挖掘 bug-开发者的相关性, 最后借助协同推荐技术实现 bug
分派. 这有望开辟软件维护工作的新思路.
2 基本定义
本文提出的 CBT-MF 方法主要基于 bug 报告文本和 bug-开发人员二部图两种模态数据进行分析, 旨在挖掘
出 bug 和开发人员的相关性. 本节将先介绍 bug 分派的形式化定义, 以及表征 bug 与开发人员的向量等基础
概念.
2.1 bug 分派的定义
本文对分派过程中两个关键对象集合: bug D, 有如下定义:
集合 B 和开发人员集合
{
B = {b i | i = 1,2,...,n B }, D = d j | j = 1,2,...,n D } (1)
其中, n B 和 n D 分别表示 bug 和开发人员的数量. b i 包含 bug 报告摘要、描述和开发人员 d j 唯一的 E-mail 地址等
信息; d j 包含表示开发人员 ID 的 E-mail、性别、年龄及学历等信息. 此时, 可进一步将分派记录集 T 定义为:
{ }
T = t ij | i = 1,2,...,n B , j = 1,2,...,n D (2)
其中, 元素 t ij 刻画了 bug b i 和开发人员 d j 的相关性, 表示二者之间是否存在分派关系, 具体地:

