# 集体代码所有权 Collective Code Ownership ## 定义 团队通常采用约定,规定允许谁修改最初由他人编写的某些源代码(通常称为“所有权”)。这些约定可以是书面的和明确的,仅是口头的,也可以是完全隐含的。存在许多不同的模式 ; 通常,每个代码文件只有一个开发人员“拥有”。顾名思义,集体代码所有权是一个明确的约定,即不仅允许“每个”团队成员,而且实际上有积极的责任,必要时对“任何”代码文件进行更改:或者完成开发任务,以修复缺陷,甚至改善代码的整体结构。 ## 预期收益 集体代码所有权政策: - 降低了任何一名开发人员缺席(或无法使用)会暂停或延缓工作的风险 - 像《康威定律》中那样,增加了整体设计是由合理的技术决策而非社会结构产生的机会 - 是技术知识传播的有利因素 - 鼓励每个开发人员对整体质量负责 ## 常见陷阱 可能存在与团队采用的集体所有权政策相抵触的默认或隐式规则。例如,只要修改了特定组件中的文件,开发人员就会变得脾气暴躁,以至于团队开始在其专有权下将它们视为“事实上的”文件。确保检查该策略与实际行为是否一致。 ## 潜在成本 虽然集体所有权的概念与敏捷中的其他共同责任原则(例如,客户与开发团队之间的共同责任,以实现项目成果)保持一致,但它有其不利之处。反对的理由也很合理,请注意以下几点: - 在最大程度上,让所有人对质量负责可能与没有人对质量负责的情况无法区分 - 缺乏对代码组件周围边界的社会强制性(通过“康威定律”)可能导致缺乏明确定义的界面,但是明确定义的界面是有效设计的关键 ## 起源 - 1968年:“康韦定律”的产生和总结如下:“任何设计系统的组织(此处定义的范围不只是信息系统)都将不可避免地产生其结构是该组织通信结构副本的设计。” 尽管最近的研究为它提供了一些学术支持,但它长期以来一直具有民间文学艺术的地位,而不是得到充分支持的科学成果的地位。(直到90年代中期,学术软件工程仍然基本上忽略了软件开发的社会方面。) - 1995年:Coplien 在他的“组织模式”的早期版本中,将程序设计的模式语言中的“代码所有权”模式命名为“代码所有权”模式,这对后来的敏捷话语发展产生了影响。但是,他赞同个人代码的专有所有权,并告诫不要将集体所有权等同于完全没有所有权。柯普林承认存在反对个人所有权的异议,但认为他的其他方式可以缓解这些问题。 - 1998年:有关极限编程的最早著作将“集体代码所有权”推荐为正式惯例。就像Coplien在相反的方向所做的那样,“极端”认为其他极限编程实践可以缓解针对集体所有权的引用问题:统一的代码约定和广泛的测试。 - 1998年:关于极限编程的最早文章“ 克莱斯勒走到极限 ”,描述了几种XP实践,例如自选任务,首先测试,三周迭代,集体代码所有权和结对编程。