转载自: 点击打开链接
这是敏捷开发松结对编程系列的第十篇(栏目总目录)。
以下是本人自己及各企业所采用的代码审查的最佳实践,有些数据做了归纳,以使其“更佳”。
请特别注意每个实践最后简单总结的价值观。如果想采用这些实践,则要认同并实现这些价值观;若想采用不同的实践,则要找到自己的合理的价值观。由于下面的价值观多数都是很有价值的,所以即使采用不同的实践,也要考虑到兼顾这些价值观。
1. 每天进行代码审查
能坚持做代码审查的企业,多数都以1~3天为基本审查间隔。
个人感觉每天代码审查最好,因为代码量少,思路连续,师傅不至于问徒弟“这是什么”。
某些企业选择“某个功能完成后”做代码审查,也是一个思路,因为只要审核这个功能的代码,思路也是相对连续。但这些功能不宜太大。
思路连续,能快速看完,是这个实践的价值观。
2. 师傅给徒弟看
个人最喜欢的搭配,有责任感,搭配稳定效率高,发现的问题也很少有争议,而且顺便能教徒弟一些东西,之前之五中曾经提到过。
某些团队采用互相看代码,或随便谁看代码,这容易产生争议,或水平相当的人看不出别人的问题,从而降低效率。
责任感,能快速发现问题,有知识传递,是这个实践的价值观。
3. 每人每天看5分钟
听过各种长度的审查,越长越难以坚持。很多超长的代码审查,是因为“每个月审查一次”,而正是因为每个月审查一次,审查才超长,而效率更是变得低下,因为很多代码看不懂了。所以,很多时候时间长不等于看得仔细,而是等于看不懂。
个人最喜欢的是每个徒弟每天最多看5分钟,只解决一眼看到的最关键问题。下面会讲剩下的问题怎么办。
如果每天都看,而且从第一天就开始看,徒弟的代码里边很少会堆积一大堆“关键问题”问题,除非1、2没做好。
时间短才能坚持每天做,是这个实践的价值观。
4. 每次只看1个重要缺陷
有时候很多人尝试一次把所有缺陷都看出来,结果是,每次都看出很多缺陷,而缺陷又层出不穷。原因是当试图解决很多缺陷时,徒弟往往无法记住,也无法再下次避免,结果师傅就变成了徒弟的“代码审查员”。
所以,无论缺陷多少,只解决1个最重要的,比如空指针,野指针,数组越界……等等,但每次解决后,都要帮助徒弟彻底解决,并能在以后避免。
彻底解决和避免缺陷,是这个实践的价值观。
5. 今后……(不要再看到这个缺陷)
授之以鱼不如授之以渔,师傅发现问题,就要讲透。
比如我们当年对待空指针(C++),就三条:一个指针要尽早等于一个值(延迟声明),如果实在不能就等于空;一个指针使用前必须检查是否为空;一个指针删除后必须置为空。不但要帮助徒弟发现缺陷,还要告诉他如何永久避免,才能防止日后再次看到这个缺陷。
彻底解决和避免缺陷,是这个实践的价值观。
6. 之前……(是不是也有这类问题?)
如果从第一天就看代码,这个问题就不太重要了。
如果中间才开始看的,那么要求徒弟在闲暇的时候把以前的代码都看一遍,顺便都改好。
这样就解放了师傅的时间,而且我发现多数程序员在发现学到了一个新方法后,都很乐于到以前代码里边试验一下;可能是因为以往的时候总是被程序欺负,而现在终于可以回去报复一下了。
提高徒弟水平,解放师傅时间,是这个实践的价值观。
7. 师兄带师弟
有两层含义,一层是说代码审查发现问题,要讲什么理论的时候(比如前面说的指针用法),尽量多喊几个徒弟来,一起听;二层是说如果不幸后来又来了新徒弟犯了老问题,可以请听过这个事情的师兄来给他讲。
提高徒弟水平,解放师傅时间,是这个实践的价值观。