AI 写完代码怎么验收?从复现 Bug 到回归测试的完整流程
用一个订单金额函数演练 AI 编程验收:先写输入与预期,再运行正常、边界和异常用例,区分测试通过、构建成功与真实可用,留下可复查的交付记录。
先把“能用”变成可验证的条件
AI 回复“已完成”不等于程序已经运行。开始前写下原始问题、复现步骤、实际结果和期望结果。例如本练习做一个订单合计函数:每个价格使用整数分,不允许负数或布尔值,空订单为零,返回值仍为整数分。练习仅需要 Python 3.10+,不连接支付系统。新建目录,准备 order.py 和 test_order.py 两个文件。这里选择小函数是为了练会验收方法,不能把几项单元测试当成完整电商系统的上线证明。
第一步:让 AI 接受范围与证据要求
把验收条件放在任务最前面,限制它一次只改一个功能。要求交付修改文件、执行的命令、通过与失败的检查,以及没验证的部分。若运行环境缺失,应明确标注未执行。不要让模型为了让测试变绿直接删除断言、扩大允许范围,或把异常路径改成静默成功。修 Bug 时先要求一个能稳定失败的用例,这个失败应对应你看到的错误,而不是故意写错的预期值。
任务:实现 total_cents(prices),输入只能是整数分组成的列表。
验收:空列表返回 0;[199, 299] 返回 498;负数、布尔值、浮点数报 ValueError。
约束:不要增加网络请求和第三方依赖;不要修改这些验收条件。
请给出实现和可运行的 unittest。完成后报告实际执行命令、结果和未覆盖场景;不能执行就明确说明。第二步:保存一个最小实现
把下面代码保存为 order.py。逐项检查的目的,是让异常价格在进入合计前就暴露;如果你实际需要优惠、税费和退款,应另外定义规则,不要把负数禁用直接搬进所有业务。输入单位也必须写入函数名或接口约定,避免前端把“元”当“分”传给后端。这个实现仅接收列表,传字符串、字典或单个数字都属于格式错误。
def total_cents(prices):
if type(prices) is not list:
raise ValueError("prices 必须是列表")
if any(type(price) is not int or price < 0 for price in prices):
raise ValueError("价格必须是非负整数分")
return sum(prices)第三步:运行回归用例,并验证测试本身
把下方代码保存为 test_order.py,在两文件所在目录运行 python3 -m unittest -v,应显示四项测试通过。之后临时把实现的 return sum(prices) 改为 return 0,再运行一次:正常订单用例必须失败。这个操作验证测试确实覆盖了目标行为。验证后恢复实现并重跑,不要提交临时错误。新增需求时先补充新预期,保留旧用例,才能知道修复有没有破坏已有功能。
import unittest
from order import total_cents
class OrderTests(unittest.TestCase):
def test_empty(self):
self.assertEqual(total_cents([]), 0)
def test_normal(self):
self.assertEqual(total_cents([199, 299]), 498)
def test_invalid_prices(self):
for value in [-1, True, 1.5, "199"]:
with self.subTest(value=value):
with self.assertRaises(ValueError):
total_cents([value])
def test_invalid_container(self):
with self.assertRaises(ValueError):
total_cents("199")
if __name__ == "__main__":
unittest.main()第四步:把函数检查延伸到真实页面
单元测试通过后,还要沿用户操作链检查。例如页面输入金额,点击提交,接口接收,数据库写入,重新刷新页面读取。每层都要记录单位是否一致、错误是否能看懂、按钮重复点击会不会重复提交。游戏项目则应检查从启动、进入关卡、失败、重开到退出的完整路径。构建成功只说明打包完成;截图只能证明某一时刻的画面;测试环境成功也不能证明生产环境的域名、证书、权限与配置都正确。按真实发布方式做一次冒烟验证。
失败时怎样把问题交回 AI
提交完整错误类型、第一处项目代码堆栈、运行命令和最小输入,并说明当前版本。把访问令牌、个人信息和业务机密删掉。要求它先解释证据支持的原因,再做最小修改。若连续两轮没有改善,就回退到最后可运行版本,把问题缩小成独立样例,不要继续叠补丁。不要仅发送“还是不行”;同一个表象可能来自编译缓存、环境变量、错误路由或数据格式,提供可复现信息才能区分。
交付模板与最终验收
每次发布留一份短记录:需求编号、提交版本、变更文件、测试命令与退出码、人工操作结果、未覆盖风险、回退办法。对于数据库变更,另记备份与兼容策略;对于外部 API,另记超时和失败降级。只有真正执行过的内容才能写“已验证”。本练习完成的标准是四项测试通过、临时错误能被检出、错误恢复后再次通过,并且你能解释为什么 true 不应作为价格 1 接受。
变更目标:
提交版本:
执行命令 / 结果:
人工操作 / 结果:
未验证范围:
数据变更与备份:
回退步骤:配套工具与教程
- AI 输出 JSON 总报错?用 Python 做字段校验与失败重试
- 本地大模型上手:先做一轮小规模验证
- 怎样用自己的任务比较两个 AI 模型
- Flow-based Deep Generative Models