Files
zhuangang/topics/ai/ai-coding/02-verify-evidence.md
T

102 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
id: ai.ai-coding.verify-evidence
title: 验证 AI 产出:测试、审查清单、真实环境验证和会话记录作为作品证据
type: lesson
domain: ai
stack: [ai-coding]
tags: [AI 产出验证, 代码审查, 测试, 会话记录, 作品集, 脱敏]
level: intermediate
prerequisites: [ai.ai-coding.workflow-rules-skills]
est_hours: 2.5
related: [ai.ai-coding.scenario.ai-assisted-feature, devops.cicd.index, ai.ai-coding.interview]
week: [8, 15]
order: 2
---
# 验证 AI 产出:测试、审查清单、真实环境验证和会话记录作为作品证据
## 解释说明
**AI 写代码的速度很快,你的价值在于判断它对不对。** 面试官会追问“你怎么确认 AI 写的是对的”,回答“我看了一下”是不够的。
### 三层验证
| 层 | 做法 |
| --- | --- |
| 自动检查 | 测试(尤其是你自己补的边界测试)、类型检查、lint、CI |
| 人工审查 | 逐行读懂;按清单检查(见下表);不懂的地方查文档或让 AI 解释后自己验证 |
| 真实环境 | 在本地 / 测试环境真正跑一遍:调接口、看页面、看日志和数据库,而不只是跑单测 |
### AI 代码常见问题审查清单
| 类别 | 检查点 |
| --- | --- |
| 边界条件 | 空值、负数、超大值、并发、重复请求 |
| 过时 API | 使用了旧版本的写法(例如 LangChain 0.x、MCP SDK 1.x 的写法) |
| 编造 | 不存在的函数、参数、配置项、依赖包 |
| 安全 | SQL 拼接、未校验输入、日志打印敏感信息、硬编码密钥 |
| 错误处理 | 吞掉异常、只处理成功路径 |
| 测试质量 | 测试只验证了实现本身(同一个错误写进了实现和测试)、过度 mock |
| 范围 | 改了不该改的文件、顺手“重构”了无关代码 |
### 会话记录作为作品证据
部分岗位要求提交 AI 编程的会话记录或案例。建议每个项目保留 1~2 份**整理过的**记录:任务、给 AI 的上下文、计划、AI 出错的地方和你怎么发现的、验证结果、最终提交。**务必脱敏**:去掉公司名、内部系统名、内网地址、密钥、客户数据——用学习项目的记录最安全。
## 案例
优惠价格计算:AI 生成的代码和测试都“通过了”,但测试是 AI 自己写的,只覆盖了正常情况。人工补充了 4 个边界测试,发现“优惠券大于金额”时返回负数;修复后用 `verify.py` 生成验证记录,附在提交说明里;这个过程整理成会话记录,放进作品集的“AI 编程案例”。
## 代码示例
[examples/ai-workflow/verify.py](examples/ai-workflow/verify.py) 运行一组检查并生成验证记录:
```bash
python verify.py --task "新增优惠价格计算" --check "pytest -q sample" --out verification.md
```
生成的记录(节选):
```markdown
# 验证记录:新增优惠价格计算
- 时间:2026-10-23 16:12 CST
- 结论:通过
| 检查 | 退出码 | 耗时(秒) |
| --- | --- | --- |
| `pytest -q sample` | 0 | 0.54 |
## 人工审查要点
- 金额使用 Decimal,舍入方式与产品文档一致(四舍五入到分)
- 补充了“优惠券大于金额”的边界测试:AI 第一版在这里返回负数
```
人工补充的边界测试 [sample/test_pricing.py](examples/ai-workflow/sample/test_pricing.py):
```python
def test_coupon_larger_than_amount():
assert final_price(Decimal("5"), Decimal("10"), vip=True) == Decimal("0.00")
def test_negative_rejected():
with pytest.raises(ValueError):
final_price(Decimal("-1"), Decimal("0"), vip=False)
```
会话记录模板:[session-log-template.md](examples/ai-workflow/session-log-template.md)。
## 易错点
- 让 AI 同时写实现和测试,然后以“测试通过”作为证据。
- 只跑单元测试,从没在真实环境运行。
- 会话记录直接导出未脱敏的公司内容。
- 记录里只有“AI 帮我写了 xx”,没有你的判断和验证过程——这恰恰是面试官想看的。
## 面试常问
- 你怎么确认 AI 写的代码是对的?
- 讲一次 AI 写错、被你发现的经历。
- 用 AI 编程后,你的效率提升了多少?哪些地方帮不上忙?