审查正确性
很多时候,程序员们会花费很多时间争论在代码审查过程中应该看什么,但实际上他们却没有花太多时间完成真正的代码审查。
我们开始代码审查的目的是改进代码质量,寻找测试中没有发现的问题。这么做并不是教授经验不足的开发者如何编写更好的代码,或是如何在团队内分享知识。这些都应该是代码审查所带来的间接好处,不过审查的最终目的应该是确保代码能够正常工作。
相对于使用长长的检查列表,审查者在看代码时首先会问几个问题:
· 代码的行为是否与预期一致,其逻辑是否是正确无误的?
· 被审查的代码是否与其他代码拥有类似的结构和功能?
审查可理解性
随着时间的流逝,在代码审查中寻找和得到的东西会发生变化。这是因为代码本身会发生变化,完成这项工作的人——开发者与审查者也可能发生变化。
这意味着审查者的时间可以花在更加重要的设计错误上,比如说并发Bug、竞态条件和潜在的死锁等,因为这些问题是工具所无法检测到的。
理解,而不是批评
审查的目的是理解代码,确保代码能够正常工作,而不是批评任何人。
在代码审查过程中,请不要掺入诸如“我认为好的代码是什么,你认为好的代码是什么”这样的论战之中。代码审查应该重点关注“我需要完全理解这部分代码才能确保它能够正常工作,如果由我来修复代码中的问题,我是不会这么写的,因此希望你也不要这么来写”。
随着时间的流逝,有些东西会变好,有些则不然
随着时间的流逝,在查看代码时你会发现代码在不断变化。有人发现大部分代码在写完后很少或是从来都不会变化;大部分变更都是发生在代码基中的很小一部分代码上的。
由于审查者会看到相同的代码在不断发生着变化,因此这也会改变他们的审查方式。
避免收益递减
类似于软件开发中的其他实践一样,你最终会发现代码审查有着收益递减的效应,特别是一直在做相同的事情的时候,以相同的方式查看相同的问题。最终会有这样一个阶段,那就是代码审查的价值几乎降到了0。不过这种情况并没有发生在我们身上,我们依然从代码审查过程中获得了很多收益。
即便改进了工具,增强了测试能力,我们依然进行代码审查,因为Bug检查工具、审查与测试会发现不同类型的问题。我们还发现代码审查会让测试更加高效,这是因为如果之前曾经发现过问题,那么开发者与测试者之间就不会出现过多的往复情况。