原文地址:http://www.drdobbs.com/architecture-and-design/what-exactly-is-devops/240009147
作者:Neil Garnichaud

软件开发目前的最新趋势是DevOps文化,即开发人员和运营人员一起确保软件以最低的故障率运行。

很多组织发现他们面临这样的挑战,即随着云的Web应用程序的发展,要求快速发布以便及时响应来自用户社区的问题或请求。及时响应用户需求是每个软件开发团队的目标,但是会给组织内的功能团队造成压力。压力往往导致更多的缺陷和对团队持续性的打断。DevOps通过构建一种开发和运营(这就是DevOps名字的由来)之间的关系来试图解决该问题。在该结构中,开发团队支持运营需求,比如部署脚本,异常诊断,以及从周期最开始就进行的负载和性能测试;而运营团队在软件部署前,部署时及部署后向开发团队提供知识支持和及时的反馈。

DevOps是很多软件开发团队正在前进的方向。他们之前忍受着组织给予的压力,即在QA缺少时间测试的情况下还要生产高质量的代码。而DevOps是一个新的环境,如果开发人员想要成功,就不得不有所调整。在截止期限的压缩,分为开发,QA,产品的故事墙成为了敏捷的阻碍。DevOps试图打破这个墙。现在,团队协作能力变得与技术能力一样重要。因此,单一关注最终用户的体验,来看其是如何影响业务的。DevOps并不是新的工具或组织,而是新的文化和流程。它是开发,QA以及运营相互工作来加快开发和解决问题。

为什么开发人员需要DevOps

DevOps对于开发人员来说是好事。开发人员想工作于DevOps为导向的组织中,有三个主要的原因:

  • 更好的生活质量。DevOps模式的开发人员很少会在半夜接到电话要求解决产品问题。这是因为问题在产生灾难性之前已经被发现,主动监控比被动警告要好的多。

  • 引以为豪的所有权。传统的软件流程中,一旦软件被部署,就被“甩手扔给了”QA,然后甩手扔到了产品环境。所以最终用户看到的可能与开发人员编写的完全不同。但在DevOps模式下,编写的即是发布的,因为开发人员在代码被交给QA甚至到产品环境后,仍可以继续查看和访问代码。换句话说,开发人员拥有从创建到实现的整个交付过程的代码所有权。

  • 更多相关的工作。开发人员和大多数人类一样,在真实世界中相关的工作中更容易得到满足感。因为在传统组织中的开发人员是孤立的,他们经常虚构用户场景来模拟问题。当出问题的时候他们只能尽量模拟接近这个问题。在DevOps模式中,场景是真实的。环境是经过负载测试的,比如,在软件被放入产品环境之前会测试是否能正确工作。另一个例子是测试脚本本身可以测试产品你环境,而不仅仅是模拟环境。将测试结果分享给开发人员,给予了开发人员查看在真实条件下他们编写的代码的性能的机会。

已经实现DevOps意味着什么

可能你的组织已经采用了DevOps模型。有三个问题可以让你清楚的了解DevOps的实行情况:

  • 你作为一个开发人员,能够实时获取故障信息吗?

  • 产品环境中是否使用了开发团队的测试及其它工具来验证产品环境是否能正常工作?

  • 作为开发人员,你是否视网络团队为你的合作伙伴?

如果这些回答都是“否”,那么你并未真正实现DevOps。有一些建议可以改进该情况。先从工具说起。DevOps是文化和流程高于组织,工具可以帮助执行最佳实践。特别是跨团队共享故障信息。这要求在软件中添加更多的检测信息以便查看软件在QA及产品环境中的执行情况,而不仅仅是开发环境中。这些代码会捕获错误,检查系统参数,报告功能超时,以及返回程序执行期间的其它值,并将其写入到日志文件中。

在孤立的环境中,一旦代码被发布到产品环境中,开发人员往往不能再查看这些日志文件。在DevOps世界中,开发人员可以查看任意环境中的日志文件,不管是开发环境,QA环境还是产品环境。这样不仅可以快速修复缺陷,也可以避免同样的缺陷出现在将来的发布中。这使得开发自身对业务能更快速,更具响应性,把敏捷质量引入到敏捷开发中。

打破旧习惯

DevOps也要求打破旧习惯。比如自然倾向是软件bug数量作为衡量质量的方式。但修复单个bug并不意味着能更快的创建无bug的软件。更好的衡量方式是处理bug的流程。换句话说,整个流程中是那个环节引入这个bug的?例如,是因为开发人员本地的构建环境与QA环境或产品环境不一致?或者是代码行为之所以在不同环境中表现不一致是因为某些环境中无法显示某些东西?

除非代码版本是跨环境紧密同步的,而且这些环境也是紧密同步的,否则很难搞清楚一个问题到底是个逻辑问题还是数据问题,抑或环境问题,或者其它问题。而工具能够保证其一致性。即工具能自动的将同样的代码一次性部署到多个环境中。

合作伙伴或谴责者?

开发人员需要做的最大改变可能就是与其他团队成员要有日常互动。开发人员是是主动解决软件问题(比如通过日常监控操作日志),还是等待问题报告给他们?当有问题时,又是如何被解决的?团队成员是合作伙伴还是谴责者?

很多都取决于领导力。不管管理团队如何说教DevOps愿景,请以身作则,提供必要的培训和支持,奖励开发人员的团队贡献,而不仅仅是技术能力。DevOps需要一个乐队指挥。即使当前工作并不是你的工作领域,你也应当接受它。实现DevOps环境需要理解什么对于管理是重要的;是不是发布更快了?是不是质量更高了?是不是开发人员对他们的代码更负责了?这些都与DevOps环境的方式有关。


Neil Garnichaud是SmartBear公司的Host Solutions Business经理,负责产品开发及软件研发。

翻译-DevOps究竟是什么?的更多相关文章

  1. Agile&DevOps究竟谁是魔法棒

    天下没有神奇的配方 很抱歉,文章的开头我就要说出这个残酷的事实 - 世界上没有任何工具可以魔法般的让你实现敏捷,精益,DevOps.如果只是依赖了工具的自动化,实现了自动化Dev或者Ops,那么别忘了 ...

  2. 翻译-高效DevOps的10项实践

    原文链接: http://www.drdobbs.com/architecture-and-design/top-10-practices-for-effective-devops/240149363 ...

  3. 高效DevOps的10项实践

    高效DevOps的10项实践 原文链接: http://www.drdobbs.com/architecture-and-design/top-10-practices-for-effective-d ...

  4. [转载]你所不了解的DevOps

    DevOps开发运维训练营 一旦建立了创新的文化,即使那些并非科学家或者工程师的人——诗人.演员.记者——也能以团体的形式,接受科学文化的意义.他们信奉创新文化的概念.他们以促进这种文化的方式投票.他 ...

  5. 一篇文全面了解DevOps:从概念、关键问题、兴起到实现需求

    一篇文全面了解DevOps:从概念.关键问题.兴起到实现需求 转自:一篇文全面了解DevOps:从概念.关键问题.兴起到实现需求 2018-06-06 目前在国外,互联网巨头如Google.Faceb ...

  6. 【转】DevOps的前世今生

    转自:http://www.infoq.com/cn/news/2016/09/learn-devops-from-reports 目前在国外,互联网巨头如Google.Facebook.Amazon ...

  7. 云计算时代,你所不了解的 DevOps

    在本文中,我们讨论如何快速地从更高的层面理解DevOps,介绍准备改变文化的最佳实践.我们将讨论DevOps的目标以及从组织管理层得到支持的方法,为DevOps的概念打下基础.我们将试着从根本上介绍使 ...

  8. DevOps的前世今生

    From今日头条:https://www.toutiao.com/a6534660729453150723/?tt_from=weixin&utm_campaign=client_share& ...

  9. Word 有哪些神奇的功能?

    作者:秦阳链接:https://www.zhihu.com/question/27035859/answer/621742048来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

随机推荐

  1. 读书笔记——body and html

    在看<常见标签的默认属性值及相互作用——关于CSS reset的思考>的时候,其中说body默认的margin是8px.但是,将body的backgound-color:red:后,看到的 ...

  2. js获取单选按钮的值

    function a(){ var v=document.getElementsByName("radio"); ;i<v.length;i++){ if(v[i].chec ...

  3. js 有用的代码

    1. 如何创建嵌套的过滤器: //允许你减少集合中的匹配元素的过滤器, //只剩下那些与给定的选择器匹配的部分.在这种情况下, //查询删除了任何没(:not)有(:has) //包含class为“s ...

  4. STM32 使用DMA+DAC+TIMER 输出正弦波

    之前已经简单论述过,根据我个人菜鸟的了解与认识,对之前的知识进行整理回顾: DMA:我的理解就是一个通道,或者是一座桥梁.在静态内存到静态内存,或者外设到静态内存间的一个通讯的通道.建立这个通道的好处 ...

  5. org.dom4j.DocumentException : 1 字节的 UTF-8 序列的字节 1 无效。 Nested exception: 1 字节的 UTF-8 序列的字节 1 无效。

    org.dom4j.DocumentException : 1 字节的 UTF-8 序列的字节 1 无效. Nested exception: 1 字节的 UTF-8 序列的字节 1 无效. 网上查了 ...

  6. 【树状数组套权值线段树】bzoj1901 Zju2112 Dynamic Rankings

    谁再管这玩意叫树状数组套主席树我跟谁急 明明就是树状数组的每个结点维护一棵动态开结点的权值线段树而已 好吧,其实只有一个指针,指向该结点的权值线段树的当前结点 每次查询之前,要让指针指向根结点 不同结 ...

  7. AutoMapper扩展

    扩展类:AutoMapExtention using System; using System.Collections.Generic; using System.Linq.Expressions; ...

  8. shell下批量重命名svn文件的方法

    shell下批量重命名svn文件的方法 目标: 将svn目录下所有文件重命名 , 原文件前缀为 ucc_ , 批量改为 xmd_ 用tree看下当前svn目录 ucc_1.c ucc_1.h ucc_ ...

  9. [c语言]字符数组、字符串定义

    C语言中字符串通常用字符指针和字符数组来定义: char* pS="abcdef"; char s[]="abcdef"; 这两种方式都会在结尾为字符串隐式补结 ...

  10. Java 用自带dom解析器遍历叶子节点内容

    一.XML文件config.xml,内容如下: <?xml version="1.0" encoding="UTF-8" standalone=" ...