Quora:代码质量和发展速度可以兼得

jopen 9年前

在项目开发中,代码质量与代码开发速度一直是两个互斥的参数。维护高质量的代码有助于提高项目长期开发速度和维护代码的长期安全与稳定。然而,高质量的代码通常需要消耗大量的资源来维护,且会使短期的产品开发周期变长。因此,项目开发团队不可避免的需要在低代码质量高开发速度和高代码质量低开发速度中作出选择。而为了让产品尽快上市,多数公司会选择放弃长期利益而采用前一种方式。那么,究竟有没有办法打破这种二选一的局面呢?近日,Quora 就分享了该网站在维护高质量代码库的同时,保持代码迅速发展和更新的经验。接下来,本文就 Quora 的经验进行介绍和分析。

代码质量维护的目标

Quora 的工程经理 Nikhil Garg 表示,维护高质量代码时,开发团队需要明确其保持长期快速发展的目标。为此,Quora 在维护代码质量时,提出了四个关键性的原则:

  • 代码应该易于阅读和理解
  • 代码的不同部分应该满足不同的质量标准
  • 尽量减少维护代码质量的开销
  • 代码库已经保持一致

在这些原则的指导下,Quora 分别在代码编写阶段、审查阶段、测试阶段和代码清除阶段进行了努力。

代码编写阶段

首先,在代码编写阶段,Quora 开发了 Qlint 工具进行规则检查。除了各种语言的语法风格指导方针,Quora 还有保证代码质量的准则以及如何构建模块以减少阅读时间的手册。然而,对于代码编写人员,保证代码遵循所有相关的原则十分困难。这就容易导致代码需要不断的进行修改,既影响代码质量,又减缓工程进度。为此,Quora 又开发了 Qlint,用于代码的静态检查。而且,Quora 公司把 Qlint 与 Vim、Emacs 和 Sublime 等编辑器进行了完全集成,能够为违反规则的情况提供直观的视觉反馈。最后,Qlint 已经与 push 流程、代码的编写风格规则和 Phabricator 集成在一起。所有这些都能够在保证很小开销的情况下增加代码的一致性和质量。

代码审查阶段

其次,在代码审查阶段,Quora 采用了提交后代码审查的方式。正如陈皓和玉伯最近所讨论的,代码审查是一个很容易拖慢工程进度,并严重影响代码质量的工作。就如何进行代码审查,两位技术大牛进行了激烈辩论。由此可见,这是一个充满争议的地方。Quora 基于对设计师的和代码审查工具 Phabricator 的信任,选择了提交后审查的方式。这就意味着开发人员可以先提交代码,继续进行其他工作或者继续代码的修改。在 Quora,一天大概 50 人次提交 187 次的代码改动。专门的代码审阅人员会之后进行复杂的审查工作,包括正确性、隐私保护、性能、架构、重用性以及代码风格等六个方面。

一般而言,Quora 会要求代码审查工作需要在一周内完成。而实际情况下,大部分的代码只需要1-2 天即可完成审查工作。一周时间只是更多的增加审查人员的时间灵活性。这种审查方式既可以保持开发人员不断的推进开发工作,同时又让审查人员可以选择比较好的时机进行复杂代码的审查。从而,在保持开发速度的同时,网站还能够保证代码的质量。当然,对于涉及用户隐私的代码、包含公共函数的代码以及可能会引起宕机的代码等关键性代码,Quora 还是会采用提交前审查的方式。

至于审查人员方面,Quora 实现了一个简单的系统,来指定代码的审查人员。除了代码提交者之外,该系统会根据一些内置的规则,自动挑选数据专家等合适的人选。这一系统既减少了代码开发人员寻找审查人员的工作量,同时又能够有效保证审查的质量,为代码长期快速发展贡献了一份力量。

代码测试阶段

然后,在测试阶段,Quora 编写了基于 nosetests 的测试框架、若干用于测试自动化的工具以及测试编写指南。作为产品开发流程中非常重要的一个环节,测试对代码质量和产品发布速度都有着很大影响。为了提高测试的覆盖率,产品测试过程通常需要大量的功能和 UI 测试程序。Quora 投入大量精力搭建了专门的测试框架,用于减少测试程序的编写代价。而且,该网站也开发了一些工具来使得测试自动化。目前,Quora 的测试服务器能够在五分钟内运行完所有的测试集。此外,‘test-local’工具能够鉴别并执行只与发生改变的文件相关的测试程序。与代码审查类似,Quora 针对不同类型的代码改变会设置不同的测试标准和测试覆盖率。由此,Quora 测试代码能够很好的保证质量和更新速度。

旧代码清理阶段

最后,在旧代码的清理阶段,Quora 会定期组织废弃代码的清理工作。一个快速发展的公司总是需要各种各样的想法。有些想法最终被采纳,而另外一些被慢慢遗忘。对于这些被遗忘的代码,Quora 定期组织清理工作周。在这段时间内,一个专门的团队或者整个公司会专门进行代码的清理工作。而且,针对不同的清理难度和代码对未来的影响,Quora 团队会对不同的模块设置不同的清理优先级。

通过以上介绍可以看出,Quora 非常重视做好各个环节和细节的工作。通过详细的指导方针和手册、自动化的流程和各种精致的工具,该网站建立了良性发展的系统,达到改善长期发展速度的目的。未来,Quora 会继续设计更多的工具和更完善的系统,来适应网站的发展需求。Quora 的发展经验也为其他公司提供了很好的借鉴。

来自: InfoQ