Page 32 - 《软件学报》2025年第5期
P. 32

1932                                                       软件学报  2025  年第  36  卷第  5  期


                 型. 例如, 为了将源制品      (例如需求、缺陷) 与目标制品         (例如代码文件、代码提交) 联系起来, 可追踪性模型学习
                 源制品和目标制品跟踪对之间的多维度特征, 如文本相似性、时间关系、人物关系等, 预测最相关的跟踪对作为
                 追踪链接. 下面会简要介绍        STRACE(AL+SSL) 可追踪性恢复框架的构建流程, 本节将其分为数据预处理阶段                     (参
                 考了  Rath  等人  [10] 提出的  Baseline(RF) 模型构建流程) 和后续的训练阶段, 并重点在训练阶段详细介绍主动学习结
                 合半监督学习的具体改进策略.

                 3.1   数据预处理阶段
                    可追踪性恢复框架       STRACE(AL+SSL) 包含   5  个主要的预处理步骤: 样本生成, 样本标注, 特征提取, 样本分
                 割和样本重采样.

                 3.1.1    样本生成
                    为生成数据样本, 需要从不同数据库中抽取需要构建其可追踪性的软件制品, 相互匹配生成两两制品间的候
                 选跟踪对. 本文从合作企业中申请到了几类制品的软件资源库访问权限. 首先从制品数据库表中, 选择明确“已修
                 复  (resolved)”且“已关闭  (closed)”的缺陷  (issue, I), 和“已合入代码仓  (merged)”的代码提交记录  (commit, C), 本文
                 分别将上述两类制品视为源制品和目标制品. 参考               Rath 等人  [10] 提出的基于时间规则的跟踪对匹配函数         is_candidate
                 生成每个项目中的候选跟踪对样本.

                                     is_candidate(I,C) = created(I) ⩽ committed(C) ⩽ resolved(I)+ε    (3)

                                     ε = median_per_project(|committedTime(C)−resolvedTime(I)|)       (4)
                                                             ε , 即延迟间隔参数. 在以往研究中       [41,45]  ε 往往设为常数,
                    值得注意的是, 本文调整了        is_candidate 函数中参数                                ,
                 如小于等于    7  天. Rath  等人  [10] 选择将其设为一个静态变量, 具体而言他们统计了         6  个开源项目上相互关联的缺陷-
                                                                          ε 设为  30          ε = 30 应用在公
                 commit 的代码提交时间在缺陷关闭时间后的间隔时间绝对值分布后, 将                             小时, 然后将
                 式  (3) 中.    is_candidate 函数中  ε 的设置一方面是确保跟踪对匹配函数不会完全丢弃缺陷关闭后再提交的                 commit,
                                   is_candidate 函数不会无限制地匹配缺陷和之后提交的所有               commit 记录. 尽管企业规则
                 另一方面其上限值保证
                 是不允许缺陷“已关闭”或“已解决”后还会存在              commit 与之关联且被提交, 但从历史数据的统计情况来看, 这的确
                 是普遍存在的现象. 此外考虑到本文分析的企业项目涉及多种不同业务领域、不同规模及不同团队组成的项目数
                 据, 统一的静态变量值      εε 可能并不适用于所有企业项目. 因此本框架中通过公式                 (4) 计算了每个项目的      ε , 从而在
                                      is_candidate 函数匹配每个项目的特性, 以确保生成的数据集中不遗漏过多的“真”链接
                 样本选择和生成环节, 使得
                 样本.

                 3.1.2    样本标注
                    对每条跟踪对进行标注, 若         commit 的附属信息字段中存在开发人员标注的某个缺陷的                  ID, 则将其对应的跟
                 踪对标签标注为“真”链接, 否则标注为“假”链接. 值得注意的是, 基于第                  2  节的前期调研及表     1  中的历史数据可以
                 发现在大部分项目中, 相当大比例的缺陷及              commit 制品存在没有任何关联链接的情况, 则此部分制品生成的跟踪
                 对被视为无标签样本        (标注为“NULL”). 表  1  给出了  16  个项目上的总样本数, “真”和“假”链接样本数和无标签样
                 本数.

                 3.1.3    特征提取
                    在本文第    2  节中讨论了   Rath  等人  [10] 提出的  18  个过程维度特征  (a1–a18, 如表  3  所示), 如人物关系、制品时
                 间关系等特征在企业数据集上的特征稀疏性问题. 主要原因是由于企业组织特性, 链接样本的过程特征可能是不
                 正确的或与事实不符的. 例如, 缺陷历史数据中被指定负责人员往往是企业内部工程师, 如承担项目                              leader 角色的
                 项目经理等, 但实际的      commit 提交者, 即实际的缺陷修复者通常是具体的开发人员                 (大多数情况下为外包开发人
                 员). 内外研合作的团队组织形式         (每个项目团队内约       20%  的企业内研工程师, 80%     的外包员工) 在大型企业组织
                 中是广泛采用的合作模式. 此外由于内研工程师负责多种任务, 且缺陷的关闭需要确保对应修复的代码完成自测
                 和回归测试等流程, 导致缺陷的修复或关闭时间往往不能被及时记录. 由此在企业项目中                            Rath  等人提出的过程特
                 征无法提供正确有效的信息量, 从而造成特征空间稀疏的问题, 进一步导致了模型表现不佳的结果.
   27   28   29   30   31   32   33   34   35   36   37