我最近参与了几个项目,这些项目促进了共享代码所有权的想法。有时,这似乎加速了代码改进和增强。其他时候,它似乎成了自我更名的基础,正在做出改变,以支持个人编码风格,青睐的技术,或仅仅是权力/智力的演示。
如何实施共享代码所有权以避免陷阱并仍然获益?太多的厨师会破坏肉汤吗?
答案 0 :(得分:7)
共享所有权有很多好处。以下是理想化的观点,但是你可以走很远的路,特别是当一个团队随着时间的推移编织在一起时:
可能的缺点包括:
我会说在所有这些情况下,当你让这些人分享所有权时,事情通常会变得更好。有时不够快,但如果让一个孤独的人留下孤独的人,他将永远不会学习如何成为一名团队成员。如果你让弱势群体离开团队,他们将如何学习和加强他们的技能?如果某人沟通能力差,孤立他的帮助会怎样?最终,你需要一个团结一致的团队,他们都对代码库有着广泛的了解,并且让成员分开并专注于小型专业领域永远不会实现这一目标。
答案 1 :(得分:4)
在不利方面: -
共享代码所有权仅在团队中的每个人都具备高技能,并且不会通过知识差距进行错误调用时才有效。换句话说,团队中的每个人都需要成为所有代码的专家,并充分了解他们的更改对系统的影响,这些系统可能从手边任务的狭隘视图中看不到。
答案 2 :(得分:3)
编码标准肯定会有所帮助,特别是在持续集成和/或源代码管理签到策略的支持下。
首先,定义标准并让团队就这些标准达成一致(管理层打破关系)。
其次,使用自动化工具(最好使用IDE挂钩)来处理代码格式化。
第三,使用自动静态分析工具检查合规性。这些不仅可以验证格式,还可以检查代码复杂性指标,命名约定,最佳实践等。可以根据您团队的规则自定义更好的格式。如果可能,请查找允许通过元数据(例如属性)抑制不适当警告的内容。大多数规则都有例外,你想隐藏误报的“噪音”。
第四,将静态分析与源/修订控制系统集成,以便在签入时运行。某些系统允许拒绝不通过策略的签入。另一个选项(不相互排斥)是设置一个在签入时自动构建的持续集成服务器;它可以运行静态分析并通知所有开发人员任何故障。
答案 3 :(得分:2)
通过配对,测试和清理代码进行通信:当您没有足够的时间来编写技术文档或系统发生如此大的变化时,您无法跟上需要编写技术文件。
敏捷团队没有一个“建筑师形象”,它决定了一切如何融合在一起。 敏捷团队成员对事物的态度更加民主,设计更具协作性。这意味着更多的沟通,以及仅通过书面文件难以维持的通信类型和数量。 (并不是说你不需要文件 - 但必须面对面和共同影响方向配对。)
共享所有权对于需要共享公共核心代码库的分布式团队非常有用。在我工作的分布式团队中,我们将远程协作者发送到我们的总部,以便在公共代码上与我们配对,这样他们就可以获得足够的知识和信心,可以在远程站点上工作,同时代码的原始作者正在睡觉一个不同的时区。结果:不需要等待远程专家。
您正在构建需要多种不同类型专业知识的东西,并且没有一个团队成员是所有这些领域的专家。
项目整合了两个或多个复杂的子系统,每个子系统中的专家在团队成员中分布不均。
由分包商实施,但其他一些团队将采用该系统进行维护。双方需要配对并影响其可持续发展的方向。
答案 4 :(得分:1)
我认为修正案是:
您还应该评估自己。人们自然倾向于认为一个人不同意的行为是不合理的。很多时候,只是缺乏激励对方的经验,有时候必须通过他们自己的自我投资。
答案 5 :(得分:0)
我发现共享代码所有权与问题跟踪和编码指南结合使用时效果很好。即人们处理问题(在开发会议期间分配),这可能涉及任何身体代码和指南中提到的许多“风格”问题。这似乎是非常有效的,似乎没有你提到的人们没有充分理由改变代码的问题。
答案 6 :(得分:0)
我对共享代码所有权有好的和坏的经验。
感觉很好:
在以下情况下感觉很糟糕:
一般来说,共享所有权并不是一个好主意。最好在感觉自然时分享,并在没有代码时为自己保留代码。
答案 7 :(得分:0)