怎么进行代码审查(Code Review)

代码审查的重要性

  • 代码审查是熟悉软件架构,了解软件业务逻辑的好方法。学习代码是须要切入点的,一个上百万行代码的系统,从哪里开始着手?只能一个模块一个模块,一个组件一个组件的来熟悉,掌握。实现一个比较大的功能,你应该不会是惟一的开发人员,从系统架构师输出的系统设计,而后到各个团队中技术 Leader 输出的 component 级别的设计,到开始实现时,应该会把功能分为不一样的模块有不一样的开发人员协同实现。这是个学习的机会,不要只局限于本身这部分,为了了解这个大的功能,甚至和这个功能相关的其余已经实现的功能,你一样须要关注其余人的工做。有目的的看代码和漫无目的的浏览效果是不同的,你已经对新功能有所了解,审查代码以前,你认为代码会怎么写,别人哪里和你想的不同,旧功能和新功能是如何相互影响的等等,内心怀着问题,你的学习速度会更快,记得更加深入。
  • 代码审查是你提升本身的好方法。前提是 team 中有经验丰富的开发人员的存在。也就是大牛,不要错过让他看你代码的机会,不要惧怕他会为你写的代码挑出一大堆问题,有人说你本身写的代码就像本身的孩子,见不得别人说半点不字,不要执拗,要心里平静的,客观的去看待你所写的代码,发现并解决问题才能提升你本身。也不要错过去review大牛代码的机会,看看大牛写出来的代码是怎样的,你能够取其精华。
  • 代码审查是须要功力的。网上有帖子说程序员的资深与否和工做年限没有必然联系,你是5年工做经验仍是一个经验用了5年,这须要你去刻意练习,刚开始 reveiew 代码的时候你可能不习惯,也可能很痛苦,面对的一屏幕的代码不知如何下眼。但有一句话,若是你觉的心里很舒服,你就是在原地踏步。觉的痛苦说明你是在爬坡,刻意的去联系本身的大脑吧,今天你看一页代码可能用了一个小时,没有发现问题,可是坚持一个月甚至三个月以后,你看一眼就可以发现代码中的缺陷,恭喜你,你的功力加深了。

代码审查清单

常规项程序员

  • 代码可以工做么?它有没有实现预期的功能,逻辑是否正确等。
  • 全部的代码是否简单易懂?
  • 代码符合你所遵循的编程规范么?这一般包括大括号的位置,变量名和函数名,行的长度,缩进,格式和注释。
  • 是否存在多余的或是重复的代码?
  • 代码是否尽量的模块化了?
  • 是否有能够被替换的全局变量?
  • 是否有被注释掉的代码?
  • 循环是否设置了长度和正确的终止条件?
  • 是否有能够被库函数替代的代码?
  • 是否有能够删除的日志或调试代码?

安全编程

  • 全部的数据输入是否都进行了检查(检测正确的类型,长度,格式和范围)而且进行了编码?
  • 在哪里使用了第三方工具,返回的错误是否被捕获?
  • 输出的值是否进行了检查而且编码?
  • 无效的参数值是否可以处理?

文档数组

  • 是否有注释,而且描述了代码的意图?
  • 全部的函数都有注释吗?
  • 对很是规行为和边界状况处理是否有描述?
  • 第三方库的使用和函数是否有文档?
  • 数据结构和计量单位是否进行了解释?
  • 是否有未完成的代码?若是是的话,是否是应该移除,或者用合适的标记进行标记好比‘TODO’?

测试安全

  • 代码是否能够测试?好比,不要添加太多的或是隐藏的依赖关系,不可以初始化对象,测试框架可使用方法等。
  • 是否存在测试,它们是否能够被理解?好比,至少达到你满意的代码覆盖(code coverage)。
  • 单元测试是否真正的测试了代码是否能够完成预期的功能?
  • 是否检查了数组的“越界“错误?
  • 是否有能够被已经存在的API所替代的测试代码?

你一样须要把特定语言中有可能引发错误的问题添加到清单中。数据结构

优化你的清单

把使用清单做为你的起点,针对特定的使用案例,你须要对其进行优化。一个比较棒的方式就是让你的团队记录下那些在代码审查过程当中临时发现的问题,有了这些数据,你就可以肯定你的团队常犯的错误,而后你就能够量身定制一个审查清单。确保你删除了那些没有出现过的错误。(你也能够保留那些出现几率很小,可是很是关键的项目,好比安全相关的问题)。架构

获得承认而且保持更新

和你的团队分享这份清单而且让他们认同你清单的内容是个好主意。一样的,要按期检查你的清单,以确保各条目仍然是有意义的。框架

有了一个好的清单,除了能够提升你在代码审查过程当中发现的缺陷个数,还能够帮助团队成员更好更快的进行代码审查。模块化

相关文章
相关标签/搜索