`
qepwqnp
  • 浏览: 114816 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

跨团队的持续集成: 几个基本矛盾

阅读更多

单个团队内部的持续集成已经是成熟的实践. 跨团队的集成则碰到了很多问题, 包括全部测试运行时间过长, 合并成本高等问题. 针对这些问题有一些对应的解决方案, 如合理的分支策略, 分层的集成等.

这里想讨论一下几个基本的矛盾, 和理想中的解决方案

1. 并行开发 与 集成 之间的矛盾

这是本质问题, 如果所有功能都是由单一开发者循序渐进的完成, 则集成并不是大问题. 由于团队内部的集成已经有大量成熟的实践, 因此前面的假设可以修改为"如果所有功能都是由同一团队循序渐进的完成, 则集成并不是大问题". 这就为我们指出了一条思路: 如果把需要集成的部分, 都分配给一个团队去完成, 则会大大降低集成的难度

传统的大规模开发中, 往往按照模块划分开发团队, 比如做UI的, 做网络通信的, 做数据库访问的, 做协议的, 等等, 分别是不同的团队. 而最终为了完成某个用户可见的功能, 需要协调多个团队并行开发, 然后联调, 也就是集成. 也就是说, 是特性需要集成. 如果我们按照特性来划分团队, 则跨团队的集成将转化为团队内部的集成. 而团队内部的集成已经有大量成熟的实践

关于特性团队和模块团队的全面比较, 请参见<<Choose Feature Teams over Component Teams for Agility >>

降低集成成本的第一原则就是避免集成 . 减少跨团队的集成需求, 如果不能避免的话.

按照特性划分团队将带来一个明显的问题, 就是不同的团队的人可能会同时修改同一个文件, 同一个类, 同一个函数等, 因为不同特性都会涉及同样的功能模块, 如数据库/网络/UI等. 这就是我们想讨论的第二个问题

2. 基于文本的合并 与 基于语意的逻辑 之间的矛盾

现代的版本控制系统都能够智能的自动合并文本. 然而合并后的结果是不是我们所期待的, 则只能通过测试来验证. 并且对文本级别的冲突, 版本控制工具也无能为力, 还需要开发人员人工干预. 因此降低合并成本第一原则, 就是避免合并 . 这里有几种可能的方式来达到这一目标:

  1. 基于插件的架构: 这是开闭原则 的应用. 增加任何新的功能, 都不需要修改原来的文件或类, 而是增加文件或类. 一个大尺度的例子就是Eclipse生态系统. 如果把Eclipse的各个插件都看作某个完整系统的所需要的特性的话, 那么这些特性的开发者有的甚至从未谋面, 开发过程中也不需要跟其它插件进行代码级别的集成, 然而最后它们却能和谐的一起工作

  2. 基于小文件/小类/小函数的代码组织: 这是单一职责原则 的应用, "小"只是代码外在的表现, 真正的含义是职责单一. 以C语言为例, 考虑两种极端的情况. 一个极端是把整个系统都写在main函数里, 另一个极端是每个独立的功能都写成独立的函数, 并且每个文件只包含一个函数. 前一种情况下, 任何团队的任何改动, 都需要跟其它团队的改动做合并, 并通过全面测试验证合并后的行为. 后一种情况下, 合并的需求大大降低, 只有大家改同一个函数的时候才需要, 并且测试也可以以影响范围为边界进行测试. 当然我们不需要像后一种情况这样极端, 但至少指明了前进的方向.

这类方案也带来一个问题, 就是我们无法一开始就设计出如此良好的插件体系, 只能是一个演进的架构. 这期间, 插件和框架之间的接口变化将为集成带来挑战, 即旧客户与新服务如何和平相处. 这就是我们要讨论的第三个问题

3. 依赖的稳定性 与 依赖自身的演进升级 之间的矛盾

这是一个普遍问题, 尤其对分层的体系结构, 或者"平台 + 产品"模式的开发项目.

在理想情况下, 所谓的理想情况是指, 代码集体所有制/IDE完善的重构功能/全面的自动化测试用例/等, 公共API的变化所引起的客户代码的修改, 都可以由某个团队一次性的完成并提交. 然而在大量的大规模遗留项目中这是不可能的. 这种情况下, "第三方代码线"(参见<<Software Configuration Management Patterns >>)或者"变更控制修改组"(负责实现变更, 并提交)是可选的解决方案

这里想讨论一下另外一个大尺度上相对更通用的但会引入管理成本并有点风险的解决方案, 就是向后兼容, 或者Versioning . 几个例子:

  1. 我们知道COM技术就是为了解决DLL版本地狱的问题. COM组件的新版本与老客户能和平相处, 是因为COM组件的升级, 并不是直接修改老接口, 而是增加新接口, 保留老接口, 并提供能力查询接口, 这样新老客户都能各取所需. 这是"扩展对象"模式的一种应用. 这是API级别的向后兼容/Versioning

  2. Subversion. Subversion的客户端可以和服务器协商版本, 从而选择一种大家都理解的协议. 这是协议级别的向后兼容/Versioning

  3. XML. XML本身就是为扩展设计的, 可用于实现向后兼容的消息/协议等.

但实际的项目中, 我们并不希望老客户和老API/老协议长期存在, 而是希望把老API/老协议删掉, 所有老客户全部使用新的API和协议. 因此我们需要阶段性的应用上述方案, 并提供管理或者技术手段, 在过渡时期结束的时候, 确保新老交替已全部完成. 这里的风险就是, 混乱无力的管理一旦允许老接口存在一段时期, 它就会一直存在

以上三个问题在大规模遗留系统中很难得到彻底解决, 因此这几种解决方案或思路, 仅仅希望在开发新系统时能够提供一些考虑的因素

分享到:
评论

相关推荐

    软件开发项目团队建设(20211123090411).pdf

    软件开发团队的建设主要包括以下几个方面: 1. 明确的共同目标:团队需有清晰明确的目标,让每个成员理解并认同项目目标的意义和价值。这有助于激发团队成员将个人目标与团队目标相结合,共同承诺并努力实现目标。...

    集成流程管理对组织效率和创新的影响研究

    在实施集成流程管理的过程中,组织需要注意几个关键点。首先,需要有明确的战略目标和清晰的流程设计,以确保流程的高效和流畅。其次,组织结构需要足够灵活以适应变化和创新,这意味着可能需要建立跨功能团队,减少...

    论Dev与Ops冲突的根源、表现形式及其解决方案.docx

    2. **推行DevOps文化**:鼓励开发和运维团队共享责任,通过持续集成/持续部署(CI/CD)管道自动化软件交付过程,减少人为错误。 3. **共同制定规范和标准**:开发和运维团队应共同参与技术架构的设计和评审,确保...

    销售团队薪酬激励的设计.doc

    在实施新的薪酬激励政策时,还需要关注以下几个要点: 1. 建立积极的销售文化,让公司政策倾向于激励销售人员,同时保持政策的公平性。 2. 设计合理的业务指标,确保指标可衡量,便于执行和管理。 3. 加强政策沟通...

    基于综合集成系统工程思想的智慧医疗模式探讨.pdf

    在智慧医疗中,这一思想体现在以下几个方面: 1. **系统整合**:智慧医疗需要集成各类医疗信息,如电子病历、影像数据、基因信息等,形成一个全面的患者健康档案,以便医生做出更精准的诊断和治疗方案。 2. **协同...

    浅析信息系统集成项目质量管理.docx

    《浅析信息系统集成项目质量管理》一文通过分析青藏线格尔木至拉萨线路视频监控系统的案例,探讨了信息系统集成项目中的质量管理问题,并提出了几点建议。 #### 二、信息系统集成项目质量管理的重要性 ##### 2.1 ...

    最全面的面试题

    项目团队的建设和管理通常包括以下几个阶段: - **形成期**:成员开始融入团队。 - **震荡期**:团队面临内部挑战和调整。 - **正规期**:团队合作模式趋于稳定。 - **表现期**:团队表现出高效的协作能力。 #### ...

    2012系统集成项目管理工程师题库

    - **现象**:在项目收尾阶段,最常见的冲突原因往往是时间表的问题(A),这是因为项目成员急于完成自己的任务并开始新的工作,而时间压力会导致各种矛盾和冲突。 ### 14. 项目经理的决策 - **情境**:项目即将结束...

    DevOps开发运维一体化平台建设解决方案共36页.pptx

    DevOps开发运维一体化平台的建设主要包括以下几个方面: 1. **开发运维一体化管理方案**:设计一个涵盖需求管理、版本控制、自动化构建、自动化测试、自动化部署和监控的集成平台,使得开发和运维团队能够在一个...

    UML2.0.pdf

    2. **更好的集成能力**:UML 2.0 改进了与其他标准和技术(如XML、Web服务等)的集成,使得跨平台开发变得更加容易。 3. **更精细的细节描述**:UML 2.0 提供了更多类型的图,以便更细致地描述系统的各个方面,包括...

    人力资源管理PowerPointTemplate.zip

    这套模板详细涵盖了以下几个核心知识点: 1. **招聘与选拔**:模板中可能包括了招聘流程的各个阶段,如发布职位、筛选简历、面试技巧以及背景调查等,帮助企业在海量求职者中找到最合适的人才。 2. **培训与发展**...

    某某集团办公自动化建设方案.docx

    集团对于办公自动化的需求主要集中在以下几个方面:高效的信息流转,灵活的审批流程,全面的报表分析,安全的数据存储以及便捷的移动办公能力。 2.3 参考资料 为确保方案的科学性和可行性,项目团队将参考相关行业...

    Beginners Guide To Software Testing

    - **等价类划分**:将输入数据划分为几个等价类,只选择一个代表值进行测试。 - **边界值分析**:专注于测试边界值附近的输入数据。 - **状态转换测试**:基于系统状态的变化来设计测试用例。 - **决策表测试**:...

    国家标准-软件开发规范

    规范的核心内容包括以下几个方面: 1. 需求分析:需求分析是软件开发的起点,规范要求明确、完整地记录用户需求,确保需求的可追踪性和一致性。同时,需进行需求验证,以防止不合理或矛盾的需求影响软件质量。 2. ...

    工作述职报告范文集锦五篇.docx

    报告中提到的几个关键知识点如下: 1. **组织结构**:强调了建立健全的领导机制和目标管理责任制,这在IT团队管理中同样重要,如设立项目经理或团队负责人,明确团队目标并分配任务。 2. **内部管理**:通过制定...

    某咨询创业__北广电如何实现战略的人力资源管理.pptx

    这涉及到以下几个关键知识点: 1. **人力资源管理体系**:现代企业的人力资源管理不仅包括人才选拔,还涵盖人力资源规划和任职资格体系的建立,以确保企业能持续产生核心竞争力。 2. **企业战略与人才选拔**:人力...

    浅谈IPD管理模式在复杂工程项目中的应用.pdf

    IPD模式的应用优势主要体现在以下几个方面: 1. **早期介入与全面规划**:IPD模式要求所有参与者从项目概念阶段就开始参与,这有助于在项目早期就解决潜在问题,减少后期更改,提高工作效率。 2. **资源优化**:...

    新农饲料信息化规划建议书.pptx

    1. **协同管理平台**:作为信息集成的基石,实现跨部门、跨层级的数据共享和协同工作。 2. **营销管理系统**:提升销售预测和市场分析能力,优化销售渠道管理。 3. **生产管理系统**:包含生产统计和成本分析,确保...

    新能源企业财务管理创新策略.pdf

    新能源企业财务管理的创新主要体现在以下几个方面: 1. 强化风险规避机制:由于新能源项目投资大、周期长,企业需建立完善的财务风险评估和规避体系,以降低投资风险。 2. 提升财务管理效率:利用现代信息技术,...

Global site tag (gtag.js) - Google Analytics