1.代码审查的概念
代码审查,指对计算机源代码进行系统审查,以找出并修正在软件开发初期未发现的错误,提升软件的质量。
代码审查是日常性工作,一次审查代码的行数一般建议在200行以内,建议不要超过400行.一次审查代码的时间一般建议在60分钟以内,建议不要超过90分钟,避免出现审查疲劳,降低审查的质量.
2.代码审查的好处
代码审查的重要性是被普遍认可的,可以提升代码的质量,找出潜在的Bug,保证代码风格的统一;同时也是一个相互学习的好机会.
1.发现别人的优秀编码习惯,对优秀设计模式和API的使用,帮助自己提高编码水平;
2.对了解和熟悉整个系统和业务,也有很好的帮助
3.通过他人的一些改进意见,学习借鉴他人的思考方式
4.从旁观者的角度审查代码和代码背后的设计思想
3.如何做代码审查
1.审查清单
代码审查这件事其实是可以标准化和流程化的,其效果在一定程度上也是可以量化的。使用审查清单可以帮助审查者快速找到问题,甚至开发者在开发阶段就可以按照审查清单进行代码自查.
◎ 代码结构:是否包含超长代码,代码层次嵌套是否过深,函数是否入参过多,循环条件是否有跳出点,if语句是否有对应的else语句,是否存在重复的代码等。
◎ 代码安全性:I/O流是否正常关闭,资金计算是否使用了Double数据类型,是否有超大的临时对象,线程池大小是否合理,异常是否被忽略,是否有详细的日志记录,是否存在并发问题,参数是否做了必要的检查,远程服务的入参出参是否实现了Serialization并且自定义了serialVersionUID,应用是否依赖了SNAPSHOT版本的类库等。
◎ 代码性能:是否有长SQL语句、SQL语句是否用到索引,是否有成熟的类库可以替换自己实现的代码,是否可以考虑单例模式,是否可以考虑线程池,是否可以考虑NIO,是否可以进行锁优化等。
◎ 代码注释:指类及方法是否有注释,注释是否可以表达其准确含义,在代码中是否存在FIXME及TODO等注释,注释是否包含边界值及对异常情况的说明等.
◎ 单元测试:代码是否有可测试性,新代码是否有单元测试,单元测试是否可以覆盖所有场景。
◎ 代码优化:是否可以使用枚举代替自定义的常量,在代码中是否包含魔法值,是否可以使用Optional代替NPE的检查,是否可以使用Stream代替for循环,是否可以使用设计模式等
◎ 其他:代码逻辑是否正确,是否实现了业务功能,代码是否有好的可读性及可测试性等。
2.审查工具
工欲善其事,必先利其器,选择一款高效的工具,可以大大提升代码审查的效率。
代码审查工具的使用可参考:https://www.imooc.com/article/2493
3.重点关注的改动点
通过使用代码审查工具,我们可以很清楚地看出代码有哪些改动点(包括新增的代码),通过对照我们事先置顶的审查清单,重点关注改动点是一种比较高效的代码审查方式。原有的代码一般是经过代码审查的,但代码的变化往往会引入新的问题,所以,在审查代码的过程中应该重点关注代码的改动点。但是,重点关注改动点并不是只关注改动点,其实,还有很多问题隐藏在非改动点处。这就需要负责代码审查的开发者通读改动点附近的全部代码,重点关注改动点,而不是只看改动点处的代码。通过通读全部代码,可以更好地发现问题,尤其是和业务逻辑相关的问题。