Page 276 - 《软件学报》2024年第4期
P. 276

1854                                                       软件学报  2024  年第  35  卷第  4  期


                                   表 6    基于细粒度缺陷定位的修复方法在真实程序上的修复有效性

                      修复工具          Defects4J (393)  Bears (251)  QuixBugs (40)  Bugs.jar (1 158)  precision (%)
                       JAID [70]       25/31          -             -             -             80.6
                      CapGen [51]      21/25          -             -             -             84.0
                       ACS [50]        18/23          -             -             -             78.3
                     FixMiner [71]     25/31          -             -             -             80.6
                      SimFix [37]      34/56          -             -             -             60.7
                      DLFix [72]       30/65          -             -             -             46.2
                       TBar [42]       43/81          -             -             -             53.1
                      CURE [45]        57/104         -           26/35           -             59.7
                   BEEP + 代码补全        16/16 (2)      2/2 (2)      4/4 (0)        5/5 (4)        100
                    BEEP + 启发式        21/21 (2)       0/0         5/5 (0)        6/6 (4)        100

                    综上, 基于   BEEP  预测结果的缺陷自动修复能够具有高准确率, 为解决修复领域的补丁过拟合问题提供了新
                 的思路.
                  5.4   修复效率分析
                    Liu  等人  [3] 的研究提供了  16  种已有方法在两种输入下      (传统的基于谱的缺陷定位结果以及直接输入标准补丁
                 中修改的语句) 在     Defects4J 数据集上的  NPC  值. 为了进行合理的对比, 我们假定缺陷语句已知, 将基于                BEEP  预
                 测结果与启发式规则的修复方案的             NPC  值与已有方法进行对比, 结果展示在图           6  中. 数据显示, 本文提出的方案
                 的  NPC  值中位数为   2, 显著优于基于模板的程序自动修复工具             (如  TBar 和  kPAR [36] ) 以及最新的基于启发式的修
                 复技术   (如  SimFix). 我们观察到有  6 个工具的修复效率要优于我们提出的方案, 其中的              3 个  (DynaMoth , Nopol ,
                                                                                                      [74]
                                                                                               [73]
                 ACS) 使用了约束求解与程序综合的技术, 使得生成的补丁有很大的概率能够满足测试用例提供的规约; 另外                                  3
                 个  (jKali [11] , Kali-A [75] , jMutRepair [11] ) 在补丁生成的过程中仅运用了简单的修复策略, 大大简化了搜索空间, jKali
                 与  Kali-A  仅将条件语句的条件部分变为        true 或  false, jMutRepair 仅变更操作符. 值得注意的是, 本文提出的修复
                 方案的   NPC  中位数小于   5, 而该方案对每个定位到的缺陷标识符尝试产生                5  个补丁, 因此该方案取得高修复效率
                 的主要原因是     BEEP  能够准确定位到标准操作路径. 同时也应注意到, 我们提出的基于启发式的规则严格限制了
                 补丁搜索空间, 使该修复方案失去了修复更多缺陷的机会, 因此, 如何利用细粒度缺陷定位结果在保持高修复效率
                 的同时修复更多缺陷, 值得后续研究的深入探索.

                                           RSRepair-A
                                                      0   30  60  90  120  150  180
                                             jGenProg
                                            GenProg-A
                                            jMutRepair
                                               kPAR
                                                jKali
                                              Kali-A
                                            DynaMoth
                                               Nopol
                                                ACS
                                            Cardumen
                                               ARJA
                                              SimFix
                                             FixMiner
                                             AVATAR
                                               TBar
                                       BEEP+启发式规则
                                                   0    5    10   15   20   25   30
                                                                 NPC
                                               图 6 几种方法的     NPC  值比较结果
   271   272   273   274   275   276   277   278   279   280   281