如何运用仿真技术保护 RTC 用户体验

本文整理了 Wurzel Parsons-Keir 在 RTC@Scale 2023 关于运用仿真技术保护 RTC 用户体验的介绍,包括了研究原因、系统实现、讨论总结等内容。

来源:RTC@Scale 2023
主讲人:Wurzel Parsons-Keir
内容整理:林宗灏

原因

为什么要进行仿真?也许仿真能够帮助我们进行更快速的迭代,也许仿真能够帮助我们更好地保护用户体验。我认为它确实如此,并希望向你们展示一些我们在这一领域所取得的成果。

仿真是昂贵的,它相比于运行一个简单的单元测试、甚至多种类的集成测试都有着更高的成本开销。那么我们为什么还要在仿真上进行投资呢?我们看到了仿真所能带来的两个主要优势:第一个是左移漏洞发现;第二个是扩大覆盖面。

如何运用仿真技术保护 RTC 用户体验

大规模通话存在着一系列的技术挑战,例如:网格视图和分页涉及了大量新的用户界面工作,联播、带宽估计、时间层等是需要专业人员进行深入研究的课题,后端系统的信号与媒体服务器需要扩展以适应于这些新类型的流量处理。总览软件开发的生命周期,开发人员首先针对问题选择算法、调整参数、编写用户界面、进行功能和负载测试等,这些工作均可以单独完成。终于,你构建并部署了该产品并将其推广到了用户手中。假设现在存在一个漏洞,那么如果你在构建和部署的过程中发现了它,那么你的开发成本是在开发过程中发现的2-5倍;但如果你在推广至用户的情况下发现了它,那么成本将提升至5-10倍,并伴随着一系列的风险:除了对产品和用户体验的风险之外,用户报告中的噪声和日志中的少量信号将使你无法准确再现和解决这一问题。所以,仿真可以帮助我们将发现漏洞的过程左移,降低开发成本并实现更容易的系统调试。

如何运用仿真技术保护 RTC 用户体验

以现场试验的方式测试 RTC 存在着一系列的挑战:降低用户体验的巨大风险、日志的可靠性与合法性、问题的可重复性、可调试性。因此,我们想找到一种方法,在不影响用户体验的前提下进行试验。相较于过去假设、部署、现场测试、希望的模式,我们引入了仿真。我们首先形成一个假设,然后有意识地设计一组场景、一组条件和一组配置来模拟现实世界中发生的情况,帮助我们测试假设的使用范围。通过不同的配置组合进行大量测试,我们能够以仿真的形式覆盖更多的现实情形,发现系统中的潜在漏洞。如果仿真运行和效果评估的做法能够更为快速的完成,我们可以把所得的信号反馈给开发者来改进或修正我们的假设,加速开发的工程流程。

实现

Newton

为了实现诸如 1 分钟内模拟一个 10 分钟通话的快速仿真,我们开发了一个名为 Newton 的系统,它能够帮助开发人员进行更快速的迭代,并具有确定性、运行速度快于现实时间等优势。

如何运用仿真技术保护 RTC 用户体验

我们有一个用户端点和一个对等端点,使用网络条件器将二者连接。该网络条件器具有随机数种子生成器,所有的延迟和丢包等事件均由特定随机数种子确定。因此,我们既能在同一次测试中多次运行,再现同样的延迟、同样的丢包结果,也可以在不同测试中提供不同的随机数种子来进行改变。在底部,我们连接所有的标准配置,包括网络、端点、媒体等,以在不同的测试中使用它们。在顶部最重要的部分,我们有一个模拟时钟和任务队列,并确保系统中的所有组件都以此按照相同的顺序运行。我们还使用了一系列脚本对系统进行了包装以便于开发人员根据自己的需要进行五千次、一万次、两万次的调用,并将所有的配置组合在一起以便于测试所有不同的组合情形。所有的测试运行后,我们将测试结果汇总起来,观察不同配置下的实验指标变化,找出其中的异常值作再次复现,对测试中的特定问题进行深入分析。因此,相较于人类 QA 测试而言,Newton 具有更高的可重复性与更强的可拓展性。

如何运用仿真技术保护 RTC 用户体验

我们尝试通过在图形界面实时显示运行结果来为开发人员提供及时的反馈,并将所有的实验数据记录到了标准的数据管线中,以便于对历史数据变化的查看与对数据的分析标注。

Callagen

如何运用仿真技术保护 RTC 用户体验

我们想让开发人员更容易地进行编写、执行和分析工作,于是在真实网络上开发了一个能够实时运行的测试系统 Callagen。开发人员可以在每次测试中轻而易举地配置参与者数量、行为、网络条件等仿真配置,或使用预定义测试配置库,或使用自定义媒体文件。然后,这些配置被传入 Callagen 中由执行引擎接管,控制器访问工作池,模拟通话中各自的角色。我们可以对整个实验过程进行监测以判断相应的任务是否得到成功执行。执行成功后,我们就能分析实验指标结果,在日志中查看丢包、延迟等信息,对输入输出音视频进行质量比较。

如何运用仿真技术保护 RTC 用户体验
如何运用仿真技术保护 RTC 用户体验

我们为 Callagen 设计了一个极其易用的 UI 界面。开发人员能以拖拽的方式向测试场景中添加事件。在执行过程中,开发人员能够实时看到仿真的进展情况。如果发现了漏洞,我们可以调取从整体到局部各种层级的信息来对问题进行深入钻研。最后,我们尽可能多地提供测试指标,来帮助开发人员分析他们所测试的内容。

讨论

成功关键

  • 确保测试配置具有代表性
  • 确定所需的运行次数
  • 与实际比较验证输出结果
  • 对不同测试的简易配置和分析

经验总结

  1. 经典单元/集成测试与 Appium 或人类 QA 之间有一段巨大而富有成效的空间,通过寻找正确的测试框架,能够在其中发掘更多的价值;
  2. 仿真能够为开发人员节省大量的时间;
  3. 自动化能将我们的覆盖面以指数级的形式扩大,通过不同网络和产品配置的组合来进行数万次的测试,我们可以发现在同一配置下反复运行同一测试中不会暴露出的潜在漏洞;
  4. 仿真能够建立一个有意图而又实际的测试环境,我们可以选择自己所关注的领域模拟现实中的场景,并获取有意义的测试数据。

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论