4. 使用Claude Code进行代码审查
任务说明
使用 Claude Code 对指定代码文件进行静态审查,识别潜在缺陷、安全隐患与可维护性问题,并输出结构化的改进建议。本案例以一个包含典型问题的 Python 文件为目标,演示如何通过 Claude Code 的 review 能力完成审查闭环。
环境准备
- 已安装并配置
claudeCLI(Node.js 18+) - 已登录 Claude 账号并完成 API 认证
- 在项目目录中执行
claude命令启动交互式会话
待审查代码文件
创建 sample_code.py,内容如下(故意包含若干典型问题):
import os
import pickle
def load_user_data(filepath):
"""加载用户数据"""
with open(filepath, 'rb') as f:
return pickle.load(f)
def process_transaction(amount, user_id):
"""处理交易"""
if amount < 0:
raise ValueError("金额不能为负")
balance = get_balance(user_id)
if balance < amount:
return False
update_balance(user_id, balance - amount)
return True
def get_balance(user_id):
# 模拟数据库查询
return 1000
def update_balance(user_id, new_balance):
# 模拟数据库更新
pass
def save_report(data, filename):
"""保存报告"""
path = os.path.join("/tmp/reports", filename)
with open(path, 'w') as f:
f.write(str(data))
def main():
user_data = load_user_data("user.pkl")
print(f"用户: {user_data['name']}")
result = process_transaction(500, user_data['id'])
print(f"交易结果: {result}")
save_report({"status": "ok"}, "report.txt")
if __name__ == "__main__":
main()
执行代码审查
在项目目录下启动 Claude Code,运行以下审查指令:
claude
在交互提示符中输入:
请审查 sample_code.py,重点关注:1) 安全性问题 2) 异常处理缺失 3) 代码可维护性 4) 潜在逻辑错误。按严重程度分级输出问题清单和具体改进建议。
预期审查输出要点
Claude Code 应识别出以下关键问题(按严重程度排序):
| 级别 | 问题 | 改进建议 |
|---|---|---|
| 严重 | pickle.load 反序列化不可信数据存在任意代码执行风险 | 改用 JSON/安全格式,或对数据源进行可信校验 |
| 严重 | save_report 中路径拼接未校验,存在路径穿越风险 | 使用 os.path.basename 过滤文件名,或使用白名单校验 |
| 中等 | process_transaction 中 get_balance/update_balance 未处理数据库异常 | 增加 try/except 并回滚事务 |
| 中等 | main() 中 user.pkl 不存在时无错误处理 | 增加文件存在性检查与友好错误提示 |
| 轻微 | 函数缺少类型注解,update_balance 参数未使用 | 添加类型注解,移除未使用参数或以下划线前缀 |
| 轻微 | 硬编码的 /tmp/reports 路径 | 提取为配置常量或环境变量 |
验证方法
审查是否通过的判定标准:
- Claude Code 返回的问题清单中是否覆盖上述全部 6 个关键问题;
- 每个问题是否包含:问题位置(行号/函数名)、风险等级、具体改进代码示例;
- 改进建议是否可直接落地(给出替换代码片段,而非泛泛描述)。
若输出缺少上述任一关键问题,可追加指令:请再检查是否有路径穿越和反序列化风险,以验证 Claude Code 的深度审查能力。
常见问题
- 审查范围过窄:若只返回语法错误而未涉及逻辑/安全,可指定
请从安全、性能、可维护性三个维度分别审查。 - 建议不具体:追加
请为每个问题给出具体的代码修复示例。 - 误报处理:若 Claude Code 将无问题代码标记为缺陷,可要求
请说明该问题的触发条件与利用场景,以过滤低价值提示。