东南亚“大厂”Grab超级APP的质量改进之旅

365 阅读10分钟

介绍: 东南亚“大厂”Grab,总部位于新加坡,是东南亚最大的网约车和外卖服务平台。2018年,Grab收购Uber东南亚的打车及外卖业务,成为东南亚打车独角兽,同年推出了外卖配送平台GrabFood。2021年Grab在美国纳斯达克上市,其服务内容除了出行和外卖,已经拓展到了金融、健康、支付等诸多本地生活领域,被誉为东南亚版“滴滴”和“美团”。

本文为Grab技术团队在质量保证方面的一些经验总结。

编译整理|TesterHome社区

来源|Grab Tech Blog

作者|Abby Alcantara · Thu Doan · Renu Yadav

以下为Grab的观点:

为了实现成为东南亚领先的超级应用程序的愿景,我们不断需要在开发速度与保持Grab app的高质量之间取得平衡。与大多数科技公司一样,我们从传统的软件开发生命周期 (SDLC) 开始,但随着应用程序的发展,我们很快注意到一些挑战,例如高功能错误和生产问题。 

图片

在本文中,我们将探讨Grab于2019年正式开始的质量改进之旅,以及在此过程中面临的挑战以及截至目前我们的处境。

背景

图片转存失败,建议直接上传图片文件

图1 - 软件开发生命周期 (SDLC) 示例

当Grab于2012年首次启动时,我们在所有团队和功能中使用敏捷SDLC(图1)。这意味着每个新功能都会经历整个流程,并且只有在质量保证 (QA) 团队手动测试并签署后才发布到应用分发平台(PlayStore或AppStore) 。

随着时间的推移,我们发现功能测试花费了更长的时间,报告了更多的错误并影响了需要测试的领域。这与回归测试相同,因为QA工程师必须在发布之前手动测试应用程序中的每个功能。尽管我们的QA团队尽了最大努力,但我们的APP仍然报告了许多重大和关键的生产问题 -- 数量最多的是2019年(图2)。

图片

图2 - 关键开放生产问题 (OPI) 趋势

生产问题和功能错误的激增直接影响了我们APP的用户体验。为了直接解决高产量和测试过程缓慢的问题,我们改变了测试策略并采用了左移测试

解决方案

左移测试是一种将测试提前到软件开发早期阶段的方法。这意味着测试最早可以在规划和设计阶段开始。

图片

图3 - 左移测试

通过采用左移测试,Grab的工程团队能够在测试的早期阶段主动防止可能的缺陷泄漏,直接解决用户的担忧,而不会延迟交付时间。

通过左移测试,我们对SDLC进行了三项重大更改:

  • 软件工程师进行验收测试

  • 合并就绪定义 (Incorporate Definition of Ready,DoR) 和完成定义 (Definition of Done,DoD)

  • 平衡的测试策略

让我们更深入地了解我们如何实施每项变革、面临的挑战以及我们在此过程中获得的经验教训。

软件工程师进行验收测试

验收测试确定某个功能是否满足定义的验收标准,这有助于团队评估该功能是否满足消费者的需求。通常,验收测试是在开发后进行的。但我们的QA工程师仍然发现了很多bug,并且现阶段修复bug的成本更加昂贵且耗时。我们还意识到,错误最常见的根本原因与需求不足、细节模糊或缺少测试用例有关

通过左移测试,QA工程师在开发开始之前开始编写测试用例,这些验收测试将由软件工程师在开发过程中执行。尽早编写验收测试有助于在开发开始之前识别需求中的潜在差距。它还可以防止可能的错误并简化测试过程,因为工程师甚至可以在测试阶段之前找到并修复错误。这是因为他们可以在开发阶段直接执行测试用例。

除此之外,QA和产品经理还将给定/何时/然后 (GWT) 作为验收标准和测试用例的标准,使所有利益相关者更容易理解。

循序渐进的风格GWT格式
1. 打开Grab应用程序
  1. 导航至首页

  2. 点击商户入口点卡

  3. 检查是否显示商家登录页面 | 给定用户打开应用程序 并且用户导航到主页提要 当用户点击商家入口点卡时 然后用户应该看到商家的登陆页面 |

通过使软件工程师能够进行验收测试,我们最大限度地减少了团队内有关错误修复的反复讨论,并且还影响了观点的重大转变——质量是每个人的责任。左移测试的另一个关键方面是团队在SDLC的早期阶段就质量标准达成一致。为此,我们开始将就绪定义 (DoR) 和完成定义 (DoD) 纳入我们的任务中。

合并就绪定义 (DoR) 和完成定义 (DoD)

如前所述,质量检查可以在开发开始之前进行,并且可以早在待办事项整理和冲刺规划时就开始。团队需要就需求、设计、工程解决方案和测试用例等工作产品的标准达成一致。这种一致性有助于减少需求不明确或误解的可能性,从而导致返工或低质量功能

为了保证工作产品质量的一致性,团队中的每个人都应该能够访问这些产品,并且应该遵循DoR和DoD作为完成任务的标准。

  • DoR:史诗、用户故事或任务在被接受进入即将到来的冲刺之前必须满足的明确标准。 

  • DoD:在我们标记史诗、用户故事或任务完成之前要满足的标准列表,或者每个故事状态转换的进入或退出标准。 

事实证明,包括DoR和DoD可以提高交付速度和质量。第一批采用此方法的团队之一,观察到其交付速度和应用程序质量显著提高 -- 始终交付超过90%的任务承诺,最大限度地减少技术债务并减少手动测试时间。

不幸的是,仅进行这两项更改还不够——测试仍然需要大量手动操作且耗时。为了减轻QA工程师的负担,我们需要制定平衡的测试策略。 

平衡的测试策略

图片

图4 - 测试自动化策略

我们最初的自动化策略仅包括单元测试,但此后我们增强了测试策略以使其更加平衡。

  • 单元测试

  • UI组件测试

  • 后端集成测试

  • 端到端(E2E)测试

仅在一层(图4)中具有良好的覆盖并不能保证APP或新功能的良好质量。对于团队来说,积极进行不同类型的测试非常重要,以确保我们在发布之前涵盖所有可能的场景。
如你所知,单元测试是由软件工程师在开发阶段编写和执行的。我们来看看剩下的三层面是什么意思。

UI组件测试

此类测试侧重于APP中的各个组件,对于测试服务或功能的特定用例非常有用。为了减少QA工程师的手动工作,团队开始探索自动化并引入了用于组件测试的移动测试框架。

该UI组件测试框架使用模拟API响应来测试屏幕和元素上的交互。只要管道运行,这些UI组件测试就会自动执行,这有助于减少手动回归工作。通过左移测试,我们还修订了新功能的DoD,以包括至少70%的UI组件测试覆盖率。

后端集成测试

如果一个应用程序定期与后端服务交互(就像Grab app一样),则后端集成测试尤其重要。这意味着我们需要保证这些后端服务的质量和稳定性。自从Grab开始成为超级APP以来,越来越多的团队开始执行API集成测试等后端集成测试。

我们的后端集成测试还涵盖了积极和消极的测试用例,以确定快乐和不快乐的路径。目前,大多数Grab团队都对快乐路径(happy path)用例进行了完整的测试覆盖,并不断提高对其他用例的覆盖范围。
端到端(E2E)测试
端到端测试很重要,因为它们从始至终模拟整个用户体验,确保系统按预期工作。早在2015年,我们就开始探索E2E测试框架,以自动化登录和预订乘车等关键服务的测试。
但随着Grab推出更多服务,现成的解决方案不再是可行的选择,因为我们注意到自动化限制和测试不稳定等问题。我们需要一个与现有流程兼容、足够稳定以减少不稳定、可扩展且易于学习的框架。
考虑到这一标准,我们的QA工程团队构建了一个内部E2E框架,可以进行API调用、测试不同的基于账户的场景,并提供许多其他功能。多个试点团队已开始使用端到端框架实施测试,这有助于减少回归工作。我们正在不断改进框架,添加新功能以覆盖更多测试场景。
现在我们已经介绍了通过左移测试实现的所有更改,让我们看看这如何改变了我们的SDLC。

影响

图片

图5 - 更新的SDLC流程

自从实施左移测试以来,我们在不影响项目交付速度的情况下提高了应用程序质量。与2019年相比,我们在2022年的Grab超级应用中观察到以下改进:

  • 生产中发现的“主要和关键”严重性错误的生产问题减少了60%;
  • 开发阶段发现的严重程度为“重大和关键”的错误减少了40%。

下一步是什么?

通过这样的质量保证旅程,我们认识到不存在没有错误的APP——无论我们进行多少测试,生产问题仍然偶尔会发生。为了最大限度地减少错误的发生,我们定期进行根本原因分析并为生产事件编写事后分析报告。这些能够让我们与其他团队一起回顾并提出纠正措施和预防计划。通过这些不断地学习和改进,我们可以继续塑造Grab超级应用程序的未来

Web UI自动化测试-进阶速成实战

接口自动化测试实战(Java技术栈,从0到1设计框架)

移动测试平台二次开发入门

原文链接:engineering.grab.com/evolution-o…