集体代码所有权
定义
集体代码所有权是一种明确的约定,即“每个”团队成员不仅被允许,而且实际上有责任,根据需要对“任何”代码文件进行更改:可以是完成开发任务、修复缺陷,也可以是改进代码的整体结构。集体代码所有权制下,每个人都对代码的质量负有责任。
实践出处
集体代码所有权是现代敏捷软件组织的基本实践。
它在20世纪90年代后期通过极限编程 (XP) 引入大众。
为什么
集体代码所有权的好处:
1. 知识共享
当只有一个人负责某些模块或功能时,就会形成知识孤岛。这导致关键知识仅限于一小群人,或者更糟糕的是,仅限于某个人。
当团队集体负责代码时,每个人都会学习。随着越来越多的人拥有能够有所作为的知识,产品质量必然会提高。
2. 代码质量和更好的编码风格
有很多人为代码做出贡献,这将导致代码的整体质量更好。当然,这是假设他们关心改进代码。如果只有一个人在一个模块中编码,那么他对所进行的工作不会有任何建设性的批评。
让我们不要忽视编码风格——每个人都有不同的风格,有些人比其他人更容易理解,有些人比其他人更好、更高效。当团队为代码做出贡献时,它会在不依赖个人编码风格的情况下发展,因此更容易被更广泛的人理解。
3. 不依赖单个人
这有时被称为“巴士效应”或“彩票效应”。举个幽默的例子,如果负责你的代码的人中了彩票并离开公司怎么办?团队会挣扎吗?如果是,这就是原因之一开始集体赋予团队责任。
4. 高效有用的代码审查
当除了一个人之外没有其他人知道功能或模块中的代码时,代码审查就变成了一场闹剧。除了能够在高层次上进行抽象评论之外,无法提出真正的改进建议。
另一方面,当代码审查中的每个人都对代码更熟悉时,审查对每个人都为代码审查做出贡献的人非常有益,不同的想法和改进会出现在讨论中,并且可以选择最佳的解决方案。
5.学习范围广
如果他们再次做同样的工作,大多数人的技能发展就会停滞不前。发生这种情况的一种方式是,公司在开发团队中创建专门的角色和职责。
正是持续学习使开发人员的技能保持敏锐和头脑活跃。通过与更好的开发人员的不断互动和讨论,人们可以在短时间内学到很多东西。
代码集体所有权会带来上述积极影响,但仍有以下方面值得考虑:
1. 谁负责?
除非团队由本质上负责的个人组成,否则集体所有权将导致没有所有权。当每个人都有责任时,没有人负责。
2. 责任和动机
如果说成功人士与平庸人士的区别只有一件事,那就是成功人士总是希望承担更多责任。他们从来都不是只做自己的工作就回家的人。他们想进一步改进,他们的热情让他们更加努力。
如果更熟练的开发人员没有被赋予更多的责任或挑战,这将使他们失去动力。将民主与个人才华分开是一把刀刃。
3. 常见误用
在考虑集体代码所有权时,集体就是团队。明确地说,我将“团队”定义为每天就共享代码库的更改进行协作的一小群人,希望依靠协作开发技术。
通常,多团队组织误解集体代码所有权意味着任何开发团队中的任何人都可以随时对代码库的任何部分进行任何代码更改。我称之为组织范围内的代码所有权,它通常会对软件质量和团队士气产生灾难性影响。
4. 组织范围的代码所有权问题
随着功能的创建和代码的开发和更改以支持这些新功能,对代码库进行长期维护非常重要。拥有一个专注于代码库的健康和愿景的团队可以实现迭代和新兴技术,如进化设计和机会重构。允许任何人在没有代码的愿景或上下文的情况下对代码库进行任何更改,通常会导致软件组织的流失和缺陷逃逸到生产中。
公司依赖组织范围内的代码所有权有几个原因。最常见的罪魁祸首是系统的设计和架构。通常,我在支持没有关注点分离的单体应用程序的组织中看到这种做法,这导致了大泥球。当代码中没有边界时,就不存在可以提供集体代码所有权的团队组织。
5. 决策延迟和交货时间长
当代码所有权跨越整个组织时,没有人成为代码库中任何事情的专家是很常见的。每个更改或新功能都需要整个组织的输入。当代码和设计决策离开团队时,它们的成本会变得很高,并且每次软件更改都会增加交付周期。
何时使用
团队中的任何人都可以在任何时间、任何地方对代码进行任何必要的更改。
如何使用
抛弃模块个人所有制的全部观念,整个代码库由整个团队共有,任何人都可以改动任何地方。
辅以代码评审、CI/CD等实践疗效更好。
参考资料
-
https://www.martinfowler.com/bliki/CodeOwnership.html
-
https://dzone.com/articles/collective-code-ownership-in-agile-teams
我们非常重视知识产权,我们在非常努力地寻找最初的出处来源并注明出处。但因为互联网信息浩瀚,难免会有疏漏。如果您觉得有侵犯您的权益,请联系我们。