Page 188 - 《软件学报》2026年第7期
P. 188
赵祖威 等: 软件供应链安全中 LLM 生成代码逻辑性缺陷检测 2873
次调用, 并根据不同的用户消息内容决定记录普通日志还是错误日志. 当用户消息不等于错误码时, 系统将该消息
视为普通信息并记录 (第 3、4 行). 反之, 当用户消息等于错误码时, 程序会进一步判断其内容以确定是否记录错
误日志: 若用户消息的第 2 个字符 (下标为 1) 为“E”, 表明该消息为“程序错误”信息, 此时程序会记录错误日志, 并
注明该错误是由程序错误导致的 (第 6、7 行). 若用户消息的第 3 个 (下标为 2) 与第 4 个 (下标为 3) 字符的
ASCII 码之和等于 65, 则表示系统在运行过程中已累计产生 65 条警告信息, 此时程序也会记录错误日志, 并注明
该错误是由“过多警告”导致的 (第 8、9 行). 按照设计意图, 在每次日志记录时, 程序应当仅记录一种错误原因, 即
在“程序错误”与“过多警告”这两种情形中选择其一: 若存在程序错误, 则优先记录“程序错误”作为错误原因; 仅在
不存在程序错误的前提下, 且警告计数达到特定阈值时, 记录“过多警告”作为错误原因. 然而, 经分析发现, LLM 生成
的该函数未能正确实现上述业务规则, 导致程序在特定输入条件下可能同时记录两种错误原因, 从而造成错误日
志信息混乱, 增加了软件开发人员识别和定位软件漏洞的难度, 最终影响缺陷的高效修复, 降低基础软件的可靠性.
因此, 本文关注的核心问题在于: 如何有效检测软件供应链 LLM 生成代码中此类仅在特定输入条件下才会触发的
深层逻辑性程序缺陷, 从而提升生成代码的正确性, 保障基于 LLM 构造的智能化基础软件的可靠性与安全性?
1. void log_message(char* user_message,
2. ``````` char* error_code) {
3. if (strcmp(user_message, error_code) != 0)
4. log_info(user_message);
5. else {
6. if (user_message[1] == 'E')
7. log_error(''Program error'');
8. if (user_message[2] + user_message[3] == 65)
9. log_error(''Too many warnings'');
10. }
11. return;
12. }
图 1 LLM 生成的用于日志记录的程序片段
由于上述缺陷仅在满足特定输入条件时才会被触发, 传统模糊测试方法在生成满足这些特定条件的测试用例
时面临巨大挑战. 以图 1 为例, 输入字符串 user_message 必须首先等于字符串 error_code, 且同时满足 user_message[1] ==
'E'和 user_message[2] + user_message[3] == 65 这两个条件, 才能触发该程序错误. 而随机测试或模糊测试方法生成
满足上述复杂条件的测试用例的概率极低. 此外, 直接使用 LLM 推理出能够触发该错误的测试用例也存在较大困
难, 因为当前主流 LLM 在处理此类深度逻辑推理任务时存在明显不足.
符号执行技术可以有效弥补 LLM 在深度逻辑推理能力方面的不足, 它能够从程序中提取严格的约束条件, 并
通过求解这些约束条件生成触发程序问题的特定输入. 例如, 在本例中, SMT 求解器可以通过求解符号执行约束,
生成测试输入 user_message == error_code == ''AE !'', 从而准确触发目标程序缺陷, 有效解决传统缺陷检测方法难
以生成满足特定输入条件测试输入的问题.
本文提出一种软件供应链安全中融合符号执行的 LLM 生成代码缺陷检测方法, 该方法充分利用符号执行技
术, 提升测试的覆盖率 (coverage) 和有效性, 从而能够检测出更多软件供应链中 LLM 生成代码的缺陷. 我们基于
多个主流测试基准中的 166 个代码生成任务, 对 LMSYS Chatbot Arena 中排名前 11 的 LLM 进行了实验评估. 实
验结果表明, 本文方法在缺陷检测效果方面显著优于传统方法, 能更有效地发现 LLM 生成代码中的功能性和逻辑
性缺陷, 进而提升代码的正确性. 具体而言, 相较于现有方法, 本文方法使代码的平均测试通过率 (pass rate) 降低
了 3.99%–18.98%, 平均测试覆盖率提升了 3.31%–8.19%.
本文的主要贡献如下.
(1) 验证了符号执行技术可有效弥补现有 LLM 代码生成缺陷检测方法在深度逻辑推理方面的不足, 并提出将
其集成至基础软件供应链的 LLM 生成代码缺陷检测框架中, 以提升缺陷检测能力.
(2) 设计并实现了一种软件供应链安全中融合符号执行的 LLM 生成代码缺陷检测方法, 该方法能够自动识

