Page 196 - 《软件学报》2026年第7期
P. 196
赵祖威 等: 软件供应链安全中 LLM 生成代码逻辑性缺陷检测 2881
我们进一步在软件供应链场景中的 Juliet [42] 和 MegaVul [43] 数据集上随机选取了 20 个程序进行了实验评估. 这
两个数据集在软件供应链安全研究中被广泛应用, 其中包含大量源自真实开源项目的典型缺陷与安全漏洞. 表 4 展
示了在这 20 个测试任务上, 不同 LLM 生成程序的平均测试通过率. 实验结果表明, 在供应链数据集上 SymExGen
方法将 HumanEval 和 EvalPlus 方法的平均测试通过率分别从 75.69% 和 64.68% 进一步降低至 47.91%, 这一结果
验证了本文方法在真实软件供应链项目中具有有效性.
表 4 各 LLM 在供应链数据集上生成程序的平均测试通过率 (%)
模型 HumanEval EvalPlus SymExGen
Claude-3.5-Sonnet 93.22 74.58 57.63
GPT-4o 93.22 79.66 66.10
GPT-4-Turbo 84.75 81.36 62.71
DeepSeek-Coder-V2 83.05 61.02 42.37
DeepSeek-Chat-V2 62.71 57.63 33.90
Yi-Large 64.41 52.54 47.46
Gemini-1.5-Pro 81.36 74.58 59.32
Claude-3-Opus 85.19 75.93 38.89
GLM-4 66.10 57.63 47.46
Gemini-1.5-Flash 61.02 47.46 33.90
Claude-3-Sonnet 57.63 49.15 37.29
对于未通过缺陷检测的程序, 我们进一步对其中的缺陷类型进行了分析, 实验结果如表 5 所示. 从表 5 中可以
看出, 本文提出的 SymExGen 方法能够更有效地检测出 LLM 生成代码中的程序崩溃 (crash)、结果不一致
(incorrect output) 和运行超时 (timeout) 等缺陷, 相较于 EvalPlus 方法, SymExGen 方法检测出的缺陷总数提升了
9.61%. 在这些缺陷中, 结果不一致缺陷占比最高, 约占总数的 75%, 这体现了 LLM 生成程序在功能正确性方面的
缺陷较为突出, 而程序崩溃缺陷和运行超时缺陷则分别占比 17% 和 8%.
表 5 未通过缺陷检测程序的缺陷类型分析
缺陷数量
方法 检测出缺陷程序总数
程序崩溃 结果不一致 运行超时
HumanEval 660 153 635 35
EvalPlus 917 185 862 77
SymExGen 985 209 925 98
3.3 RQ2: 为什么集成了符号执行的方法能更有效地检测出 LLM 生成代码中的缺陷?
为了进一步分析为什么 SymExGen 方法能更加有效地检测出 LLM 生成程序中的缺陷, 提升软件供应链的安
全性, 本文对代码覆盖率 (code coverage) 这一指标进行了分析. 该指标定义为不同缺陷检测方法所执行的代码数
占代码总数的百分比. 表 6 展示了针对不同的代码生成任务, 使用 3 种不同的缺陷检测方法对每个 LLM 生成程序
进行测试时的平均代码覆盖率.
从表 6 中的数据可以看出, 缺陷检测能力更强的测试方法 (EvalPlus 和 SymExGen) 确实实现了更高的代码覆
盖率. 其中, EvalPlus 方法为每个代码生成任务平均生成了 756.6 个测试用例, 而 SymExGen 方法仅生成了 78.9 个.
尽管如此, SymExGen 方法的整体平均测试覆盖率达到了 88.07%, 显著高于 HumanEval 方法的 79.88% 和
EvalPlus 方法的 84.76%.
图 7 展示了所有模型在 166 个代码生成任务上的平均代码覆盖率. 图中较长的黑色柱子表示集成符号执行的
方法在提升代码覆盖率方面表现更为突出. 从图中可以看出, 本文方法在其中 164 个任务上均提升了测试覆盖率.
这一覆盖率的显著提升, 使得更多关键路径和边界情况能够被有效执行, 从而增加了缺陷暴露的可能性. 这一结果
也进一步验证了集成符号执行的方法能够生成更多具有针对性的边界测试用例, 从而有效提升测试覆盖率, 并增

