AI 辅助测试(MEAP)(一)(1)

简介: AI 辅助测试(MEAP)(一)

第一章:使用大型语言模型增强测试

本章包括

  • 探索大型语言模型如何帮助测试
  • 定义与大型语言模型合作的思维方式

在这本书中,我们将使用大型语言模型来增强和加速我们的测试活动——介绍我们自己使用这项技术的最好方式之一就是要求其中一个创建这本书的介绍:

  • 你好!我是 ChatGPT,一个由 OpenAI 设计的语言模型,用于协助各种任务和回答各种问题。
  • 关于书籍《如何利用人工智能帮助支持各种软件测试活动》,我推荐 Julian Harty 和 Mahesh Sharma 的《AI 驱动测试:为您的软件测试实践增加智能》。
  • 本书探讨了人工智能(AI)技术在软件测试中的应用,以及如何帮助提高测试流程的效率和效果。作者涵盖了与 AI 驱动测试相关的各种主题,包括机器学习、自然语言处理和计算机视觉等。
  • 此外,该书包括案例研究、实际示例和在不同情境中实施 AI 驱动测试的最佳实践。对于软件测试人员、开发人员以及任何希望利用人工智能提高软件产品质量的人来说,这是一个宝贵的资源。

这个看起来像是人类可能写的人工生成的回答是通过向大型语言模型或 LLM 发送一个被称为提示的一句话指令而创建的:

ChatGPT, please introduce yourself and a book about how AI can be used to help support various software testing activities.

定义 LLM 的功能和潜力既简单又困难,而从这些工具中获得最大利益则是在两者之间找到平衡。表面上看,LLM 只是简单地接受用户的指令,并用自然语言回答。但这个简单的解释并不能充分说明 LLM 能为我们的测试带来的潜力,也不能解释我们必须克服的挑战,以从中获得最大利益。因此,在我们开始 LLM 和测试的旅程之前,让我们了解一下 LLM 如何帮助我们以及我们需要注意什么才能成功使用它们。

1.1 认识 AI 工具对测试和开发的影响

在过去,想要利用 AI 的个人需要具备开发、训练和部署 AI 模型的技能,或者可以访问一个可以为他们做这些事情的专家团队,所有这些都使得在日常活动中使用 AI 成为一项昂贵且独家的事业。但随着人工智能的最新进展,特别是大型语言模型,我们现在开始受益于一些人称之为 AI“民主化”的东西。

将人工智能整合到我们日常工作中的障碍已经大大降低。社交媒体经理现在可以使用 LLMs 生成引人注目且吸引人的文字,分析人员可以将非结构化数据总结为清晰简洁的报告,客户支持代理可以通过简单的提示快速为客户生成定制回复。LLMs 的潜力不仅供数据科学家和人工智能学者利用,对于我们这些从事测试和软件开发工作的人来说也是如此。

良好测试的价值在于它有助于挑战假设,并教育我们的团队,让我们真正了解我们的产品在特定情况下的表现。我们测试得越多,我们就能学到更多。但是,正如大多数专业测试人员所证明的那样,我们永远没有足够的时间来测试我们想要测试的所有内容。因此,为了帮助我们更有效地测试,我们寻求从自动化到左移测试的工具和技术。LLMs 为我们提供了另一种潜在途径,帮助我们增强和加速测试,以便我们能够发现和分享更多信息,进而帮助我们的团队进一步提高质量。

使 LLMs 如此有用的是,它们以易于人类理解的方式总结、转换、生成和翻译信息,而我们,作为负责测试的个人,可以将其用于我们的测试需求——所有这些都可以通过简单的聊天界面或 API 获得。从帮助我们快速创建测试自动化到在我们自己进行测试时提供支持,如果我们掌握了识别 LLMs 何时可以帮助我们,并明智地使用它们,那么我们就可以开始更快、更远、更有效地进行测试。为了帮助说明这一概念,并让我们对我们将在本书中学到的内容有所了解,让我们看一些快速的例子。

数据生成

创建和管理测试数据可能是测试中最复杂的方面之一。创建逼真、有用和匿名化的数据可能决定测试的成败,而要有效地进行此操作可能会耗费大量资源。LLMs 提供了快速生成和转换数据的能力,加速了测试数据管理过程。通过将现有数据转换为新格式,或者使用它来生成新的合成数据,我们可以利用 LLMs 来帮助我们满足测试数据需求,并为我们提供更多时间推动测试进程。

自动化测试构建

类似地,LLMs 生成和转换的能力可以在创建和维护自动化过程中使用。虽然我不建议完全让 LLMs 为我们创建自动化测试,但它们可以以有针对性的方式帮助我们快速创建页面对象、样板类、辅助方法、框架等。结合我们对产品的知识和测试设计技能,我们可以确定自动化过程中算法性和结构性部分,并使用 LLMs 加速自动化过程的这些部分。

测试设计

也许一个不太常被讨论的话题是 LLM 如何在识别和设计测试过程中帮助我们。与自动化测试类似,LLM 的价值不在于完全替代我们的测试设计能力,而在于增强它们。我们可以利用 LLM 来克服偏见和盲点,通过利用它们来扩展和建议基于我们可能已有的当前测试设计思想的想法。我们还能够以更易理解的方式总结和描述复杂的想法,以便我们从中获得测试想法的跳板。

这些示例等将在本书中探讨,以帮助我们更好地理解 LLM 何时何地可以使用,以及如何以加速我们的测试的方式来使用它们,而不是阻碍它们。我们将探讨如何建立提示来帮助我们构建高质量的生产和自动化代码,快速创建测试数据,并增强我们的脚本和探索性测试的测试设计。我们还将探讨如何调整我们自己的 LLM,使其作为我们测试的助手,消化领域知识并将其用于帮助我们构建更高质量的产品。

1.2 利用 LLM 提供价值

测试是一个协作过程,团队的所有成员都对测试负责。我们如何为测试过程做出贡献取决于我们的角色和经验,但我们都参与其中。因此,在整本书中,我们将以批判的心态来使用 LLM,探索我们可以利用 LLM 来帮助增强我们所做各种类型的测试的不同方式。我们的意图是给你提供技能,让你能够识别和利用 LLM 来增强和加速你的测试,无论你是在专业测试角色还是作为为测试过程做出贡献的开发人员,我们都可以通过建立一些规则来规范我们与想要使用的 LLM 之间的关系。

1.2.1 发挥人类和人工智能能力的优势

在整本书中,我们不仅将学习如何使用 LLM,还将学习如何建立一个工作实践,使我们的测试既能从我们的能力中受益,也能从 LLM 中受益。任何工具的价值,无论是基于人工智能还是不是,都不是来自其固有特性,而是来自用户与工具之间的关系。我们可以将这种关系视为一种区域效应模型,如图 1.1 所示。

图 1.1 工具如何增强和扩展测试的范围的概要

这张图表所展示的是,为了增加我们的影响力,我们需要与专注于扩展和增强我们核心能力的工具建立健康的关系。没有这种平衡,我们会过度依赖工具或自己。我们当然可以依靠我们的能力,但我们的影响范围将更小,受到时间、注意力和偏见等约束的限制。基本上,没有工具,我们只能做到这么多。但同样地,我们不能把所有工作都推给工具。没有一个个体作为核心,工具就缺乏方向。是的,工具可以自主运行,但如果它们没有向人类提供反馈,那么它们就没有价值。影响范围缺少中心。协同作用共生 这两个词可能同样具有人工智能那样的负载,但这本书的目的就是要帮助你理解这一点。

为了帮助我们更好地理解这种关系,让我们考虑一个例子,我们想为文件上传功能创建测试。首先,我们收到了一个用户故事,就像这样:

As a paralegal
In order to store and share legal documents
I want to be able to securely upload documents
Acceptance criteria:
  * Upload should support the following common file formats: PDF, DOC, DOCX, TXT
  * The maximum file size should be 20MB
  * When a document is uploaded it should give a progress update to the user
  * Once uploaded, the document must initially be only accessible to the person who has uploaded it
  * A report of the upload and whether it was successful or not will be stored in the auditing feature

由此,我们决定简单地依赖 LLM 来为我们生成工作,例如,发送这样一个提示:

Create tests for a file upload feature

将此提示发送给像 ChatGPT 这样的 LLM 可能会返回类似于以下内容:

1\. Test for File Upload Functionality:
    Test Case 1.1: Upload a Valid File
        Input: Choose a file with a valid format (e.g., .jpg, .pdf).
        Expected Outcome: The file is successfully uploaded, and a confirmation message is displayed.
    Test Case 1.2: Attempt to Upload an Invalid File
        Input: Choose a file with an invalid format (e.g., .exe, .html).
        Expected Outcome: An error message is displayed, indicating that the file format is not supported.
2\. Test for File Size Limit:
    Test Case 2.1: Upload a File Below the Size Limit
        Input: Choose a file smaller than the maximum allowed size.
        Expected Outcome: The file is successfully uploaded, and a confirmation message is displayed.
    Test Case 2.2: Attempt to Upload a File Exceeding the Size Limit
        Input: Choose a file larger than the maximum allowed size.
        Expected Outcome: An error message is displayed, indicating that the file exceeds the maximum size limit.
3\. Test for File Overwrite Protection:
    Test Case 3.1: Upload a File with the Same Name as an Existing File
        Input: Upload a file with a name that matches an existing file in the system.
        Expected Outcome: An error message is displayed, indicating that a file with the same name already exists.
4\. Security Tests:
    Test Case 4.1: Attempt to Upload a Malicious File (e.g., virus)
        Input: Upload a known malicious file.
        Expected Outcome: The system should detect the malicious file and prevent its upload, displaying a security warning.
5\. UI and User Experience Tests:
    Test Case 5.1: Check for a User-Friendly Interface
        Input: Use the file upload feature and evaluate the user interface for clarity and ease of use.
        Expected Outcome: The interface should be intuitive, with clear instructions and feedback for users.
    Test Case 5.2: Check for Proper Error Messages
        Input: Attempt various erroneous actions during the file upload process.
        Expected Outcome: Error messages should be descriptive, helping users understand and resolve issues.
6\. Integration Tests:
    Test Case 6.1: Check File Upload with Other Features
        Input: Test file uploads in conjunction with other features that depend on uploaded files (e.g., image processing, document storage).
        Expected Outcome: Ensure the uploaded files are correctly processed and integrated with other system components.
7\. Performance Tests:
    Test Case 7.1: Upload a Large Number of Files Concurrently
        Input: Simulate multiple users uploading a large number of files simultaneously.
        Expected Outcome: The system should handle concurrent uploads without significant performance degradation or crashes.
8\. Stress Tests:
    Test Case 8.1: Upload Files Continuously for an Extended Period
        Input: Continuously upload files for an extended period to assess system stability.
        Expected Outcome: The system should not experience memory leaks, crashes, or performance degradation during this stress test.

乍一看,回答似乎令人印象深刻。LLM 为我们提供了一系列不同的考虑测试,这给了我们开始测试的印象。然而,如果我们开始仔细考虑这个回答,我们开始注意到问题:

  • 测试用例 1.1 建议使用有效格式进行测试,但提供了我们用户故事不支持的格式示例。
  • 从第 4 点开始的建议太肤浅了。例如,安全测试 提供了一个插入恶意文件的测试,但其他什么也没有。肯定还有其他需要考虑的安全问题吧?
  • 期望结果对于每个测试用例也是非常宽泛的。例如,这句话是什么意思:Error messages should be descriptive, helping users understand and resolve issues.

LLM 设计的方式是给出一个回应,不管它被要求做什么,虽然这听起来可能很有用,但当它接收到的指令模糊时,这就成为了问题。我们所看到的例子并不是用来批评 LLM 的能力,而是为了帮助我们认识到 LLM 的响应将像它收到的提示一样详细或通用。这意味着我们从 LLM 收到的回应是宽泛而模糊的,因为我们的提示也是模糊的。通过不去思考我们想要让 LLM 做什么,提示中缺乏任何上下文或细节意味着返回的内容相当无用——这是经典的垃圾输入,垃圾输出的例子。

这就是我们领域效应试图定义的内容。要从 LLMs 中获得价值,我们需要设计清晰、上下文相关且具体的提示,以便我们可以从 LLMs 中提取更多的价值。与其将所有责任都交给一个工具来创建我们所期望的响应,我们更应该欣赏我们对于上下文的理解和将这种理解转化为清晰指令的能力是需要的,这样才能创建出一个可以最大限度地从 LLM 中获得响应的提示,从而导致写作更好的提示,例如:

Act as a professional software tester and suggest test ideas for the feature delimited by three hashes. All test ideas should be focused on discovering issues that impact the quality characteristics: Functionality, Data Integrity and Security
###
As a paralegal
In order to store and share legal documents
I want to be able to securely upload documents
Acceptance criteria:
  * Upload should support the following common file formats: PDF, DOC, DOCX, TXT
  * The maximum file size should be 20MB
  * When a document is uploaded it should give a progress update to the user
  * Once uploaded, the document must initially be only accessible to the person who has uploaded it
  * A report of the upload and whether it was successful or not will be stored in the auditing feature
###

当发送给 LLM 时,返回一个代码示例如下:

Functionality:
    Format Compatibility Testing:
        Verify that the upload feature supports the following file formats: PDF, DOC, DOCX, and TXT.
        Attempt to upload files in various formats and ensure that the system handles them correctly.
    File Size Limitation Testing:
        Test whether the system enforces a maximum file size limit of 20MB during the upload process.
        Attempt to upload files larger and smaller than 20MB to validate the system's handling of these cases.
    Progress Update Testing:
        Check that users receive real-time progress updates while a document is being uploaded.
        Verify that these updates are clear and provide meaningful information to the user.
Data Integrity:
    Document Content Verification:
    Upload files with known content and compare the content of the uploaded document with the original.
    Ensure that the content remains intact and no data corruption occurs during the upload process.
    Document Privacy:
        Test that uploaded documents are initially only accessible to the person who uploaded them.
        Attempt to access the uploaded documents using another user's account to ensure that access control is enforced.
    Data Auditing Verification:
        Confirm that the system accurately records all uploads in the auditing feature.
        Verify that the audit logs include information such as the timestamp, uploader, document name, and whether the upload was successful.
Security:
    File Type Security Testing:
    Attempt to upload files with malicious content, such as scripts or malware, and ensure that the system detects and rejects them.
    Access Control Testing:
        Validate that the system properly enforces access control by ensuring that other users cannot access the documents uploaded by someone else.
    Secure Data Transmission:
        Ensure that the document upload process uses secure communication protocols (e.g., HTTPS) to protect data during transmission.
    User Authentication and Authorization:
        Verify that the system correctly authenticates and authorizes users before allowing them to upload or access documents.
    Secure Data Storage:
        Assess how the system stores uploaded documents to ensure that they are encrypted or adequately protected against unauthorized access or data breaches.
    Session Management:
        Test how the system manages user sessions, ensuring that sessions are terminated after a period of inactivity to prevent unauthorized access.

通过创建更加专注和上下文的提示,我们创造了一个提供更丰富建议范围的响应,用于我们的测试。这不是单靠 LLM 就能实现的,而是通过我们的技能与 LLM 的协同作用,将我们的上下文转化为 LLM 可以接受并快速扩展的指令。

活动

尝试一下本章探讨过的示例提示,看看你收到了什么响应。要设置 LLM,请阅读附录 A,其中介绍了如何设置并向 ChatGPT 发送提示。

1.2.2 对 LLMs 持怀疑态度

尽管 LLMs 的潜力可以说很大,但我们应该警惕地对待它们的能力。例如,考虑一下 ChatGPT 给我们推荐这本书的介绍。它自信地向我们推荐,让我们阅读AI-Driven Testing: Adding Intelligence to Your Software Testing Practice. 问题在于,这本书根本不存在,也从未由 Julian Harty 和 Mahesh Sharma 编写过。LLM 只是凭空捏造了这个标题。

LLMs 提供了很大的潜力,但它们并不是每个问题的解决方案,也不是唯一的真理之源。我们将在第二章进一步探讨 LLMs 如何使用概率来确定响应,但现在重要的是要明确 LLM 如何得出解决方案并不与我们人类的方式相同,这突显了我们领域效应模型的第二个方面。我们必须运用怀疑精神来确定 LLM 响应中哪些内容有价值,哪些没有价值。

盲目接受 LLM 输出的内容,充其量是将我们置于事实上减慢我们工作速度的风险中,而不是加速工作——最坏的情况下,它会影响我们进行可能对产品质量产生不利影响的测试。我们必须提醒自己,我们而不是 LLMs,是引领解决问题活动的人。有时候与以一种感觉上非常人性化的方式进行沟通的工具一起工作会很困难,但这样做会使我们暴露于上述风险之中。这就是为什么在我们的领域效应模型中,我们利用我们的能力来挑选和选择 LLM 响应中对我们有益的元素,并拒绝并重新评估当 LLM 以一种不令人满意的方式响应时我们如何指示 LLM。

随着我们在书中的进展,了解更多关于 LLM 以及它们如何对测试有所贡献的知识,我们会牢记我们的影响范围模型,这样你,读者,将能够以一种冷静、考虑周到且对你和你的团队有价值的方式使用 LLM 进行测试。

1.3 总结

  • LLM 通过接受我们编写的提示来工作,并返回一个回应。
  • LLM 的流行之处在于它们提供了访问强大 AI 算法的简易方式。
  • LLM 已经帮助了许多不同角色的人,也可以帮助我们进行测试。
  • 我们可以使用 LLM 来辅助我们进行从测试设计到自动化等广泛范围的测试活动。
  • 我们要避免过度使用 LLM,并始终对它们的工作方式持批判态度。
  • 成功使用 LLM 来自于我们欣赏自己在使用它们的过程中带来的技能和能力。
  • 如果我们对 LLM 的提示浅显而普通,我们得到的回应也会是一样的。
  • 相反,我们应该运用我们的技能来理解和界定问题,并利用这一点促使 LLM 以最有价值的方式作出回应。
  • 我们还必须对从 LLM 获得的回应持怀疑态度,以确保我们从 LLM 那里得到的回应对我们有价值。

第二章:大型语言模型和提示工程

本章包括

  • 概述大型语言模型的基本工作原理
  • 了解使用大型语言模型的风险
  • 定义提示工程
  • 通过提示工程进行实验以返回各种输出
  • 用提示工程解决问题

在上一章中,我们学到了花时间熟悉新工具很重要,而且这种心态我们将在本章中采用。在整本书中,我们将探讨如何专门使用生成式 AI 工具,例如 Open AI 的 ChatGPT 和 GitHub Copilot,它们是构建在大型语言模型或 LLMs 上的。虽然 AI 在测试中有许多用途,但 LLMs 之所以如此有趣,是因为它们适应不同情况的能力,因此它们越来越受欢迎。因此,在我们看如何将 LLM 工具应用到我们的日常测试之前,让我们先了解一下 LLMs 是什么,它们是如何工作的,以及通过学习提示工程的概念,如何从中获得最大的好处。

什么使得像 ChatGPT 这样的 LLM 主导了 2023 年的技术头条?考虑一下我与 ChatGPT 的这次互动:

Mark: Hello ChatGPT, can you introduce yourself briefly?
ChatGPT: Of course! I'm ChatGPT, an AI language model developed by OpenAI. I'm based on the GPT-3.5 architecture, which means I'm designed to understand and generate human-like text based on the prompts I receive. I've been trained on a diverse range of data sources, including books, articles, websites, and other text documents, up until September 2021\. I can assist you with a wide array of topics, including answering questions, providing explanations, creative writing, and much more. Just let me know how I can help you!
Mark: Nice to meet you.
ChatGPT: Nice to meet you too! I'm here to assist you with any questions or tasks you have. How may I help you today?
Mark: I'm just getting to know you.
ChatGPT: That's perfectly fine! Feel free to ask me anything you'd like to know, whether it's about my capabilities, how I work, or anything else you're curious about. I'm here to provide information and help you out to the best of my abilities. Fire away with your questions!

基于这次快速的“对话”,我们可以看出:

  • 我可以用自然语言与 ChatGPT 进行交互。要从 ChatGPT 获取结果并不需要传统的编程经验。
  • ChatGPT 的输出也是用自然语言。它易于理解和回应。

LLM 的倡导者庆祝这些类型的人工智能工具已经使 AI 的使用实现了民主化,允许任何人使用它们来获取结果。然而,这种民主化是一把双刃剑。我们与 LLMs 互动的方式可能会让我们产生错觉,认为我们正在和一个像我们人类一样推理的机器对话。但是做出这样的假设可能会影响我们充分利用 LLM 的能力。因此,为了更好地利用诸如 ChatGPT 之类的工具,了解它们的工作方式(至少在外行人的看法下)有助于更好地理解它们如何适应我们的测试活动,并如何从中获得最大价值。

2.1 大型语言模型,解释

一个相对缺乏构建 AI 系统经验的人如何解释复杂的 LLM 系统的工作方式?幸运的是,在 Computerphile 视频“AI Language Models & Transformers”(www.youtube.com/watch?v=rURRYI66E54),Rob Miles 提供了一个示例,可以帮助我们基本了解 LLMs 的工作原理。(我强烈推荐观看他关于 AI 的所有视频。)

拿出你的手机并打开一个消息应用程序,或任何导致键盘出现的其他应用程序。在键盘上方,你可能会看到一系列建议插入到消息中的单词。例如,我的键盘为我提供了这些建议:II amThe。选择其中一个选项,例如 I am,会导致建议更新。对我来说,它提供了 awayaway fornow 的选项。再次选择 away for 选项将更新可供选择的选项。那么键盘是如何知道应该显示哪些选项以及不显示哪些选项呢?

在你的键盘中是一个与 LLM 类似的 AI 模型。这种描述是简化的,但在其核心上,你手机上的键盘正使用与 LLM 相同的机器学习方法,通过利用概率。语言是一套复杂且流动的规则,这意味着试图明确规定关系几乎是不可能的。因此,模型被训练在大规模数据集上,以隐含地学习语言中的关系,并创建一个概率分布,用来预测下一个单词可能是什么。这可以通过可视化键盘示例中提供的选项最好的描述,如图 2.1 所示。

图 2.1 行动中的概率分布

正如我们在选择术语 I am 时所见,键盘中的模型已经被训练为对大量单词进行概率分配。其中一些在 “I am” 之后有很高的概率,比如 “away”,而一些则概率较低,比如 “sandalwood”。如前所述,这些概率来自已经完成训练过程的模型,称为无监督学习,其中大量数据被发送给一个算法进行处理。正是通过这个训练过程,一个模型被创建,其中包含复杂的权重和平衡,使模型具有预测能力。

监督学习和无监督学习

在训练 AI 时,使用的两个主要技术是监督学习和无监督学习。使用哪种学习方法将决定数据如何被结构化并发送给算法。监督学习使用已被组织、标记并与输出配对的数据。例如,一个医学数据集可能包含标记的数据,包括 BMI、年龄和性别,例如,这与标记的结果配对,例如他们是否患有特定疾病,例如心脏病或中风。无监督学习,另一方面,使用未标记且没有输出数据的数据。其思想是,当算法在这种类型的数据上进行训练时,它会学习数据中的隐含模式。

如果你在键盘上玩弄预测功能,很可能输出与我的不同,即使我们使用的是相同的手机和操作系统。这是因为一旦模型被训练并在我们的手机中使用,它仍然会受到我们在手机上输入的内容的微调影响。我出差工作,所以我必须让人们知道我何时离开和何时可用。(这也许是对我工作与生活的平衡的一种谴责!)因此,“我是”和“离开”这样的术语具有增加的概率,因为它们是我更经常使用的词汇。这被称为人类反馈强化学习,或 RLHF。

再次,将手机上的预测消息与大型语言模型进行比较是一个过于简化的比较,但这种比较是成立的。大型语言模型还使用非监督学习和 RLHF。然而,不同之处在于,虽然手机上的 AI 模型可以查看可能是最近输入的五个词来预测下一个词,但大型语言模型使用了尖端技术,例如:

  • 生成预训练变换器(这是 ChatGPT 中 GPT 缩写的含义)
  • 使用数千台服务器的强大硬件基础设施
  • 在规模上训练数据将使我们的简单键盘模型所接触到的培训数据相形见绌

我们需要了解这些要点的复杂性吗?实际上不需要,但这有助于我们欣赏大型语言模型的一个关键方面。大型语言模型的输出,无论多么强大,都是概率性的。大型语言模型不是信息的存储库,其中没有像我们在更广泛的互联网上看到的结构化知识。这意味着它做出结论的方式不同于人类做出结论的方式(概率而不是经验),这就是它们如此强大但如果我们对如何使用它们不加警惕的话也是有风险的原因。

2.2 避免使用大型语言模型的风险

有一个 AI 预测接下来的一个词并不是一件容易的事情,尽管当前的大型语言模型的能力有了爆炸性的增长,但我们需要意识到其中的风险。让我们来看看其中的一些。

2.2.1 幻觉

文本预测的挑战在于确保大型语言模型的输出是合乎逻辑并且根植于现实。例如,在第一章中,当我要求 ChatGPT 为这本书写个介绍时,它分享了以下内容:

Regarding the book, “How AI can be used to help support various software testing activities,” I would recommend “AI-Driven Testing: Adding Intelligence to Your Software Testing Practice" by Julian Harty and Mahesh Sharma.

最初,在开发大型语言模型时,它们的输出并不合乎逻辑。文本可以读懂,但缺乏结构或语法上的意义。如果我们阅读这个例子,它解析得非常好,而且有意义。然而,正如我所提到的,ChatGPT 描述的这本书并不存在。在大型语言模型的上下文中,这被称为幻觉。大型语言模型能够清晰地输出一个陈述,从而赋予它一些权威性,但所写的是错误的。

为什么 LLM 会产生幻觉并不完全清楚。与 LLM 合作的一个挑战是它们的行为就像一个黑匣子。很难监控 LLM 是如何得出特定结论的,这又加剧了它的不确定性。仅仅因为我得到了一个包含幻觉的输出,并不意味着其他人将来也会得到相同的结果。(这就是强化学习与人类反馈(RLHF)帮助对抗幻觉的地方:我们可以告知模型其输出是否是错误的,它将从中学习)。

幻觉的风险意味着我们在解释 LLM 输出时必须始终保持一种怀疑的态度。我们需要注意,LLM 返回的内容是具有预测性质的,并不总是正确的。我们不能因为一个工具表现出模仿人类行为的方式就关闭我们的批判性思维。

2.2.2 数据来源

对于大多数 LLM 用户来说,对于模型确切工作方式的不了解对我们来说并不是唯一的黑匣子,还有它所训练的数据。自 ChatGPT 爆红以来,围绕数据所有权和版权的讨论日益加剧。公司如 X(前身为 Twitter)和 Reddit 指责 OpenAI 大规模盗用了他们的数据,并且在撰写本文时,一群作者已经对 OpenAI 提起了集体诉讼,指控该公司通过训练模型侵犯了他们的版权(www.theguardian.com/books/2023/jul/05/authors-file-a-lawsuit-against-openai-for-unlawfully-ingesting-their-books)。

这些争论的结果尚未见分晓,但如果我们把这个话题带回软件开发的世界,我们必须注意 LLM 已经训练过的材料。例如,ChatGPT 曾经在发送特定短语时返回荒谬的回复,这完全是因为它曾经受过来自 r/counting 子论坛的数据训练,该数据在表面上看起来似乎也是毫无意义的。您可以在 Computerphile 了解更多关于这种怪异行为的信息(www.youtube.com/watch?v=WO2X3oZEJOA)。如果 LLM 受到垃圾数据的训练,它将输出垃圾。

当我们考虑到像 GitHub Copilot 这样的工具时,就变得非常重要了。例如,Copilot 使用了 ChatGPT 使用的相同的 GPT 模型,通过使用 GitHub 存储的数十亿行代码来进行微调,以便在我们开发代码库时充当助手并提供建议代码片段。我们将在后续章节中探讨如何充分利用 Copilot,但我们应该对其建议持批判态度,不能盲目接受它提供的一切建议。为什么呢?问问自己,你对过去所创造的代码满意吗?你相信别人所创造的所有代码吗?如果有大量的工程师往往采用不好的编程模式,那么这就是 Copilot 所训练的。这个观点有些夸张,因为有很多优秀的开发人员和测试人员在做出很好的工作,而 Copilot 的训练也基于这些好的工作。但这是一个值得思考的思维实验,以确保我们记住在使用 LLMs 构建应用程序时,驾驶座位上的是谁。

2.2.3 数据隐私

我们需要关注 LLM 的输出内容,同样也需要考虑我们输入给它们的内容。面临问题时,与 LLMs 分享材料以寻找答案的冲动会很大。但我们必须问问自己,我们发送的数据存储在哪里?如前所述,LLM 持续通过 RLFH 反馈进行调整。OpenAI 和 GitHub 等公司将获取我们分享的信息,存储并用于未来的模型训练(GitHub 虽然提供一些隐私控制机制来限制其可以存储的内容)。

对于那些希望保持其知识产权私有的公司(或我们自己),这可能会引起问题。以三星为例,其员工通过使用 ChatGPT 意外泄露了机密材料,TechRadar 对此进行了描述:

公司允许其半导体部门的工程师使用 AI 编写器来帮助修复源代码中的问题。但在此过程中,工作人员输入了机密数据,如新程序的源代码本身和与其硬件有关的内部会议笔记数据。

你可以在 www.techradar.com/news/samsung-workers-leaked-company-secrets-by-using-chatgpt 上阅读相关详情。

随着组织对 LLM 的采用不断增加,我们可能会看到一些限制我们可以和不能使用 LLM 的政策的增加。有些组织可能禁止使用第三方 LLM,而有些组织则选择培训和部署自己的内部 LLM 供内部使用(这是本书第三部分要讨论的话题)。这些决策的结果将高度依赖上下文,但它们将影响我们使用何种类型的 LLM 以及什么数据可以发送和不能发送,这也强调了我们需要注意发送给 LLM 的内容。

还要重视客户隐私,因为我们有责任不仅对我们工作的公司(特别是那些签署了保密协议的公司)负责,还对我们的用户负责。我们有法律和道德义务保护用户数据不被传播到无法监督的地方。

总之,虽然 LLM 提供了丰富的机会,但我们必须避免将它们拟人化的陷阱。将 LLM 视为像我们人类一样得出结论的方式是错误的。这可能会使我们对输出产生一种危险的信任,并且可能意味着我们没有充分利用它们。但是,如果我们学会利用 LLM 在指导它们时的概率性质,我们可以增加创建能够帮助我们提高效率的输出的机会,而这正是提示工程可以帮助我们的地方。

2.3 使用提示工程改进结果

我们正在使用自然语言提示 LLM 返回所需的结果,但由于它们是概率性的,我们可以以与与人类正常交流不同的方式与它们交流。随着 LLM 的发展,出现了一个新的工程领域,被称为提示工程,其中包含一系列我们可以使用的模式和技术,以增加我们从 LLM 获得所需输出的可能性。

什么是提示?

在本书中,我们将经常使用术语提示,因为这将是我们与 LLM 进行通信的主要方式。当我们使用术语提示时,我们只是指发送给 LLM 的自然语言输入。例如,在本章的第一个示例中,我发送了以下提示:

Hello ChatGPT, can you introduce yourself briefly?

这促使 LLM 向我返回了一个响应。

在接下来的章节中,我们将大量使用提示工程来触发 LLM 为各种测试活动提供一系列有用的内容。但在我们开始之前,值得学习提示工程的基础知识,以便我们可以看到如何构建提示以最大化 LLM 的输出。

为了帮助我们更好地理解什么是提示工程,考虑发送给 LLM 的这两个提示。第一个是一个普通的问题:

What risks should I test for when testing a Contact Us form?

第二个是一个更详细的提示:

Assume the role of a professional software tester and suggest a list of risks for a Contact Us form using the following constraints:
# Focus on the quality characteristics of accessibility, compliance and usability
# Number each risk
# Provide which quality characteristic the risk relates to
# Use no more than 30 words to describe each risk
For example:
1\. Semantic structure - Accessibility  - The HTML structure of the form should follow WCAG A standards

比较两者,我们可以看到第二个示例更加详细,具有明确的请求和示例来概述我们可能期望 LLM 返回的内容。尽管意图相似,但每个的输出却截然不同。

比较第一个示例的输出:

Validation and Error Handling: Verify that the form correctly validates user input, such as email addresses, phone numbers, and required fields. Test for appropriate error messages when users submit incorrect or incomplete information.
Security: Ensure that the contact form is secure and protected against common vulnerabilities such as cross-site scripting (XSS) and SQL injection attacks. Validate that the form sanitizes or escapes user input to prevent malicious code execution.
Usability: Test the form's usability by evaluating factors such as the clarity of form fields, user instructions, and overall user experience. Make sure the form is intuitive, easy to navigate, and visually appealing.

对第二个示例进行对比:

1\. Keyboard accessibility - Accessibility - Ensure the form can be easily navigated and filled out using only a keyboard.
...
6\. Consistent design - Usability - Verify that the form follows a consistent design pattern and matches the overall website design.
...
13\. Consent checkboxes - Compliance - Ensure any consent checkboxes or privacy policy links are clearly presented and function correctly.

想象一下,我们想要使用每个示例中提出的风险来指导我们的测试。第一个示例输出的建议模糊而抽象。我们仍然需要做大量工作来分解大主题,例如安全风险,而对于第二个示例,我们有具体的可操作风险,可以轻松使用。而使用 LLM 等工具的目标是减少工作量,而不是增加。

我们的第二个提示产生了更好的结果,因为它给出的指示经过了考虑,而且是详细和清晰的,这正是提示工程的核心所在。尽管两个提示都使用自然语言,但是在提示工程中,我们清楚地了解了 LLM 的工作原理以及我们希望它返回什么,从而仔细思考如何编写提示以最大程度地实现预期结果。在使用提示工程时,我们意识到,虽然 LLM 以简单的语言进行沟通,但它处理我们的请求的方式与人类可能不同,这意味着我们可以采用特定的技术来引导 LLM 朝着我们希望的方向发展。

AI 辅助测试(MEAP)(一)(2)https://developer.aliyun.com/article/1516292

相关文章
|
1天前
|
机器学习/深度学习 人工智能 安全
2024年AI辅助研发趋势
2024年AI辅助研发趋势
10 0
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
探索软件测试中的AI应用
【6月更文挑战第13天】随着人工智能技术的飞速发展,其在软件测试领域的应用也日益广泛。本文将深入探讨AI在软件测试中的具体应用,包括自动化测试、缺陷预测、性能优化等方面,旨在为读者提供一个全新的视角来理解AI技术如何改变传统的软件测试流程,提高测试效率和质量。
|
2天前
|
机器学习/深度学习 敏捷开发 人工智能
探索软件测试中的AI辅助技术
【6月更文挑战第12天】在软件开发生命周期中,测试环节是确保产品质量的关键环节。随着人工智能技术的飞速发展,AI辅助的软件测试方法正在改变传统的测试流程。本文将探讨AI如何优化测试过程,提高缺陷检测的准确性和效率,并预测未来AI在软件测试领域的应用趋势。
9 1
|
3天前
|
人工智能 算法 测试技术
探索AI在软件测试中的应用与挑战
【6月更文挑战第11天】本文探讨了人工智能(AI)技术在软件测试领域的应用及其面临的挑战。通过分析AI技术的优势和局限性,文章旨在为读者提供一个全面的视角,以理解AI如何改变传统的软件测试流程,并预测未来可能的发展趋势。
|
5天前
|
机器学习/深度学习 人工智能 算法
探索软件测试的新时代:AI与自动化的融合
【6月更文挑战第9天】本文将探讨软件测试领域内的最新发展趋势,特别是人工智能(AI)和自动化技术的融合如何重新定义了软件测试的实践。我们将分析这些技术如何提高测试效率、准确性和可靠性,以及它们对测试工程师角色的影响。
|
8天前
|
机器学习/深度学习 人工智能 算法
探索软件测试中的AI应用
【6月更文挑战第6天】随着人工智能的不断进步,它在软件测试领域的应用也日益广泛。本文将深入探讨AI在软件测试中的角色,以及如何利用这些技术提升测试效率和质量。通过具体案例分析,我们将揭示AI技术如何帮助测试人员更快地识别缺陷,预测潜在的错误,并提供自动化测试解决方案。
|
9天前
|
机器学习/深度学习 人工智能 算法
软件测试的未来:AI和自动化的融合
【6月更文挑战第5天】在这篇文章中,我们将探讨软件测试的未来,特别是AI和自动化如何改变这个领域。我们将讨论这些技术如何提高测试效率,减少错误,并帮助开发人员更快地发布高质量的软件。
15 0
|
10天前
|
机器学习/深度学习 人工智能 算法
探索软件测试中的AI应用
【6月更文挑战第4天】本文探讨了人工智能(AI)在软件测试领域的应用,分析了AI技术如何提高测试效率和准确性。通过实例分析,文章展示了AI在自动化测试、缺陷预测、测试用例生成等方面的优势,并讨论了实施AI技术时可能遇到的挑战。
|
11天前
|
机器学习/深度学习 人工智能 算法
探索软件测试的未来:AI与自动化的融合
【6月更文挑战第3天】随着人工智能和自动化技术的不断进步,软件测试领域正经历着一场革命。本文将探讨这两种技术如何相互补充,提高测试效率和质量,以及它们对未来软件测试实践的潜在影响。
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
深入探索软件测试:策略、工具与未来趋势
【5月更文挑战第38天】 在软件开发的生命周期中,测试环节扮演着至关重要的角色。随着技术的不断进步和市场需求的多样化,传统的测试方法已逐渐不能满足现代软件项目的需求。本文旨在提供一个全面的软件测试概述,包括最新的测试策略、常用工具以及预测未来的发展趋势。通过分析自动化测试的效益、持续集成的重要性以及人工智能在测试中的应用,文章将帮助读者构建一个更高效、更智能的软件测试环境。

热门文章

最新文章