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

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


                 选择策略, 重新平衡训练集分布, 针对性地应对企业项目面临的诸多挑战, 致力于改进工业界场景中可追踪性模型
                 表现不佳的现状.
                    本文第   1  节介绍软件可追踪性相关方法和研究现状. 第             2  节介绍本文前期案例工作和在企业项目中应用可追
                 溯性模型后分析出来的几点关键挑战等. 第              3  节介绍本文提出的基于结合主动学习及半监督学习改进策略的自动
                 化可追踪性分类模型构建流程. 第          4  节在  6  个开源项目及  10  个企业项目上展开多组对比实验, 验证了所提模型的
                 有效性. 第  5  节讨论本文提出方法面临一些约束和挑战, 并从内部效度、结论效度和外部效度等方面分析本文实
                 验和结论的有效性威胁. 第        6  节在最后总结全文.

                 1   软件可追踪性相关工作

                                                                                       [1]
                    软件的可追踪性是指“将任何唯一可识别的软件工程制品与其他制品相互关联的能力” . 软件可追踪性被认
                 为是软件开发过程可信一个重要因素. 软件可追踪性可以促进软件系统生命周期内各个阶段的实践任务, 从而提
                 高生产力和质量      [15–17] . 在满足软件可追踪性质量前提下, 研究人员和项目实践人员可以利用已知的软件制品间的
                 可追踪性信息, 辅助其他多种研究活动和决策, 如需求重用和验证                    [18] 、变更管理  [19] 、项目和风险管理  [20] 、缺陷预
                 测和定位   [21] 、测试用例优先级排序     [11,22]  等研究中. 此外, 软件过程制品的可追踪性有助于构建类似于真实世界中
                 软件研发过程的仿真模型, 在开发生命周期早期阶段, 帮助项目经理进行项目规划和识别潜在风险                               [23,24] . 软件可追
                 踪性是项目管理和质量保障实践中的基本组成要素, 支持开发人员提高软件系统的可维护性和可靠性                                 [25,26] .
                    软件制品是研发过程中的重要的产物, 相互之间通过不同软件活动形成关联关系. 如图                            1  所示, 设计人员分析
                 用户需求后, 为开发人员制定每个版本的新需求. 开发人员对分配到的需求进一步拆解、设计、讨论后进行编码.
                 然后通过   commit 合入代码仓. commit 记录自动地将一个或多个源代码文件捆绑在一起. 因此                   commit 和源代码之
                 间的关联关系自然生成. 之后代码会被打包给测试人员执行测试, 测试用例检测到的缺陷结果会被提为缺陷单. 开
                 发人员对各自所负责的需求产生的缺陷单进行修复. 此过程中, 举例来讲, 开发人员需要明确                           commit 的标记, 即对
                 应的需求   ID  或缺陷  ID  [27] , 在  commit 与相关制品之间显式地创建跟踪链接. 如果从缺陷到         commit 至少有一个跟
                 踪链接, 则缺陷被认为是       linked issue. 没有任何链接的缺陷被称为      unlinked issue. 其他制品同理. 然而, 在对软件过
                 程制品进行信息化管理时, 各个阶段软件活动会通过不同的工具和系统进行管理维护. 比如, 在企业内普遍采用在
                 线软件系统, 如需求看板系统         (Kanban), 代码托管平台系统     (如  GitHub) 和缺陷跟踪系统   (如  Jira) 来管理各个软件
                 制品. 因此生成的数据会存储在不同的软件存储库中, 且制品间的关联关系主要依赖人工方式创建, 不仅费力耗
                 时, 还经常存在关联关系缺失的问题, 形成了“数据孤岛”. 研究人员还发现, 由于不同制品                         (如需求、缺陷和代码)
                 之间的潜在跟踪链接规模很大, 以及长时间的迭代开发过程造成软件制品的频繁演化, 高质量的跟踪链接很难通
                 过人工恢复和维护      [28] .

                                            设计文档           缺陷
                                               设计需求           修复      检测
                                                    开发
                                           需求文档            commit       测试用例
                                                              包含       覆盖
                                              软件制品
                                          活动  关联制品        代码文件
                                               图 1 软件过程制品及其关联关系

                    近年来, 越来越多的研究开始提出           (半) 自动化的算法模型来帮助开发者自动恢复可追踪性                 [29–31] . Aung 等人  [32]
                 的研究综述中汇总了大约近          10 年的软件可追踪性方法的演进过程. 其中包括基于启发式                  (heuristic-based) 的方法、
                 基于概率的方法      [33]  以及当前最主流的基于信息检索        (information retrieval, IR) 的方法  [34] , 如矢量空间模型  (vector
                 space model, VSM) [35]  、潜在语义索引  (latent semantic indexing, LSI) [36] 、潜在狄利克雷分布模型  (latent Dirichlet
                 allocation, LDA) [37] 、Jenson Shannon (JS) 模型  [38] 等. 近年来, 基于学习式的方法成为用于恢复缺失的跟踪链接的主
                 流技术, 包括传统机器学习        (machine learning), 例如随机森林  (RF) [8,10] 、朴素贝叶斯  (naive Bayes, NB)  [8,39] 和深度
   21   22   23   24   25   26   27   28   29   30   31