谈到DevOps的发展史,我们需要先谈一下敏捷开发。
敏捷开发是面向软件的,而软件依赖于计算硬件。我们知道,世界上第一台计算机是在1946年出现的,因此,软件开发相对于人类历史而言,时间并不长。相对于软件开发而言,人们更擅长工程学,如盖楼、造桥等。为了推动软件开发,1968年,人们将工程学的方法应用到软件领域,由此产生了软件工程。
软件工程的方式有其优点,但也带来了不少问题。最关键的一点是软件不同于工程。通过工程学建造的大桥、高楼在竣工后,人们通常不会对大桥或高楼的主体有大量使用需求的变更;但软件却不同,对于面向最终用户的软件,人们对于软件功能的需求是不断变化的。在瀑布式开发模式下,当客户需求发生变化时,软件厂商需要修改软件,这将会使企业的竞争力大幅下降。
传统的软件开发流程是:产品经理收集一线业务部门和客户的需求,这些需求可能是新功能需求,也可能是对产品现有功能做变更的需求;然后进行评估、分析,将这些需求制定为产品的路线图,并且分配相应的资源进行相关工作;接下来,产品经理将需求输出给开发部门,开发工程师写代码;写好以后,就由不同部门的人员进行后续的代码构建、质量检验、集成测试、用户验收测试,最后交给生产部门。这样带来的问题是开发周期比较长,并且如果有任何变更,都要重新走一遍开发流程。在商场如战场的今天,软件一个版本推迟发布,可能到发布时这个版本在市场上就已经过时了;而竞争对手很可能由于在新软件发布上快了一步,而迅速抢占客户和市场。
正是由于商业环境的压力,软件厂商需要改进开发方式。
2001年年初,在美国犹他州滑雪胜地雪鸟城(Snowbird),17位专家聚集在一起,概括了一些可以让软件开发团队更具有快速工作、适应变化能力的价值观,制定并签署了软件行业历史上最重要的文件之——捷宣言。
敏捷宣言中的主要价值观如下:
·个体和互动高于流程和文档。
·工作的软件高于详尽的文档。
·客户合作高于合同谈判。
·响应变化高于遵循计划。
有了敏捷宣言和敏捷开发价值观,后续产生了对应的开发流派。主要的敏捷开发流派有极限编程(XP)、Scrum、水晶方法等。至此,敏捷开发有理念、有方法、有实践。随着云计算概念的兴起以及云计算的不断落地,敏捷开发也实现了工具化。