最终质量开发系统(UQDS)是一个软件开发过程,为使用分支机构,凭单和代码审查提供了明确的指导原则。 它是由Divmod于十多年前发明的,并被Twisted所采用, Twisted是事件驱动的Python框架,它是流行的商业平台(如HipChat)以及开源项目(如Scrapy(网络抓取工具))的基础。
遗憾的是,Divmod不再存在了,它已经取代了许多初创公司。 幸运的是,由于其许多产品都是开源的,因此其遗产得以延续。
当Twisted是一个年轻项目时,没有明确的流程来确定何时“足够好”的代码可以使用。结果,虽然某些部分经过了精心打磨和可靠,但其他部分仍是alpha质量的软件,无法分辨哪个是哪一个。 UQDS的设计目的是帮助存在一定质量挑战的现有项目提高其质量,同时继续增加功能并变得更加有用。
UQDS已帮助Twisted项目从频繁回归和需要多个发布候选版本获得有效版本的过程中发展到目前的稳定性和可靠性声誉。
UQDS的构建基块
UQDS由Divmod于2006年发明。当时,Continuous Integration(CI)处于起步阶段,而现代的版本控制系统却使分支合并变得容易,这几乎不是概念证明。 尽管Divmod没有当今的现代化工具,但它组合了CI,一些使Subversion分支正常工作的临时工具,以及将很多思想融入到工作过程中。 因此,UQDS方法诞生了。
UQDS基于基本构建块,每个构建块都有自己经过仔细考虑的最佳实践:
- 门票
- 分行
- 测验
- 评论
- 没有例外
让我们更详细地介绍每一个。
门票
在使用UQDS方法的项目中,如果没有票证,则不允许进行任何更改。 这样就创建了关于需要进行哪些更改以及更重要的是为什么进行更改的书面记录。
- 入场券应定义清晰,可衡量的目标。
- 在故障单包含明确定义的目标之前,不会开始处理故障单。
分行
UQDS中的分支与票证紧密相连。 每个分支机构都必须解决一张完整的凭单,不得多也不少。 如果分支地址比单个故障单更多或更少,则意味着故障单定义或分支存在问题。 票证可以拆分或合并,也可以拆分和合并分支,直到达成一致。
强制每个分支处理不多于或少于一个票证(对应于一个逻辑,可测量的更改),使使用UQDS的项目可以对提交进行细粒度的控制:可以还原单个更改,甚至可以应用更改以与承诺不同的顺序。 这有助于项目维护稳定和干净的代码库。
测验
UQDS依赖于各种自动化测试,包括单元测试,集成测试,回归测试和静态测试。 为了使它起作用,所有相关的测试必须始终通过。 不通过的测试必须是固定的,或者如果不再相关,则应完全删除。
测试还附带票证。 所有新工作都必须包括表明票证目标完全达到的测试。 没有这个,无论看起来多么出色,作品都不会被合并。
专注于测试的副作用是,使用UQDS的项目可以说支持的唯一平台是使用CI框架运行测试的平台,并且在平台上通过测试是合并分支的条件。 如果不受支持平台的限制,则项目的质量不是最终的。
评论
尽管自动化测试对UQDS确保的质量很重要,但该方法学始终不会忽略人为因素。 每次分支提交都需要代码审查,并且每次审查都必须遵循非常严格的规则:
- 每次提交都必须由作者以外的其他人进行审阅。
- 首先发表评论,感谢贡献者的工作。
- 记下贡献者做得特别好的事情(例如,“这是该变量的完美名称!”)。
- 记下可以做得更好的事情(例如,“此行可以使用注释说明选择的内容。”)。
- 完成指导以进行明确的下一步操作,通常按原样合并 , 修订和合并 ,或者修订并提交以供重新审核 。
这些规则尊重贡献者的时间和精力,同时也增加了知识和思想的共享。 明确的下一步可以使贡献者对如何取得进展有清晰的想法。
没有例外
在任何过程中,都很容易想到为什么您可能需要稍微修改规则以使该事物或该事物在系统中滑动的原因。 UQDS最重要的基本组成部分是没有例外。 整个社区共同努力,以确保规则不因任何原因而失效。
知道所有代码均由作者以外的其他人批准,该代码具有完整的测试范围,每个分支对应一个票证,并且该票证经过深思熟虑且完整,因此产生了太有价值的想法即使有一个小小的例外,也有可能遭受损失。 目标是质量,而质量并非来自妥协。
UQDS的缺点
尽管UQDS帮助Twisted成为了一个高度稳定和可靠的项目,但这种可靠性并非没有成本。 我们很快发现,审查要求导致审查提交的速度减慢和积压,导致开发速度变慢。 答案不是摆脱UQDS损害质量。 这是为了重新确定社区的优先重点,以使审核提交成为对项目做出贡献的最重要的方法之一。
为了解决这个问题,社区在Twisted IRC频道中开发了一个漫游器,该机器人将回复命令review tickets
并提供仍需要复查的票证列表。 Twisted审查队列网站返回优先排序的票证列表。 最后,整个社区密切关注需要审查的票证数量。 它已成为社区用来衡量项目运行状况的重要指标。
学到更多
了解UQDS的最好方法是加入Twisted社区并在实际中进行观察。 如果您想了解有关该方法及其如何帮助您的项目达到高度可靠性和稳定性的更多信息,请查看Twisted Wiki中的UQDS文档 。