Code Review最佳实践

Code Review最佳实践

在Wiredrive上,我们做了很多的Code Review。在此之前我从来没有做过,这对于我来说是一个全新的体验,下面来总结一下在Code Review中做的事情以及说说Code Review的最好方式。

简单的说,Code Review是开发者之间讨论修改代码来解决问题的过程。很多文章谈论了Code Review的诸多好处,包括知识共享,代码的质量,开发者的成长,却很少讨论审查什么、如何审查。

审查的内容

体系结构和代码设计

  • 单一职责原则:一个类有且只能一个职责。我通常使用这个原则去衡量,如果我们必须使用“和”来描述一个方法做的事情,这可能在抽象层上出了问题。
  • 开闭原则对于面向对象的语言,对象在可扩展方面开放、对在修改方面关闭。如果我们需要添加另外的内容会怎样?
  • 代码复用:根据“三振法”,如果代码被复制一次,虽然不喜欢这种方式,但通常没什么问题。但如果再一次被复制,就应该通过提取公共的部分来重构它。
  • 换位考虑,如果换位考虑,这行代码是否有问题?用这种模式是否可以发现代码中的问题。
  • 用更好的代码: 如果在一块混乱的代码做修改,添加几行代码也许更容易,但我建议更进一步,用比原来更好的代码。
  • 潜在的bugs:是否会引起的其他错误?循环是否以我们期望的方式终止?
  • 错误处理:错误确定被优雅的修改?会导致其他错误?如果这样,修改是否有用?
  • 效率: 如果代码中包含算法,这种算法是否是高效? 例如,在字典中使用迭代,遍历一个期望的值,这是一种低效的方式。

代码风格

  • 方法名: 在计算机科学中,命名是一个难题。一个函数被命名为==get_message_queue_name==,但做的却是完全不同的事情,比如从输入内容中清除html,那么这是一个不准确的命名,并且可能会误导。
  • 值名:对于数据结构,==foo== or ==bar== 可能是无用的名字。相比==exception==, ==e==同样是无用的。如果需要(根据语言)尽可能详细,在重新查看代码时,那些见名知意的命名是更容易理解的。
  • 函数长度: 对于一个函数的长度,我的经验值是小于20行,如果一个函数在50行以上,最好把它分成更小的函数块。
  • 类的长度:我认为类的长度应该小于300行,最好在100内。把较长的类分离成独立的类,这样更容易理解类的功能。
  • 文件的长度: 对于Python,一个文件最多1000行代码。任何高于此的文件应该把它分离成更小更内聚,看一下是否违背的“单一职责” 原则。
  • 文档:对于复杂的函数来说,参数个数可能较多,在文档中需要指出每个参数的用处,除了那些显而易见的。
  • 注释代码: 移除任何注释代码行。
  • 函数参数个数:不要太多, 一般不要超过3个。。
  • 可读性: 代码是否容易理解?在查看代码时要不断的停下来分析它?

测试

  • 测试的范围:我喜欢测试新功能。测试是否全面?是否涵盖了故障的情况【比如:网络,信号等,译者注】?是否容易使用?是否稳定?全面的测试?性能的快慢?
  • 合乎规范的测试:当复查测试时,确保我们用适当的方式。换句话说,当我们在一个较低水平测试却要求得到期望的结果?Gary Bernhardt建议95%的单元测试,5%的集成测试。特别是在Django项目中,在较高的测试水平上,很容易发现意外bug,创建一个详细的测试用例,当然认真仔细也是很重要的。

审查代码

在提交代码之前,我经常用git添加改变的文件/文件夹,然后通过git diff 来查看做了哪些修改。通常,我会关注如下几点: 
* 是否有注释? 
* 变量名是否见名知意? 
* …等上面提到的

和著名的橡皮鸭调试法(Rubber Duck Debugging)一样,每次提交前整体把自己的代码重新检查一遍非常有帮助,尤其是看看有没有犯低级错误。

如何进行Code Review

当Code Review时,会遇到不少问题,我也学会了如何处理,下面是一些方法:

  • 提问: 这个函数是如何生效的?如果需求变更,应该做什么改变?怎么更容易维护?
  • 表扬/奖励良好的做法:Code Review重要的一点是奖励开发者的成长和努力。得到别人的肯定是一件很不错的事情,我尽可能多的给人积极的评论。
  • 当面讨论代替评论。 大部分情况下小组内的同事是坐在一起的,当面的 code review是非常有效的。
  • 说明理由 :是否还有跟好的方式,证明为什么这样做是好的。

心态上

  • 作为一个Developer , 不仅要Deliver working code, 还要Deliver maintainable code.
  • 必要时进行重构,随着项目的迭代,在计划新增功能的同时,开发要主动计划重构的工作项。
  • 开放的心态,虚心接受大家的Review Comments。

参考

一些关于clean code的书籍,如下: 
Clean Code 
Refactoring 
All the Small Things by Sandi Metz 
How to Design a Good API and Why it Matters 
Discussion on Hacker News

译者注

一. 参考了 http://jimhuang.cn/?p=59

二. 国内阿里的陈皓写的关于codereview的文章,也很有见底,推荐大家看看

1.Code Review中的几个提示

  • 先Review设计实现思路,然后Review设计模式,接着Review成形的骨干代码,最后Review完成的代码,如果程序复杂的话,需要拆成几个单元或模块分别Review
  • Code Review不要太正式,而且要短
  • 学会享受Code Reivew

2.从Code Review 谈如何做技术

三. Code Review 工具

Review Board

四.

在Code Review时,要在 意识 方法 心态 习惯 这几个方面上下功夫,坚持code review,相信我们会在各方面有很大的提升。

时间: 2024-12-10 20:35:57

Code Review最佳实践的相关文章

转 Code Review最佳实践

本文转自 https://www.cnblogs.com/dotey/p/11216430.html 我一直认为Code Review(代码审查)是软件开发中的最佳实践之一,可以有效提高整体代码质量,及时发现代码中可能存在的问题.包括像Google.微软这些公司,Code Review都是基本要求,代码合并之前必须要有人审查通过才行. 然而对于我观察到的大部分软件开发团队来说,认真做Code Review的很少,有的流于形式,有的可能根本就没有Code Review的环节,代码质量只依赖于事后的

Code Review 最佳实践

ref: Code review Best Practices 文章将了以下内容: 3w:why.what.when 进行 code review code review 之前的准备 执行 code review CRs 示例 1.为什么进行CR 代码编写者会规范自己的代码,也会觉得复查别人的代码有一种自豪感: 有益于分享知识 项目中的其他人知道全部的功能 写代码的人使用的算法或技术会被全员学习 加强团队内沟通 保证代码风格统一,减少bug 简洁的代码不止易于复查,也能减少bug 2.复查什么

转: Code Review 程序员的寄望与哀伤

转自: http://www.cnblogs.com/mindwind/p/5639008.html 一个程序员,他写完了代码,在测试环境通过了测试,然后他把它发布到了线上生产环境,但很快就发现在生产环境上出了问题,有潜在的 bug. 事后分析,是生产环境的一些微妙差异,使得这种 bug 场景在线下测试中很难被发现.毕竟想要在测试环境完美的复制生产环境的所有情况也是不太可能的,导致出现了疏漏.对于这类情况,我们在想是否可以通过在线下做一些 Code Review(代码审查)假想线上的环境差异,通

不容错过,Code Review 的最佳实践方案来了

前言 我一直认为Code Review(代码审查)是软件开发中的最佳实践之一,可以有效提高整体代码质量,及时发现代码中可能存在的问题.包括像Google.微软这些公司,Code Review都是基本要求,代码合并之前必须要有人审查通过才行. 然而对于我观察到的大部分软件开发团队来说,认真做Code Review的很少,有的流于形式,有的可能根本就没有Code Review的环节,代码质量只依赖于事后的测试.也有些团队想做好代码审查,但不知道怎么做比较好.网上关于如何做Code Review的文章

code Review实践分享 邮件

之前在coolshell上看到一篇关于codeReview的文章:  http://coolshell.cn/articles/11432.html. ?接着实际工作当中实践了一把,有些感触,便向团队发了一封分享邮件,具体如下: 你好: 最近尝试了一下简单的Code Review,说一下感受: 曝工资项目: 没有尝试Code Review,我和培强各自负责不同的模块.采取的态度是:我只管自己的代码,其他我不理会. 结果 1. 每次需要我交叉修改培强代码时候,由于能力有限,需要花很多时间,去熟悉逻

EF Code First:数据更新最佳实践

EF Code First:数据更新最佳实践 最近在整理EntityFramework数据更新的代码,颇有体会,觉得有分享的价值,于是记录下来,让需要的人少走些弯路也是好的.为方便起见,先创建一个控制台工程,使用using(var db = new DataContext)的形式来一步一步讲解EF数据更新的可能会遇到的问题及对应的解决方案.在获得最佳方案之后,再整合到本系列的代码中. 一.前言 最近在整理EntityFramework数据更新的代码,颇有体会,觉得有分享的价值,于是记录下来,让需

Python 最佳实践

前言 对我来说,以前每次面试是我审视自己,检验自己的一种方式.每次准备面试,以及被面试官问住的时候才会发现,其实我python我学的还不够好.工作中也是,可以从其他的同事那里获得成长.但是我今天说的是,我也在自己总结和思考最佳实践这件事. 我想很多人都会有意识的去读一些PEP(Python Enhancement Proposals).了解语言设计者当时的考虑,这些文案也是经过很长时间的讨论最后才实施的.既然想用好这门语言,必然需要理解设计之美.比如我听说gvanrossum使用emacs作为编

软件开发人员的最佳实践

最近在一个网站上看到一篇写关于软件开发人员应该有的几项实践,感觉写的非常的好.下面将列举下文章中提到的几个方面. 首先文章中提出,软件开发人员需要不断的练习,什么是练习,为什么要练习,练习意味着什么?文章中给出了很好的解读.练习是一种习惯,练习是一个过程,练习并不意味着记住,练习需要不断的实践,练习需要专心致志的付出.射击运动员需要不断的练习才能射中更多的分数,开车也需要不断的练习才能成为driver,写字需要不断的练习才能写出好的字,然后才有可能成为书法家. Shooting, Driving

Code Review Engine Learning

相关学习资料 https://www.owasp.org/index.php/Code_review https://www.owasp.org/images/8/8e/OWASP_Code_Review_Guide-V1_1.doc http://cwe.mitre.org/about/index.html 目录 1. INTRODUCTION: 代码审计介绍 2. PREPARATION: 代码审计需要的准备 3. SECURITY CODE REVIEW IN THE SDLC: 系统生命