在线零售市场非常有竞争力和苛刻,因此您需要尽快向客户提供新功能/功能。在这些现实中,每个浪费的分钟都可以花费数千美元。

在Wayfair,我们有几十个不同的工具/应用程序(内部和外部),超过一百个支持它们的团队。我们将我们的代码释放为每天生产数百次,以信心为产品的质量。在本文中,我专注于Wayfair目录工程团队

在目录工程中,我们创建灵活,可扩展和以用户为中心的市场平台。我们永久策划世界上最大,最具吸引力,最具吸引力,最购物的家庭货物目录。我们有效地收集,转换和优化产品数据,为市场定义消费者目录体验供电,以便消费者发现他们所爱的产品。

本文是关于测试,所以,请让我们符合目录质量,工程团队。

目录质量工程使目录工程团队能够通过自动化和测试管道基础设施来卓越的测试和开发战略。我们与许多Wayfair团队和工作组合作,推进质量培训,工具和自动框架。

让我们从一个特征生命周期开始的旅程开始,当产品经理(PM)出现了一个新功能并与团队分享它时,测试开始。

我们分析要求

修复测试阶段发现的错误的成本可能是在要求期间或设计阶段修复中发现的那些成本超过15倍。我们培训团队在需求分析期间寻找什么,分享最佳实践,以确保每个人都在同一页面(接受测试驱动的开发,行为驱动的开发)。通过关键利益相关者之间的对话和合作,我们发现所提出的功能的价值并构建合适的软件。

QES教育队伍关于如何在适用的BDD样式中编写接受标准,以及如何分析完整性,正确性,一致性,清晰度和可测试性要求。

我们使用静态Сode分析,漏洞扫描仪和代码评论

“质量不是来自检查,而是从生产过程的改进来看。”

- - W. Edwards Deming

质量不是事后的想法。它必须超越产品,我们无法在释放或释放后添加或检查它。这就是为什么,在我们的部门,我们大量投资于帮助我们在过程中尽早缺陷或至少识别问题的工具和流程。

我们积极使用工具和平台来连续检查代码质量,以静态分析代码进行自动评论,以检测错误,代码闻和安全漏洞。这些方法有助于我们捕获棘手的错误,防止未定义的行为(影响最终用户),修复损害我们应用程序的漏洞,并确保我们的Codebase是清洁和可维护的,以最少的技术债务。

我们写单位测试

单元测试有助于我们为开发人员提供生产自我记录码的机制,为我们提供了更高级别的质量,并提前揭示问题。我们培养了写作单位测试的文化,以了解冲刺内的新功能,并使其成为完成定义的一部分。我们在单位测试覆盖范围内设置了质量盖特,以便新添加的功能,以可视化我们扩展覆盖范围的进度。

我们只自动化最重要的事情

在Wayfair,我们注意差异化自动化测试和测试自动化。自动化测试只是脚本,可帮助您手动避免测试,而测试自动化是关于我们如何编写和应用测试作为软件开发生命周期(SDLC)的关键元素。

大多数团队都不会为新添加的功能产生冲刺测试自动化,特别是对于与GUI相关的功能。这是故意的;我们自动化投资回报率高。

我们专注于孤立的单位测试和孤立的组件集成测试。GUI和集成测试缓慢,它们不会对设计压力。他们是昂贵的写和维护,它们也很脆弱。通过支持这么多的团队和应用程序,拥有稳定的开发环境综合测试是复杂的。我们构建工具,允许我们在我们自己的共享服务实例中本地运行测试,以便我们可以以任何方式操纵数据,并对环境和测试的稳定性充满信心。我不能强调这一点:测试要么是值得信赖的或无用的。

我们可视化产品的健康和​​测试自动化

我们从开发和生产环境中获取,汇总和分析自动化测试结果和指标(代码覆盖,通行证,性能,性能指标等,以可视化产品的健康状况。基于该数据,我们创建了具有花哨的图表和图表的仪表板,并在我们办公室的电视上显示它们,让每个人都感到从事我们的产品质量。

我们通过部署管道持续交付

如果在交付过程中,自动测试几乎没用。我们为所有工具设计和构建CI / CD管道,以便在最少的手动操作中向客户提供新功能。

我们有一个基础设施,允许我们一个接一个地传递特征。我们可能会在早上开始开发功能,并在同一天发布,以确保质量的信心。

我们使用增量卷展栏“大”功能

向数百万客户推出新工具或新功能可能是一个风险的风险。幸运的是,我们有工具和技巧,帮助我们降低风险:

  • 我们用功能切换在生产中轻松打开或关闭功能,或仅在Wayfair内部网络上提供功能。
  • 我们用供应商切换因此,我们可以为某些供应商转录的功能,以便更好地促进制作工具。我们的供应商渴望尝试新的工具和功能,使他们能够提升其销售,因此他们很乐意参加一些功能的测试测试,并为我们提供有价值的反馈。
  • Wayfair帮助世界各地的人们为家庭找到最好的物品。我们可以通过例如,首先释放欧洲观众的特征,然后,根据结果,将其释放到北美观众(或其他方式)来利用这种地理多样性。我们可以通过使用部署级别控件(服务器)。
  • 我们进行A / B测试。我们将一个版本的一个版本给我们的一组用户和另一个版本到另一个组。然后我们测量性能差异并收集反馈。

我们不断监控我们的生产中的应用

慢速和“越野车”网站页面可能是非常昂贵的,对客户来说是一个糟糕的经验。我们始终关注我们的应用程序,如使用,性能,系统健康,错误等应用程序。如果我们向客户“大”释放“大”,它是双重重要的。我们还与支持团队密切沟通,以更快地收集反馈和投诉。

如果出现问题,我们回滚了更改

我们有基础架构,允许我们轻松回滚部署或在特征级别关闭代码,因此如果在部署后识别出大冲击缺陷,我们可以轻松删除或“隐藏”功能。这可以通过使用上面讨论的特征切换来实现,回滚更改或以秒为单位传递修补程序。

在获取代码的迫切之处优化对客户的迫切感必然会增加我们释放偶尔错误的风险。我们接受这种风险,将其平衡与在开发中的系统的关键性,并在下一个计划的释放中修复出版错误。

最终注释:我们没有在一天内转向我们当前的团队结构(没有Scrum团队内的嵌入式高质量工程师)。首先,我们必须让我们的团队成员进行测试感染(以一种好的方式),灵感来自邻近团队的良好榜样,并从事测试自动化过程。只有这样,我们才能培养整个团队对测试自动化和质量负责的文化。

现在,我们跨行目录工程赋予自主团队,通过建设测试,定义标准/最佳实践和测试自动化培训团队来快速,重复,可靠地提供价值。