如何提高团队代码质量——代码审查的实践

简介:

为什么需要代码审查

    最近看了一些文章,发现敏捷开发的一些理念越来越多的团队在实践,也觉得敏捷不再像最早提出的时候那么虚,有很多体现这个理念的工具涌现。其中,“如何提高代码质量”的讨论一直很多,敏捷开发中也有好多种提案,最广为人知、但也最不靠谱的应该就是结对编程了,只要没被敏捷洗脑的人都清楚知道这个基本没有实际可操作性,然而这个做法的出发点——多个人互相监督可以把事情做的更好,这反而是完全认同的。所以还有一种方式就是代码审查(Code Review)了,把两人同时写代码改成在不同的时间上一个人写、另外一个人看。这个实际开发中是完全可以做到的,只是要留有审查的时间即可。

    复查团队成员的代码自己一直也是无意识的在做,经常去看git log,但是这个方式效率真的很低,也没有严格的规定,所以做的也比较随意。恰巧最近看到一个论调,“越牛逼的团队,对于代码审查的态度越严谨”,顿时引发共鸣,长久以来在心里一直有一种这样去检查代码的方式是不行的感觉,但是一直也没找到合适的方式,而这次再联想到代码审查感觉茅塞顿开,怎么一直都把它给忘了呢?!

    如果你对代码审查能带来什么好处有疑问的话,我觉得Phabricator官网的这篇文章解释的面面俱到,我也不想再费时费力去翻译了,看原文吧。


代码审查的方式

    代码审查主要有两种方式:

    1. pre-push:在提交合并代码之前,先进行审查,通过和才能合并。这是一种非常严格的审查方式,可以确保每个发布的代码都是已经被审查过的。这种放到在github上维护的开源项目极其合适,代码的所有者可以确保代码是在自己的控制范围。

    2. post-push:代码提交后,再审查之前的代码。这是非常宽松的审查方式,审查的效果肯定是打折扣的,但是好处是可以忽略一些不必要的审查以节约时间。其实在国内这种没有太多工程师文化的地方,这种方式是比较好在早期推行的。

    这两种方式也就对应这两种完全不同的审查时间节点。pre-push需要尽快审查,应该每周定时,甚至只要提交合并就要安排审查;post-push可以更加灵活,在一个功能模块完成就可以发起审查了,在版本发布之前必须审查结束。这个需要每个团队制定符合自己情况的方案,落实好即可。


代码审查的工具

    这个事情在团队中实行的话,是一定需要有个工具的,相关的工具有很多,审查方式也各有偏重。这里工具主要是解决了这几个问题:

    1. 有一个更为直观的界面查看diff。

    2. 可以基于工具进行简单的标记和通知,直接把标记写在代码里更利于沟通。

    3. 可以知道哪些提交时已经被谁审查过了,方便审查的协作。


    之前在sf写过一篇问答可以参考。这里再例举一些,供参考选择。

    1. Gerrit:google的产品,名气很大,但是这个东西设计理念比较陈旧,据说也没有什么维护了,不推荐。

    2. github pull request:这个当然很好,典型的pre-push方式,但是个人用也没太多协同的事情,团队用又觉得贵。其实感觉用bitbucket会经济实用些。

    3. phabricator:facebook内部使用并开源出来的工具,功能超级强大,但相对的就是非常复杂,界面设计非常欧美的风格,运行速度也有点慢。东西还是很牛逼的,看你是不是喜欢了。

    4. gitlab:如果是自己搭建的git server,这个是不错的选择,相当于自己弄了个github,就是配置环境会比较多工作量。

    5. upsource:JetBrains的产品,只有post-push的方式,但是从安装、界面、到使用都是挺不错的,唯一问题就是10个人以上要收费,而且还很贵。


我们从中的获益

    选用哪种方式,我觉得因团队文化、项目背景、效果预期而定,我们最后暂时选用的是upsource,目标是先在团队中把代码审查施行起来。   

    目前来看效果还可以。有了工具之后大家互相做代码审查也方便很多,心理抗拒性也没那么强。其实只要进度不那么催,研发人员还是比较愿意去做这种事情的。审查过程中目前发现了一些代码中的问题,但是现在还不多,我想只要能在出现bug之前能解决掉一些问题,就已经有很大价值了。



本文转自passover 51CTO博客,原文链接:http://blog.51cto.com/passover/1642176,如需转载请自行联系原作者

相关文章
|
21天前
|
机器学习/深度学习 人工智能 监控
利用AI进行代码审查:提升代码质量和开发效率
【10月更文挑战第12天】本文探讨了AI在代码审查中的应用及其优势,介绍了AI辅助代码审查工具如何通过自动化和持续学习提升代码质量和开发效率。文章还提供了实施AI辅助代码审查的具体步骤和实战技巧,帮助团队更好地利用这些工具。
|
1月前
OKR如何帮助团队协作
OKR如何帮助团队协作
44 3
|
2月前
|
敏捷开发 监控 测试技术
提升软件质量的利器:自动化测试的实践与反思
在软件开发的生命周期中,测试作为保障产品质量的重要环节,其重要性不言而喻。随着敏捷开发和持续集成等实践的普及,传统的手动测试方式已逐渐无法满足快速迭代的需求。因此,自动化测试作为一种提高测试效率和准确性的有效手段,正受到越来越多开发者的青睐。本文将深入探讨自动化测试的价值、实施步骤以及在实践中可能遇到的问题和解决方案,帮助读者更好地理解和应用自动化测试。
38 2
|
2月前
|
开发者
代码审查的艺术:提升团队协作与代码质量
在软件开发中,代码审查是提升代码质量和促进团队协作的关键实践。本文探讨了代码审查的重要性、最佳实践及其面临的挑战。通过制定明确的审查指南、利用自动化工具、提供建设性反馈等方法,可以显著提高代码质量并促进知识共享。尽管存在抵触情绪、时间投入等问题,但通过团队合作、合理安排时间和培训审查者,可以有效克服这些挑战,实现代码审查的最大价值。
|
3月前
|
监控 jenkins 测试技术
自动化测试中的“守护神”: 持续集成与代码质量监控
【8月更文挑战第31天】在软件开发的海洋里,自动化测试犹如一座灯塔,指引着项目向着高质量和高效率的方向前进。本文将深入探讨如何通过持续集成(CI)和代码质量监控相结合的方式,构建起一道坚固的防线,保障软件项目在快速迭代中不失方向。我们将一起探索这一过程中的关键实践,以及它们是如何相互作用,共同提升软件项目的可靠性和稳定性。
|
敏捷开发 测试技术 持续交付
软件开发过程中的最佳实践和代码质量评估
在软件开发过程中,采用最佳实践和评估代码质量对于确保软件的稳定性和可维护性至关重要。通过明确的需求、合理的开发流程、良好的代码规范以及严格的代码评估,我们可以降低软件开发过程中的风险,并提升开发效率和软件质量。
717 2
|
SQL 安全 测试技术
如何进行高效的代码审查
代码审查是软件开发过程中至关重要的一环。它是指由开发团队中的其他成员对代码进行检查,以确保代码的质量和一致性。 代码审查可以帮助发现潜在的问题,例如内存泄漏、安全漏洞或性能问题。通过及早发现这些问题,可以避免它们在后期的软件开发过程中变得更加复杂和昂贵。
182 0
|
设计模式 Serverless 领域建模
实战经验 | 怎样才能提升代码质量?
提升代码质量的三个有效方法:领域建模、设计原则、设计模式。
实战经验 | 怎样才能提升代码质量?
|
安全 jenkins 程序员
代码审查的必要性和最佳实践
代码审查的必要性和最佳实践
278 0
代码审查的必要性和最佳实践
|
开发者
聊聊软件开发的代码审查
聊聊软件开发的代码审查
聊聊软件开发的代码审查