Audible(亚马逊旗下公司)是领先的音频故事制作和提供商,拥有超过1,000,000个标题的庞大库。为确保数百万最终用户在不同设备上获得无缝体验,稳健的测试至关重要。
还记得上次你接手一个测试覆盖率很低的软件应用程序代码库吗?或者,你可能为了赶在截止日期前完成任务而匆忙编写代码,并承诺自己“稍后”再补充测试?我们都经历过。测试至关重要,但在截止日期迫近时,却经常被降低优先级。这正是 Amazon Q Developer 的智能体工作流发挥作用的地方,它改变了开发人员生成测试的方式。本文将探讨 Audible 如何利用 Amazon Q Developer 来提升其单元测试覆盖率。
软件测试的业务用例
在高节奏的开发环境中,测试周期经常在紧迫的截止日期下被压缩,从而增加了质量风险。Amazon Q Developer 通过加速测试过程同时保持全面的标准,改变了这一模式。通过自动生成测试、识别边缘情况以及提供修复建议,团队能够在缩短的时间框架内执行彻底的测试,从而实现快速发布、优化QA资源并增强生产就绪度。
每个未实施适当测试的函数都代表着返工、Bug和维护挑战的潜在风险。此外,继承的代码库带来了特殊的挑战:开发人员必须选择是花费数周时间为现有功能编写测试,还是继续维持未测试代码的循环。
Amazon Q Developer 通过减少实现适当测试覆盖率所需的时间和精力来应对这些挑战,将测试从一项繁重的琐事转变为一种简化流程,使团队能够专注于交付新功能,同时有助于确保代码质量。
Amazon Q Developer:为您的代码库扩展测试覆盖率
Amazon Q Developer 通过其智能体工作流,引入了软件测试生成的高级方法。与生成通用测试的传统测试生成工具不同,Amazon Q Developer 会分析代码的意图、业务逻辑和边缘情况。它不仅仅是生成测试,还会创建有意义的测试套件,全面验证代码行为。
除了我们今天将探讨的专用测试生成工作流,Amazon Q Developer 还提供了多种协助测试的方式。您可以使用对话式提示来生成测试计划,请求改进现有代码的测试,甚至在与 Amazon Q Developer 结对编程时编写测试。在整个测试工作流程中集成人工智能辅助的灵活性,使 Amazon Q Developer 成为开发人员的多功能助手。
Amazon Q Developer 工作流架构
以下架构图说明了 Audible 如何利用 Amazon Q Developer 进行测试生成和代码转换:
该 Amazon Q Developer 工作流展示了两个关键能力:
测试生成:Amazon Q Developer 分析 Java 类并创建全面的测试套件,包括单元测试、边缘情况测试和异常处理测试。 代码转换:Amazon Q Developer 执行自动化迁移任务,包括从 JDK 8 升级到 JDK 17/21、处理语言版本兼容性、JUnit 4 到 JUnit 5 的转换、现代化测试框架语法和注解、语法迁移、更新已弃用的 API 和代码模式。
该工作流的强大之处在于它如何将 AI 能力与人类专业知识相结合,使专家级开发人员能够在日常工作中利用 AI。Amazon Q Developer 分析您的代码库并将其用作上下文,识别边缘情况并执行自动化转换,而开发人员则应用他们的领域知识来确保输出符合业务要求和预期行为。
Audible 利用 Amazon Q Developer 潜力的方法
Audible 团队遵循以下步骤来利用 Amazon Q Developer 提升测试覆盖率:
代码提交:Audible 团队利用 Amazon Q Developer 通过为 Java 类生成额外的单元测试来增强测试覆盖率,包括静态方法和已有测试用例的方法。这种方法补充了他们稳健的测试策略。Amazon Q Developer 能够检查类、方法、参数、返回类型和异常。它有助于自动识别单元测试来覆盖容易被忽视的边缘情况,例如空输入检查和空字符串检查。
针对性请求:Audible 团队明确要求 Amazon Q Developer 提供:
- 针对 Java 类中给定方法的单元测试建议
- 针对未测试边缘情况的单元测试建议
- 处理错误处理和异常场景的测试用例建议
Audible 团队使用 Amazon Q Developer 在测试生成和代码转换方面都取得了显著改进。他们成功的关键在于以系统化的工作流提供丰富的上下文和有针对性的提示。
开发人员工作流
Audible 采用“人在环路”的方法来审查自动化工具的输出。完整流程如下:(1) 在 IDE 中打开类文件,(2) 选择特定方法并添加提示,(3) 将此组合上下文提交给 Amazon Q Developer,(4) 接收生成的测试,(5) 审查并将测试集成到代码库中。
有效提示和方法
Audible 团队遵循结构化方法,使用 Amazon Q Developer 可以执行的针对性请求:
代码提交:团队向 Amazon Q Developer 提供 Java 类代码,用于为单个方法生成测试,包括静态方法和那些已有一些测试但缺乏完全覆盖的方法。Amazon Q Developer 检查类、方法、参数、返回类型和异常,自动识别单元测试以覆盖空输入检查和空字符串检查等边缘情况。
以下是一些通用示例提示:
基本测试生成:
|
|
边缘情况聚焦:
|
|
手动框架迁移(通过 Q Developer 聊天):
|
|
注意:虽然 Amazon Q Developer 的代码转换功能可以自动跨整个代码库处理 JUnit4 到 JUnit5 的迁移,但 Audible 也使用对话式界面进行手动、有针对性的转换,如上所示。两种方法都可用。有关自动化转换的详细信息,请参阅文档。
测试生成:根据团队的请求,Amazon Q Developer 生成了针对这些领域的特定测试建议,并附有适当的断言和测试方法。 实施:开发团队在审查后实施了建议的测试。 文档:Amazon Q Developer 能够添加注释来解释测试的目的、测试覆盖的功能区域。此外,Amazon Q Developer 还能够生成与自述文件和项目文档等其他方面相关的文档。
可量化成果
通过利用 Amazon Q Developer,Audible 团队取得了以下成果:
- 超过 10 个关键软件包获得了全面的单元测试覆盖
- 每个测试类大约节省 1 小时(通常包含 8-10 个单独测试)
- 使用 Amazon Q Developer 的代码转换和手动对话协助,成功将 5,000 多个测试用例从 JUnit4 迁移到 JUnit5
- 使用 Amazon Q Developer 的代码转换进行 JDK8 到 JDK17 迁移时,节省了 50 多个小时的手动工作
- 通过 AI 辅助转换减少了人为错误
展现的关键能力
Amazon Q Developer 在手动测试中容易忽略的几个方面表现出色:
全面的异常测试:除了标准的空输入检查和空字符串验证外,它自动建议了针对 IllegalArgumentException、NullPointerException 和自定义业务异常的测试,包括验证异常抛出和特定的错误消息。这种系统化的方法使测试覆盖更完整,错误处理更稳健。
自动边缘情况检测:Amazon Q Developer 无需提示即可内联建议空指针异常处理,使过程更顺畅、更快速。
AI 辅助的手动框架迁移:Amazon Q Developer 的模式识别能力通过对话式协助加速了迁移过程。团队可以通过聊天要求 Amazon Q Developer 手动将测试语法从 JUnit4 转换为 JUnit5。例如,他们之前的设置使用了带有 @UseDataProvider 和 @DataProvider 注解的 JUnit4 语法。他们只需高亮显示代码块,发送到提示,并要求 Amazon Q Developer 使测试兼容 JUnit5。几秒钟内,它就生成了一个可靠的 JUnit5 测试,包含 ParameterizedTest 注解和 Stream of Arguments,他们可以手动实施。
上下文分析:Amazon Q Developer 分析现有代码库,识别模式并生成符合团队编码风格和测试惯例的测试。
结论
Amazon Q Developer 将测试生成过程从耗时的琐事转变为简化的工作流,使团队能够以最小的努力实现全面的测试覆盖。这使得开发人员能够专注于更高价值的活动,同时提高代码质量和可靠性。
其商业影响是巨大的:随着测试变得不那么繁重,团队自然会采用更好的测试实践,形成一个积极的反馈循环,从而提高整体代码质量,并为更快的开发周期和减少的维护时间创造机会。
要了解更多关于 Amazon Q Developer 的功能和定价详情,请访问 Amazon Q Developer 产品页面。
关于作者
Kirankumar Chandrashekar 是 AWS 的生成式 AI 专家解决方案架构师,专注于 Q Developer、Kiro 等下一代开发者体验工具以及使用 AI 提升开发者生产力。凭借在 AWS 云服务、DevOps、现代化和基础设施即代码方面的深厚专业知识,他帮助客户通过创新的 AI 驱动解决方案加速开发周期并提升开发者生产力。通过利用 Amazon Q Developer,他使团队能够更快地构建应用程序、自动化日常任务并简化开发工作流程。
Alex Torres 是 AWS 的高级解决方案架构师,支持 Amazon.com 在 AWS 上架构、设计和构建应用程序。凭借在安全性、治理和面向开发者的智能体 AI 方面的深厚专业知识,他帮助客户利用尖端的云技术来创造改变人们生活的产品。
GK 是高级客户解决方案经理和战略客户顾问,支持亚马逊作为 AWS 的客户。在 AWS 的四年里,她专注于提高开发者生产力,并在 AWS 服务中倡导亚马逊的需求,以提升用户体验并推动两个组织之间更深层次的一致性。
Aditi Joshi 是 Audible 的软件工程师,致力于在亚马逊平台上扩展 Audible 的影响力。作为一名全栈开发人员,她主要使用 Web 技术、云服务和 JavaScript、Java 等编程语言来构建和增强跨平台集成功能。
Sam Park 是 Audible 的软件开发工程师,专注于在亚马逊平台上构建 Audible 功能。他在实现通过亚马逊购物车购买 Audible 产品,以及在亚马逊 iOS 和 Android 应用程序中扩大 Audible 的可见性方面发挥了关键作用。