Page 285 - 《软件学报》2026年第5期
P. 285

2164                                                       软件学报  2026  年第  37  卷第  5  期


                 用  C2D2  算法, 两组在实验中使用的方法安排如表           7  所示. 实验过程中记录了参与者的任务完成时间, 使用               C2D2
                 论文中人工验证的真实缺陷变更集计算定位正确率, 并收集用户体验反馈, 实验结果如表                            8  所示.

                                                     表 7 实验分组情况

                               组别                 任务T1–T5                     任务T6–T10
                               A组             使用C2D2算法隔离缺陷             使用DISAC方法进行缺陷隔离
                                B组          使用DISAC方法进行缺陷隔离              使用C2D2算法隔离缺陷


                                               表 8 隔离缺陷引入任务实验结果

                                              任务T1–T5                       任务T6–T10
                            组别
                                    平均完成时间 (min)    平均正确率 (%)     平均完成时间 (min)     平均正确率 (%)
                            A组           16.2            72             8.7             92
                             B组          11.0            84             15.3            80

                    实验结果显示, 使用      DISAC  算法的结果在任务完成平均时间和定位正确率上均优于                   C2D2 算法. 由于  DISAC
                 方法通过细化的变更拆解和语义理解隔离出具有完整单一活动的代码变更集合, 有助于参与者更快速地聚焦于
                 关键代码改动, 任务完成时间更短. 同时, DISAC            的基于语义的变更隔离方式能够更精确地呈现出引发缺陷的
                 代码范围, 帮助参与者更准确地识别缺陷根本原因. 在对实验参与者的采访中, 大多数参与者表示, DISAC                               的隔
                 离结果具有更强的指导性和可操作性, 同时, 很少有不相关代码的干扰. 相比之下, C2D2                        在部分数据中给出的结
                 果较为精准, 能够帮助快速确认缺陷, 但是更多结果中包含较多无关代码, 增加了定位根因的难度. 这说明本文
                 提出的方法确保了缺陷的完备性, 隔离出包含有上下文信息的结果, 为开发人员的分析和后续修复提供了有力
                 支持.
                  5   总 结

                    本文基于代码变更语义分析提出了一种缺陷隔离方法——DISAC, 该方法结合代码间依赖关系和代码的语义
                 信息, 将复合提交中的代码变更分解为多个具有单一功能的变更集, 再利用线性搜索的算法, 定位引入缺陷的变更
                 子集, 提高了缺陷隔离的准确性和有效性.
                    与传统方法相比, DISAC      具有显著的优势. 首先, 该方法能够将引入缺陷的代码变更单独隔离, 通过回滚的方
                 法, 能够尽快修复缺陷, 从而确保其他功能模块的正常运行不受影响, 极大地降低了缺陷修复对整体系统稳定性的
                 干扰风险. 其次, DISAC   隔离的变更子集不仅具有细粒度, 还保留了完整的上下文语义信息, 使开发人员能够更全
                 面地理解代码变更的背景和影响, 这种上下文信息的丰富性为进一步分析缺陷根因和制定修复策略提供了坚实的
                 基础. 同时, DISAC  方法能够与传统的       DD  方法结合, 从而使所有基于代码变更的缺陷隔离技术能够受益于此, 提
                 升缺陷隔离过程的准确性和效率, 为处理大规模和复杂依赖关系的代码库提供更为高效的解决方案.
                    在未来的研究中, 可以进一步优化           DISAC  的方法. 例如, 可以调整现有大语言模型, 进一步提高变更子集拆分
                 和缺陷隔离的预测准确率. 此外, 本文方法暂未处理极端情况下可能出现的大量变更提交问题, 此类提交可能引发
                 复杂的依赖链, 超出当前方法的处理范围. 未来工作将进一步探索如何在大规模代码库和复杂项目环境中增强
                 DISAC  的适用性和效率, 为更多实际场景中的缺陷隔离和修复提供支持.

                 References
                  [1]   Munson JC, Khoshgoftaar TM. The detection of fault-prone programs. IEEE Trans. on Software Engineering, 1992, 18(5): 423–433. [doi:
                     10.1109/32.135775]
                  [2]   Pai  GJ,  Bechta  Dugan  J.  Empirical  analysis  of  software  fault  content  and  fault  proneness  using  Bayesian  methods.  IEEE  Trans.  on
                     Software Engineering, 2007, 33(10): 675–686. [doi: 10.1109/TSE.2007.70722]
                  [3]   Wright  CS,  Zia  TA.  A  quantitative  analysis  into  the  economics  of  correcting  software  bugs.  In:  Proc.  of  the  4th  Int’l  Conf.  on
   280   281   282   283   284   285   286   287   288   289   290