1 使用大型语言模型增强测试
1.1 认识人工智能工具对测试和开发的影响
在过去,想要利用人工智能的个人必须具备开发、训练和部署人工智能模型的技能,或者有一个专家团队来完成这些任务,所有这些都会使在日常活动中使用人工智能成为一项昂贵而独特的工作。随着最近人工智能的进步,以及 ChatGPT 和 Gemini 等公开可用的 LLM、开源生成模型、生成式人工智能的微调和检索方法的出现,我们现在开始受益于一些人所说的人工智能民主化。
将人工智能融入我们日常工作的门槛已经大大降低。社交媒体经理现在可以使用 LLM 生成朗朗上口、引人入胜的文案,分析师可以将非结构化数据归纳为简洁明了的报告,客户支持人员只需几个简单的提示就能快速生成对客户的定制回复。LLM 的使用已不再局限于数据科学家和人工智能学者,它对我们这些从事测试和软件开发工作的人也很有利。
良好的测试有助于挑战假设,让我们的团队了解产品在特定情况下的真实表现。我们测试得越多,就学得越多。但是,正如大多数专业测试人员所证实的那样,我们永远没有足够的时间来测试我们想要的一切。因此,为了更有效地进行测试,我们会寻找各种工具和技术,从自动化测试到左移测试。LLM 提供了另一个潜在的途径,帮助我们提高测试的质量和范围,这样我们就能发现和分享更多,反过来又能帮助我们的团队进一步提高质量。
LLM 之所以如此有用,是因为它们能以一种人类易于理解的方式总结、转换、生成和翻译信息,而负责测试的专业人员也能利用这些信息来满足他们的测试需求--所有这些都可以通过简单的聊天界面或应用程序接口来实现。LLM 可以帮助我们快速创建测试自动化,或在我们自己进行测试时提供支持。如果我们掌握了正确的技能,能够识别 LLM 何时可以提供帮助并合理使用它们,我们就能开始更快、更远、更有效地进行测试。为了说明这一概念和我们在本书中学到的知识,让我们来看几个简单的例子。
1.1.1 生成数据
创建和管理测试数据是测试中最复杂的工作之一。创建真实、有用和匿名的数据可以决定测试的成败,而有效地创建数据又会耗费大量资源。LLM 能够快速生成和转换数据,加快测试数据管理流程。通过利用现有数据并将其转换为新格式或用于生成新的合成数据,我们可以利用 LLM 来帮助我们满足测试数据要求,并获得更多时间来推动测试向前发展。
1.1.2 自动测试构建
同样,LLM 的生成和转换能力也可用于创建和维护自动化过程。虽然我不建议让 LLM 完全为我们创建自动化测试,但他们可以有针对性地帮助我们快速创建页面对象、模板类、辅助方法和框架。通过结合我们的产品知识和测试设计技能,我们可以确定自动化流程中算法和结构化的部分,并使用 LLM 加快自动化流程中这些部分的速度。
1.1.3 测试设计
LLM 如何帮助我们确定和设计测试,这或许是一个较少讨论的话题。与自动化测试类似,LLM 的价值不在于完全取代我们的测试设计能力,而在于增强它们。我们可以利用 LLM 克服偏见和盲点,在当前测试设计思路的基础上拓展思路并提出建议。我们还可以总结和描述复杂的想法,使其更易于消化,从而为我们的测试想法提供跳板。
我们将在本书中探讨这样的例子以及更多,以帮助我们更好地理解何时何地可以使用 LLM,以及如何使用它们来加速测试。我们将探讨如何构建提示,以支持我们构建高质量的生产和自动化代码、快速创建测试数据,以及增强脚本测试和探索性测试的测试设计。我们还将探索如何微调我们自己的 LLM,使其成为我们的测试助手,消化领域知识并利用它来帮助指导我们构建更高质量的产品。
1.2 利用 LLM 实现价值
测试是一个协作过程,所有团队成员都有责任进行测试。我们在测试过程中的贡献因角色和经验而异,但我们都参与其中。因此,在本书中,我们将以批判的心态来对待 LLM 的使用,发现使用 LLM 来帮助增强我们所做的多种类型测试的各种方法。我们的目的是让你掌握识别和使用 LLM 的技能,以增强和加速你的测试工作,无论你是专业测试人员还是参与测试过程的开发人员,我们都可以通过建立自己与 LLM 之间的关系规则来做到这一点。
1.2.1 提供价值的模式
要充分利用 LLM,我们需要关注本书围绕的三个核心原则:心态、技术和背景.
我们将在本书的不同部分深入探讨这三个核心原则,首先从思维方式开始。不过,为了更好地理解为什么需要这些原则,让我们逐一简要讨论,以了解它们的含义以及需要它们的原因。
-
心态
这也许是三项原则中最重要的一项,因为以正确的心态对待如何利用 LLM,可以大大提高或降低其价值。拥有正确的心态意味着清楚地认识到测试的目的和价值、LLM 的能力,以及如何在两者之间建立一种关系,从而有重点、有针对性地使用 LLM。 -
技术
了解如何使用 LLM 固然重要,但我们还需要有能力以最大限度地发挥 LLM 价值的方式使用它们。就本地化语言工具而言,这意味着我们要学会如何创建和策划指令,清楚地传达我们希望本地化语言工具做什么,并确保它以有用的方式做出回应,避免误导风险。围绕 LLM 的生态系统和能力已经得到了广泛的发展,这意味着学习其他技术(例如与 LLM 的 API 平台和人工智能代理集成)可以帮助我们发现并利用 LLM 创造更多先进的机会。 -
背景
随着我们的进展,你会发现垃圾进、垃圾出的规则对 LLM 是多么适用。如果我们用一个泛化的、无语境的请求来提示 LLM,我们得到的将是一个肤浅的、无语境的响应。虽然技术可以在一定程度上帮助我们最大限度地提高 LLM 的响应速度,但难题的最后一环还是要能够为 LLM 提供足够的上下文,以便它能够根据我们的需求做出响应。正如你将了解到的,有不同的方法来实现这一点,例如检索增强生成(RAG)和微调,每种方法都有其需要考虑的挑战和需要利用的优势。
如前所述,本书在结构上对这三个原则进行了深入探讨,以帮助我们最大限度地利用 LLM。因此,让我们进一步深入探讨心态的概念,确定良好心态的含义,然后再回到技巧和背景上来。
参考资料
- 软件测试精品书籍文档下载持续更新 https://github.com/china-testing/python-testing-examples 请点赞,谢谢!
- 本文涉及的python测试开发库 谢谢点赞! https://github.com/china-testing/python_cn_resouce
- python精品书籍下载 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
- Linux精品书籍下载 https://www.cnblogs.com/testing-/p/17438558.html
1.2.2 利用人类和人工智能的能力
在本书中,你不仅会学到如何使用 LLM,还会学到如何建立一种工作实践,使我们的测试既能从 LLM 中获益,也能从我们的能力中获益。无论是否基于人工智能,任何工具的价值都不是来自其固有的功能,而是来自用户与工具之间的关系。我们可以将这种关系视为效果模型的一个区域。
这张图表明,要提高我们的影响力,就必须与注重扩展和提高我们核心能力的工具建立健康的关系。如果缺乏这种平衡,我们就会过于依赖工具或自身。我们当然可以依靠自己的能力,但受时间、注意力和偏见等因素的限制,我们的影响范围会越来越小。基本上,没有工具,我们只能做这么多。但我们也不能把所有工作都推给工具。没有个人作为核心,工具就缺乏方向。是的,工具可以自主运行,但如果它们不向人类提供反馈,就无法从中提取价值。效果区域缺少了中心。这就是为什么本书的目的是教你如何在测试中平衡使用 LLM,既注重我们识别使用 LLM 的机会的能力,也注重我们从中获取最大价值的技能。
为了帮助我们更好地理解这种关系,让我们来看一个例子:我们想为文件上传功能创建测试。首先,我们收到一个如下的用户故事:
- 作为一名律师助理,为了存储和共享法律文件,我希望能够能够安全地上传文件。
- 验收标准:
- 上传应支持以下常见文件格式: PDF、DOCX、TXT
- 最大文件大小应为 20MB
- 上传文件时,应向用户提供进度更新
- 文件上传后,最初必须只能由上传者访问
- 上传报告以及上传成功与否将保存在审核功能中。
由此,我们决定简单地依靠 LLM 来为我们生成工作--例如,发送这样的提示:为文件上传功能创建测试, https://gemini.google.com的回答如下:
向 ChatGPT 等 LLM 发送此提示时,可能会返回如下内容
乍一看,这个回复似乎令人印象深刻。LLM 向我们提供了一份要考虑的不同测试的列表,这让我们觉得我们已经拥有了开始测试所需的一切。但是,如果我们开始更仔细地考虑响应,就会发现一些问题:
- 提供了我们的用户故事不支持的格式示例。
- 有些建议很肤浅。例如,JMeter/LoadRunner在性能测试上通常没有https://locust.io/的性价比高。
- 测试用例的预期结果也很宽泛。例如,"提示信息"是什么?
LLM 的设计目的是无论用户要求它们做什么,它们都能给出响应,虽然这听起来很有用,但如果给出的指令含糊不清,就会出现问题。我们看这个例子并不是为了批评LLM的能力,而是为了帮助我们认识到,LLM的答复会根据所给的提示而变得既详细又笼统。这意味着,我们从LLM那里收到的回复是宽泛而模糊的,因为我们的提示是模糊的。由于没有仔细考虑我们想让 LLM 做什么,提示中没有任何上下文或细节,这意味着所返回的内容毫无用处--这就是典型的 “垃圾进,垃圾出 ”的例子。
这就是前面的效果图区域试图定义的内容。为了从 LLM 中获取价值,我们需要设计出清晰、符合上下文且具体的提示,这样才能从 LLM 中获取更多价值。我们不能把所有责任都推卸给工具,让它来做出我们想要的回应,而是要认识到,我们需要了解上下文,并将这种了解提炼为清晰的指令,这样才能设计出能最大限度地从 LLM 中获得回应的提示语,从而设计出更好的提示语,例如:
扮演专业软件测试员,就三个哈希值所限定的功能提出测试建议。所有测试想法都应侧重于发现影响质量特性的风险: 功能性、数据完整性和安全性###
- 作为一名律师助理,为了存储和共享法律文件,我希望能够能够安全地上传文件。
- 验收标准:- 上传应支持以下常见文件格式: PDF、DOCX、TXT- 最大文件大小应为 20MB- 上传文件时,应向用户提供进度更新- 文件上传后,最初必须只能由上传者访问- 上传报告以及上传成功与否将保存在审核功能中。
###
当发送到 LLM 时,会返回如下响应:
通过创建一个更有针对性、更符合上下文的提示,我们创建了一个能为我们的测试提供更丰富建议的响应。这不是单靠 LLM 就能实现的,而是通过我们的学习技能,将我们的上下文框定为 LLM 可以接受并迅速扩展的指令。
1.2.3 对 LLM 持怀疑态度
LLM具有很大的潜力,但它并不能解决所有问题,也不是唯一的真理之谕。我们将在第 2 章中进一步探讨 LLM 如何使用概率来确定反应,以及 LLM 如何得出与人类不同的解决方案,这就凸显了我们效应模型领域的第二个方面。我们必须用怀疑的态度来判断 LLM 的反应中哪些是有价值的,哪些是没有价值的。
盲目接受 LLM 的结果,往好了说,可能会让我们的工作进度放缓,而不是加快速度;往坏了说,可能会影响我们进行测试,从而对我们的产品质量产生不利影响。我们必须提醒自己,我们而不是LLM才是解决问题活动的主导者。有时,当我们在使用一些工具时,会感觉这些工具的交流方式非常人性化,但这样做会使我们面临上述风险。这就是为什么在我们的效果模型中,我们要利用自己的能力从 LLM 的反应中挑选出对我们有利的元素,当 LLM 的反应不令人满意时,我们要拒绝并重新评估指导 LLM 的方式。
随着本书的深入,我们将了解更多有关 LLM 及其如何为测试做出贡献的知识,我们将牢记我们的效应区域模型,以便读者能够培养在测试中使用 LLM 的能力,从而使您和您的团队能够清醒地、深思熟虑地、有价值地使用 LLM。
1.3 小结
- 大型语言模型(LLM)的工作原理是接收我们编写的提示并返回响应。
- LLMs 之所以受欢迎,是因为它们可以轻松访问强大的人工智能算法。
- LLM 可以帮助许多人胜任不同的角色,也可以帮助我们进行测试。
- 我们可以将 LLM 用于从测试设计到自动化的各种测试活动。
- 我们要避免过度使用 LLM,必须始终对它们的工作方式持批判态度。
- 使用 LLM 的成功源于我们在使用 LLM 的过程中对自身技能和能力的重视。
- 如果我们对 LLM 的提示肤浅而笼统,那么他们的反应也会千篇一律。
- 相反,我们应该利用我们的技能来理解问题并为问题定下框架,然后以此来促使LLM以最有价值的方式做出回应。
- 我们还必须对从LLM那里得到的答复持怀疑态度,以确保从他们那里得到的答复对我们有价值。