标签 代码评审 下的文章

代码评审

本文翻译自"Code Reviews",来自于《97 Things Every Programmer Should Know》一书中的某个章节。

你应该做代码评审。为什么呢?因为代码评审可以提高代码质量并且降低缺陷比例。但进行代码评审未必是因为你想到的那些理由。

由于之前有过一些代码评审的糟糕体验,因此许多程序员不喜欢代码评审。我曾经见过一些组织,它们要求所有代码在部署到生产环境之前必须通过一个正式的评审。多数情况下由架构师或一名主程序员进行这些评审,这种做法被戏称为“架构师评审一切”。这个要求被写在了他们的软件开发过程手册中,因此程序员必须遵守。可能有一些组织的确需要这样一个严格且正式的过程,不过大多数组织并不需要。在大多数组织中,这样做法只会适得其反。被评审者会感到他们就像是在等待一个假释裁决委员会的判决。而评审者既需要时间阅读源码,还需要时间跟上系统的最新进展,了解系统的全部细节。评审者很快就成为了这个过程的瓶颈。而这个过程也会很快地成为众矢之的并变得愈加糟糕。

代码评审的目的应该是共享知识和建立共同的编码指南,而不是简单地纠正代码中的错误。与其它程序员们分享你的代码使集体代码拥有权成为可能。让任意一个项目成员与组内其它人一起浏览代码。评审代码时,你应该尝试学习并理解这些代码,而不是去找错误。

代码评审过程中保持气氛和谐。确保意见是建设性的,而不是刻薄挖苦。为评审会议引入不同的评审角色,避免成员之间的年资影响代码评审。就角色举例来说,可以有一个专门关注文档的评审者,另外一个评审者重点关注异常,第三个人负责关注功能性。这种方法有助于在项目成员间分担评审负担。

每周进行一次例行的代码评审。在评审会议室里花上几个小时进行评审。每次会议按照一个简单循环的方式轮换被评审者。记住项目组组员承担的评审角色在每次会议上也要轮换。代码评审时带上新手。他们也许经验不足,不过他们从大学带来的新鲜知识可以提供一种不同的看法。带上专家,他们有经验和知识。他们可以更快更准确地识别出容易出错的代码。如果项目组拥有代码规范的检查工具的话,代码评审过程将更加容易和顺畅。那样的话,在代码评审会议上大家永远不会讨论代码格式问题。

让代码评审变得有趣也许才是代码评审成功的最为重要的因素。评审是关于人的评审。如果评审会议是痛苦且枯燥无味的,那么它很难激发出大家参与的热情。让它成为一种非正式的、以在项目组成员间共享知识为主要目的的代码评审吧。抛弃那些刻薄挖苦,用蛋糕或黄包餐(译注:全体成员一起参加的午餐)取而代之。

By Mattias Karlsson

关于在线代码评审的几点考量

记得上次折腾Review Board这个在线代码评审工具还是在一年前,那时的Review Board版本是1.0.3;这周部门的一位同事也在折腾Review Board,不过现在的版本已经升级到了1.5.1了。新版Review Board显然修正了许多旧版本中存在的问题,另外无法支持ssl邮件端口的问题也被我这位同事通过更换django源文件的方式搞定了。Review Board好用了,下一步需要关注的就是怎样才能用好Review Board的问题了。

一般认为代码评审是一项优秀的软件开发实践,它可以将很多隐患和bug消灭在萌芽阶段。其实践形式大致有代码走查、代码审查和结对编程(每时每刻都在做代码评审)这三种。一般来说读懂别人的代码可能比自己亲自编写代码花费的时间还要长,而且更为困难,所以除了结对编程之外,代码走查和审查都是低效的,多数情况下都是高投入低产出的,引入在线评审恰恰是对这些低效代码评审形式的一个有效补充,另外在线评审更适合异地团队和开源项目。

那么什么情况下适合发起在线Code Review Request呢?可考虑下面几种情况:
- 新增的关键功能代码的评审
- 系统改善或优化代码的评审
- bugfix代码的评审
- 一些试验性代码的可行性评审

创建一个新的Review request时应考虑注意以下几点:
- 精确描述review request,提供此次评审的重要关注点;
- 每个review request要有针对性,选择合适的评审人,不要泛泛的发给所有人;
- 明确此次评审的截止时间点;
- 每个review request所包含的待评审代码的行数最好不要超过50行,以30行以内为佳。如果你的request中包含了上千行的代码,我想是没人会去真正评审你的代码的。

在项目编码高峰期,切忌发起大量在线Review request,那样的话,大家都会"淹没"在诸多Requests中,评审质量会严重下降,评审人的热情也会受到打击^_^。这个时候我们可以考虑结合其他评审方式,如采用结对和走查。另外对于一些遗留的维护项目,由于代码历史较为"悠久",相关干系人较多,无法确认的因素也较多,可通过在线评审方式将review request发给相关干系人,以获得全面的评审,避免死角。

以上是目前关于在线代码评审的一些考量,这里记之以备忘。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats