大多数程序员都知道并且相信code review(代码审查)的重要性,但并一定都能很好的执行这一过程,做好code review也需要遵循一定的原则、流程和规范。
我们团队的code review实践也并不是一帆风顺,两年前刚开始的时候,形式很粗糙,就是一堆人对着代码品头论足。导致的结果要么是陷入争论,reviewer说这里写得不好,author(本文中用author这个单词来指代被评审者)辩论说其实没问题;要么只关注一些无伤大雅的细节,发现不了更为严重的问题(比如设计的问题)。试了几次,逐渐感觉流于形式,后来也就不了了之了。
如果发现一个广为推荐的工具不太好用,那么除了怀疑这个工具适不适合之外,更应该想想使用姿势是否正确。于是花了些实践来学习code review的知识,并与其他团队交流,在实践中逐渐形成了一套行之有效的方法。本文记录对code review的一些认识与思考
本文地址:https://www.cnblogs.com/xybaby/p/12601471.html
我们从一个需求开发的完整生命周期来看,大约会包含以下过程:
从上属流程可以看出,代码写完了会有专业的测试同事来进行全方位的测试,那么为什么还要code review呢?其次,合格的程序员理论上都会review自己的代码,还有没有必要请同事来review呢?
一个bug,可能在代码review的时候被发现;也可能在测试的时候被发现;最坏的情况下,被用户发现,当然,此时很可能给用户、产品带来损失。越早发现问题,受影响的人员越少,修复成本就越小。

开发人员有时也有一个误区,觉得自己完成“代码开发”这一步就万事大吉了,测试的事情就应交给QA去执行。但很多时候,QA更多从功能角度去验证代码,有时候黑箱测试也很难覆盖到全部情况,比如异常、安全性问题、版本依赖。况且现在很多公司都逐渐去掉专门的Test,开发得自己测试,但思维定势导致很难发现自己的问题,对自己代码的review也是如此。另外,知道自己的代码也被人“拿着放大镜仔细观察”,自然写代码的时候也认真一些。
另外,从上述流程可以看出:
在我们的实践中,对于复杂的系统,会要求现先设计review。而对于简单的、或者开发比较有把握的功能,则是将设计review与代码review合并。本文讨论的code review其实就是后者:既关注设计,又关注核心代码。
code review的首要目标是:找出代码中的缺陷,保证代码质量。其次,通过review也能相互学习,提高团队整体水平,而且特别有利于新人快速融入团队,保持与团队风格一致。最后,保证每个核心功能有多个同事了解,降低风险。
从其核心目标我们就可以看出code review的第一原则:对事不对人。这一点需要reviewer、author达成共识。code review不是批斗大会,reviewer、author并没有高低之分。
对于reviewer而言,参与的首要目的在于协助发现问题,因此
我没有看懂这段代码的逻辑
而不是
你这段代码有问题吧
这段代码是不是可能出问题
而不是
你又写出bug来了
对于author,应当把review当作一次学习成长的机会 -- 毕竟平时又有谁来给你免费建议和指导呢?因此,不要一开始就是防御的姿态,即使reviewer有所误解也不用脸红脖子粗的去争论。
要真正让author放松,达到和谐review的效果,个人觉得还要注意以下几点:
code review 并不简单是一堆人一起看代码,要让code review的效果最大化,整个流程是需要认真组织的:
review前
这里需要注意的是,与会人员越少越好,无关的同事最好不要参加review。如果与会者对相关的功能不感兴趣,那么就存粹是在浪费时间,这也是很多人不喜欢code review的原因。
review中
review的过程大约是:
review中需要注意:
reviewer内容依次是:
上面也提到,code review本身是个高强度的活动,因此容易漏掉一些关键点点,因此不妨做一个review list,对照这个list去考察代码。list保证了code review的质量下限,且不影响与会者发挥主观能动性,发现其他问题。
此外,也需要避免在没有明确规范的问题下过多争执。达到同样的效果,A方法可以,B方法也可以,如果团队没有约束用哪种方法,那么就不要在code review的时候讨论。
review后
review会议结束并不意味这个review这个活动结束,因为还有待解决的问题,因此应该借助工具跟踪review发现的问题,指明问题的修复者、问题的验收人、问题的验收时间。当一次review所关联的所有问题都得到修复之后,review活动才算结束。
如何才能code review有效且高效,总结以下几点:
最重要的事,是通过几次组织良好的实践让大家看到code review确实是有价值的,有所收获才愿意持续付出。
原文:https://www.cnblogs.com/xybaby/p/12601471.html