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

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


                 强对深层逻辑性程序缺陷的检测能力. 因此, 测试覆盖率的提升促进了缺陷检测能力的增强. 本文方法在提高代
                 码缺陷检测能力方面表现出有效性与通用性, 为提升                 LLM  生成程序的可靠性和软件供应链的安全性提供了有力
                 支撑.

                                       表 6 各  LLM  生成的可编译程序的平均代码覆盖率 (%)

                                      模型            HumanEval      EvalPlus     SymExGen
                                 Claude-3.5-Sonnet    76.52         84.16         88.35
                                     GPT-4o           72.30         76.67         79.74
                                   GPT-4-Turbo        82.83         87.78         91.43
                                 DeepSeek-Coder-V2    85.76         89.18         91.70
                                 DeepSeek-Chat-V2     84.76         88.62         91.29
                                    Yi-Large          90.96         92.88         95.19
                                  Gemini-1.5-Pro      73.93         78.80         81.72
                                  Claude-3-Opus       74.10         80.17         84.25
                                     GLM-4            80.46         85.52         89.14
                                  Gemini-1.5-Flash    74.72         81.97         86.44
                                  Claude-3-Sonnet     82.30         86.64         89.50


                   100
                          HumanEval
                   90
                          EvalPlus
                  平均代码覆盖率 (%)  80
                          SymExGen
                   70
                   60
                   50
                   40
                                          166个代码生成任务 (根据SymExGen的代码覆盖率由低到高排序)
                            图 7 针对   LLM  在  166  个代码生成任务上生成的程序, 3       种方法的平均代码覆盖率

                  4   讨 论

                    本节讨论本文方法的可行性与适用性. 本文方法在检测软件供应链中                        LLM  生成代码的缺陷方面具有较好的
                 效果. 这主要得益于当前软件供应链开发中, LLM              生成的代码规模相对较小, 且函数的输入参数与输出返回值信
                 息较为明确, 从而便于符号挂载适配器在符号执行过程中自动识别输入参数并进行符号化处理. 然而, 将本文方法
                 直接应用于传统软件测试仍存在若干挑战: (1) 路径爆炸: 传统软件测试中的程序结构往往更加复杂, 当函数参数
                 数量较多且路径嵌套较深时, 符号执行可能产生指数级增长的路径, 导致计算与内存开销急剧增加; (2) 符号约束
                 过长: 复杂程序的路径约束可能十分冗长, 从而显著增加了约束求解难度和求解时间; (3) 自动化测试难度高: 对于
                 复杂程序, 通常需要人工指定符号变量并设计符号执行策略, 这增加了人工干预成本并降低了测试效率. 上述问题
                 在一定程度上限制了本文方法在传统软件测试场景中的可行性. 相比之下, 本文方法针对软件供应链场景中                                  LLM
                 生成代码进行了专门优化, 符号挂载适配器能够自动识别并符号化程序参数, 进行符号推导, 实现缺陷检测过程的
                 高度自动化, 从而有效降低人工干预成本, 提高缺陷检测效率.
                    此外, 对于缺乏标准实现的待测程序, 本文方法采用                GPT  生成的程序预期输出作为测试用例的标准输出. 为
                 验证该设计的合理性, 我们通过人工核对的方式对                GPT  生成的预期输出进行评估. 实验结果显示, 在测试任务中,
                 GPT  基于程序功能描述与测试输入生成的预期输出的准确率                   (Accuracy) 达到  92.8%. 这一结果表明, GPT  在生成
                 预期输出方面具有较高的正确性与可靠性, 将              GPT  输出作为标准输出构造完整测试用例具有可行性. 即便在少数
                 情况下   GPT  生成的预期输出存在偏差, 导致部分待测程序被误判为存在缺陷, 该类程序也不会被用于供应链软件
   192   193   194   195   196   197   198   199   200   201   202