指南

如何撰写一份好的 Bug 报告(供 AI 或开发者使用)

一份好的 Bug 报告,能让另一个人——无论是开发者还是 AI——看到你所看到的同样问题,而无需再向你提问。它需要一个具体的标题、复现问题的准确步骤、你预期的结果、实际发生的情况、逐字复制的任何错误信息,以及问题发生的位置:哪个页面、哪种浏览器、哪种设备、哪位用户。每份报告只写一个 Bug,如有帮助可附上截图。

大多数 Bug 理解起来比修复起来花的时间更长。一份清晰的报告能省去理解这一步。对于 AI 工具来说,这一点更加重要:AI 无法像人那样追问“‘结账很奇怪’是什么意思”,于是它只能猜测——而一次错误的猜测可能会弄坏其他东西。

模板

复制下面的内容并填写:

标题:[什么地方出了什么问题] —— 例如“预订表单拒绝晚上 6 点之后的时间”

复现步骤:
1. ...
2. ...
3. ...

预期:[应该发生什么]
实际:[实际发生了什么]

错误信息:[准确的文字,如有]
位置:[页面/URL、浏览器、设备、以哪位用户登录]
发生频率:[每次 / 有时 / 仅一次]
截图或录屏:[已附上]

本指南的其余部分会解释每个部分。

第一步:先尝试复现

在写报告之前,先尝试让 Bug 再次出现。这样你就能弄清楚哪些步骤是关键的,以及它是否每次都会发生。

  • 从干净的状态开始:刷新页面,或退出后重新登录。
  • 记下每一次点击和每一次输入。
  • 尽量找到触发问题的 最短 路径。
  • 尝试第二个浏览器或账号。如果只有某一位用户会遇到,这是一个很重要的线索。

更多相关内容,参见 如何调试 AI 构建的应用。

第二步:写一个具体的标题

标题应当说明什么地方出了什么问题,这样有人在浏览列表时就能知道这是哪个 Bug。

较弱较强
结账坏了购物车使用折扣码时,结账按钮没有任何反应
移动端问题宽度小于 400 像素的手机上,定价卡片超出屏幕
保存时出错资料名称中包含表情符号时保存,显示“500 Internal Server Error”

第三步:列出准确的步骤

给步骤编号。要具体:哪个页面、哪个按钮、输入了什么。

  1. 以客户身份登录(测试账号:customer@example.com)。
  2. 将“入门套件”加入购物车。
  3. 输入折扣码 WELCOME10,然后点击 应用。
  4. 点击 结账。

“试着用折扣码结账”这样的描述会漏掉许多关键细节:哪位用户、哪个商品、哪个折扣码、是否先应用了折扣码。

第四步:预期与实际

这是报告的核心。两者都要写,因为二者之间的差异就是 Bug 本身。

  • 预期: 结账页面打开,并在总价中显示 10% 的折扣。
  • 实际: 按钮转圈一秒钟,然后什么都没有发生。不使用折扣码时,结账正常。

如果没有“预期”,读者可能不知道这种行为是错误的。如果没有“实际”,他们就不知道该去看什么。

第五步:逐字复制错误信息

错误信息是找到原因最快的途径。请以文字形式逐字复制,不要改述。

在哪里找到它们:

  • 屏幕上: 应用显示的任何提示信息。
  • 浏览器控制台: 打开开发者工具(F12,或右键 → 检查),查看 Console(控制台) 标签中的红色行。
  • 网络面板: 在开发者工具中找到失败的请求,记下它的 URL 和状态码(例如 POST /api/checkout → 500)。
  • 服务器日志,如果你有访问权限。

类似 TypeError: Cannot read properties of undefined (reading 'percent') at checkout.ts:48 这样的一行信息,往往能直接指向问题所在。

第六步:补充上下文

  • 位置: 页面 URL、运行环境(预览、预发布或正式环境)。
  • 用户: 哪位用户或角色——管理员、普通成员、未登录。
  • 设备与浏览器: “iPhone 上的 Safari”与“Windows 上的 Chrome”可能差别很大。
  • 数据: 记录中任何不寻常之处——超长文本、特殊字符、大量条目。
  • 何时开始: “昨天修改折扣码之后”非常有价值。
  • 发生频率: 每次都会发生,还是十次中偶尔出现一次。

第七步:展示问题

标出问题位置的截图,或一段简短的屏幕录制,可以消除歧义——对于布局类 Bug 尤其如此。如果你的 AI 工具支持图片,请附上一张。裁掉所有隐私内容,包括密钥和他人的数据。

为 AI 构建工具撰写 Bug 报告

同样的结构也可以作为提示词使用。有两点可以增加效果:

  • 说明哪些内容不能改变,以免修复工作引入新的问题。
  • 要求它验证修复结果,而不仅仅是编写修复代码。

以客户身份登录,购物车中有“入门套件”,并且已应用折扣码 WELCOME10,点击 结账 没有任何反应。预期:结账页面打开,总价减免 10%。实际:短暂的转圈,然后没有任何反应。网络面板显示 POST /api/checkout 返回了 500。不使用折扣码时结账正常。请找出原因并修复,同时不要改变没有折扣码的订单的价格计算方式。然后用百分比折扣码、固定金额折扣码以及不使用折扣码的情况分别检查结账流程。

如果你不确定原因,可以先要求诊断:

先不要修改代码。根据这份报告,可能的原因有哪些?每个原因分别需要什么来确认?

常见错误

  • “它坏了。” 没有步骤、没有预期结果,无从下手。
  • 一份报告里写了多个 Bug。 有些会被修复,有些会被遗漏。
  • 错误信息经过改述。 “某个 undefined 的东西”掩盖了最有用的部分。
  • 遗漏用户或角色。 很多 Bug 只影响管理员,或者只影响新用户。
  • 只描述你想要的修复方式(“加一个空值检查”),而不是描述问题本身。
  • 在截图或粘贴的日志中泄露机密信息。

检查清单

  • 我已经复现了 Bug,并找到了最短的步骤。
  • 标题说明了什么地方出了什么问题。
  • 步骤有编号,并且具体明确。
  • 预期与实际两者都已写明。
  • 错误信息已逐字复制,并附上失败请求和状态码。
  • 已包含页面、运行环境、用户、设备和浏览器。
  • 我说明了发生频率和开始时间。
  • 已附上截图或录屏,并移除了隐私信息。
  • 每份报告只写一个 Bug。

向 Mythex 的智能体报告 Bug

在 Mythex 项目中,报告 就是 提示词。以下几个功能会有所帮助:

  • 附上截图,可以是预览或错误页面的截图——每条消息最多 5 个文件。
  • /fix 让智能体专注于修复 Bug;计划(Plan) 模式让它在编辑之前先进行调查。
  • /test 让智能体在预览中复现流程,并报告它所看到的内容。
  • 回退到此处 可以撤销一个让情况变得更糟的修复。

文档中的 用提示词调试 页面采用的也是同样的“步骤 / 预期 / 实际”结构。关于围绕它的修复与检查循环,参见 如何迭代改进 AI 构建的应用。

常见问题

Bug 报告应该包含什么?

一个具体的标题、准确的复现步骤、你预期的结果、实际发生的情况、逐字复制的错误信息、问题发生的位置(页面、浏览器、设备、用户),以及有助于说明问题的截图或录屏。

如何为 AI 应用构建工具撰写 Bug 报告?

使用与给开发者相同的结构:步骤、预期结果、实际结果以及准确的错误信息。另外说明哪些内容不能改变,并要求它先修复、再验证修复结果。“它坏了”这类模糊的提示只会让 AI 去猜。

如果我无法复现这个 Bug,怎么办?

仍然要报告,但要说明无法复现。写明你当时在做什么、发生的时间、使用的用户账号以及你看到的任何错误。注明它发生的频率,例如十次中出现一次,因为间歇性的 Bug 往往与时序或数据问题有关。

我可以把多个 Bug 写在一份报告里吗?

不可以。每份报告只写一个 Bug,这样每个问题都可以单独修复、测试并关闭。如果你认为两个问题相关,请在各自的报告中说明。

Mythex · Pricing · 用 AI 构建任何东西 · 网站和应用模板 · Mythex 对比 · AI 应用构建术语表 · 免费的 AI 应用构建工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 繁體中文(香港) 繁體中文(台灣)