4. 使用Claude Code进行代码审查

任务说明

使用 Claude Code 对指定代码文件进行静态审查,识别潜在缺陷、安全隐患与可维护性问题,并输出结构化的改进建议。本案例以一个包含典型问题的 Python 文件为目标,演示如何通过 Claude Code 的 review 能力完成审查闭环。

环境准备

  • 已安装并配置 claude CLI(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 路径提取为配置常量或环境变量

验证方法

审查是否通过的判定标准:

  1. Claude Code 返回的问题清单中是否覆盖上述全部 6 个关键问题;
  2. 每个问题是否包含:问题位置(行号/函数名)、风险等级、具体改进代码示例;
  3. 改进建议是否可直接落地(给出替换代码片段,而非泛泛描述)。

若输出缺少上述任一关键问题,可追加指令:请再检查是否有路径穿越和反序列化风险,以验证 Claude Code 的深度审查能力。

常见问题

  • 审查范围过窄:若只返回语法错误而未涉及逻辑/安全,可指定 请从安全、性能、可维护性三个维度分别审查。
  • 建议不具体:追加 请为每个问题给出具体的代码修复示例。
  • 误报处理:若 Claude Code 将无问题代码标记为缺陷,可要求 请说明该问题的触发条件与利用场景,以过滤低价值提示。