AI code review
前言
代码审查是一件投入产出比最高的事情。对个人而言,你可以通过审查别人的代码,你能学到不同的写法、设计思路和最佳实践,从而提升自己的技术水平;而对团队来说,互相审查也能够提高团队整体的代码质量。
通常来说,代码审查能够发现55-60%的错误,而各种测试手段(单元测试、集成测试等)只能发现25-45%。说明代码审查比测试更能发现bug。没有代码审查时,每100行代码有4.5个错误;有了代码审查后,降到0.82个。错误率降低了约82%。(来源:代码评测:Just Do It)
所以,代码审查从始至终都是开发中不可或缺的一环。
代码审查的关注点
| |
逻辑和正确性错误
代码能正确运行并不代表代码是合格的。逻辑上代码能运行但是不符合预期。比如该用加法的地方用了减法,该遍历数组却漏了最后一个元素;正确性上代码在边界条件下会出错。比如除零、空指针、数组越界等。
前者适配产品需求,后者一般也是测试需要关注的问题。
可读性和可扩展性
- Readability(可读性):其他程序员能否快速理解这段代码在做什么
- Maintainability(可维护性):未来需要修改或扩展时,是否容易下手
AI代码审查工具可以自动检测这种"复杂度过高"的代码,并建议重构,这正是AI的优势所在——它不会因为代码长就"looks fine",而是会逐行分析复杂度。
性能
代码能跑、能读,但如果太慢,用户体验会很差。性能问题往往在数据量小的时候看不出来,一旦数据量变大就会暴露。性能问题很难通过测试发现(测试通常用小数据集),所以代码审查是发现性能问题的关键时机。
比如选择合适的数据结构,并发策略等
安全
安全问题往往在正常使用时看不出来,只有被恶意攻击时才会暴露。一旦发生时,可能导致数据泄露、系统被控制、用户信息被盗等多个问题。
比如python中的eval函数会执行任意的python代码,这时候需要加点限制,比如不允许函数调用,系统命令,导入语句等
Best Practice
这是代码审查的第五个重点关注领域。如果说前面讲的是"代码对不对"、“代码好不好读”、“代码快不快”、“代码安不安全”,这点讲的就是"代码是否符合行业/团队的标准做法"。
CR - 金字塔模型
| |
代码评论特征
代码评论大致有四个要点:(前两点重在描述,然后给出方案 和 方案的依据)
提供有关问题具体的细节;引用具体的代码或者问题;给出建议的解决方案;提供证据或者解释
AI 审查的变化
- 效率上:自动化减少了审查时间,并提前捕获问题
- 一致性:AI在所有代码审查中应用相同的标准
- 知识共享:开发者通过AI建议学习最佳实践
- 降低认知负荷:AI处理常规检查,让人类专注于复杂逻辑
- 持续改进:AI系统随着数据增加而不断改进
- 对代码的理解:现代AI代码审查工具更深入,提供上下文分析和模式识别
当前的AI水平在写代码上至少超过了25%的开发者,但不如高级开发者,主要缺乏的是高级开发者的创造力、架构思维、业务理解。但AI在抓bug方面超越了所有级别的人类开发者,因为它可以不知疲倦的逐行检查,且直到各种bug模式。
所以说对于人类而言,人类应该学会用AI工具辅助,让AI完成它擅长的部分,比如抓bug,写常规代码;而像架构设计,业务逻辑等更为复杂的内容,人类自己就应该专心学习。(这里涉及在做AI代码审查系统时,可以添加分类功能,针对性的输出人类所需要的评论)
且在实际情况中,AI所做的内容应该是客观的给出 比如 bug,security,performance,edge case等问题,人类则要理解业务需求,传承团队经验,尊重团队文化等。这些同样可以教导给AI,但需要时间去不断调优。(当然对于评论的评价标准也是多样的,比如评论准确率,cr效率,代码质量的提升等)
AI 审查的局限性
1 需要时间学习团队规范。包括代码风格,团队规范,项目结构,历史经验等
2 有一定误报率,需要手动标记,逐渐学习
3 还无法捕捉代码惯用法和仓库最佳实践。人们之间靠经验相传的不成文规定不好总结,所以ai不一定能学会
4 无法处理复杂的业务逻辑和架构决策。所以经常需要人为其分步处理,语言指导等
5 对安全相关的变更必须格外谨慎。这方面不能完全信任ai,仍然需要人工审查,且需要以谨慎的态度对待AI给出的建议
6 AI经常漏掉边界情况
7 有了AI编码系统,代码审查比以往任何时候都更重要。AI带来了更多不由人类本身写出的代码,这些部分更需要人类对其进行审查,同时负有责任。
所以说,审查前需要明确告诉它不要审查什么,以及你的代码模式/惯用法,告知基础信息。对用户输入、认证、文件操作、网络请求要特别小心。这四个是安全敏感区域,注意结合具体业务。