分类 技术志 下的文章

代码评审

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

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

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

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

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

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

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

By Mattias Karlsson

把一切都纳入版本控制

本文翻译自"Put Everything Under Version Control",来自于《97 Things Every Programmer Should Know》一书中的某个章节。

把项目中的一切都纳入版本控制。你需要的资源包括:免费的工具,比如SubversionGit,Mercurial和CVS;充足的磁盘空间;便宜且性能强大的服务器;无处不在的网络;甚至包括项目托管服务。安装好版本控制软件后,为了将你的工作成果放入版本库中,你所要做仅仅是在一个包含你的代码的干净目录中敲入适当的命令。你只需要学习两个新操作:将你修改的代码提交到版本库中以及将版本库中的代码更新到你本地的工作版本中。

一旦你的项目纳入版本控制,你就可以跟踪它的历史,看看谁写了哪些代码,并且可以通过一个唯一标识引用一个文件或某个项目版本。更重要的是你可以大胆地修改代码。不用担心删除掉那些为了以防万一而被注释掉的代码,因为老版本代码很安全地待在版本库中。你可以(且应该)用一个具有实际含义的符号给一个发布版本打上标签,以便你在将来可以很容易地重新找到客户那运行的软件的确切版本。你可以创建分支来进行并行开发:大多项目都有一个主开发分支以及一个或多个用于积极支持发布版本的维护分支。

版本控制系统减少了开发人员之间的冲突。当程序员各自工作在独立的软件部件上时,他们的工作好似用了魔法一样被整合在了一起。当他们之间出现冲突时,版本控制系统会通知他们,并允许他们对冲突进行分类整理。通过一些其他设置,系统会将每次变更提交通知给所有程序员,让大家共同了解到当前项目的进展情况。

当你创建完项目后,不要吝啬:将你的所有项目资产都纳入版本管理。除了源代码外,还包括文档,各种工具,构建脚本,测试用例,美工作品,甚至是库。全部项目被安全地塞入(定期备份的)版本库后,硬盘损坏或丢失数据所带来的损失将减到最小。在一个新机器上配置开发环境只需简单地将项目代码从版本库中检出即可。这将大大简化软件在不同平台上的发布、构建和测试过程:在每台主机上一个简单的更新命令就可以确保你获得的是当前最新的软件版本。

现在你已经看到使用版本控制系统的好处了,遵循下面几条规则会使你和你的团队更加高效:

· 每次提交一个逻辑变更。在一次提交中包含许多变更会导致后续很难弄清楚其中每个逻辑变更所对应的内容。这点在你进行项目范围内的重构或风格改变时尤其重要,一起提交多个变更很容易掩盖其他修改。

· 每个提交都要包含一个解释性的信息。至少简要地描述一下你修改了什么。不过如果你还想记录这次修改的理由,那这里就是存储它的最好地方。

· 最后,避免提交那些会破坏项目构建的代码,否则你就会成为这个项目中不受欢迎的人。

版本控制系统下的生活是如此美好,一些疏忽和过失都无法轻易地破坏它。

By Diomidis Spinellis

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 Go语言编程指南
商务合作请联系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