写代码是一种创造性的劳动,是现在社会中少数的纯手工的工作之一。程序员就像手工艺人,代码就像手工艺品。手工艺品有自己独特的魅力,但是也缺乏流水线产品的严谨和一致性。所以代码审查(Code Review)就像是把玩鉴赏手工艺品一样,通过审查代码来体会编码者的思维逻辑,同时相互学习取长补短。代码审查是提高个人和团队的代码质量的一个很有用的方法。
个人对自己的代码可以进行代码审查,因为今天的你已经不是昨天的你,你可以站在不同的角度和不同的层次来审查自己过去的代码。子曰:温故而知新。所以对于自己的代码应该定期做Code Review。可以用好日程安排工具,比如Google Calendar之类。在自己做到觉得需要日后来审查一下的地方,就可以在日程安排上记录一笔。到时候就可以按照记录去审查了。作为一个想不断进取和自我提高的程序员来说,这是很高效的方法。
自己的代码审查很好进行,只要你有毅力。相比之下团队的代码审查就不是那么容易实施了。但是代码审查在团队中能体现出更大的促进作用。除了可以让团队成员之间相互学习进步、激发思考、统一编程风格之外,代码审查还能发现一些系统的潜在问题和QA测试不到的问题,从而提高代码质量。
但是在团队内进行代码审核的时候,也要注意方式方法,才能发挥其积极作用。否则还有可能产生负面的影响。
1. 引导团队成员对代码审核的正确认识
代码审核并非是给某人挑错,也不是瞻仰膜拜牛人的奇技淫巧,而是大家泡一杯咖啡端一杯茶,一起来鉴赏品玩代码而已。目的是为了促进团队成员的成长和提高。
如果在代码审查的时候发现bug,不要过于责问,而是应该从技术层面加以分析、建议和讨论。如果你是Manager, 一定要注意不要炫耀自己,低调一点,重点在做好组织工作。初期一定要引导好团队成员对代码审核的认识,不要变成个人代码秀或者挑错大会和批斗大会了。
2. 要让团队成员看到代码审查的好处
在组织Code Review的初期,一定要用心去挖掘一些可以让大家学到东西的代码段。让大家体会到,可以从别人严谨的逻辑和优雅的编码学习经验技术,也可以从自己和别人的脏代码以及疏忽大意来吸取教训。尝到了甜头,这么有好处有意思的事情,大家肯定乐意再来一次了。
3. 平等轻松的纯技术讨论
在做代码审查的时候,只能有组织者,不能有CTO、Manager、权威、叫兽砖家。这是一个平等的轻松的技术讨论会,可以佐以饮品和零食哈哈~要激励大家勇敢地说出自己的看法,置疑其他人的看法。这样才能激发出大家的参与热情和不断地思考。这种讨论其实就是一种头脑风暴。
4. 针对项目的热点和难点进行代码审查
针对一次代码审查进行选题的时候,可以多从项目的热点和难点入手,比如框架是怎么工作的?数据库是怎么封装的?缓存是怎么处理的?内存占用高的地方是怎么优化的?一些复杂的算法是怎么实现的?某个bug为什么会反复出现?————走进科学将带你走进代码审查的世界~~哈哈回到正题,代码审查的选题一定要对事不对人。记住!要避免针对某个程序员的代码审核。。。除非你想炒了他。
5. 少而精
代码审查是一项很激烈的脑力运动,而且在多人参与的时候尤其如此。和头脑风暴的本质差不多。不但自己要理清别人的代码,还要去审视和判断,还要说出自己和看法,还要听懂别人说出的看法。所以每次代码审查的内容和时间要少而精,否则大家疲劳之后,讨论就会变得冗余而无趣。
6. 发现问题由编码者自己去修正或者重写
当我们在审查时发现了问题、讨论了修正和改进的方案,我们肯定需要一个人来讲这些方案实现出来。这个时候就应该由造成问题的程序员来做了。因为只有真实去改动代码的时候,才会将问题最真实的原因暴露出来。这个程序员才能去彻底修复这个bug。同时在他也会从自己的错误中得到提高,在之后的职业生涯中应该不会再犯同样的错误。
7. 做好讨论记录和问题跟踪
在大家的思想相互撞击的时候肯定会有很多灵光闪呀闪,如果不记录下来就太可惜了,丧失了讨论的意义。所以每次代码审查一定要有专人来负责做记录。讨论之后将记录整理并email给所有人。
PM和Manager之类的就可以根据讨论记录来分配改进任务。每个团队都应该有自己的项目管理系统,或者说是bug追踪系统吧。如果没有,赶紧去搞一个。推荐开源的Redmine (Ruby on Rails)和Mantis (PHP/MySQL),以及提供在线服务的Lighthouse。
特别要说一下Redmine,支持中文,功能强大且简洁,跨平台使用很舒服,而且也支持多种数据库(MySQL, PostgreSQL or SQLite),同时可以和git集成使用(在git push时自动更新ticket状态)。
8. 使用适合自己团队的代码审查工具
现在很多团队都转向了使用GIT,那么就可以利用Github来作为代码审查的工具。在Github里面可以针对某个branch的某个commit提交评论,然后Github会给项目的参与者发送一封邮件。通过这种在线的评论来进行代码审查,让大家可以利用零散时间去看一些小的代码段,就像在论坛发帖回帖一样,不用一定要坐在一起,不会打断正常的工作,同时也完整地保留了讨论的过程。如果是个人或者小团队,不想开源自己的代码的话,也可以利用Bitbucket来建立私有库托管代码和进行代码审查。
总之
XXXX是一把双刃剑,代码审查也是如此。 进行代码审查对于组织者的能力要求比较高,要多思考和调整,激发大家一起来做好代码审查,发挥其最有益的效用。