欢迎访问原文地址来阅读最新版本
转载请注明出处:https://kang.fun/code-review/
个人博客:kang.fun

评审目标

代码评审的目的就是为了保证公司整体代码的健康状况随着不断迭代,始终保持一个较高的水平,所有在评审中使用的工具和流程都应是为此目的而设计的。

评审原则

  • 鼓励质疑

  • 保持代码风格,遵守开发规范

  • 优先设计原则,尊重个人偏好

  • 重视每一行代码

  • 尽可能采用面对面的形式

评审的时机

研发流程应该是严密的、有节奏的,而个体的代码质量会影响整体交付进度,所以请第一时间启动代码评审,最晚不要超过早期测试阶段。

如果是异步评审的机制,评审过程最好不要超过一个工作日,如果评审时间较长,请在开始评审时进行初步反馈。

评审范围

1. 功能

这个Change List是否达到了预期目标?

并发、数据权限、性能、竞态条件等一系列边缘异常是否合理规避?

2. 复杂性

新增的复杂是否是值得的?

复杂设计的实现是否是可读的?

抽象定义是否是优雅整洁的?

鼓励通过设计提高可扩展性,但不可“面向未来做设计”,二者之间的界限应该是:是否能够看到明确的演进方向(actual shape)和需求

3. 单元测试

是否有单元测试?

单元测试是否具有良好的可读性?

每一个测试是否有断言?

是否能覆盖尽可能多的逻辑分支?

4. 命名

命名是否符合规范,且具有良好可读性?

命名是否能充分表达一个项是什么、用来做什么?

5. 注释

注释内容是否是必须的?

注释信息是否全面表述对应代码的意义?如果发现注释难以解释这段代码,那么很大概率上这段代码应该简化或者重构。

注释信息应表达代码的用处,而不是解释代码在干什么

6. 代码风格

鼓励对代码风格提出改进建议,但请提及这是一项锦上添花的建议,切不可作为评审通过与否的判定条件。

如果使用评审工具,请在评论前标注Nit:,以标识这是一项Nitpick(吹毛求疵)的建议。

7. 文档

是否同时建立了或修改了相关文档?

文档格式是否与原项目保持一致?

8. 上下文

修改的内容是否影响原业务逻辑的上下游依赖?

修改的内容是否导致代码质量下降,甚至系统架构腐化?

9. 优秀的代码设计

请不要忽略change list中你觉得不错的部分,肯定优秀设计比指出错误更有价值。

评审的尺度

不要为了提高评审速度而牺牲代码评审的标准,团队内的代码评审应该是一个持续改进的过程,发现问题、解决问题、避免问题,这种正向循环会为研发流程的每一步都带来收益。

如果因为各种原因确实需要加速评审环节,可以按照重要程度降低一部分评审标准。但请在合适的时间,对这部分代码进行重新评审,项目进度紧张不应成为降低代码质量的理由。

如何解决评审意见冲突

评审是对他人工作进行评判,难以避免意见相左的情况发生,通常研发人员会有非常多的理由拒绝评审建议。

谁是对的

如果研发人员认为评审结果有问题,评审人员请优先思考开发者是不是对的,毕竟他们“离代码更近”。

如果评审人员认为评审结果是正确的,合理、适当、礼貌的讨论,会让真相更清晰。

研发人员的反感情绪通常是因为提出问题的方式,而不是对代码质量的坚持。

稍后再解决

研发人员最常见的拒绝原因,就是进度紧张,希望能够先做妥协,承诺后续修正。

但通常之后不会再去做这件事,这并非完全是责任心的问题,而是因为研发人员通常非常繁忙,修复这件事就容易被遗忘。

所以最好将评审建议尽快修复。

评审过于严格

如果评审尺度严格导致研发人员抱怨,那么礼貌的坚持非常有必要,严格的代码评审有助于产出优秀的代码。

可能过了很长时间后研发人员才能看到这部分代码评审的价值,经过论证后的价值观一致更容易建立彼此的认同感。

总结

代码评审是一项具有长期价值的工作,并且对评审双方都具备价值。不要惧怕提出问题,这更容易提高你对问题的认知,如果最终发现你提出的问题是错误的,这对你也是一项难得的提高。更不要拒绝修改问题,即使这些问题在你看来微不足道,反复的正向行为形成惯性,更容易提高工作质量。


参考:

  1. https://google.github.io/eng-practices/review

代码评审的价值和规范相关推荐

  1. 谷歌开源代码评审规范:好坏代码应该这样来判断

    谷歌开源了一套代码评审(Code Review)规范,它是谷歌一套通用的工程实战指南,几乎涵盖了所有编程语言与各种类型的项目,这个规范代表了谷歌长期发展以来最佳实战经验的集合,谷歌表示希望开源项目或其 ...

  2. Code Review(代码评审规范)

    1.Code Review目的 Code Review是一种用来确认方案设计和代码实现的质量保证机制,通过这个机制我们 可以对代码.测试过程和注释进行检查. Code Review主要用来在软件工程过 ...

  3. 数据开发 的 代码规范 以及 代码评审脚本

    文章目录 1.概述 2.代码规范 2.1.通用代码规范 2.2.配置文件和传参规范 2.3.Python代码规范 2.4.SQL代码规范 2.5.其它 3.代码评审 自动化脚本 4.数据逻辑校验机制 ...

  4. 【原创】项目管理杂谈(1):代码评审这点事,元芳你怎么看

    为什么80%的码农都做不了架构师?>>>    申明:因学识有限,某些见解和观点或有不妥,如有冒犯还请见谅.如需与作者联系,见文章底部个人签名处,乐于交流.Q群:210285832, ...

  5. 关于代码评审的微博讨论汇集

    编者按: 7月12日,weibo上 @自律自强 发表了一条微博:十几年来的软件项目经历告诉我,评审是最有效也是成本最低的质量保证和提升的手段,设计书和代码100%肉眼全覆盖绝对值得,而且还是迅速提高新 ...

  6. 如何用度量数据驱动代码评审的改善

    本文正文内容共计8000字,建议阅读时间:16-18分钟. 阅读本文你将收获: 1.为什么要做代码评审的背景介绍: 2.代码评审数据分析设计:过程+指标体系+分析方法和模型: 3.如何做代码评审数据分 ...

  7. 关于代码评审CodeReview

    在一个成熟的团队中,CodeReview 是整个研发流程中不可或缺的一步,而那些即将走向成熟的团队可能对 CodeReview 有很多的误解和问题,也不清楚 CodeReview 该如何去做,本文笔者 ...

  8. 敏捷研发之代码评审与工具

    代码评审的主要内容 编码规范问题:命名不规范等 代码结构问题:重复代码.巨大大方法和类.分层不当.紧耦合 实现问题:错误验证.异常处理.事务划分.线程.性能.安全.实现过于复杂.代码可读性不佳.扩展性 ...

  9. 视频分享:编码与代码评审-质量与现实的最激烈冲突点(完整版)

    内容提要: 某次进度计划评审,QA发现缺少代码评审的环节,于是PM在所有编码任务之后增加了一个评审代码的任务,于是这个进度计划就通过评审了.代码评审不是走形式,领衔项目工作的你一定深受劣质代码的影响, ...

  10. 代码评审的不可能三角

    Code Review 是保证代码质量的重要手段之一,但许多研发团队中它常常由于各种原因并未得到真正的落地.为什么会这样呢?本文希望用一个非常简单的观点来理解这个现象,并据此给出一点优化的想法. 观点 ...

最新文章

  1. 视音频数据处理入门:RGB、YUV像素数据处理【转】
  2. 是否可以将标志传递给Gulp以使其以不同方式运行任务?
  3. mysql数据库连接jar_mysql数据库连接包
  4. jzoj3462-休息【归并排序,逆序对】
  5. java 按照概率生成随机数_JAVA 根据设置的概率生成随机数的方法
  6. 不规则动词的一般过去时
  7. 电商促销惊喜海报设计模板,会讲故事的素材
  8. APS背景和入门基础
  9. 企业如何用好云、管好云?
  10. 根据银行卡号 获取银行名称及银行logo
  11. java输出杨辉三角_使用Java输出杨辉三角
  12. 程序员年薪百万,原来是吃到了这样的红利!
  13. 常用的字符编码:ASCII、Unicode、UTF-8
  14. 完全卸载chrome
  15. 联想笔记本如何重启计算机,联想电脑总是自动重启怎么处理
  16. CodeForces - 140C-New Year Snowmen
  17. AndroidStudio haxm installer win10安装失败问题建议
  18. urdf转sdf制作模型包
  19. 445端口的用处和禁用
  20. 算力网络 — 算力中心

热门文章

  1. linux 动环 源码,动环监控系统中B接口的实现
  2. SUSE Linux 15 If ‘netstat‘ is not a typo you can use command-not-found to lookup the package...
  3. 各种格式的文件用什么软件打开
  4. 世界那么大,如何去看看?进入新世界的框架和脉络
  5. 数据结构总结---1.总概
  6. cPanel主机自定义php.ini文件
  7. (8个方法)解决windows11/10/8/7卡在准备就绪一直转圈
  8. Silicycle反相C-18 SPE固相萃取小柱
  9. 音视频又贵又卡还不够炫?云原生的华为云视频云服务带你重塑新体验
  10. 问题 : 找出直系亲属