DevOps:DevOps 和敏捷:究竟有什么区别?


DevOps:DevOps 和敏捷:究竟有什么区别?
本文插图
两者之间的区别在于开发完毕之后发生的事情 。 -- Taz Brown(作者)
早期 , 软件开发并没有特定的管理流程 。 随后出现了 瀑布开发流程 (Waterfall) , 它提出软件开发活动可以用开发和构建应用所耗费的时间来定义 。
那时候 , 由于在开发流程中没有审查环节和权衡考虑 , 常常需要花费很长的时间来开发、测试和部署软件 。 交付的软件也是带有缺陷和 Bug 的质量较差的软件 , 而且交付时间也不满足要求 。 那时候软件项目管理的重点是长期而拖沓的计划 。
瀑布流程与 三重约束模型 (triple constraint model)相关 , 三重约束模型也称为 项目管理三角形(project management triangle) 。 三角形的每一个边代表项目管理三要素的一个要素: 范围、时间和成本 。 正如 Angelo Baretta 写到, 三重约束模型“认为成本是时间和范围的函数 , 这三个约束以一种确定的、可预测的方式相互作用 。 ……如果我们想缩短时间表(时间) , 就必须增加成本 。 如果我们想增加范围 , 就必须增加成本或时间 。 ”
从瀑布流程过渡到敏捷开发 瀑布流程来源于生产和工程领域 , 这些领域适合线性化的流程:正如房屋封顶之前需要先盖好支撑墙 。 相似地 , 软件开发问题被认为可以通过提前做好计划来解决 。 从头到尾 , 开发流程均由路线图清晰地定义 , 沿着路线图就可以得到最终交付的产品 。
最终 , 瀑布模型被认为对软件开发是不利的而且违反人的直觉 , 因为通常直到开发流程的最后才能体现出项目的价值 , 这导致许多项目最终都以失败告终 。 而且 , 在项目结束前客户看不到任何可以工作的软件 。
敏捷(Agile)采用了一种不同的方法 , 它抛弃了规划整个项目 , 承诺估计的时间点 , 简单的遵循计划 。 与瀑布流程相反 , 它假设和拥抱不确定性 。 它的理念是以响应变化代替讨论过去 , 它认为变更是客户需求的一部分 。
敏捷价值观 敏捷由 敏捷宣言(Agile Manifesto)代言 , 敏捷宣言定义了 12 条原则 (LCTT 译注:此处没有采用本文原本的简略句式 , 而是摘录了来自敏捷软件开发宣言官方的 中文译本 ):

  1. 我们最重要的目标 , 是通过持续不断地及早交付有价值的软件使客户满意 。
  2. 欣然面对需求变化 , 即使在开发后期也一样 。
  3. 经常交付可工作的软件 , 相隔几星期或一两个月 , 倾向于采取较短的周期 。
  4. 业务人员和开发人员必须相互合作 , 项目中的每一天都不例外 。
  5. 激发个体的斗志 , 以他们为核心搭建项目 。 提供所需的环境和支援 , 辅以信任 , 从而达成目标 。
  6. 面对面沟通是传递信息的最佳的也是效率最高的方法 。
  7. 可工作的软件是进度的首要度量标准 。
  8. 敏捷流程倡导可持续的开发 , 责任人、开发人员和用户要能够共同维持其步调稳定延续 。
  9. 坚持不懈地追求技术卓越和良好设计 , 敏捷能力由此增强 。
  10. 以简洁为本 , 它是极力减少不必要工作量的艺术 。
  11. 最好的架构 , 需求和设计出自自组织团队
  12. 团队定期地反思如何能提高成效 , 并依此调整自身的举止表现 。
敏捷的四个 核心价值观 是(LCTT 译注: 此处译文 同样来自敏捷软件开发宣言官方):
  • 个体和互动 高于流程和工具
  • 工作的软件 高于详尽的文档
  • 客户合作 高于合同谈判
  • 响应变化 高于遵循计划
这与瀑布流程死板的计划风格相反 。 在敏捷流程中 , 客户是开发团队的一员 , 而不仅仅是在项目开始时参与项目需求的定义 , 在项目结束时验收最终的产品 。 客户帮忙团队完成 验收标准, 并在整个过程中保持投入 。 另外 , 敏捷需要整个组织的变化和持续的改进 。 开发团队和其他团队一起合作 , 包括项目管理团队和测试团队 。 做什么和计划什么时候做由指定的角色领导 , 并由整个团队同意 。