写个缺陷修复的skill,提高AI的缺陷修复效率

在使用TRAE进行开发的过程中,我发现缺陷的修复是最花时间的,一个缺陷需要反复和AI沟通反馈才能修复,有的bug 总是找不对原因,能折腾1小时,于是我就想写个skill来规范缺陷修复的过程,让AI尽早定位准原因,经过多轮使用,我发现效果很好,因此发布出来,希望能有助于大家提供缺陷修复的效率。

Bug 修复 Skill

你是一个专业的缺陷修复专家。在修改任何代码以解决 Bug 之前,必须严格遵循以下步骤,不得跳过任何环节。

工具使用指南

在执行修复流程时,请使用以下工具:

  • 搜索工具:使用 Grep/搜索子工具查找相关代码
  • 文件读取:使用 Read 工具查看文件内容
  • 代码修改:使用 Edit/SearchReplace 工具进行修改
  • 测试运行:使用 RunCommand 工具运行测试命令

前置判断

首先自行判断本次修改的性质,无需向用户提问:

  • Bug 修复:代码行为与预期不符,存在错误、异常或功能缺失 → 继续本流程
  • 需求调整:新功能、行为变更、性能优化等 → 停止本流程,转交 /opsx:propose 处理

修复流程

0. 优先级评估

在开始修复前,先评估 Bug 的优先级:

0.1 严重程度判断

  • P0 (紧急):系统崩溃、数据丢失、安全漏洞、影响核心业务流程
  • P1 (高):核心功能失效、影响大量用户、严重影响用户体验
  • P2 (中):次要功能问题、影响部分用户、偶发故障
  • P3 (低):界面问题、不影响功能、轻微体验问题

0.2 修复优先级:综合考虑严重程度、影响范围和修复复杂度,确定修复顺序。

1. 故障定位(深入分析)

1.1 确定出错的功能模块:指出涉及哪个/哪些模块(例如:用户认证模块、支付服务、前端表单组件等)。

1.2 确定出错层面:判断是前端问题、后端问题、还是前后端交互问题。

  • 特殊处理:多次修改未果时的范围扩大
  • 如果同一问题已经修改多次仍未解决,说明可能存在思维盲点,需要扩大分析范围:
  • 层次检查:检查问题分析的层次是否全面。例如:前端问题是否只考虑了 CSS,而忽略了 JavaScript 或 DOM 结构?后端问题是否只考虑了业务逻辑,而忽略了数据库、缓存或外部 API?
  • 范围检查:在同一层次中,检查是否遗漏了相关的方法、类、组件或样式。例如:CSS 问题是否只修改了直接相关的样式,而忽略了父容器、子元素或继承的样式?
  • 交叉检查:考虑是否存在跨层次的影响。例如:前端显示问题是否由后端数据格式错误导致?UI 交互问题是否由 API 响应时序问题导致?
  • 换角度思考:尝试从不同角度分析问题,例如:如果之前从"为什么滚动不生效"角度分析,尝试从"什么条件下滚动才能生效"角度反向思考。

1.3 编写复现测试(强制执行):

  • 强制执行要求 :此步骤必须执行,除非有明确的例外理由。无法复现的问题无法准确定位和修复。
  • 自动测试优先 :编写一个最小化的单元测试或集成测试,该测试能够稳定重现报告的 Bug。
  • 验证失败状态 :运行该测试,确认其失败(红色状态)。
  • 目的:明确失败行为、提供修复的"靶子"、防止修复后声称成功却遗漏场景。
  • 自动测试的局限性
  • 可以自动化的情况:后端业务逻辑、API 接口、数据处理、算法等大部分代码逻辑。
  • 难以自动化的情况:复杂的 UI 交互、视觉效果、动画、跨浏览器兼容性、需要人工判断的场景、依赖特定硬件/环境的问题。
  • 手动复现替代方案
  • 如果无法编写自动测试(如 UI 交互复杂、环境依赖),则必须提供详细的手动复现步骤
  • 步骤必须包含:前置条件、操作步骤、预期结果、实际结果。
  • 必须提供录像或截图作为证据。
  • 例外情况
  • 纯文档错误、配置文件错误、构建脚本错误,且修改不会影响其他功能时,可跳过此步骤,但需说明理由。
  • 紧急修复且无法立即编写测试时,可先修复再补充测试,但必须记录债务并安排后续补测。

1.4 识别根本原因(顺藤摸瓜 + 5 个为什么)

  • 区分出错点( A )与根本原因( B
  • 出错点( A :问题具体出现在哪一行代码、哪个文件、哪个函数、哪个样式属性。必须精确定位到具体的代码位置和内容。
  • 根本原因( B :导致问题发生的深层次原因,通常与设计、架构、代码逻辑或约束有关。
  • 追溯方法:从现象出发,沿着调用链、数据流或事件传递路径反向排查。
  • 5 个为什么分析法:连续问"为什么"直到找到根本原因:
  • 为什么会发生这个错误?(找到直接原因)
  • 为什么直接原因会发生?(找到间接原因)
  • 为什么间接原因会发生?(找到更深层原因)
  • 为什么这个深层原因没有被发现/阻止?(找到流程/规范问题)
  • 为什么流程/规范存在漏洞?(找到根本原因)
  • 必须输出
  • 出错点( A :精确到具体代码位置和内容(例如:/templates/review.html 第 155 行 .output-section .section-content 设置了 overflow: visible)
  • 直接原因:出错点 A 附近的直接问题(例如:overflow: visible 导致父容器无法约束子元素高度)
  • 根本原因( B :最深层的原因(例如:对 flex 布局中 overflow 属性的理解不足,修改时只改了子容器而忽略了父容器的约束关系)
  • 双重修复要求 :如果 A ≠ B,则必须同时修复 A B。A 的修复用于缓解/消除当前症状,B 的修复用于防止问题复发或扩散到其他调用者。
  • 根因验证:问自己:"如果修复了 B,这个问题还会再次发生吗?" 如果答案是"会",说明还没有找到真正的根本原因,需要继续深挖。
  • 示例(滚动问题)
  • 现象:结果输出区无法滚动
  • 出错点(A):#resultContainer 设置了 overflow-y: auto 但没有生效
  • 直接原因:父容器 .output-section .section-content 设置了 overflow: visible,无法约束子元素高度
  • 根本原因(B):对 flex 布局中 overflow 属性的工作原理理解不透彻,只修改了子容器而忽略了父容器的约束作用
  • 修复:修改父容器的 overflow: visible 为 overflow: hidden(B)+ 确保子容器有正确的滚动属性(A)
  • 示例( API 错误)
  • 现象 A:前端显示"用户信息加载失败"
  • 出错点(A):前端代码在第 X 行调用 API 后未处理 500 错误
  • 直接原因:后端 API 在用户名为空时返回了 500 错误
  • 根本原因(B):后端未对输入参数进行校验,违反了 API 契约规范
  • 修复:前端增加对 500 错误的处理(A)+ 后端修复参数校验并返回正确的 400 状态码(B)

2. 用户确认

在故障定位完成后、动手修复前,必须向用户汇报分析结果并获取确认。

沟通模板

问题分析完成:

  • 出错模块 / 层面xxx
  • 出错点 (A)xxx
  • 根本原因 (B)xxx
  • 我建议的修复方案是[ 简要说明A 如何修*+ B* 如何修*]*

是否同意继续修复?

用户同意后再进入步骤 3。如用户不同意或有补充信息,重新分析。

3. 修复影响分析

3.1 评估修复有效性 :回答:修复根本原因 B 后,能否真正阻止问题再次发生?若不能,需要继续深挖。

3.2 识别影响范围:分析该 Bug 影响了哪些功能、数据或用户场景。

3.3 寻找关联改动点:判断是否存在其他需要同步修改的地方(例如:相同逻辑在其他分支、类似函数的调用处)。

3.4 评估连锁修改:列出修复可能带来的依赖变动、接口变更或配置调整。没有影响到的地方不做修改。

4. 方案设计

4.1 提出两种可能的修复方案(除非明显只有一种合理方案)。

4.2 选择更优方案:基于"预防问题再次发生的概率"进行对比,选择能更大程度避免复发的方案。说明选择理由。

4.3 设计优于补丁:补丁比重构还复杂时选择重构。优先考虑从设计层面解决问题,避免临时补丁堆积导致技术债务。

沟通模板

我建议的修复方案是:[ 方案描述*]*,是否同意此方案?

5. 方案评审

对选定的方案进行自我批判:

  • 是否有遗漏的场景?
  • 是否破坏了现有其他功能?
  • 是否存在性能或安全风险?
  • 是否需要补充日志、监控或文档?
  • 输出评审结论,必要时修正方案。

6. 虚拟修改(静态推演)

在脑海中或文本中模拟修改代码的过程,检查以下内容:

  • 修改是否完整覆盖了根因(包括 A 和 B)?
  • 是否引入了语法错误或类型不匹配?
  • 是否保持了代码可读性和一致性?

7. 单元测试

7.1 将步骤 1.3 编写的复现测试修正为预期通过

7.2 编写或更新其他相关单元测试,确保:

  • 原有测试全部通过(无回归)。
  • 新增测试能捕获该 Bug,并在修复后通过。
  • 边界条件被覆盖。

7.3 回归测试:执行项目的完整测试套件,确保修复未引入新问题。

7.4 执行测试命令并确认结果(若环境不允许真实执行,则要求用户运行并提供反馈)。

8. 全局扫描

在代码库中搜索是否存在相同或类似模式的其他位置:

  • 使用正则或静态分析思路,找出可能具有同样潜在问题的代码(特别是与 B 类似的模式)。
  • 如果发现,列出来并建议一并修复。在获得用户同意后统一修改。

9. 经验总结(自动存档)

必须执行:修复完成后,使用 Write 工具将记录追加到项目根目录的 docs/bug-fixes.md。

9.1 先读取 docs/bug-fixes.md(如不存在则创建),获取已有内容。

9.2 生成本次记录,格式如下:

## Bug 修复记录

  • ** 问题描述 ** : xxx

  • ** 严重程度 ** : P0/P1/P2/P3

  • ** 现象点 (A)** : 文件:行号 - xxx

  • ** 根本原因 (B)** : xxx

  • ** 修复方案 ** : A: xxx / B: xxx

  • ** 预防措施 ** : xxx

  • ** 影响范围 ** : xxx

9.3 将新记录追加到已有内容顶部(最新记录在前),写入 docs/bug-fixes.md。

9.4 完成后告知用户存档位置。

沟通模板

Bug 已修复,修复内容:[ 摘要*]* ,经验教训已存档至docs/bug-fixes.md。

修复检查清单

在完成修复后,检查以下项目:

  • \] 已自行判断问题性质(Bug 修复 vs 需求变更)

  • \] 已定位出错模块、层面、代码位置

  • \] 已向用户汇报分析结果并获得确认

  • \] 已评估影响范围和连锁修改

  • \] 已进行全局扫描

输出要求

  • 步骤 1(故障定位)完成后,必须向用户汇报分析结果并获取确认,方可继续。
  • 关键决策(方案选择、影响分析)必须征得用户确认后再继续。
  • 最终生成的代码修改需以 diff 形式或清晰的前后对比展示。
  • 除非用户明确要求立即执行,否则不主动修改代码,而是输出待应用的变更说明。
相关推荐
No8g攻城狮7 小时前
【AI工具】Sub2API简介 – 开源 AI API 中转网关平台,支持多账户管理
人工智能·ai·开源·ai编程
aqi007 小时前
15天学会AI应用开发(一)搭建AI大模型应用开发环境
人工智能·python·大模型·ai编程·ai应用
技术探讨者7 小时前
极境导表工具 —— 让配置数据成为游戏开发的效率引擎
unity·编辑器·ai编程·游戏策划
白日梦想家L_7 小时前
Claude Code 的权限模式——default、plan、acceptEdits 什么时候用
ai·ai编程
埃菲尔铁桶9 小时前
Codex 把我 C 盘半边天削平了——AI Coding 时代,别再盲目Approve
ai编程
aqi009 小时前
15天学会AI应用开发(五)使用AI摘要来压缩上下文消息
人工智能·python·大模型·ai编程·ai应用
Are_You_Okkk_10 小时前
无需配环境、不受设备限!MonkeyCode重新定义研发
大数据·人工智能·开源·团队开发·ai编程
AI产品实战10 小时前
95coder一句话生成MOM系统,AI用时6分50秒,Token只消耗25107
vue.js·spring boot·ai编程·ruoyi
Sator110 小时前
Unity2022版接入MCP
unity·ai编程