原文地址: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. ORA-12543: TNS:destination host unreachable

    在连接Oracle数据库时,如果使用Tnsnames.ora中配置的数据源名称有时会报 ORA-12543: TNS:destination host unreachable 异常,比如:在Tnsna ...

  2. mysql5.6.34-debug Source distribution编译的几个错误

    raspberrypi下编译mysql5.6 debug版源码. 1. 启动错误 和mysqld相关的文件及文件夹权限必须设置为mysql用户可读可写可执行!谨记! 2. gdb错误 root@: g ...

  3. 易学PHP——PHP基础知识

    PHP 语言标记 因为 PHP 是兼容当时的主流语言,所以 PHP 有四种标记方式: <?php PHP 代码 ?>.这是 PHP 最为正宗的语言标记,称为标准风格标记.XML 风格标记等 ...

  4. Java中的继承与静态static等的执行先后顺序

    package extend; public class X { Y y=new Y(); static{  System.out.println("tttt"); } X(){  ...

  5. 【九度OJ】题目1111:单词替换

    题目1111:单词替换 题目描述: 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写.现需要将其中的某个单词替换成另一个单 ...

  6. Postman-CI集成Jenkins

    Postman-简单使用 Postman-进阶使用 Postman-CI集成Jenkins Newman 官方说明:Postman's command-line companion lets you ...

  7. SQL操作大全

    下列语句部分是Mssql语句,不可以在access中使用.   SQL分类:  DDL-数据定义语言(CREATE,ALTER,DROP,DECLARE)  DML-数据操纵语言(SELECT,DEL ...

  8. Android 把电话保存到现有联系人 已有联系人

    搜索了很长时间,想找个把电话保存到现有联系人的代码,就是打开选中的联系人编辑界面,然后自动添加电话,再手动保存,就跟手机上的一样,功夫不负有心人,终于给搜到了,很不容易啊,现分享如下, // 保存至现 ...

  9. 本地推送UILocalNotification

    //本地推送---无需网络,由本地发起 UILocalNotification *localNotification = [[UILocalNotification alloc]init]; //设置 ...

  10. Razor 中的@helper 与 @function 用法

    @helper : 可以有返回值,也可以没有返回值 @function :需要有返回值 可以将View中公共部分的代码抽取出来,变成一个独立的方法   公共部分 view        抽出的公共部分 ...