京东云开发者|代码评审的价值和规范

京东云开发者
• 阅读 123

评审目的

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

评审原则

  • 鼓励质疑

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

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

  • 重视每一行代码

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

评审时机

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

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

评审范围

1. 功能

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

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

2. 复杂性

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

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

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

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

3. 单元测试

是否有单元测试?

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

每一个测试是否有断言?

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

4. 命名

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

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

5. 注释

注释内容是否是必须的?

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

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

6. 代码风格

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

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

7. 文档

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

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

8. 上下文

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

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

9. 优秀的代码设计

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

评审尺度

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

京东云开发者|代码评审的价值和规范

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

如何解决评审意见冲突

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

1. 谁是对的

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

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

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

2. 稍后再解决

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

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

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

3. 评审过于严格

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

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

总结

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


参考:

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

作者:康志兴

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
1年前
Ubuntu 18.04+Postgresql 10+Gerrit 2.15.19+nginx 1.14 安装配置指南
Ubuntu18.04Postgresql10Gerrit2.15.19nginx1.14安装配置指南要保证代码的高质量,那必须要进行同行评审代码检查,所有代码都必须经过Rev
Easter79 Easter79
1年前
svn集成ReviewBoard,让post
代码评审(CodeReview)不但可以提高质量,而且还是一个知识共享和指导的极好的手段。代码评审(CodeReview)一般有两种形式:precommitreview,postcommitreview。precommitreview是指代码提交到代码库前进行代码评审;postcommitreview是指代码提交到代码库
Wesley13 Wesley13
1年前
GO 编码规范
编码规范本规范旨在为日常Go项目开发提供一个代码的规范指导,方便团队形成一个统一的代码风格,提高代码的可读性,规范性和统一性。本规范将从命名规范,注释规范,代码风格和Go语言提供的常用的工具这几个方面做一个说明。该规范参考了go语言官方代码的风格制定。一、命名规范命名是代码规范中很重要的一部分,统一的命名规则有
Wesley13 Wesley13
1年前
Java IO流基础总结
前言好久不用Java的IO流,把好多的基础知识都忘了,昨天在写一段代码,发现好多细节都忘了。那天在组织组内代码评审的时候,发现有人在乱用IO流相关的类,所以还是写篇文章,把这个知识点总结一下。IO流类图结构对于Java这种庞大的体系,我们要学某一块知识点,只有从整体上把握,整体上形成一个知识架构,这样才能更好的把握学习内容和
Stella981 Stella981
1年前
GitOps—用于基础设施自动化的DevOps
GitOps提供了一种自动化和管理基础设施的方法。它通过许多团队已经应用的DevOps最佳实践来做到这一点,例如版本控制、代码评审和CI/CD管道。由于DevOps在提高生产率和软件质量方面的巨大潜力,许多公司一直采用DevOps。在这个过程中,我们已经找到了自动化软件开发生命周期的方法。然而,在基础设施设置和部署方面,它仍然主要是一个手动过程。
Wesley13 Wesley13
1年前
APP项目合作流程规范
整体流程说明:MRD评审:磨刀不误砍柴工1、MRD对于问题细节分支和细节描述希望能够更多覆盖,避免开发过程中的反复确认和信息不对称。2、MRD评审,RD&QA都要带着问题去评审,这样也可以更好帮助产品规避没有想到的边界问题。开发物料管理:清晰才能简单可依赖PM:负责上传最新MRD文档、交互文档、最终视觉稿、切图标注到项
Wesley13 Wesley13
1年前
MySQL数据库设计与开发规范
\TOC\1\.规范背景与目的本规范旨在帮助或指导RD、QA、OP等技术人员做出适合线上业务的数据库设计。在数据库变更和处理流程、数据库表设计、SQL编写等方面予以规范,从而为公司业务系统稳定、健康地运行提供保障。2\.设计规范2.1.数据库设计以下所有规范
十月飞翔 十月飞翔
10个月前
专有云自动化开发规范
一.整体框架说明自动化项目的整体框架以及各个功能模块的划分如下图所示。二.接口开发规范主要针对testlib/api中的python代码开发进行规范说明。1.开发接口时按照上述功能模块划分,将对应的接口实现写到对应的模块中;2.所有实现的前后端接口应尽量参数化,避免将参数写死,http请求中携带的每个字段的值都应该有来源,要么
京东云开发者 京东云开发者
4星期前
实践篇(三):如何有效评审软件架构图?
设计意图的传达是架构可视化关注的重要维度,在技术方案评审过程中不可避免的会出现各种各样的架构图或设计图,这些图形化表述在设计意图传达效果层面表现不一,本文从图形化的视角为软件架构图的评审关注点提供了参考。
京东云开发者 京东云开发者
1星期前
如何有效的进行用例评审
用例评审对于质量同学是再熟悉不过的一个重要环节,用例评审也是非常有效的保障测试质量的手段,但我们质量同学做了这么多次的评审,有没有去思考怎样去进一步提升用例评审的质量,使用例评审更加有效呢,这里呢抛砖引玉,总结一下我个人对用例评审的思考。