GPT-4o火热!介绍一个用于高质量移动测试的生成式人工智能实践案例

2493 篇文章 2 订阅
2330 篇文章 14 订阅

【5月1号开始准备软件测试面试】逼自己7天刷完这些面试题,轻松能上岸!(99%会被问到)

毫无疑问!OpenAI推出新款人工智能模型GPT-4o,成为全球业界讨论的热点。尽管目前在软件开发领域,基于人工智能的解决方案还相对小众,但时代的车轮滚滚向前,不会为谁停留!

TesterHome社区将为大家不断整理分享业界的AI应用案例,供大家学习参考。本文分享Uber Engineering 团队的实践经验。

介绍

Uber 的开发者平台团队不断开发新的创新想法,以增强开发者的体验并增强我们应用程序的质量。质量和测试齐头并进,2023年,我们接受了一项令人兴奋的新挑战,改变我们测试移动应用程序的方式,重点是机器学习 (ML)

具体来说就是:我们正在训练模型来测试我们的应用程序,就像真人一样。

移动测试仍然是一个尚未解决的挑战,尤其是在我们的规模下,包括数千名开发人员和 3,000 多个同时进行的实验。通常会进行手动测试,但开销较高,无法针对每一个微小的代码更改进行广泛的测试。虽然测试脚本可以提供更好的可扩展性,但它们也不能免受较小更新(例如新的弹出窗口和按钮更改)引起的频繁中断的影响。所有这些更改,无论多么微小,都需要定期手动更新测试脚本。因此,从事这项工作的工程师将30-40%的时间投入到维护上。

此外,这些测试的大量维护成本极大地阻碍了它们在不同城市和语言之间的适应性和可重用性(想象一下,必须为我们所使用的50多种语言雇用手动测试人员或移动工程师!),这使得我们真的很难有效地扩展测试并确保 Uber 在全球范围内高质量运营。

为了解决这些问题,我们创建了 DragonCrawl,这是一个使用大型语言模型(LLM)以人类直觉执行移动测试的系统。它根据看到的屏幕决定采取什么操作,并独立适应用户界面的变化,就像真人一样。

当然,新的创新也会带来新的错误、挑战和挫折,但这是值得的。我们没有放弃为 Uber 应用带来无代码测试的使命,并于2023年底推出DragonCrawl。

从那时起,我们一直在不同的城市和语言中以高稳定性测试一些最重要的流程,并且无需维护它们。在 DragonCrawl 的帮助下,在如此多的语言和城市中扩展移动测试并确保质量从人类不可能变为可能。自推出 DragonCrawl 以来的三个月内,我们阻止了十个影响客户的高优先级错误,同时节省了数千个开发人员时间并降低了测试维护成本。

接下来,将快速介绍大型语言模型,深入探讨我们的架构、挑战和结果。最后我们将简单介绍一下 DragonCrawl 的内容。


什么是大型语言模型?

大语言模型 (LLM) 是人工智能领域的变革性发展,特别是在自然语言处理 (NLP) 领域。从本质上讲,LLMs是先进的模型,旨在以有意义且与上下文相关的方式理解、解释、生成和参与人类语言。

这些模型在由各种来源的文本组成的庞大数据集上进行训练,使它们能够学习自然语言的细微差别、习语和语法。LLMs最关键的方面之一是它们能够根据输入提示生成连贯且上下文相关的文本。此功能不仅限于简单的文本生成;它扩展到复杂的任务,如回答问题、翻译语言、总结文档,甚至创建诗歌或代码等内容。

LLMs的底层技术通常涉及神经网络架构,例如 Transformer,它们擅长处理顺序数据,并且可以捕获文本中的远程依赖关系。这使得它们对于需要理解较长文本的上下文的任务特别有效。现代大型语言模型是在多种语言上进行训练的,这意味着我们可以使用它们并在其他语言中获得合理的输出。

为什么我们选择大型语言模型进行移动测试?

我们意识到我们可以将移动测试制定为语言生成问题。归根结底,移动测试是一系列步骤,可能会因应用程序、设备等的变化而遇到障碍和/或路线修正。

为了成功克服这些障碍并完成测试,我们需要背景和目标,我们将这些提供给自动化系统的最简单方法是通过自然语言。我们向 DragonCrawl 提供当前屏幕的文本表示,以及我们想要执行的测试的目标,然后我们询问它应该做什么。根据上下文,它选择要与哪个 UI 元素交互以及如何与其交互。由于这些模型已经过预先训练,并且在英语以外的语言中被证明具有弹性,因此我们可以使用其他语言的文本向 DragonCrawl 询问这些问题。

图片

图 1:DragonCrawl 的高级概述。龙的图像由OpenAI的DALL·E生成


建模Modeling

MPNet,即“语言理解的掩蔽和排列预训练”,是自然语言处理中的一种先进方法,它结合了预训练语言模型中的掩蔽和排列策略。

它的工作原理是屏蔽某些单词并改变输入文本中其他单词的顺序,使模型不仅能够学习屏蔽单词的预测,还能学习更广泛的上下文和语言语法。这种双任务方法使 MPNet 能够更深入地理解语言语义,超越了仅专注于掩蔽或排列的传统模型。一旦在大型数据集上进行了训练,MPNet 就可以针对各种 NLP 任务进行微调,由于其对单词级和句子级上下文的全面掌握,从而在理解和生成语言方面提供增强的性能。

图片

图 2:DragonCrawl 模型中的 Transformer 层。

评估

在浩瀚而复杂的语言景观中,单词不仅仅是一串字母;而是一串字母。它们富含意义、上下文和微妙的细微差别,这就是嵌入发挥作用的地方。嵌入就像多维地图,其中每个单词都找到其独特的位置,不仅基于其自身的身份,还基于与其周围单词的关系。通过获得高质量的嵌入,我们确保我们的模型不会将语言视为单词的随机分类,而是将其视为连贯且相互关联的思想和含义结构。

我们将评估定义为检索任务,因为我们最终希望 DragonCrawl 模仿人类检索信息和做出决策的方式。就像我们在图书馆选择正确的书籍时付出一些努力一样,DragonCrawl 努力选择正确的行动来实现其目标。precision@N 指标类似于当您只能带几本书回家时找到合适的书,它向我们展示了该模型不仅能够检索,而且能够在众多可能性中找出最佳选择。通过 precision@N 测量和提高嵌入质量,我们确保 DragonCrawl 不仅能够理解语言,而且能够以近乎人类般的洞察力来理解语言。

为了为 DragonCrawl 选择正确的模型,我们调整并评估了多个模型。下表总结了我们的发现:

图片

可以看出,所有模型的嵌入质量都很高,但延迟差异很大。最快的模型是基础 MPNet,具有约 110M 参数(从技术上讲,这使其成为中小型语言模型)。此外,它的嵌入大小为 768 维,这将使其他下游系统将来使用我们的嵌入的成本更低。

另一方面,考虑到这些数字,人们可能会说我们甚至不需要调整,但这不是我们选择的。未调整的 T5-11b 为我们提供了良好的精度@1、2 和 3,但考虑到我们计划使用该模型的频率,以及由于 Uber 应用程序不断变化而导致的数据变化,我们很快就会遭受这些额外的影响积分不是由非我们定制的模型提供的。


挑战

在开发过程中我们需要克服一些挑战。其中一些是 Uber 特有的,还有一些与大型语言模型的弱点有关。

我们在提出 DragonCrawl 的请求和完成行程流程时早期遇到的一个问题是设置 DragonCrawl 的(假)乘客和司机的 GPS 位置。Uber 的匹配算法负责将乘客与司机联系起来,非常复杂,并且是为规模化而构建的,甚至考虑了一天中的时间、当前交通状况、未来需求等变量。但是,在使用 DragonCrawl 进行测试时,在任何给定时间,特定城市只会有1名乘客和1名司机,这不是 Uber 后端所期望的。因此,有时即使乘客和司机紧邻,也无法匹配。为了解决这个问题,我们必须调整骑手和司机的 GPS 位置,这样才能得到满意的结果。这是针对优步和/或网约车和食品配送的。

对抗性案例Adversarial Cases

在测试 Uber 的出行流程时,在一些城市,我们看到 DragonCrawl 做了一些奇怪的事情。在一些城市,它不再要求定期出行,而是要求定期出行。最让我们困惑的是,在仔细调试我们的工件后,DragonCrawl 实际上具备做出正确选择的所有条件(即触摸“选择 UberX”),但相反,它会选择预定的行程。然后,它将通过用户界面打开日历并选择预定行程的日期和时间,这令人印象深刻 - 但我们离题了。

上面的例子称为对抗性案例。对抗性案例或对抗性样本的概念在几年前得到了普及,当时研究人员发现,在根本不应该混淆的情况下,模型有可能会被混淆。让我们看一下下面的图片。在下图中,我们展示了如果我们在熊猫图像中添加一点噪声(这会产生几乎相同的熊猫),我们会如何混淆机器学习模型,以至于它会认为它是这样的是一只长臂猿(但我们都知道熊猫看起来不像长臂猿)。 


图片

图 3:难以察觉的噪声如何欺骗机器学习模型的示例。这不是一个假设的例子,请看一下。

虽然不可能完全消除模型在对抗性案例中的弱点,但我们计划进行对抗性训练和验证以降低风险。

引导 DragonCrawl 走向更优化的路径

在我们对 Uber 行程流程的离线测试中,我们看到 DragonCrawl 总是可以请求或完成行程,但有时会花费太长时间。有时,新的弹出窗口会让 DragonCrawl 添加另一位乘客/为其他人预订行程,然后会加载几个屏幕,其中包含 DragonCrawl 必须弄清楚的选项和设置。它会弄清楚它们,但由于需要几个步骤(而不仅仅是1或2个新步骤),因此需要更长的时间。

由于我们的目标是在每次 Android 代码更改时运行 DragonCrawl,因此我们无法承受那些较长的路线,因此我们必须训练 Dragon 说“不”/跳过某些事情并说“是”/确认其他事情。

幻觉Hallucinations

最后,一个经常讨论的话题是大型语言模型中的幻觉。用 Meta 副总裁兼首席人工智能科学家 Yann LeCun 的话说,大型语言模型“有时会胡言乱语”(参见文章https://futurism.com/the-byte/yann-lecun-large-language-models-fad?uclick_id=945e7d76-79b7-44e8-be72-75d1ea788a4a)。

事实上,我们需要注意的是,我们不能完全信任大型语言模型,或者至少不能没有护栏。在本节中,我们将讨论我们为防止幻觉伤害 DragonCrawl 而设置的护栏。

首先,DragonCrawl 的最大优势之一是它使用更小的模型。我们的模型大小为 110M 个参数,比流行的 GPT-3.5/4 小大约 3 个数量级。因此,这大大降低了它可以输出的答案的可变性和复杂性。换句话说,模型大小限制了模型的无意义。

即便如此,我们仍然收到了一些无效的输出,以下是我们处理它们的方法:

1.部分无效操作:模型可能会返回某些信息不正确的响应。例如,对于可滑动的 UI 元素,它可能会返回“touch”;或者它可能会输出正确的操作和正确的位置,但会混淆 UI 元素的名称(即 request_trip_button)。对于任何一种情况,由于我们可以从模拟器中读取有效的操作、正确的 UI 元素名称等,因此我们可以解决诸如前面提到的混淆。模拟器为我们提供了基本事实,我们可以使用它来根据 UI 元素的名称找到正确的操作;给定 UI 元素名称的正确位置;甚至是正确的 UI 元素名称(给定正确的位置)。

2.完全无效的操作:对于完全无效的操作,我们会将之前建议的操作附加到提示中,并指出它是无效的。这将导致模型建议采取不同的操作。对于无效操作持续存在的情况,我们将回溯并重试模型中的建议。

3.循环/重复操作:我们可能会陷入循环(即在提要中上下滚动)或重复操作(即重复等待)。我们通过跟踪特定序列中已采取的操作甚至屏幕截图来处理这种情况,因此很容易判断我们是否处于循环中。另外,由于 DragonCrawl 输出建议列表,我们可以尝试其他建议的操作。


DragonCrawl的不断改进

我们已经看到 DragonCrawl 做了令人惊奇的事情,但在本节中,我们将讨论两个给我们留下深刻印象的场景。

DragonCrawl在澳大利亚上线

2023年10月,我们在澳大利亚布里斯班通过 DragonCrawl 测试 Uber 的出行流程,并看到了一些意想不到的情况。

DragonCrawl 的假司机资料设置得很完美,但这一次,它在大约5分钟内无法上线。在那5分钟里,DragonCrawl反复按下“GO”上线按钮,直到最终上线。    

图片

我们感到惊喜。DragonCrawl 是如此以目标为导向,以至于它经历了不友好的用户体验来实现其目标:上网、匹配(假)骑手,并进行假设的旅行。由于完成时间有限,我们知道我们必须进行调查。我们还了解到,正如下面详细讨论的那样,DragonCrawl 不会因轻微或不可重现的错误而失败,例如影响我们基于脚本的 QA 的错误。  


最终解决方案:将其关闭,然后重新打开

那是2023年9月,我们看到 DragonCrawl 做了一件如此聪明的事,我们不知道是该笑还是该鼓掌。 DragonCrawl 正在巴黎测试 Uber 的出行流程。它选择前往巴黎机场(CDG),当它到达屏幕选择付款方式时,付款方式未加载(很可能是我们使用的帐户中出现了问题)。

DragonCrawl做了什么?它关闭了应用程序,打开它,然后再次请求行程。第二次没有任何问题, DragonCrawl 完成了去机场的目的。

图片

图5:DragonCrawl 重新启动应用程序以请求行程


很难用言语表达看到 DragonCrawl 做这些事情我们是多么兴奋和自豪。反复按下“上线”按钮只是为了能够使用 Uber 开车,或者打开和关闭应用程序以便它能够到达它想要的位置,这使得 DragonCrawl 比我们旧的基于脚本的测试模型更能适应较小的技术问题。 

我们观察到,再多的代码也无法与 DragonCrawl 所展示的面向目标的行为相媲美,而它所代表的开发人员生产力是令人兴奋的。可以创建符合 DragonCrawl 策略的脚本,但是需要编写多少数千(甚至数百万)行代码?在需要时更新所有这些代码的成本有多高?现在,想象一下当传统测试遇到我们刚才描述的场景时会发生什么:

1.正常运行的驾驶员帐户在5分钟内无法上线:如果测试团队没有发出警报,这会引起人们的注意。我们甚至可能认为出现了中断,这会提醒多个工程师,但实际上,这是一个暂时的问题。

2.付款方式未加载:票证将被归档并处于最高优先级。这将引发多次对话、检查,并且会尝试重现该问题,但这只是昙花一现。


DragonCrawl 运行在Uber的CI 上

我们生产了我们的模型以及自2023年10月左右开始使用该模型的 CI 管道,并在年底取得了一些成果。

截至2024年1月,DragonCrawl 每晚在5个不同城市执行一次核心行程流程,并且在将 Rider 和 Driver Android 应用程序发布给我们的客户之前也执行这些流程。自推出以来,我们观察到以下情况:

  • 高稳定性: DragonCrawl 在2023年11月和12月执行的流程稳定性超过 99%。Dragon 失败的罕见情况是由于我们使用的第三方系统的中断,以及由于高优先级错误导致的真正中断没有其他移动测试工具检测到。

  • 无需维护:我们不需要手动更新和/或维护 DragonCrawl。每当应用程序发生变化时,DragonCrawl 都会弄清楚如何通过这些变化来实现其目标,这与我们的软件测试人员团队不同,他们在2023年花费了数百个小时维护测试用例。

  • 高可重用性:我们对89个顶级城市的 DragonCrawl 进行了评估,DragonCrawl 在其中85个城市成功请求并完成了行程。这是Uber首次在全球85个城市成功执行像请求和完成行程这样复杂的移动测试,而无需调整代码。

  • 设备/操作系统弹性:我们在CI中使用3种不同的 Android 设备和3个不同的操作系统版本测试了 Uber 的行程流程,我们甚至还改变了其他参数,例如可用磁盘、CPU 等。DragonCrawl 成功请求并完成了跨区域的行程所有这些组合都无需对我们的代码或模型进行调整,这在传统的移动测试中并不总是能得到保证。调整测试以处理不同的屏幕尺寸/分辨率和其他设备细节是传统移动测试的一个众所周知的麻烦。


下一步是什么?

我们在2023年奠定的基础为激动人心的2024年及以后铺平了道路。我们对较小语言模型的投资产生了具有非常高质量嵌入的基础模型,以至于它解锁了如下所示的架构:

图片

图 6:未来移动测试作为由 Dragon 基础模型 (DFM) 提供支持的 RAG 应用程序

借助 Dragon 基础模型 (DFM),我们可以使用小型数据集(数百或数十个数据点)和 DFM 来创建 RAG(检索增强生成)应用程序,更准确地模拟人类如何与我们的应用程序交互。那些较小的数据集(具有口头目标和偏好)将告诉 DragonCrawl 要优化什么,而这就是它所需要的。DFM 可能是一个LLMs,但它实际上是一个奖励模型,通过采取行动来实现其目标,正如我们所看到的,其中一些行动模仿了真人会做的事情。

到2024年,我们的一大投资领域将是构建子系统,使开发人员能够将测试构建RAG,并获得在许多城市、语言中完美执行的好处,并且维护成本极低(甚至为零) 。


结论

随着生成式人工智能在过去4-6个月中取得的所有进步,还有更多的事情需要评估,以改进我们的模型和应用程序的质量。

图片

图 7:模型质量的飞轮

我们计划评估更现代的大型语言模型,以进一步提高模型的质量。模型质量的每一次提高都会增加我们可以测试的组合,减少用户遇到的错误,从而提高生产力,使开发人员能够构建新的体验,并为 DragonCrawl 提供更多的测试内容。这是一个随着模型质量启动并加速的飞轮,我们将为这种加速提供动力。

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 759968159,里面有各种测试开发资料和技术可以一起交流哦。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​​​软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值