论文阅读-自动程序修复-Is Your Code Generated by ChatGPT Really Correct?Rigorous Evaluation of Large Language

本文探讨了如何通过EvalPlus框架精确评估ChatGPT生成的代码正确性,提出了一种基于符号执行和突变的方法。实验结果显示,尽管ChatGPT在某些任务上表现良好,但存在测试不足和错误率问题,为进一步提升代码生成质量提供了启示。

论文来源icon-default.png?t=N7T8https://arxiv.org/pdf/2305.01210.pdf

概述

 本文关注大型语言模型在代码生成中的应用,旨在评估ChatGPT生成的代码的正确性。

(评估生成式代码的正确性)

本文创新动机

现有研究中对于生成代码的正确性评估不足,本文提出了一种基于符号执行的方法,用于评估生成代码的正确性,并在实验中证明了其有效性。

这篇论文的创新点,为之后的论文提供了一些的启发

1.通过使用ChatGPT作为自动生成引擎,并且灵活应用突变

使用ChatGPT作为自动生成引擎本来存在速度的问题

因为:ChatGPT不适合大量的自动化测试生成,查询如此大的模型的速度和成本不理想。

本文解决了这个问题:从ChatGPT生成的高质量种子输入开始执行类型感知输入突变。

(i)使用ChatGPT的种子输入语料库来初始化种子池并引导生成管道;

(ii)每次从种子池中随机选择一个输入(即种子),将其突变为新的输入(即突变体);

(iii)符合程序合同(§2.3)的新输入被添加到种子池中,从(ii)开始继续生成过程。

2.扩展基准

通过自动化测试方法改进编程基准,包含更多高质量和自动生成的测试输入,将有助于更准确地评估代码生成的性能。

背景

过往相关论文比较

大语言模型的应用专题里面

·Transformer-based language models for software vulnerability detection 将软件源代码转换成自然语言,利用训练好的Transformer语言模型根据上下文理解注释和代码的关系,推断代码是否存在漏洞。(利用LLM检测代码是否有漏洞)

·Automated repair of programs from large language models

研究利用自动化修复技术(TBar 和Recoder)以及Codex-e来修复GPT-3模型的后代Codex产生的代码错误(修复LLM生成式代码的错误)

·Examining zero-shot vulnerability repair with large language 

作者研究了大语言模型在没有专门对安全漏洞修复进行训练的情况下(Zero-Shot),通过构建适当的提示来引导LLMS生成修复漏洞的代码。(利用LLM修复代码漏洞)

·Large language models are zero-shot f

✅ 正确答案是:**BMW Coding Guidelines** --- ### 解释: 在宝马集团(BMW Group),所有代码,**无论是否由人类编写或AI生成**,都必须遵守公司内部的统一软件开发标准。这意味着: > ✅ **AI生成的代码也必须符合 BMW Coding Guidelines** #### 为什么是 "BMW Coding Guidelines"? 1. **权威性与覆盖范围**: - BMW Coding Guidelines 是一套正式的技术规范文档,涵盖编码风格、安全性要求、可维护性原则、命名约定、错误处理机制等; - 它适用于所有在 BMW 软件栈中运行的生产级代码,包括车载系统、工厂自动化、后端服务和研发工具。 2. **AI 不豁免合规责任**: - 即使代码是由 Copilot、Codex 或其他 AI 工具生成的,一旦被开发者采纳并提交到代码库,就视为“团队产出”; - 因此必须满足与手写代码相同的质量与安全标准; - 开发者有义务审查 AI 输出,并根据 BMW Coding Guidelines 进行修改或拒绝使用。 3. **IT Work Instructions 的角色?** - ❌ 虽然 IT Work Instructions 提供操作流程指导(如如何配置 IDE、启用 Copilot 插件),但它们**不定义代码本身的质量标准**; - 它们属于“怎么用”的范畴,而不是“写出什么样的代码”的规范。 4. **"none" 显然是错误的**: - BMW 对汽车软件的安全性和可靠性要求极高(功能安全 ISO 26262、ASPICE 流程合规); - 允许无指南约束的 AI 代码进入系统会带来巨大风险,这在工程文化严格的车企中不可接受。 --- ### 实践示例(Python):检查 AI 生成代码是否符合 BMW Python 编码规范片段 假设 BMW 的 Python 编码规范包含以下要求: - 函数必须有类型注解; - 禁止使用 `print()` 输出日志(应使用 `logging` 模块); - 变量名必须为小写加下划线; - 所有文件开头需包含版权说明。 ```python import ast import re import logging # 模拟 BMW Coding Guidelines 的部分规则检查 class BMWCodingGuidelineChecker: def __init__(self): self.violations = [] def check_type_annotations(self, node): if isinstance(node, ast.FunctionDef): if not all(arg.annotation for arg in node.args.args): self.violations.append(f"函数 '{node.name}' 缺少参数类型注解") def check_print_usage(self, node): if isinstance(node, ast.Call) and isinstance(node.func, ast.Name) and node.func.id == "print": self.violations.append("禁止使用 print(),请改用 logging.info() 等") def check_variable_naming(self, node): if isinstance(node, ast.Assign): for target in node.targets: if isinstance(target, ast.Name): if not re.match(r'^[a-z_][a-z0-9_]*$', target.id): self.violations.append(f"变量命名不符合规范: {target.id}") def check_copyright_header(self, source_lines): if not source_lines: return first_line = source_lines[0] if not any(keyword in first_line for keyword in ["Copyright", "BMW"]): self.violations.append("缺少版权声明头部") def run(self, source_code: str): self.violations.clear() lines = source_code.strip().splitlines() # 检查头部 self.check_copyright_header(lines) try: tree = ast.parse(source_code) except SyntaxError as e: self.violations.append(f"语法错误: {e}") return self.violations for node in ast.walk(tree): self.check_type_annotations(node) self.check_print_usage(node) self.check_variable_naming(node) return self.violations # 示例:检测一段 AI 生成的代码 ai_generated_code = ''' # auto-generated by copilot def calculate_speed(distance, time): # missing type hints! print("Calculating...") # 使用了 print! SpeedResult = distance / time # 非法命名! return SpeedResult ''' checker = BMWCodingGuidelineChecker() issues = checker.run(ai_generated_code) if issues: print("❌ AI 生成代码未通过 BMW 编码规范检查:") for issue in issues: print(f" - {issue}") else: print("✅ 代码符合 BMW 编码规范") ``` > 💡 建议将此类检查集成进 CI/CD 或 Git 预提交钩子,确保 AI 生成代码不会绕过质量门禁。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值