作者 | Valeriia Iuzhakova 策划 | 田晓旭 “我把每一天都看作是比昨天高出一个档次的机会——无论是在服务质量、交付、速度还是业务的其它任何方面。”1 介绍 — 速度 Vs. 质量

客户总是在寻找有效的解决方案,来满足他们已经确定地需求,并为他们节省资金。在企业致力于生产高效、节省成本的东西时,他们也希望自己的产品被认为是高质量的——Pipedrive 也不例外。当你开发一个产品,不仅提供一流的功能,还经得起时间的考验,然后你就拥有了一款客户满意且自己感到自豪的产品。

然而,我们不应该忽视另外一个指标的价值(它也会影响质量)——交付速度。关注交付速度是为了确保竞争优势。平均上,Pipedrive 每周向生产环境进行大约 500 次部署,拥有超过 250 名开发人员,没有专门的测试部门。

问题是,速度是以质量为代价的。此外,保持平衡也需要一些努力。我们十年来是如何保持速度和质量的呢?在深入讨论这个问题之前,我们先来讨论下我们在 Pipedrive 遵循的流程。

2 Pipedrive 的“幕后”流程

为了弥补不同团队同步工作之间的沟通差距,我们在软件开发过程中遵循 DevOps 原则。这额外促进了实现更快的交付和反馈。

为了在不妨碍团队发布流程的同时采用 DevOps 流程,我们几乎不需要专门的测试专家。在我们 以开发人员为中心的环境 中,开发人员负责测试和部署他们的变更。我们通过依赖专注于测试自动化的持续测试(Continuous Testing)来弥补差距。

我们没有提供一个安全网来捕获失败,而是帮助团队适应失败。为此,我们引入了几个 专业团队,例如 DevOps、SRE、QA 分析师、支持工程师、基础设施工程师、敏捷 / 个人教练等,他们支持所有的 开发小组:围绕特定产品领域的产品开发单元。

例如,站点可靠性工程(Site Reliability Engineering,SRE)团队专注于与产品和开发团队协作来创建可伸缩的架构,同时提高我们服务的性能、稳定性和可靠性。

既然你们对于 Pipedrive 的运作流程已经有了比较好的理解,我们将进一步讨论我们是如何保证快速交付和内在品质的。

3 我们如何保持交付速度 完全自动化的发布流程

平均,我们每周自动测试和执行多达 500 次部署(你可以在 [“Fueling the Rocket for 500 deploys per week”] 这一文章中了解更多关于我们如何实现这一点的信息)。

https://medium.com/pipedrive-engineering/fueling-the-rocket-for-500-deploys-a-week-2f31bb84d26a

功能标记 / 切换

在我们的持续交付系统,我们希望将新功能作为我们日常发布的一部分。如果功能还需要一些时间来完成,代码在这些日常发布期间被一个功能标记禁用。这使得我们可以增量地将代码推送到生产环境,每次发布都非常小且易于管理。

任务框架

我们采用了我们自己的 Pipedrive 敏捷框架,开发部门专注于产品领域,与工程小组一起协作。使用这些小组的一个好处是,他们专注于特定时间的某一特定功能,最终提供更快的结果。

4 我们如何保持软件质量

在 DevOps 中保证质量仍然是一个令人生畏的难题,你需要投入更多精力来平衡质量。

下面是一些可行的方法:

可控的发布

为了逐步推进并控制新功能的持续交付,我们使用了(上文提到的)功能标记。我们采用了分阶段的方法,这样只有一部分用户可以访问这个功能。如果我们的支持票和监控显示最初的发布是成功的,我们会逐步增加到 100% 的用户都有这个功能。通过这种可控的方法,我们确保以最小的风险向客户引入新功能。

测试自动化

我们依赖专注于测试自动化的持续测试。测试自动化使我们能够快速高效地进行测试,并且参与的员工更少。测试自动化发生在一个 CI/CD 流程中,向团队提供快速的反馈,这反回来又支持了频繁发布。

可操作的数据

我们使用与客户满意度直接相关的可靠指标。我们还收集客户反馈来了解更多关于客户体验的信息,并跟踪客户 NPS 的变化,将其作为客户满意度当前状态和潜在流失风险的一个指标。

除了测量 Pipedrive 如何被使用之外,我们还测量我们的项目运行效率、任务 / 启动板运行方式以及 bugs 的已创建 vs. 已解决的数量,等等——必要时采取行动。

Grafana 的 DevOps 指标仪表板

最后,我们还跟踪质量相关的指标。目前,我们主要的质量指标如下:

  • 产品稳定性——向客户表明产品整体的总体稳定性。* 这个数据受事件数和持续时间影响。

  • 严重事件——数量、持续时间和受这些事件影响的功能

  • 生产环境引入的 bugs——这些 bugs 的总数以及这些 bugs 打破他们的 SLA 的数量

  • 支持工程中的新报告案例——客户报告的关于他们所遇到的问题的案例。

重要的是,对于我们收集到的指标,趋势是可见的和可观测的——为我们指明了特定领域发展的方向,这使得数据驱动的软件质量决策成为可能。这些指标在 Tableau 收集,然后每周共享到一个专用频道。

在 Tableau 中我们的质量关键指标的主面板

所有这些指标都是在组织中获得认可并为质量问题带来可信度的关键部分。

利益相关者一致

我们广泛使用可操作的数据。例如,每周向利益相关者(例如工程经理)提供工程运营指标。这提高了可见性并在整个组织实现了数据驱动的质量决策。

QA 分析师

我们采用 QA 分析师的角色来支持产品组织和各种工作小组来确保应用程序在最重要的领域得到足够的测试,识别自动测试的机会,并通过在需要时组织 bug 脚本会话来支持手动测试需求,等等。他们的重点是全组织的质量相关倡议、度量可视化、分析和任务规划。

QA 大使

还有一个专门的轮换角色,把更多的注意力集中在日常开发过程中的软件质量上。这个角色专注于提高人们对质量的认识和兴趣,推动质量相关的倡议,并帮助在各个工作小组内做出更好的质量相关的决策。

对延期零容忍

QA 分析师和大使为客户辩护,帮助避免拖延质量问题。有时候,由于上市时间的压力而超出你的控制范围,但是只要有可能,他们都会鼓励团队立即修复问题,以免问题一直累积。

内部测试

对于一些重要的领域,我们的员工可能被要求使用我们制作的软件的预发布版本来发现问题并提供反馈。

“完成”的定义

在我们的发布 / 预着陆检查清单中,我们有一套定义“完成”的标准。我们创建了这种检查清单以及任务 / 项目文档,提醒我们在发布期间应该做什么,来满足一定的技术成熟度。

预着陆 / 发布清单摘录

为了从模板中创建一个合适的检查清单,我们将 [从模板宏创建] 添加到一个创建子任务的任务页面。

倡导质量的明确政策和协议

为了达到和维持所需的流程和软件质量,需要遵循特定的政策和指南。

这种协议的一个例子是,生产缺陷管理流程。它的目的是识别影响生产环境的 bugs 并对其进行优先级排序,使它们与 ETA 保持一致,以确保这些 bugs 被及时处理,从而最小化对业务的影响。

重要的是要记住,即使是不严重的问题也会对客户的质量感知产生复杂的负面影响并降低产品的可用性。

5 结论

那么怎样才能在速度和质量之间取得平衡呢?没有简单的答案或神奇的方案,但你可以从我们正在努力创建的东西和我们尚未完善的东西中获得一些灵感:

在生产中测试

在生产中测试是实现速度 / 质量平衡的方法之一。通过提前发布软件并采用允许用户测试的实践,一旦软件投入运行,开发部门就可以缓解风险。决策可以由实际用户与生产软件的交互数据来驱动。

DevOps

另一个直接的方案是采用 DevOps 和 SRE,而且通过减少上市时间并带来更多透明度和稳定性,它帮助我们以更好的方式与公司合作。

质量文化

质量文化非常重要!根据《哈佛商业评论》,拥有强烈的质量文化的公司所遇到的错误比没有质量文化的公司少一半。这会转变成真正的商业价值:提高你的质量文化能节省一大笔钱,并带来更高的用户满意度。

对问题的信心

综上所述,一个人需要良好的常识。如果你已经验证了问题并证明它对客户非常重要,那么你就不应该走任何捷径——而是应该尽可能以最佳质量实现解决方案。

6 下一步行动

不仅如此,我们还将引入新的 mini-live 或基于区域的 canary 部署,这些将被用来在新的部署被传播到更广的客户群之前对这些部署进行验证。我们还开始着手创建质量和测试相关的培训。接下来还有很多事情,但这会在以后的另一篇文章中讨论。

作者介绍

Valeriia Iuzhakova 是 Pipedrive 的一名首席 QA 分析师。

原文链接

https://medium.com/pipedrive-engineering/how-pipedrive-supports-quality-releases-while-deploying-50-times-per-day-da975e91d846

点个在看少个 bug ?

ssm如何支持热部署_Pipedrive如何在每天部署50+次的情况下支持质量发布?相关推荐

  1. react部署在node_如何在没有命令行的情况下在3分钟内将React + Node应用程序部署到Heroku

    react部署在node In this tutorial we will be doing a basic React + Node app deploy to Heroku. 在本教程中,我们将进 ...

  2. 接口调用简单、多平台支持的RTSP-Server组件EasyRTSPServer如何修正多网卡多IP情况下解码器不能解码显示问题

    EasyRTSPServer修正多网卡多IP情况下解码器不能解码显示问题 提出问题: 海康NVR接入正常,但接入海康解码器出不来图像. 分析问题: 海康解码器是以rtp over udp的方式进行取流 ...

  3. ssm如何支持热部署_IntelliJ IDEA基于SpringBoot如何搭建SSM开发环境

    之前给大家在博文中讲过如何通过eclipse快速搭建SSM开发环境,但相对而言还是有些麻烦的,今天小编给大家介绍下如何使用IntelliJ IDEA基于SpringBoot来更快速地搭建SSM开发环境 ...

  4. ssm如何支持热部署_Java 调式、热部署、JVM 背后的支持者 Java Agent

    我们平时写 Java Agent 的机会确实不多,也可以说几乎用不着.但其实我们一直在用它,而且接触的机会非常多.下面这些技术都使用了 Java Agent 技术,看一下你就知道为什么了. -各个 J ...

  5. 服务器支持热部署吗,热部署

    本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用. 中文名 热部署 外文名 Hot deployment 热部署 ...

  6. flutter不支持热更新_Flutter 在安卓上可以实现热更新了

    本文由 句号君 授权投稿 原文链接:https://blog.csdn.net/qizewei123/article/details/102963340 Flutter 官方在 GitHub 上声明是 ...

  7. Vue.js 安装及其环境搭建,webpack-simple支持热更新

    1.先安装node.js 安装官网最新的即可 版本应该要大于6.0版本 nodejs的官网:https://nodejs.org/en/ 2.安装git Git的官网:https://git-scm. ...

  8. android app 自动更新,app升级项目,新增强制更新(可静默),支持热更新(wgt),可支持高版本安卓系统...

    pure-updater 一个可以用的自动更新方案 经测试可支持 Android 9.0 已支持热更新 已支持静默的强制更新 如果您觉得还可以的话那就点个五星吧!谢谢! 已测试 android 8.0 ...

  9. 文思海辉金融“分布式核心系统”,支持应用级和数据级分布式部署

    12月25日,2020年度中国国际金融展"金鼎奖"评选结果隆重揭晓,其中由文思海辉金融自主研发的"分布式核心业务系统eCas4.0"凭借技术创新力.品牌影响力. ...

最新文章

  1. ASP.NET Core的配置(5):配置的同步[设计篇]
  2. 【小游戏】Random实现猜数字小游戏
  3. jQuery Mobile和UI合并组新项目,这波能赢么?
  4. html5平板电脑,Html5添加支持桌面、移动触摸手机和平板电脑的Lightbox插件教程
  5. CruiseControl.NET ----- mail 配置
  6. Linunx操作基础(十六)之Systemd 入门教程(一)
  7. android 10 apk 存储适配,AndroidQ(10) 分区存储适配方法
  8. 如何打开VMware的vmdk虚拟磁盘文件
  9. tcp 组播_深入了解TCP/IP协议
  10. Qt使用Qtxlsx读写xlsx文件
  11. mysql数据库工资管理系统_数据库课程设计—企业工资管理系统(java版完整代码).doc...
  12. 统计学基础(四)—卡方检验怎么用?
  13. 神调侃!程序员专属成长书单,我比女朋友更了解你!
  14. Fashion MNIST进行分类
  15. C++大写字母转小写字母
  16. jquery鼠标经过水平180度翻转效果
  17. 算术右移与逻辑右移的转换
  18. 本地blast详细用法
  19. 非常有用的10个谈话技巧
  20. 【蓝桥杯刷题冲刺辅导】掌握递归·DFS解题套路,这一文足以?

热门文章

  1. centos mysql jar 驱动包_JDBC连接MySQL的数据库
  2. 【美团语音交互部】 NLP/知识图谱/语音识别等算法职位开放招聘!
  3. beeshell —— 开源的 React Native 组件库
  4. 2018最新Java面试78题:数据结构+网络+NoSQL+分布式架构
  5. 开源开放 | 一个融合多元关系和事件表示的金融领域本体模型FTHO(CCKS2021)
  6. 论文浅尝 | 基于知识库的自然语言理解 03#
  7. day45-前端CSS
  8. JavaScript Math 对象
  9. Linux文件(区域)锁函数 -- open()、fcntl()
  10. 关于c#静态构造函数