生成式人工智能在软件开发中的应用——自动化测试与质量保证

243 阅读22分钟

测试与质量保证(QA)通常是新软件代码在部署到生产环境之前必须通过的最后一道关卡。其最终目标是发现那些可能在代码审查(如上一章所述)中漏掉的代价高昂的缺陷或其他突出问题,避免这些问题进入生产环境。

QA 过程发生在代码开发、审查并获准合并到代码库之后。测试和 QA 这两个概念有时会被混淆,部分原因是相关岗位在不同公司被称为测试工程师或 QA 工程师。不论称呼如何,这些岗位通常负责本章介绍的流程。

通常,QA 流程包括在高度模拟生产环境、模仿用户行为的环境中进行手动和/或自动测试,以捕获代码审查中遗漏的缺陷。

当测试或 QA 阶段发现缺陷时,功能会被回退到开发阶段,原负责该功能的软件工程师必须修复问题后,代码才能再次进入审查和 QA。这样的回退循环旨在保证最终部署到生产环境的代码确实无缺陷。

这些流程对任何软件开发团队都至关重要。我们可以将其分为两大类:自动化测试和手动测试。

  • 自动化测试
    自动化测试使用专门的软件工具执行预编写的测试脚本。这种方法在重复性测试和回归测试中效率极高,因为它缩短了验证新代码变更所需的时间。自动化保证了测试的一致性和准确性,最大限度地减少人为错误,并能实现广泛的测试覆盖。自动测试可全天候运行,快速反馈,支持持续集成和持续交付(CI/CD)流水线。虽然初期搭建和维护自动化测试需要投入,但其长期收益包括更快的发布周期、更高的准确性,以及迅速发现并修复缺陷的能力。

  • 手动测试
    手动测试由人工测试人员在无自动化工具辅助的情况下细致执行测试用例。他们模拟终端用户行为以发现缺陷,确保软件在真实场景中表现符合预期。手动测试能够提供细致入微的理解和灵活应对,往往能发现自动化脚本可能漏掉的问题,如界面瑕疵和可用性问题。尽管手动测试耗时且劳动强度大,但它对于探索性测试至关重要,在发现意外缺陷和确保流畅用户体验方面发挥着创造力和直觉的重要作用。

QA 天生是一个严谨细致的过程,往往成为拖延功能上线的瓶颈。因此,市场上出现了许多 AI 工具,旨在加速这一过程的不同环节。本章将重点介绍其中两款工具。

AI 正在改变自动化测试的方方面面。例如,直到最近,自动化测试仍需编写复杂脚本。但如今,许多自动化测试工具支持用简单、纯英文创建测试用例,无需编写代码即可覆盖软件的每个组件和功能。借助 AI 驱动的视觉测试工具,还能自动检测视觉缺陷,确保用户界面按预期显示和工作。这些改进让测试流程更加高效有效,测试人员可以将精力更多地集中在提升软件整体质量上。

AI 测试工具类型

除了自动化与手动的划分外,基于测试生命周期所覆盖的具体领域,我们还可以将 AI 软件测试和质量保证工具分为功能性和非功能性两类。

  • 功能性 AI 测试工具
    顾名思义,功能性测试工具验证软件应用是否准确执行所有预期功能。它们关注系统“做什么”。目标是测试应用内部组件是否输出预期结果。功能性测试工具包括单元测试、集成测试、视觉测试、回归测试和冒烟测试等。

  • 非功能性 AI 测试工具
    非功能性测试工具评估软件除了功能表现之外的方面,如性能、兼容性、可用性、安全性和可靠性。它们侧重于评估软件的性能指标,比如速度、响应时间和资源利用率等。

两类工具均旨在发现潜在的性能问题和安全漏洞。它们利用基于客户使用数据、公司内部文档,甚至行业法规标准训练的深度学习模型,能够识别可能导致性能瓶颈或安全风险的模式。这种内在的“智能”使得这些 AI 工具成为软件开发生命周期中 QA 阶段的重要伙伴。使用这些工具最大的收益在于它们能够对庞大代码库进行近实时的高效测试。

QA 流程耗时长令人生厌,因为复杂产品和庞大代码库通常拥有数百种用户路径需要测试,手动执行极其耗时。自动化工具并不减少人工介入的价值,但确实能自动完成大量重复工作,释放 QA 人员去聚焦关键流程,比如最近一次 PR 中修改的内容,或者那些根据帕累托原则占据 20% 工作但产生 80% 影响的关键部分。

本章评测的多款主流工具兼具功能性和非功能性测试能力,旨在整合进各种开发环境。具体使用方式因团队情况和偏好不同而异。例如,测试是 CI/CD 流程中最重要的环节之一。借助集成 CI/CD 的测试工具,我们现在能在开发过程中持续执行测试,而非等开发结束后才测试。持续集成方式能实时反馈软件性能和内部运行状况。

集成 CI/CD 的 AI 测试工具会在每次构建后自动测试代码变更。持续测试确保在开发周期早期发现并解决问题,降低生产环境缺陷风险。这种方式推动了质量文化建设,实现了更快速、更可靠的软件发布。

相比之下,基于浏览器和云端的工具则在浏览器或云端运行测试,提供灵活性和便捷性。它们允许在不同设备和环境下测试,无需像 IDE 和集成 CI/CD 工具那样复杂的配置。

应用场景

来自各行各业的软件开发者和工程团队正在将 AI 测试与质量保证(QA)工具集成到他们的流程中。以下是一些我们观察到的主要应用场景:

  • 自动化测试用例创建
    构建测试自动化过去非常缓慢且耗时。设计和编写测试脚本、执行回归测试以及完成中间所有工作都需要大量时间和脑力。许多 AI 驱动的测试工具旨在通过从简单的英文提示中在几秒钟内生成全面的测试脚本来解决这一问题。这种基于自然语言处理(NLP)的脚本编写方式,使复杂工作流的自动化变得轻松可行,进而让技术和非技术相关人员都能参与测试。AI 生成的测试脚本通常基于用户行为和过往测试数据中的模式,使得测试更加相关,接近人工 QA 测试人员的设计。

  • 提升测试准确率
    提高准确率意味着更少的代码缺陷会漏过 QA 阶段进入生产环境。AI 算法的强大之处在于,它们能大规模捕捉模式和异常,而这是人工测试人员难以做到的。借助对庞大代码库和历史测试数据的训练,AI 能更轻松地发现可能导致功能回退的问题细节。

  • 错误自愈能力
    具备自愈能力的 AI 测试工具能在应用 UI 或代码变更导致测试失败时,自动检测并修复测试脚本中的问题。这保证了所有测试始终保持有效且及时更新,无需人工干预。历史上,更新一直是 QA 团队面临的最大挑战之一,因为 UI 的改动意味着许多既有测试脚本也需同步修改。这些 AI 工具显著减轻了 QA 团队的维护负担,使 QA 过程更快、更可靠。

  • 加快软件发布周期
    通过 AI 测试工具自动化重复性任务,我们可以使软件应用的发布周期提升十倍。开发者可以将更多时间投入到创新新功能和产品提升上,而不是整天忙于捕捉缺陷或编写测试脚本。企业也能更快速响应市场需求和用户反馈。

对人工测试人员的需求

需要牢记的是,虽然这些 AI 工具在发现最终可能导致生产环境故障的问题和缺陷方面表现出色,但人类的直觉在测试过程中依然至关重要。这不仅仅是因为本章评测工具的局限性或其背后的 AI 算法,更深层次的原因在于:软件开发团队不可能以绝对完美的方式书写 100% 的需求和边界情况。

结合我十多年带领软件团队的经验,用户的临时反馈、销售的临时需求,甚至 CEO 的电话通知的特定例外,总会带来变更和注意事项。虽然团队努力在软件开发任务描述中妥善记录所有需求、捕捉边界情况和测试计划,但结果永远不可能完美,总会存在遗漏。而 AI 工具的训练基于这些书面材料,并将项目需求视为测试的最终指令,因此它们最终会错过需求中的某些细微差别或临时例外情况。

更进一步说,坦率地讲,许多特定的上下文意识只有人类才能具备。我们需要人类来应对行业范围内的事件或敏感的用户关切。软件开发本身就是一件复杂的事情,产品和代码库越庞大,纯 AI 驱动的 QA 过程越容易暴露其局限和缺陷。

AI 算法的表现取决于其训练所用的数据。正如本章所示,AI 绝对能提供巨大帮助,尤其是在诸如测试大量用户路径和应用流程这类重复繁重的工作中。但对于流程中关键的部分,仍然需要人工的监控、审查和干预。

评估流程

大多数 QA 自动化领域的公司主要服务于企业客户。这很合理,因为企业公司通常拥有更大的团队、更复杂的产品以及更高的质量控制标准。虽然这是理所当然且符合预期的,但这也影响了我在本章中展示工具的选择过程,我更倾向于选择那些可以通过简单的自助注册流程访问且提供免费试用的工具。这是为了方便读者能够轻松尝试本章介绍的内容,虽然这确实排除了部分需要与销售团队洽谈价格方案的工具。我决定将这些工具视为本书的范围之外。

即便有这样的限制,在调研本章内容时,我还是评估了 20 多款自动化测试工具(其中许多属于企业销售类别)。最终筛选出两款重点介绍的工具。

为了评估和比较这些 AI 驱动的测试工具,我使用每款工具编写并运行了测试用例,针对一个简单明了的测试网站:一个用于预约医生的基础网页应用。由于构建全面的端到端自动化测试框架是一项艰巨任务,我重点评估了这些工具所提供的 AI 功能,以展示将 AI 集成到软件测试中的潜力。

本书中的示例不旨在代表完整的测试框架,而是演示如何在自动化测试工具中使用 AI 集成功能。本章的主要目标是展示 AI 在软件测试领域的可能性和简易性,而非提供一个可直接投入生产的解决方案。

我评估了这些工具中的 AI 功能如何提升测试流程的各个方面,如生成测试用例、创建测试数据、执行测试和分析结果。

  1. 测试网站
    katalon-demo-cura.herokuapp.com

  2. 应用描述
    该网页应用有登录页,供用户预约医生。

  3. 测试描述
    自动化执行一系列在医疗服务网站上的操作。该测试确保患者能够顺利使用该应用成功预约医生。我们希望确认应用中的所有功能正常工作。

  4. 测试步骤
    我们计划生成/创建测试用例,自动验证以下内容:

  • 登录页能完美运行
  • 当所有必填字段正确填写时,用户能够成功预约
  • 预约历史记录所有已完成的预约
  1. 测试用例 1
  • 访问 katalon-demo-cura.herokuapp.com
  • 点击 “Make Appointment” 按钮
  • 在用户名字段输入 “John Doe”
  • 在密码字段输入加密文本
  • 点击 “Login” 按钮
  • 检查用户在输入正确的信息后是否能成功登录
  1. 测试用例 2
  • 在 “Make Appointment” 页面:
  • 选择访问日期
  • 选择 “Medicare” 选项
  • 选择 “申请医院再次入院” 选项
  • 在文本框内输入备注
  • 预约医生
  • 提交预约表单 10 秒后,检查用户是否成功预约
  1. 测试用例 3
  • 切换菜单
  • 点击 “History” 访问历史记录页
  • 确认刚刚预约的记录出现在历史中

现在,让我们来看我找到的表现最佳的 AI 测试工具,看看它们如何按照这些指令执行测试,并利用 AI 功能评估该网站。

Katalon Studio

Katalon Studio 由 Katalon Inc. 于 2015 年推出,是一款自动化软件质量保证(QA)工具,支持移动应用、网页应用、桌面应用和 API 的测试。公司官网强调其“在整个平台中嵌入了 AI,以实现更快的测试、更清晰的洞察,并通过减少瓶颈来简化测试自动化。”

Katalon Studio 是 Katalon 生态系统中的首个工具,后来又增加了两个工具。Katalon Recorder 是一款浏览器自动化扩展,支持创建和运行 Firefox、Edge 和 Chrome 的测试。Katalon TestOps 是一个测试编排平台,集中管理测试规划和执行活动,优化 DevOps 流程并增强跨团队协作。

Katalon 中 AI 辅助的测试功能包括:

  • 根据纯英文指令生成 Groovy 代码(Groovy 是 Katalon 用于编写测试用例的脚本语言)
  • 根据提示自动生成测试脚本
  • 虚拟数据分析师功能,分析所有 TestOps 数据并生成报告
  • 自愈功能

正如前文所述,Katalon 的自愈 AI 能自动修复运行过程中出现故障的测试。当你发布新功能或更改组件时,无需手动维护现有测试脚本。回归测试计划也由 AI 自动处理:引擎会即时重新运行现有的功能性和非功能性测试,确保软件之前开发和测试过的组件在新增变更后依然表现正常。

在 Katalon 中创建测试用例通常有两种方式:录制回放测试,或用 Groovy 编写测试脚本。

实际案例

本例中,我使用了 Katalon 的生成式 AI——StudioAssist AI,它帮助程序员根据自然语言提示编写测试用例。我用它为医疗服务网站编写了测试用例。为了本次测试,我扮演了不熟悉 Groovy 语法的利益相关者角色,使用 StudioAssist AI 功能生成 Groovy 脚本以搭建测试。只需在提示中写出我想做的测试,它就会帮我生成对应的 Groovy 测试脚本,随后我运行该脚本来评估软件。StudioAssist 还能帮助解释它生成的每行代码的功能。

我新建了一个测试项目,设置了测试文件夹,进入脚本标签页开始编写测试。以下是我给 StudioAssist AI 的提示内容:

提示:
我想写一个测试用例,执行以下步骤:

  1. 打开浏览器访问 katalon-demo-cura.herokuapp.com
  2. 点击名为 'Page_CuraHomepage/btn_MakeAppointment' 的预约按钮
  3. 在对象 'Page_Login/txt_Username' 中填写变量 'Username' 的值
  4. 在对象 'Page_Login/txt_Password' 中填写变量 'Password' 的值
  5. 验证名为 'Page_CuraAppointment/div_Appointment' 的预约区块在 10 秒内出现
  6. 关闭浏览器

Katalon StudioAssist 生成了符合 Groovy 语法的测试用例(完整代码见示例 4-1),并成功执行了测试脚本(见图 4-1、4-2 和 4-3)。

image.png

image.png

image.png

示例 4-1. Katalon 生成的完整测试代码

/* 我想编写一个 Katalon Studio 测试用例,执行以下步骤:
 * 1. 打开浏览器访问 URL 'https://katalon-demo-cura.herokuapp.com/'
 * 2. 点击预约按钮
 * 3. 根据变量填写用户名和密码字段
 * 4. 点击登录按钮
 * 5. 验证预约区块存在
 * 6. 关闭浏览器
 */

// 打开浏览器访问 URL 'https://katalon-demo-cura.herokuapp.com/'
WebUI.openBrowser('https://katalon-demo-cura.herokuapp.com/')

// 点击预约按钮
WebUI.click(findTestObject('Page_CURA Healthcare Service/a_Make Appointment'))

// 根据变量填写用户名和密码字段
WebUI.setText(findTestObject('Page_CURA Healthcare Service/input_Username_username'), 'John Doe')
WebUI.setText(findTestObject('Page_CURA Healthcare Service/input_Password_password'), 'ThisIsNotAPassword')

// 点击登录按钮
WebUI.click(findTestObject('Page_CURA Healthcare Service/button_Login'))

// 验证预约区块存在
WebUI.verifyElementPresent(findTestObject('Page_CURA Healthcare Service/div_Appointment'))

// 关闭浏览器
WebUI.closeBrowser()

如你所见,生成的测试代码符合我提供的指令,并且语法正确。

优点

  • StudioAssist 对非技术用户友好,能将自然语言提示转换为正确的 Groovy 测试语法,方便使用和调试。
  • 内置关键字和模板加速测试用例创建过程,减少大量编码需求。
  • 具备自愈能力,应用 UI 发生变化时能自动更新测试脚本。
  • StudioAssist 与 Jenkins、Git、Jira 等流行的 CI/CD 工具和测试框架集成良好。

缺点

  • Katalon 需要下载和安装 StudioAssist(如前面截图所示),增加了一定的设置工作量。
  • 处理大型测试套件或复杂测试场景时,Katalon 有时会较慢。
  • Katalon StudioAssist 的用户界面有一定学习曲线,一些选项隐藏在顶部菜单的下拉层级中,且需要学习快捷键。

我给 Katalon 评分为 9 分(满分 10 分)。它在将纯英文文本提示转换为测试用例并在同一界面内执行测试方面帮助很大。唯一未给满分的原因是上述缺点中提到的学习曲线。虽然界面本可以更直观,但这也是复杂企业产品常见的用户体验,而 Katalon 本身即属于此类产品。

接下来,让我们看看第二款工具。

testRigor

我测试的下一个工具是 testRigor,这是一款由 AI 驱动的自动化测试工具,旨在简化软件测试流程。与传统测试工具不同,testRigor 允许开发者无需编写代码即可创建和执行测试。其自然语言处理(NLP)功能使你能够用简单的英文描述应用的功能,AI 随后自动生成、执行测试用例并生成测试报告,显著减少了全面软件测试所需的时间和技术门槛。

实际案例

在评估 testRigor 时,有一个功能让我印象深刻:它完全无代码的测试创建流程。我无需编写任何测试代码。只需提供测试网站的 URL、简要描述应用及其应有的行为,再告知测试目标并指定生成的测试用例数量。剩下的工作全部由 AI 负责——从生成测试、执行测试到生成详细的测试报告(见图 4-4 和图 4-5)。

image.png

image.png

测试目标,如你所知,是检查用户是否能在 10 秒内成功登录并预约。

优点

  • testRigor 采用基于行为驱动的测试用例创建方法,能够根据用户与应用的交互生成测试,绕开了复杂的测试语法,这对非技术用户或小型团队来说能有效减少流失。
  • testRigor 的测试产品非常易用,完全基于云端,无需安装额外软件(与 Katalon 不同),便于随时随地访问和使用。
  • 它能与 Jenkins、CircleCI 等流行 CI/CD 流水线集成,并支持 Jira 等缺陷跟踪工具,方便与团队已有工具无缝协作。
  • 与 Katalon 类似,其自愈功能减少了测试团队在应用流程变更时的维护负担。

缺点

  • 绕过实际编写测试代码对于小团队和偶尔使用者很有帮助,但我怀疑对于已有完善测试基础设施的大型团队是否实用。对于这类软件团队(多数情况),自动化测试的价值在于生成正确语法的测试脚本。
  • 这种绕过测试编写的方式缺乏传统测试语言和框架的灵活性和控制能力,不适合复杂的测试场景或庞大的应用流程。

基于这些限制,我给 testRigor 评分为 7/10。除此之外,它的用户体验非常棒,“开箱即用”,非常适合尚无复杂测试基础设施的小团队,或仅偶尔需要验证产品是否符合需求的团队。

工具比较

Katalon 和 testRigor 各有优势,满足不同的测试需求,二者均利用 AI 和机器学习增强功能。表 4-1 对两者进行了比较。

Katalon

Katalon 提供了一套强大的功能,专为处理复杂测试场景而设计。它尤其适用于需要全面测试覆盖的大型测试项目,以及已有成熟测试基础设施、团队和流程的软件开发团队。尽管学习曲线比 testRigor 陡峭,Katalon 丰富的功能深度和灵活性使其成为更多软件开发团队的强大工具,尤其适合大型团队或处理复杂产品的团队。

testRigor

我对 testRigor 的简洁易用印象深刻。其学习曲线明显较短,我惊讶于从注册到获得测试结果的速度之快。该工具特别适合产品功能频繁变化、需要快速持续测试的环境。我认为 testRigor 最适合尚无测试基础设施、产品需求变化频繁、难以搭建复杂测试环境的初创团队或偶尔使用者。另一方面,对于大型团队和复杂产品流程,testRigor 存在一定局限,而这正是 Katalon 擅长的领域。

表 4-1 AI 测试工具概览

工具使用场景测试表现
Katalon仓库9 / 10
testRigor浏览器7 / 10

总结

在本章分析的工具中,Katalon 适合大型团队和企业级产品,而 testRigor 则更适合初创企业和副产品。这很好地覆盖了软件开发市场,展示了不同类型产品和不同成熟度团队如何从 AI 测试工具中获益。

如果你曾参与软件测试或质量保证工作,或者为自己编写的代码写过单元测试,你会深知编写测试用例并在应用演进和扩展过程中持续维护它们是多么繁琐。

我常参与预算规划和路线图讨论,强有力的测试经常被推迟,或过时的测试被简单视为应逐步淘汰的技术债务。技术和非技术相关方普遍存在对规范测试实践的偏见,关键原因之一就是过去投入的巨大成本。

这正体现了 AI 测试工具能带来的最大价值。在软件开发中,我们不断寻找帕累托原则的体现:“投入 20% 的努力能带来 80% 的价值吗?”作为 CTO,我多次参与这类讨论。在 QA 中,那 20% 的高价值努力包括:合理定义应用工作流;与用户和客户沟通问题和边界情况;为实现需求的软件开发者详细描绘细节;以及最终执行用户验收测试,作为上线前的最后把关。

剩余 80% 的工作量却只产生 20% 的价值,即编写和执行每个测试以验证代码是否符合需求的繁重任务。AI 工具在这方面表现出色。能够用自然语言给出指令,并返回用正确语法编写、可直接执行的测试代码,极大节省时间。具备自愈能力的工具可在应用代码变更时自动更新测试,避免测试过时而被注释掉的问题,尤其在紧急发布生产时尤为有用。

这些日常决策常常使得规范的软件测试被置于次要地位。AI 工具能够缓解这种状况,帮助确保生产环境中的软件得到充分测试且无缺陷。但这并非 AI 工具能单独完成,反而相辅相成:人工在 QA 中的任务至关重要,负责定义测试范围,为 AI 工具高质量完成繁重工作提供关键指导。

再次强调,“AI + 人工”的组合能够改善这一常常令人沮丧的过程,产出更高质量的成果。