京东云开发者|代码评审的价值和规范
评审目的
代码评审的目的就是为了保证公司整体代码的健康状况随着不断迭代,始终保持一个较高的水平,所有在评审中使用的工具和流程都应是为此目的而设计的。
评审原则
鼓励质疑
保持代码风格,遵守开发规范
优先设计原则,尊重个人偏好
重视每一行代码
尽可能采用面对面的形式
评审时机
研发流程应该是严密的、有节奏的,而个体的代码质量会影响整体交付进度,所以请第一时间启动代码评审,最晚不要超过早期测试阶段。
如果是异步评审的机制,评审过程最好不要超过一个工作日,如果评审时间较长,请在开始评审时进行初步反馈。
评审范围
1. 功能
这个Change List是否达到了预期目标?
并发、数据权限、性能、竞态条件等一系列边缘异常是否合理规避?
2. 复杂性
新增的复杂是否是值得的?
复杂设计的实现是否是可读的?
抽象定义是否是优雅整洁的?
鼓励通过设计提高可扩展性,但不可“面向未来做设计”,二者之间的界限应该是:是否能够看到明确的演进方向(actual shape)和需求
3. 单元测试
是否有单元测试?
单元测试是否具有良好的可读性?
每一个测试是否有断言?
是否能覆盖尽可能多的逻辑分支?
4. 命名
命名是否符合规范,且具有良好可读性?
命名是否能充分表达一个项是什么、用来做什么?
5. 注释
注释内容是否是必须的?
注释信息是否全面表述对应代码的意义?如果发现注释难以解释这段代码,那么很大概率上这段代码应该简化或者重构。
注释信息应表达代码的用处,而不是解释代码在干什么
6. 代码风格
鼓励对代码风格提出改进建议,但请提及这是一项锦上添花的建议,切不可作为评审通过与否的判定条件。
如果使用评审工具,请在评论前标注Nit:
,以标识这是一项Nitpick(吹毛求疵)的建议。
7. 文档
是否同时建立了或修改了相关文档?
文档格式是否与原项目保持一致?
8. 上下文
修改的内容是否影响原业务逻辑的上下游依赖?
修改的内容是否导致代码质量下降,甚至系统架构腐化?
9. 优秀的代码设计
请不要忽略change list中你觉得不错的部分,肯定优秀设计比指出错误更有价值。
评审尺度
不要为了提高评审速度而牺牲代码评审的标准,团队内的代码评审应该是一个持续改进的过程,发现问题、解决问题、避免问题,这种正向循环会为研发流程的每一步都带来收益。
如果因为各种原因确实需要加速评审环节,可以按照重要程度降低一部分评审标准。但请在合适的时间,对这部分代码进行重新评审,项目进度紧张不应成为降低代码质量的理由。
如何解决评审意见冲突
评审是对他人工作进行评判,难以避免意见相左的情况发生,通常研发人员会有非常多的理由拒绝评审建议。
1. 谁是对的
如果研发人员认为评审结果有问题,评审人员请优先思考开发者是不是对的,毕竟他们“离代码更近”。
如果评审人员认为评审结果是正确的,合理、适当、礼貌的讨论,会让真相更清晰。
研发人员的反感情绪通常是因为提出问题的方式,而不是对代码质量的坚持。
2. 稍后再解决
研发人员最常见的拒绝原因,就是进度紧张,希望能够先做妥协,承诺后续修正。
但通常之后不会再去做这件事,这并非完全是责任心的问题,而是因为研发人员通常非常繁忙,修复这件事就容易被遗忘。
所以最好将评审建议尽快修复。
3. 评审过于严格
如果评审尺度严格导致研发人员抱怨,那么礼貌的坚持非常有必要,严格的代码评审有助于产出优秀的代码。
可能过了很长时间后研发人员才能看到这部分代码评审的价值,经过论证后的价值观一致更容易建立彼此的认同感。
总结
代码评审是一项具有长期价值的工作,并且对评审双方都具备价值。不要惧怕提出问题,这更容易提高你对问题的认知,如果最终发现你提出的问题是错误的,这对你也是一项难得的提高。更不要拒绝修改问题,即使这些问题在你看来微不足道,反复的正向行为形成惯性,更容易提高工作质量。
作者:康志兴
参考:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
从 Coreboot 中删除旧 AMD CPU 和主板支持,代码减少约 738k 行
Upstream Coreboot 已逐步停止支持较旧的 AMD 14h / 15h / 16h 系列处理器和相关主板。 如Phoronix 所述,由于这些较旧的 AMD 平台依赖于旧的 SMP 初始化路径,并且从未移植到较新的代码,因此在弃用之后,这些 targets已从上游 Coreboot 中删除。事实上,考虑到这些较旧的 ports 未进行维护且未针对任何新的 Coreboot 功能等进行调整,此举乃是意料之中。那些仍在运行带有 Coreboot 固件的旧 AMD 主板的用户可以继续使用其现有固件。同样,由于 Git 和现有的 Coreboot tagged releases;如果需要的话,那些选择这些旧 AMD 主板的人可以继续运行以前的 Coreboot 版本。但就上游而言,这些旧的 AMD CPU/主板不再受支持。 此前,AMD 也有过为新平台积极贡献上游的时候。他们曾积极为新的 APU 平台积极支持 Coreboot —— 在2011 年承诺在未来的 CPU 中支持 Coreboot,但也只持续了几年。逐渐的,他们对 Coreboot 的贡献往往就仅限于在 Google...
- 下一篇
京东云开发者|mysql基于binlake同步ES积压解决方案
1 背景与目标 1.1 背景 国际财务泰国每月月初账单任务生成,或者重算账单数据,数据同步方案为mysql通过binlake同步ES数据,在同步过程中发现计费事件表,计费结果表均有延迟,ES数据与Mysql数据不一致,导致业务页面查询数据不准确,部分核心计算通过ES校验失败 1.2目标 解决binlake到JMQ积压同步ES延迟问题 2 当前业务流程 2.1 流程图 现有业务基本流程如下图,包含运营端和外部数据接入,整体操作到数据存储流程 2.2 数据流 3 问题分析 3.1 问题现象 jmq积压,报警 国内站截图如下 3.2 筛查分析 普及:JMQ默认生产者发送消息QPS受到主题的broker数量影响,(8w/s)/broker 3.2.1 MQ积压分析 1)分析原因一、ES写入量大,导致ES写入QPS瓶颈 ES写入瓶颈需要进行压测,才能确定实际是否达到瓶颈; 通过查询集群负载,写入队列有无积压,cpu高不高,来定位 以下为调整MQ批量消费大小后的ES监控 写入队列无积压,CPU不高,写入QPS没有达到瓶颈 2)分析原因二、ES写入慢导致消费积压 ES解析服务解析慢,瓶颈在ES解析处...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6