Page 195 - 《软件学报》2026年第7期
P. 195

2880                                                       软件学报  2026  年第  37  卷第  7  期


                 估  LLM  能力的重要平台, 提供了最新的         LLM  能力评估数据. 我们于      2024  年  8  月  1  日从该平台获取了模型能力
                 排名, 并根据表现选取了排名前         11  的模型, 同时遵循每个机构最多选取          3  个模型的标准.
                    表  3  展示了针对不同的代码生成任务, 使用          3  种不同缺陷检测方法对每个         LLM  生成程序进行检测时的平均
                 测试通过率. 其中, 模型的成功率         (success rate) 和参数规模  (size) 在一定程度上代表了不同模型的代码生成能力,
                 模型成功率指的是每个模型在响应指定提示时生成的可成功编译程序占所有生成程序的百分比. 参数规模指的是
                 每个  LLM  的参数数量, 以    10  亿 (B) 为单位. 对于未正式公开参数数量的模型, 我们使用了非官方渠道的估计值,
                 并用“*”标注以表示其非官方性. 对于某些无法获得参数数量的私有模型, 我们用“-”表示该数据缺失.

                                        表 3 各   LLM  生成的可编译程序的平均测试通过率

                                                                         平均测试通过率 (%)
                                模型         成功率 (%)   参数规模 (B)
                                                                  HumanEval  EvalPlus  SymExGen
                           Claude-3.5-Sonnet  97.58      -          76.54     54.32     49.38
                               GPT-4o        96.83       -          74.39     58.54     53.66
                             GPT-4-Turbo     95.97       -          71.25     55.63     51.88
                          DeepSeek-Coder-V2  95.90       236        77.71     58.60     54.14
                           DeepSeek-Chat-V2  94.40       236        61.01     46.54     40.88
                              Yi-Large       94.40       34         69.43     54.14     50.96
                            Gemini-1.5-Pro   92.74      120*        50.32     38.22     35.03
                            Claude-3-Opus    91.87      100*        61.94     49.03     44.52
                               GLM-4         90.16        9         43.42     31.58     29.61
                            Gemini-1.5-Flash  83.20      32*        46.90     28.28     25.52
                            Claude-3-Sonnet  71.31       70*        32.06     25.19     20.61

                    本实验中包含每个代码生成任务的标准实现程序, 作为判断测试结果是否正确的参照. 测试通过率指标表示
                 的是在测试中完全正确的         LLM  生成程序占所有生成程序的百分比. 因此, 对于用不同方法测试的同一批                      LLM  生
                 成程序而言, 较低的通过率表明相应的测试方法检测到的错误程序数量更多, 反映出测试方法的缺陷检测能力更
                 强. 相反, 对于不同    LLM  生成的程序来说, 较低的通过率则表明该模型的代码生成能力较弱, 正确输出的比例
                 更低.
                    表  3  中的测试通过率数据显示, 随着新测试方法的逐步引入                (从  HumanEval 到  EvalPlus, 再到  SymExGen), 各
                 模型的测试通过率依次下降. 这一趋势表明              3  种方法的缺陷检测能力逐步增强. 本文提出的             SymExGen  方法有效
                 增强了对软件供应链中        LLM  生成代码的缺陷检测能力, 进而提升了软件的可靠性. 值得注意的是, SymExGen                    方
                 法将  HumanEval 和  EvalPlus 的平均测试通过率分别从     60.45%  和  45.46%  降低至  41.47%, 这表明  SymExGen  方法
                 在检测   LLM  生成程序缺陷方面更加有效.
                    图  6  展示了所有模型在     166  个代码生成任务上的平均测试通过率. 图中较长的灰色柱子表示集成符号执行的
                 方法在降低测试通过率方面表现更为突出. 从图中可以看出, 本文方法在多个任务场景下均能有效检测生成代码
                 中的缺陷, 具备较强的通用性和适应性.

                   100
                   90     HumanEval
                          EvalPlus
                  平均测试通过率 (%)  60
                   80
                          SymExGen
                   70
                   50
                   40
                   30
                   20
                   10
                    0
                                          166个代码生成任务 (根据HumanEval的测试通过率由低到高排序)
                            图 6 针对   LLM  在  166  个代码生成任务上生成的程序, 3       种方法的平均测试通过率
   190   191   192   193   194   195   196   197   198   199   200