代码审查是软件开发中至关重要但耗时的工作。AI 虽然不能完全替代人工审查,但可以大幅提升审查效率。
一、AI 代码审查的定位
审查类型
AI 能力
人工补充
语法错误
五星
确认上下文
安全漏洞
四星
业务安全策略
性能问题
四星
架构级设计
代码规范
五星
团队特有规范
逻辑正确性
三星
业务逻辑验证
测试覆盖率
四星
边界值确认
AI 审查适合做第一道防线 ,把低级问题过滤掉。在提交 Code Review 给同事之前,先让 AI 审一遍,能节省团队大量时间。
二、安全审查 2.1 通用安全审查 Prompt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 var query = "SELECT * FROM Users WHERE Name = '" + input + "'" ;var query = "SELECT * FROM Users WHERE Name = @Name" ;const string ApiKey = "sk-xxxxxxxxxxxx" ;var ApiKey = Configuration["ApiKey" ];Response.Write("<div>" + userInput + "</div>" ); Response.Write("<div>" + HttpUtility.HtmlEncode(userInput) + "</div>" );
2.2 Web 安全审查清单 让 AI 按以下清单逐项审查:
1 2 3 4 5 6 7 审查这段 Web API 代码,逐项检查: 1. 认证绕过:是否有接口遗漏了身份验证? 2. SQL 注入:是否所有数据库查询都使用参数化? 3. XSS:用户输入是否在输出前编码? 4. CSRF:POST/PUT/DELETE 接口是否有防跨站令牌? 5. 文件上传:是否限制了文件类型和大小? 6. 敏感信息:是否有 API Key、密码等硬编码?
三、性能审查 3.1 常见性能问题
1 2 3 4 5 6 7 8 9 10 string result = "" ;for (int i = 0 ; i < 10000 ; i++) result += data[i]; var sb = new StringBuilder(10000 );for (int i = 0 ; i < 10000 ; i++) sb.Append(data[i]); string result = sb.ToString();
3.2 AI 能识别的性能反模式
反模式
AI 识别能力
推荐修复
循环内字符串拼接
五星
改用 StringBuilder
循环内 GetComponent
五星
Awake 中缓存引用
LINQ 中间分配
四星
改用 for 循环
不必要的装箱
四星
改用泛型
大对象重复创建
四星
引入对象池
重复的数据库查询
三星
引入查询缓存
3.3 批量审查工作流 1 2 3 4 5 请分析这个 Unity 项目中所有 MonoBehaviour 脚本的性能问题: - 遍历 Scripts/ 目录下所有 .cs 文件 - 重点关注 Update/FixedUpdate/OnGUI 中的代码 - 输出性能问题列表(按严重程度排序) - 每个问题附带代码行号和修复建议
在 Cursor 或 Claude Code 中,这种批量审查可以一次性覆盖整个项目。
四、自动生成单元测试 4.1 基本测试生成 选中函数,使用 /tests 命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 public class OrderService { public async Task<OrderResult> CreateOrderAsync (CreateOrderRequest request ) { if (request.Items == null || request.Items.Count == 0 ) throw new ArgumentException("订单不能为空" ); decimal total = request.Items.Sum(i => i.Price * i.Quantity); } } public class OrderServiceTests { [Fact ] public async Task CreateOrderAsync_WithValidRequest_ShouldReturnOrderResult () { var service = new OrderService(); var request = new CreateOrderRequest { Items = new [] { new OrderItem { Price = 100 , Quantity = 3 } }}; var result = await service.CreateOrderAsync(request); Assert.NotNull(result); } [Fact ] public void CreateOrderAsync_WithEmptyItems_ShouldThrowException () { var service = new OrderService(); Assert.ThrowsAsync<ArgumentException>(() => service.CreateOrderAsync(new CreateOrderRequest())); } }
4.2 测试生成高级技巧 1 2 3 4 5 6 为 UserService 生成单元测试,要求: 1. 覆盖正常流程(创建、查询、更新、删除) 2. 覆盖所有异常路径(用户不存在、重复邮箱、无效参数) 3. 模拟所有外部依赖(Mock IUserRepository) 4. 每个测试方法独立,不互相依赖 5. 使用 AAA(Arrange-Act-Assert)格式
这种详细的测试 Prompt 能生成更完整的测试套件,覆盖率和质量都远超简单的 /tests 命令。
五、代码重构实战 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 帮我重构这个 God Class(上帝类): class ReportManager { public void GenerateReport(); public void SendEmail(); public void SaveToDatabase(); public void FormatPDF(); public void ValidateData(); public void Backup(); } 要求: 1. 按单一职责拆分为多个类 2. 提取接口抽象 3. 使用依赖注入 4. 保持现有接口兼容 5. 输出每个类的职责说明
AI 的重构策略:
职责拆分 :ReportGenerator、EmailService、ReportRepository、PdfFormatter、DataValidator、BackupService
接口抽象 :IReportGenerator、IEmailService 等
依赖注入 :通过构造函数注入
六、AI 代码审查的核心能力矩阵 了解 AI 在不同审查维度上的能力边界,能帮你更好地分配审查精力:
审查维度
AI 能做什么
AI 不能做什么
人工重点
语法错误
检测所有语法和类型错误
无
无需人工介入
安全漏洞
SQL 注入、XSS、硬编码密钥
业务逻辑层面的安全策略
权限模型设计
性能问题
循环内分配、不必要的装箱
架构级别的性能瓶颈
缓存策略、数据库索引
代码规范
命名规范、格式、模式一致性
团队特有的隐式约定
代码可读性、意图表达
逻辑正确性
明显的逻辑错误
复杂的业务规则验证
业务逻辑是否符合需求
测试覆盖
生成测试用例、检测覆盖率缺口
判断测试的有效性
边界值是否合理
可维护性
识别过长函数、过多参数
判断领域模型的合理性
架构抽象层次
七、CI 集成 AI 审查 在 CI 流程中集成 AI 代码审查:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 name: AI Code Review on: [pull_request ]jobs: ai-review: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: AI Review uses: coderabbitai/rabkit@v1 with: openai-key: ${{ secrets.OPENAI_KEY }}
八、AI 审查的信任度分级 不是所有 AI 审查结果都值得同等信任。根据经验,我对 AI 审查结果的分级如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 高度可信(直接采纳): - 语法错误、拼写错误 - 命名规范不符 - 明显的死代码 中等可信(需要快速确认): - 安全漏洞(SQL 注入、XSS) - 性能反模式(循环分配) - 缺少 null 检查 低度可信(必须人工验证): - 架构设计建议 - 业务逻辑的正确性 - 第三方库的选择建议
九、AI 审查的 Prompt 模板汇总 1 2 3 4 5 6 7 8 9 10 11 安全审查 Prompt: "逐项检查 SQL 注入、XSS、CSRF、硬编码密钥、认证绕过" 性能审查 Prompt: "检查 Update/循环中的 GC Alloc、不必要的装箱、重复查询" 重构审查 Prompt: "识别过长函数、过多参数、重复代码、God Class" 测试审查 Prompt: "检查测试覆盖率缺口、缺少的边界值、Mock 是否合理"
本章小结
AI 审查适合作为”第一道防线”,过滤低级问题后再邀请同事 Review
安全审查重点关注 SQL 注入、XSS、硬编码密钥、认证绕过
性能审查能识别典型的反模式(字符串拼接、频繁 GetComponent、LINQ 分配)
单元测试生成覆盖率好,通过详细的 Prompt 可生成更完整的测试套件
代码重构时提供清晰的拆解目标和约束条件
建议在 CI 流程中集成 AI 审查,实现自动化的第一次代码检查
下一篇看 AI 如何辅助调试。