一十一

发表于 2018-03-14 15:50:03

 

摘要:

DevOps团队的职责是“无摩擦发展”。 这是对“速度需求”驱动的发展理念的一种渴望,以及有意识地去除从概念到客户的想法。 无摩擦的发展使产品团队能够专注于创新,而不是陷入经常任意的过程。 这种运动为质量保证工程师提出了一个有趣的问题,因为“对速度的需求”的思路让他们以更少的时间(主要是时间)做更多的事情,同步对话的双方面临的挑战往往是棘手的。

着眼于提高交付速度往往会使质量问题成为焦点。 怎么确保'速度需求'不仅仅是'快速',而是效率?调整DevOps和TestOps团队是一种技术,可以加速产品发布并支持强大且可靠的以质量为核心的产品,这两个领域通常包含对方。

任何敏捷团队都会经常发布产品更新(在某些情况下会比每天更新), DevOps团队通常是这一过程的焦点,为构建和部署环境创建工具,使团队能够按照自己的期望尽快完成工作。但在测试过程中,由于作为 质量保证。 这个过程产生了QA和测试速度是项目交付瓶颈的印象。这时候便有了一个新的概念'TestOps',构建一个无缝部署的测试环境。

TestOps团队本质上集中于从功能测试到集成测试到更低级别的单元和API测试的所有级别测试所需的基础架构和平台的可用性。 这与传统的测试工程师角色有所不同,后者经常可以成为编写测试工具和维护测试框架的负责人。这有助于将质量责任(通过测试覆盖率和流程)转移到整个团队中(而不是传统的'测试')。 如果与DevOps的“无摩擦发展”理念正确结合,可以实现非常强大的优化开发,测试和发布过程。

在DevOps团队专注于构建,配置和部署的过程中,TestOps团队可以与构建和配置阶段进行交互,以与该系统进行通信,提供测试反馈机制,这些机制在产品团队自己拥有的测试规范中定义。 这提供了一个无缝的,标准化的工作流程,可以减少开发过程中的瓶颈。 通过持续集成扩展了这种灵活性,可以避免几小时的人工干预,以设置测试环境,从而减少在客户面前获取高质量,经过测试的代码所需的时间。 这只有在DevOps和TestOps平台同步时才能成功,两个团队在产品和流程上紧密合作。

案例分析:

2010年初,Workiva拥有一支由30名开发工程师组成的团队和一支由5人组成的QA团队,他们都致力于Wdesk,这是一个基于云的应用程序,旨在帮助公司在美国证券交易委员会创建和存档账户,预发行文件和其他文件。

预发布验收是在手动探索的基础上完成的,只需手动测试即可覆盖应用程序的能力成为一个问题,从手动测试场景到自动化测试流程的毕业生成为一小组QA工程师的项目。

这个新团队的初始目标是自动测试覆盖率,以便QA团队在每次发布之前完成的800个手动测试场景(此时,Workiva的每周发布时间安排为每两周发布一次,每次发布最多2000次更新)。 这些测试方案主要包括从文档创建和编辑到格式转换的端到端测试,以确认文档内容和格式在转换为SEC为企业会计定义的格式时是正确的。

为了使测试人员能够轻松创建覆盖范围,我们创建了一个易于使用的拖放界面来创建使用业务语言驱动的测试装置构建的测试。 测试运行者和测试的这种分离意味着在获得我们产品的测试覆盖率时可能会发生快速进展,而无需测试人员编写代码或为测试完成产生大量的许可证成本。

在接下来的两年中,测试覆盖率从每个发布的800个测试中增加到最初的手动测试案例(项目的初始目标),达到7000个全堆栈测试。 这些测试现在每天24小时运行,发布候选版本全面运行,产品团队构建的定制组件以及小型小时烟雾测试版本。

随着时间的推移,支持基础架构也从对一个小型物理机器场的测试运行到40个Google App Engine服务器的虚拟化平台,400个亚马逊ec2机器复制用户,并且每月运行大约1,000,000个测试场景。 该框架在某个地方采用了“天网”这个名称。

图1 - 初始测试和发布过程

初始测试成功,未来扩展问题

提供测试覆盖率的最初目标已经得到满足,并且在发布之前已经发现了数百个错误(并继续存在),尽管这些工具很快变得明显,这些工具非常“专注于测试”。 尽管开发人员可以在将产品和功能放在一起的同时创建功能测试覆盖范围,但这样做的工具不在环境和存储库开发人员每天工作的范围之内。 随着组织机构迅速转向多个产品团队和服务模型,这些团队和服务将通过由DevOps倡导的简化版本基础架构独立发布,因此这种扩展性无法扩展。 其他耗时的问题出现在所需的人工干预(如图1所示)之间,在开发和质量保证后构建之间进行人工切换,发布管理也一样,发布质量保证结果审查,并且这些需要在未来进行缓解。

随着组织分拆成各自独立的团队,每个团队都在独立代码库之外提供自己的微服务,重要的是要重新评估整个产品团队的这个模型,以及新的DevOps交付模型。

TestOps团队

由于DevOps团队负责构建和部署架构,使工程组织能够按照其业务需求尽可能快地进行扩展,所以TestOps团队能够相应地进行交互并与DevOps一起发展非常重要。 如果测试基础架构不易维护且可用作灵活的构建和发布机制,则会导致软件发布的延迟,因为QA在检查其规定的测试活动的发布可信度方面得到备份。 随着敏捷团队更频繁地向客户发布较小版本,这种凝聚力变得更加重要。 反过来,许多基于云计算的供应商都可以为客户提供服务,即使能够以更高的频率更新应用程序,也必须保持质量。

DevOps团队将构建并支持新的架构和工作流程,使产品团队能够按照他们自己选择的时间和频率发布软件。 构建支持基于容器的应用程序部署(使用Docker)并创建支持产品团队最适合其产品/服务的所有技术的生态系统。

除了DevOps之外,测试工程团队(在被称为TestOps之前)已经是测试框架的所有者,并且该团队已经开始意识到目前正在使用的测试模型无法扩展,当然在组织中是 移动速度更快,并希望比以前更快地构建部署。

确保DevOps和TestOps团队与工具同步是一项挑战。所有这些都必须接近无缝,因为任何人工干预或延迟开发都会存在不可预期的后果,并成为流程中的瓶颈或薄弱环节。 因此,团队之间的依赖关系的沟通是在一开始就建立起来的,每个团队的架构师都要确保两个团队的愿景,同时集中在不同的领域导致看起来是相同的结果。

发布管理团队是另一个有趣的组成部分。 负责管理客户的每一次更新版本的每一部分,在新模型中,团队有权在任何时候自行发布,随时准备这样做。

        发布管理重点转向自动化发布工具,来帮助更快地发布产品。提供一套工具,如测试覆盖率报告和自动发布过程检查等,并简化团队发布流程以使其更快地交付。

质量保证人员也应改变传统观点,将其从源码交付、版本构建到产品质量的整个交付过程作为质控的一部分。

至关重要的是,成熟的测试工程团队需要转向更加'TestOps'的前景,以确保我们能够提供工具和支持,以确保在质量方面维持高标准并保持规模,并且团队 现在对其整个发布流程负责,但与DevOps和整个工程所倡导的“无摩擦发展”路径保持同步。

持续集成(CI)系统是DevOps/TestOps成功的中坚力量。 一个好的CI系统可以快速反馈构建稳定性,更快地将工件制作成QA,并最终更快地生成代码。 通常,DevOps将拥有构建系统,部署工具(假设基于云/服务器的产品),生产监控系统(有时称为CloudOps),并经常发布一致性度量工具,如代码覆盖率报告。 TestOps还可以利用所有这些工具,部署测试版本,报告性能和一致性等,为产品团队提供与生产部署完全相同的基础架构的反馈,从而减少时间和成本,以便为部署设置和维护单独的测试资源 并给出更真实的世界反馈循环以释放信心。

TestOps中文社区公众号
 
 微信   :  wonter
 QQ群 :  632418478

站在DevOps肩膀上的TestOps(一)的更多相关文章

  1. 站在DevOps肩膀上的TestOps(二)

    一十一 发表于 2018-03-14 16:40:22 TestOps   摘要: TestOps模型旨在将整个团队的注意力集中在质量上,因此TestOps确实需要无缝且可靠. 一个简单的例子是任何测 ...

  2. 站在BERT肩膀上的NLP新秀们(PART I)

    站在BERT肩膀上的NLP新秀们(PART I)

  3. 站在巨人肩膀上的牛顿:Kubernetes和SAP Kyma

    这周Jerry在SAP上海研究院参加了一个为期4天的Kubernetes培训,度过了忙碌而又充实的4天.Jason,Benny和Peng三位大神的培训干货满满,借此机会,Jerry和过去的两位老领导P ...

  4. android开发利器--站在巨人肩膀上前行

    本文主要介绍有助于android开发的三方平台和站点. 一:开发阶段 1:SVN(一个开放源码的版本号控制系统) 团队开发没有server,代码管理就没那么方便了,推荐taocode阿里开源站点,方便 ...

  5. react-native之站在巨人的肩膀上

    react-native之站在巨人的肩膀上 前方高能,大量图片,不过你一定会很爽.如果爽到了,请告诉我

  6. 站在巨人的肩膀上,C++开源库大全

    程序员要站在巨人的肩膀上,C++拥有丰富的开源库,这里包括:标准库.Web应用框架.人工智能.数据库.图片处理.机器学习.日志.代码分析等. 标准库 C++ Standard Library:是一系列 ...

  7. 站在巨人的肩膀上看Servlet——原来如此(更适合初学者认识Servlet)

    前言: 有段时间没更新博客了,这段时间因为要准备考试,考完试后又忙了一阵别的事,一直没能静下心来写博客.大学考试真是越来越恶心了,各种心酸,那酸爽,够味.不过还好,马上就要大三了,听大三学长学姐说大三 ...

  8. Android系统研究资料收集---站在前人的肩膀上

    Android系统研究资料收集---站在前人的肩膀上 针对Android系统研究任务,收集高价值资料在本页更新 AuthBlog:秋城https://www.cnblogs.com/houser032 ...

  9. angularJS之站在jQuery的肩膀上

    jQuery:用更少的代码,实现更强悍的功能 托互联网日新月异发展的福,浏览器变成了人们接入互联网的入口,而JavaScript 这个曾经的小语种,终于成功地站到了舞台的中央,唤起了开发者的兴趣. 浏 ...

随机推荐

  1. 《mysql必知必会》学习_第20章_20180809_欢

    第20章:更新和删除数据 P140 update customers set_emails='elmer@fudd.com' where cust_id=10005; 更新多个列,用逗号隔开.注意被指 ...

  2. Python学习第四章

    1.类和对象: 类对象支持两种操作:属性引用和实例化. 属性引用:obj.name 构造方法:类会定义一个名为__int__()的特殊方法如下 def  __init__(self):       s ...

  3. veri HDL modeisim仿真:test bench文件编写

    预编译指令: verilog HDL预编译指令是以" ' "字符开头,而且不需要以";"结尾. 作用:指示在编译verilog hdl源代码前,需要执行哪些操作 ...

  4. cad.net 利用win32api实现不重复打开dwg路径的文件夹(资源管理器)

    这里地址的方法也是可用的,但是net3.5不能使用 为此我选择使用win32api的方式来遍历当前桌面所有资源管理器 /// <summary> /// 不重复打开dwg路径的资源管理器 ...

  5. struts2框架学习笔记7:struts2标签

    三大标签: 1.JSP:脚本,为了替代servlet,已过时 2.JSTL:标准标签库(core.format.sql.xml),还未淘汰的只有core库 3.Struts2标签库:由Struts2开 ...

  6. 使用docker redis-cluster集群搭建

    参考https://www.cnblogs.com/cxbhakim/p/9151720.html此文 主要搭建过程参考上文,此处讲下主要过程和遇到的坑 首先是镜像的基础搭建,我不知道是否是作者编写时 ...

  7. Spring boot 使用 configuration 获取的属性为 null

    1. 未设置 getter(),setter()方法,导致属性值注入失败: 2. spring 未扫描到该组件,在其他类中注入该对象失败,可在配置类添加 @configuration 或者 @comp ...

  8. Python模块学习 - Paramiko

    简介 ssh是一个协议,OpenSSH是其中一个开源实现,paramiko是Python的一个库,实现了SSHv2协议(底层使用cryptography). 有了Paramiko以后,我们就可以在Py ...

  9. 在浏览器中输入www.baidu.com后执行的全部过程

    1.客户端浏览器通过DNS解析到www.baidu.com 的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径.客户端浏览器发起一个HTTP会话到220.181.27.48 ...

  10. springmvc的异步处理

         关于异步的好处我在这里就不多说了,自从servlet3.1规范发布以来,控制层的异步处理也越来越多的被人提及.而Spring5的webflux诞生也意味着Spring全方位对异步提供了支持. ...