跳过主要内容

["质量保证流程:安全的移动发布"]

["构建一个质量保证流程,早期捕捉问题,快速修复,事故恢复不受应用商店延迟影响。"]

["Martin Donadieu"]

["Martin Donadieu"]

["内容营销人员"]

["质量保证流程:安全的移动发布"]

["即使CI运行绿色,你也可能发布一个破损的应用。构建通过,QA签字,发布出去,用户第一次打开后,出现权限提示永远不返回,过时的JavaScript包,或者只在某个Android皮肤上出现的崩溃。质量保证流程指南通常会忽略这一部分,而移动团队通常会在学习的过程中遇到这一部分。"]

["实用"] 质量保证流程 它是一种闭环,而不是一个结束于某人记录缺陷的清单。它从需求和测试设计开始,但只有当发现反馈到发布决策、监控、回滚和下一轮测试时才变得有用。如果您正在部署CapacitorJS或Electron应用程序,那么这个循环就更重要,因为一个坏的Web包可以一次性影响所有用户,而原生审查仍然会延缓永久性修复。

目录

什么是现代质量保证过程的实际内容

现代 质量保证过程 是一个闭合的环节,具有明确的控制点。实践顺序是 需求分析、测试规划、测试设计和案例开发、环境设置、执行、缺陷跟踪、重测试和回归、发布验证和测试关闭。最重要的控制点仍然是那些乏味的 需求到测试的可追踪性 和正式的 缺陷分配和验证循环, 因为修复不算是有效的,直到它们被验证为关闭状态,正如TestSigma的 质量保证流程指南.

一个图表,展示了一个持续的质量保证循环,包括四个迭代步骤:计划、测试、发布和学习。

循环不在发布时停止

好的QA不仅仅是发布候选人通过绿色测试。它还会持续通过生产验证、支持信号、实时更新恢复和下一个冲刺的测试设计。很多团队会在这里失去,因为他们把缺陷当作任务,而不是需求、测试或部署防护栏需要改变的证据。

有用的思考方式是把QA当作管理系统,而不是评分卡。 质量保证流程步骤 指南指出,很多程序会忽略客户反馈循环和跨渠道评估,这个缺失很重要,尤其是在app团队中。如果支持团队在发布后持续看到同样的反馈,说明过程没有学习,只是测量了。

在添加工具之前,需要测量什么

在购买更多工具之前,需要清晰地确定团队会使用什么信号来决定是否安全发布。通常需要定义发布门槛、每个门槛的负责人和回滚标准,如果有东西漏过去。

一个实用的起始集合是简单的

  • 需求覆盖, 这个指标表明每个可见的规则都至少有一个测试。
  • 缺陷严重性和归属, 这样团队就知道什么阻止发布以及谁来解决它。
  • 回归范围, 这样修复就不会重新打开邻近流程中的旧问题。
  • 发布后信号, 这样生产反馈就不会改变下一个测试周期,而是存放在仪表板中。

对于试图在邻近运营流程中减少手动重复工作的团队, 杜莎劳动成本减少指南 是一个有用的例子,说明了如何通过结构化审查和明确的交接来减少浪费的努力。 QA 工作方式与此相同,当循环是明确的时,人们停止猜测。

如果当前流程只告诉你什么失败,而不是什么下一步改变,那么它是不完整的。 这就是测试程序和实际质量系统之间的区别。 对于一个符合这种思维方式的发布管理角度,这个内部指南 发布管理流程 与同样的闭环方法相得益彰。

定义目标、范围和可测试的验收标准

QA会变得更加锐利,当产品语言转化为可测试的语言时。一个要求“使结帐过程快速”是无法清晰地验证的,而“在提供商返回成功后显示付款确认屏幕,并在用户关闭应用之前”则是可测试、可追踪和对工程和支持都有用的一种要求。这种可追踪性是闭环模型中的一个核心控制点,早先的部分中提到过。

以测试者可以执行的方式编写验收标准

对于CapacitorJS应用程序,考虑一下支付流程。如果应用程序使用第三方支付表单,验收标准应该涵盖表单成功、失败、超时或被用户关闭时的行为。如果流程依赖于相机权限、位置权限或推送通知同意,每个分支都需要可见的结果,因为在iOS和Android上,权限提示可能会表现出不同的行为。

一个轻量级的模板效果很好:

  • 给定 用户已登录。
  • 他们点击支付按钮。
  • 然后 app 展示支付 UI 并确认成功或显示可恢复的错误状态。
  • And 事件可以追溯到发布票据,因此 QA 可以将失败映射回需求。

重点不是使每个句子都正式。重点是确保人类可以在以后不争论意图时判断特性是否通过。 验证Capacitor app 更新 有用,因为更新验证通常会暴露缺失的验收标准。

根据风险而不是乐观地范围发布

范围发布比模糊的发布更容易辩护。高风险面向用户的功能应有更广泛的覆盖范围,而低风险的复制或孤立的 UI 调整可以在依赖面小的情况下使用轻量级检查。

实践规则: 如果功能可以以阻止核心使用的方式失败,则需要明确的验收标准和至少一个非单元测试验证路径。

不能在单元测试或集成测试中很好地执行的功能 shouldn’t 被忽视。它们需要另一个层次,通常是手动通过、设备特定检查或发布阶段验证步骤。尤其是对于依赖 OS 级别对话、文件访问或浏览器怪癖的 Electron 应用程序,组件测试不会对其进行可靠的模拟。

如果你能准确把握范围,QA就不再像是在最后时刻争论一样。团队知道需要证明什么,什么可以采样,什么需要人工检查,因为自动化边界在此结束。

选择合适的自动化和手动测试的比例

自动化得到关注,因为它可以扩展,但它只能捕捉到它可以模拟的内容。手动测试被认为是慢的,但它往往是捕捉视觉漂移、设备特定问题或工作流奇怪性等问题的唯一方法,因为这些问题会在人类使用应用程序时出现。一个平衡的 质量保证过程 需要两者,并且比例应该根据风险而不是意识形态来确定。

每层最擅长的东西

单元和集成测试在逻辑是确定性的情况下最强大。在CapacitorJS或Electron堆栈中,这意味着使用Jest进行商业逻辑、状态减少器、辅助函数和组件行为的测试,集成测试用于API边界、更新解析和权限处理Branches。Cypress适合于您希望浏览器驱动的端到端覆盖Web层的情况,而Detox-style流程在您需要设备级别的移动交互并且可以承担维护成本的情况下很重要。

在上下文很重要的地方,手动测试才有它的价值。探索性会话可以捕捉到奇怪的导航路径、暗色模式不匹配、在小设备上键盘重叠、或在某个OS版本上弹出窗口关闭得太早等问题。它也很重要的可访问性,因为屏幕阅读器的顺序、焦点陷阱和对比度问题通常比依靠静态检查更容易通过试用应用程序来发现。

如果您想了解自动化类别和权衡的更广泛视图, Appjet.ai的测试工具分解 是比较的有用参考点。对于刚刚标准化他们堆栈的团队, 自动化测试概述 有助于定义边界通常在哪里。

自动化与手动测试的场景

场景 最佳匹配 为什么
在共享模块中的纯业务逻辑 自动化 快速反馈、稳定输入、容易重复
支付提供商回调处理 自动化加人工 逻辑可以编写脚本,但用户体验需要人工验证
iOS 和 Android 上的权限提示 人工优先 操作系统行为和设备状态可能会改变流程
视觉回归测试在设置屏幕上 人工加视觉工具 真实设备上的布局错误更容易发现
离线同步和重新连接行为 自动化加设备测试 Timing, retries, 和状态恢复需要可重复的覆盖
Beta测试反馈:新特性标志 手动 现实世界的行为往往揭示测试漏掉的缺口

外部beta测试者帮助

外部beta测试者在内部团队有太多共享背景时很有用。他们不会重现你的假设,这就是目的。他们尤其适合于触及登陆、首次运行权限或依赖于不熟悉用户行为的流程的发布候选项。

陷阱是过度关注两边。测试计划完全依赖自动化会忽略人类细节。测试计划完全依赖手动会变得昂贵、不一致且在截止日期紧张时容易忽略。正确的答案通常是稳定的自动化基础加上在世界上最容易破坏的表面上故意的人类覆盖。

将QA集成到CI/CD管道中

CI/CD应该强制质量,而不是仅仅移动工件。管道在每个阶段都有一个单独的任务时,才能发挥最佳作用,因为混合关注点会使故障更难理解并更慢地修复。一个好的 质量保证过程 在阻止坏code的同时,保留相同工件,直到它向发布移动。

一张图表,展示了一个五步CI/CD管道的集成质量保证过程,从code提交到部署。

优先检查低成本的项

每次提交时,运行速度快且可预测的检查。检查代码风格、类型检查、单元测试和集成测试应该在任何人开始构建原生二进制文件之前失败。这可以保持噪音低,使下一个阶段,即构建,值得花费计算资源。

之后,受控的构建应该生成签名的iOS和Android二进制文件,当原生code发生变化时。即使只在Capacitor应用的web层发生变化,你仍然需要管道来构建web包、验证它并以安全的方式打包它。关键是 artifact标识,通过测试的包应该是到达测试环境或生产环境的同一个包。

推送 artifact,而不是仅仅推送环境

仅推送环境而不推送 artifact 是团队会产生漂移的原因。你希望从内部QA环境到测试环境到生产环境的包始终保持一致,因为否则你是在测试一个东西并部署另一个东西。这种情况同样适用于Electron应用,打包和签名应该是发布门控的一部分,而不是发布后附加的内容。

实践规则: 如果一个构建无法从提交到签名的artifact到部署的版本追踪,那么你的管道就缺乏了QA所需的证据链。

对于Capacitor团队,实时更新工具可以减少验证和发布之间的差距。经过测试的web包可以直接推送到测试环境而不需要重建原生二进制文件,这使得原生shell没有发生变化时的迭代速度大大提高。 持续集成设置 指南在这里相关,因为CI应该知道如何自动将验证的包发布到正确的渠道。

简短的版本是简单的。CI CD shouldn’t问,“Did the build pass?” It should ask,“Did this exact artifact clear the right checks,in the right environment,with the right gate in front of users?”

添加晚期集成检查

只有当外部系统参与时,才会出现一些失败。这种情况下,针对性的端到端检查有所帮助,尤其是对于认证提供商、支付网关、推送令牌或短信验证流程。如果您需要更广泛的参考点来了解平台工作流程中的集成测试覆盖范围, 短信激活集成测试指南 是一个有用的提醒,外部依赖项应该得到明确的验证,而不是寄希望于它。

当管道以这种方式构建时,QA停止成为一个单独的仪式。它成为交付本身的一部分。

无需猜测的阶段、雪崩和分期发布

阶段发布、雪崩发布和分期发布不是可以互换的。它们解决不同的问题,团队会陷入困境,因为他们把其中一个当作所有三个。一个健康的 质量保证过程 将它们视为单独的发布策略,具有单独的爆炸半径和单独的决策点。

A对比表格展示了不同软件发布策略,包括预发布、 Canary发布和分阶段发布。

每个发布阶段的作用是什么

预发布 是生产环境前的最后一个完整的高保真检查点。它应该尽可能地模拟生产环境,以便团队可以在真实条件下验证构建、数据流和发布包装。

Canary 用于从小型真实用户切片中学习。它暴露了设备特定的和网络特定的问题,因为预发布环境经常会错过这些问题,因为世界比任何预发布环境都要复杂。

分阶段发布 在第一批信号看起来健康后逐渐扩大曝光。它是扩大爆炸半径的最安全方式,因为你不是在单个发布决策上押注整个用户基数。

Capgo风格的通道如何映射到发布策略

对于实时更新工具,通道设计很重要。一个通道可以服务于内部QA,另一个可以针对beta测试,第三个可以持有第一个生产波次,第四个可以纯粹用于紧急回滚。这种分离给工程和支持提供了隔离风险的方式,而不必等待新的商店提交。

在此也可以使用针对设备的分配帮助。如果某个特定的用户或设备需要调试,可以为此设置一个通道,这样就可以保持其余的基础版本是已知的良好版本。Capgo支持针对Capacitor应用的这种目标质量保证流程,这在bug难以复现且需要观察一个设备而不改变其他人发布状态时非常有用。

毕业标准应该明确

只有当证据表明它可以前进时,才应该将构建推进。通常这意味着早期阶段通过了其定义的检查,没有新的崩溃模式出现,支持队列中没有同样的抱怨。

如果信号不明确,应在当前位置保留构建。

  • 一个简单的促进规则有助于:内部QA到发布环境
  • 只有精确的工件通过烟雾测试和关键用户流程后才可以进行。发布环境到灰度发布
  • 只有全真实环境与预期行为匹配后才可以进行。灰度发布到分阶段发布
  • 只有早期用户表现稳定且支持可以用简单的话语解释发布后才可以进行。分阶段发布到全量生产环境

在这个方面,Capgo消除了猜测。推广变成了基于证据的决定,而不是进展的庆祝。

在用户报告问题之前,捕捉到可观察性和指标

发布后,QA 并不会消失,它会转变形态。生产可观察性是其一部分。 质量保证流程 在移动和跨平台应用中,这意味着一起查看每个设备的信号、更新健康状况和错误模式。

观察反映用户痛点的信号

最有用的指标是那些与实际故障相关的指标。没有崩溃的会话、JavaScript 错误率、网络故障率、更新采用率和更新故障率各自描述了不同的故事。如果应用程序缺少其中一个信号,支持团队最终会在工程团队之前听到问题。

For a Capacitor or Electron app, per-device logs matter because the same release can behave differently across OS versions, form factors, or update states. A live-update platform can expose adoption and failure data by device, which gives engineering a way to see whether a rollback is needed or whether the issue is isolated to a small slice.

将仪表盘变成行动,而不是装饰

当没有人负责响应时,仪表板会失败。每个指标都需要一个负责人、一个警报条件和一个标准的下一步措施。如果更新失败的次数突然增加,需要有人决定是否暂停通道、回滚捆绑包或发布新修复版本。

实用的设置如下:

  • 崩溃和错误监控,快速检测应用程序不稳定性。
  • 更新采用率跟踪,查看用户是否接收到了修复的捆绑包。
  • 失败率警报,在支持问题积压之前捕捉到坏的捆绑包。
  • 设备级别的钻取,让团队能够区分广泛的失败和平台特定的噪音。

只有当仪表板改变了决策时,它才是有用的,否则它就是一个带有更多标签的截图。

将生产信号反馈到下一个发布中

最好的QA团队将发布后数据转换为新测试。如果某个设备类别无法应用更新,添加一个验证案例来处理该路径。如果一个网络重试行为在一个平台上表现不佳,加入下一个测试计划中的失败模式。这就是可观察性如何成为质量的输入,而不是运维侧边栏。

发布工具成为QA的一部分,而不是仅仅是部署。当团队可以看到哪些设备更新了,哪些设备失败了,以及哪个版本的包是live的,他们就可以在用户开始涌入支持之前做出反应。Capgo的每台设备日志和通道护栏适合那些需要发布过程在发布后保持可解释的团队。

事件恢复、回滚和学习正确的教训

发布时出现问题的那一刻是质量保证过程的关键时刻。一个团队可以有强大的规划、合理的测试覆盖率和干净的管道,但如果它无法快速恢复或从失误中学习,那么所有价值都将丧失。因此,事件响应应位于QA内部,而不是旁边。

来自https://capgo.app的截图

首先进行分类,第二次解释

当发布出现问题时,首要任务是确认范围。是它局限于设备的子集,还是与一个版本相关,还是影响整个受众?一旦范围清晰,团队就可以选择回滚、暂停频道或进行手术修复。

对于实时更新的平台来说,JavaScript 或 CSS 的更改通常可以在几分钟内回滚,而不必等待 App Store 或 Play 的审查。这很重要,因为差异化的坏经历和受控事件之间的差异往往取决于团队能够快速停止传播的速度。 事件响应指南 是团队想要为该阶段获得更清晰的运营手册的正确伴侣参考资料。

写事件后评估报告,以便它能够改变行为

事件后报告需要更多的根本原因。它应该记录观察到的内容、可用的信号、第一个错误的假设以及早期能够捕捉到问题的方法。如果相同类别的缺陷再次发生,报告应该产生新的验收标准、新的测试用例或 CI 门控。

有用的评估输出包括:

  • 修正的验收标准如果原始要求太模糊的话。
  • 新的回归测试如果失败是技术上可以预防的的话。
  • 发布保护栅栏如果问题应该在更长时间的开发环境中停留的话。
  • A support note如果客户端团队需要下一次的脚本更好的话。

实用规则: 如果后事审查没有改变一个门户、一个测试或一个发布规则,那么它可能只是文档。

成熟的QA和发布表演的区别在于学习循环。发布失败,团队控制了它,过程在弱点的地方变得更加严格。


Capgo 帮助团队通过实时更新、目标频道和发布者在设备级别的可见性来使这个循环更短。 如果您正在尝试为 CapacitorJS 或 Electron 应用程序构建一个更安全的 质量保证过程 请访问 Capgo 并了解如何将实时更新发布、回滚和可观察性融入到同一个运营模型中。

实时更新Capacitor应用

当web层bug处于活跃状态时,通过Capgo将修复推送到用户,而不是等待几天的应用商店批准。用户在后台接收更新,而本机更改保持在正常的审查路径中。

立即开始

博客最新文章

Capgo为您提供创建真正专业的移动应用所需的最佳见解。