AWS re:Invent 回顾

使用 Kiro 进行规范驱动开发 (DEV314)

回顾系列

场次笔记

Kiro 与规范驱动开发简介

概述

  • Kiro 是最近发布的一款新型智能体 IDE,强调规范驱动开发。
  • 它旨在通过结构化工作流提高代码质量并改进审查流程。
  • IDE 因编译器和调试等集成工具而普及。
  • AI 编辑器应运而生,最初提供代码补全,随后演变为智能体体验。
  • 如今,开发者引导 AI 智能体编写和审查代码,同时保持控制权。
  • 氛围编码与规范驱动开发:
  • 氛围编码涉及快速原型设计,但缺少传统的 SDLC 生命周期。
  • 规范驱动开发引入了从需求到输出的结构化工作流,专注于前期规划,以提升模型的专注度和输出质量。
  • 规范驱动开发工作流:
  • 从需求开始,然后依次进行设计、任务列表和实施。
  • 允许迭代优化,直至获得所需输出。
  • 包含用于验证更改的钩子,例如拼写检查和执行编码原则。

AI 编辑器与软件开发的演进

AI 编辑器

  • 演进为更具智能体特性的体验,开发者输入自然语言,AI 编辑多个文件。
  • 根本性转变:开发者引导 AI 智能体编写和审查代码,同时保持对工作流的控制。
  • 氛围编码:
  • 一种流行的工作流,开发者编写提示词,AI 生成代码,然后重复这一循环。
  • 对快速原型设计很有效,但缺少传统的 SDLC 生命周期,导致上下文和决策方面的挑战。
  • 规范驱动开发:
  • 通过强调前期规划来应对氛围编码的挑战。
  • 从需求到输出的结构化工作流,专注于提升模型的专注度和输出质量。
  • 工作流包括需求、设计、任务列表和实施,并允许迭代优化。
  • 通过引入用于验证更改的钩子来解决“AI”问题,确保代码质量。

规范驱动开发

用于验证更改的钩子

  • Kiro 引入了钩子,用于在开发过程中验证更改。
  • 示例包括文档拼写检查器、语气和风格检查,以及对编码原则的执行,例如 UI 组件的单一职责原则。
  • 求职者应用程序概念:
  • 核心理念:涵盖求职中面试准备以外的更广泛方面,包括风格、语气和实际面试表现。
  • 电梯演讲:用户登录、设置个人资料并通过问答流程进行面试准备,最后获得定性反馈和量化分数。

Kiro 界面与功能概述

Kiro 界面

  • 概览一个安装了 Tailwind CSS 的全新应用程序。
  • Kiro 菜单:
  • Agent hooks:由文件保存或删除等事件触发的后台流程,可用于更新文档或本地化。
  • Agent steering:用于规定编码和设计标准的规则文件,根据应用程序当前状态自动生成。
  • Specs:从需求到输出的结构化工作流,确保从想法到实施的路径清晰。
  • MCP:My Code Partner servers,支持与各种 AWS 服务和产品集成,最近还进行了增强,使安装更加简单。
  • Agent Hooks:
  • 提供适用于常见场景的预构建钩子,并可灵活指定特定文件类型。
  • Agent Steering:
  • 根据应用程序的当前状态自动生成 steering 文件。
  • 示例:为使用 TypeScript 和 Vite 的 Vite Web 应用程序创建产品和技术文件。
  • MCP Servers:
  • 针对不同服务和产品的 MCP server 列表不断扩充。
  • 最近新增:通过 kiro.dev 一键安装 MCP server。

Kiro 中的规范驱动开发

概述

  • 规范驱动开发是本次演讲的核心重点,强调从需求到输出的结构化工作流。
  • Kiro 支持多种 AI 模型(Sonnet 4.5、4.4、Opus、Haiku),并提供自动选择功能来选取最佳模型。
  • 创建求职者应用程序:
  • 使用图表作为设计输入,提示 Kiro 创建一个求职者应用程序。
  • 该流程从根据所提供的设计生成需求文档开始。
  • 需求文档:
  • Kiro 将初始提示词拆解为一组以用户故事和验收标准定义的需求。
  • 用户故事以人类可读的格式定义功能,而验收标准则详细说明实施所需的具体要求。
  • 用户故事和验收标准:
  • 用户故事示例包括登录、个人资料管理和面试准备会话。
  • 该流程包括审查用户故事,确保其与所需功能一致,然后再深入验收标准以进行详细实施。

完善需求并进入设计阶段

审查并完善需求

  • Kiro 允许迭代完善需求。在示例中,删除了某些需求(1、2、状态持久化),保留了其他需求(3、4、5、6、7、8)作为 MVP 范围。
  • 强调在流程中反复沟通的重要性,以确保需求与预期结果一致。
  • 工作流灵活性:
  • Kiro 支持不同的工作流,包括用于快速原型设计的氛围编码和用于结构化规划的规范驱动开发。
  • 在转向更结构化的方法之前,开发者可能更倾向于先使用氛围编码来考虑初始界面和功能。
  • 设计阶段:
  • 需求最终确定后,Kiro 会根据现有代码库生成设计文档。
  • 设计阶段包括创建架构图和属性测试,以确保系统满足指定需求。
  • 迭代流程:
  • 该流程是迭代式的,允许开发者完善需求和设计文档,直至对结果满意。
  • 生成的文档可作为未来开发和维护的宝贵参考。

审查并增强设计文档

设计文档概述

  • Kiro 根据完善后的需求生成设计文档,其中包括高层架构和组件概述。
  • 设计文档使用 mermaid 图和 Markdown 实现清晰的可视化与文档记录。
  • 高层架构:
  • 架构包括开始屏幕、问题屏幕、结果屏幕、用于数据持久化的本地存储,以及用于录制音频回答的 Web Audio API。
  • 组件细分:
  • 确定的关键组件:开始屏幕视图、问题屏幕视图、会话状态捕获(问题和回答)、问题库 (MVP) 以及会话存储。
  • 识别缺口:
  • 发现缺少的功能:转录用户回答中的音频,以及对结果进行详细分析。
  • 设计文档没有具体说明如何转录音频,以及如何生成和呈现结果。
  • 增强设计:
  • 添加了其他需求:在用户说话时转录文本,以及对结果进行额外分析。
  • 强调了使用自然语言提示词添加新需求的简便性,突出了 AI 辅助文档的便利。

增强设计并转向任务列表

更新设计文档

  • 设计文档中添加了其他功能,包括使用 Cloud SDK 转录音频以及详细分析结果。
  • 引入检查点和恢复功能,无需依赖版本控制系统即可轻松还原到先前状态。
  • 系统图更新:
  • 更新系统图,以包括转录服务(使用 Cloud SDK 实现语音转文本)。
  • 生成任务列表:
  • 工作流进入根据更新后的设计文档生成任务列表的阶段。
  • 任务包括创建数据模型、实施录音服务、回答验证存储和 AI 集成。
  • 灵活性与完善:
  • 工作流允许将手动编辑和优化整合到设计文档中。
  • 可以重新排序任务或调整优先级,以专注于快速实现 MVP 范围。
  • 可选任务:
  • 基于属性的测试任务默认设为可选,让开发者可以先专注于核心功能,再处理其他测试。
  • 可以完善任务列表,对特定任务设置优先级,以加快 MVP 开发。

任务列表优先级与实施

任务列表灵活性

  • 可以完善任务列表并重新排序,以专注于快速实现 MVP 范围。
  • 可以对任务进行分组以减少任务数量,使工作流更易管理。
  • 测试优先开发:
  • 如果开发者偏好测试驱动开发方法,可以选择先编写测试。
  • 工作流支持不同的开发风格,可根据团队偏好进行定制。
  • 核心 MVP 任务:
  • 确定了包含五项任务的核心 MVP:设置依赖项、创建核心数据类型、实施应用程序状态管理、实施录音以及语音测试。
  • 其他任务包括实施回答验证存储和创建开始屏幕组件。
  • 纳入 UI:
  • 初始阶段可能不包括 UI 组件,但可进行调整以纳入 UI,从而进行可视化测试和交互。
  • 任务实施:
  • 可以通过单击 UI 或使用聊天命令启动任务。
  • Kiro 按顺序执行任务,运行终端命令来安装依赖项和创建必要文件。
  • 该流程是迭代式的,可根据不断演进的需求和设计快速调整与完善。

基于属性的测试概述

结构化需求

  • 需求采用用户故事验收标准格式定义。
  • 支持对需求进行逻辑等价和形式推理。
  • 属性与形式推理:
  • 属性是指在系统的所有执行过程中都应保持成立的特征或行为。
  • Kiro 从 Gherkin 格式的需求中提取属性,并使用名为 Fast Check 的框架进行基于属性的测试。
  • Gherkin
  • 是一种在行为驱动开发 (BDD) 中使用的纯文本语言,以结构化、人类可读的格式编写软件行为场景,主要采用 Given-When-Then 结构。
  • Feature:描述正在测试的功能。
  • Scenario:功能实际运行的一个具体示例。
  • Given:设置操作发生前的初始上下文或状态。
  • When:描述用户或系统执行的操作。
  • Then:定义预期的产出或结果。
  • And/But:用于为同一关键字(Given、When 或 Then)添加更多步骤,而无需重复该关键字。
  • Fast Check 框架:
  • Fast Check 可通过生成一系列值来对属性进行模糊测试。
  • 与输入有限的单元测试不同,基于属性的测试可提供更多证据,证明生成的输出与需求相对应。
  • 基于属性的测试示例:
  • 使用 Kiro 创建了一个国际象棋应用程序,并使用基于属性的测试确保该应用程序按预期工作。
  • 测试包括检查 AI 生成的任何走法相对于走法注册表是否合法。
  • Fast Check 使用随机变化多次运行测试,以确保稳健性并减少缺陷。
  • 基于属性的测试提高了代码质量,并降低了出现缺陷的可能性。

诊断工具

  • Kiro 的诊断工具有助于在任务执行期间识别并解决问题。
  • 它从编辑器读取 lint 问题,并提供反馈以改进开发流程。
  • 该工具减少了任务完成期间遇到的问题数量。
  • 任务执行:
  • 该应用程序包含用于面试准备的行为、技术和领导力问题。
  • 该应用程序连接到 Sonnet 3.7 模型以生成回答。
  • 优化后的演示:
  • 最终应用程序演示了通过问题和回答进行面试准备练习。
  • 该应用程序允许用户练习回答技术问题并接收反馈。
  • 演示突出了该应用程序的功能,包括录制和转录回答的能力。