Bug Fix

修复 bug。用户指定工单或直接描述缺陷时按它修,没指定时到 docs/bugs/ 里挑一个;先复现再定位根因,根因没定位到不许动手。bug 是代码与产品文档不符,只改代码不改产品文档;确实要改产品设计的必须先问用户。修完验证通过就删掉工单。用于「修这个 bug」「找个 bug 修」等场景。

baijunjie Updated

File contents

修复 bug

bug 的定义是代码行为与产品文档(或用户确认的口径)不符。 所以修复只改代码, 不改产品文档——文档是判定谁对谁错的基准,改了基准就等于把 bug 认定成了正确行为。

选定要修的 bug

用户给了什么 怎么做
指名了工单 按它修
只口头描述了缺陷 直接修,不必先建工单
什么都没给 到工单目录(默认 docs/bugs/,项目有自己的约定时按项目的)里挑一个

自己挑时按以下判据,选定后先告诉用户修的是哪个再开工

  • 严重程度高的优先
  • 同级别里取复现步骤清楚、影响范围明确的
  • 目录是空的,或候选之间取舍不清(严重程度相当、互相牵连),列出候选让用户拍板,不要自己硬挑

动手之前

  • 先建立项目上下文:项目有自己的文档规范时按它的,否则从文档索引(默认 docs/README.md)入手 定位涉及的模块
  • 必须先复现。复现不了就停下汇报——写明试了什么、缺什么条件,不许凭工单描述猜着改
  • 复现后定位根因,根因没定位到不许改代码;查不出来就汇报卡在哪,不要试探性地改着看
  • 对照产品文档、或工单里写明的依据确认预期行为。两者都没有,或文档写的就是当前这个行为, 说明这不是实现偏差——停下来问用户要的是哪种行为,问清之前不要改

产品设计要改时

根因出在产品设计本身、只改代码修不掉的,停下来问用户:说明现状、为什么按现在的设计修不掉、 有哪些改法。用户拍板要改设计之后,才动产品文档与对应的代码;用户不改设计就按文档的口径修代码。

  • 改产品文档时,项目有自己的文档规范的按它的规定做;没有的落笔前必须先完整读一遍要改的那几份
  • 设计变更超出本 bug 的范围时,那是需求变更,按项目的需求讨论与开发流程另行排期, 本次只修与 bug 直接相关的部分

怎么修

  • 改在根因上,不在表象上堵。确实只能临时绕过时,代码里标 TODO 写明绕过了什么、什么条件下能真正修掉
  • 只改与本 bug 相关的部分;顺带发现的其它问题记下来,修完一并汇报,不要顺手改
  • 能加回归测试的加一条,覆盖这次的复现路径
  • 不要回头改工单:不勾进度、不写修复记录、不改状态。工单只负责把问题交接过来

验证与收尾

  1. 验证:按工单的验收判据逐条验;没有工单的按复现步骤确认现象消失。验证不过不算修完, 验不了的部分如实说明是哪部分、为什么
  2. 删工单:验证通过就把工单删掉,工单目录空了就把目录一起删。 验证没通过、或修复没做完的不许删

baijunjie/agent-skills/tree/main/plugins/dev/skills/bug-fix commit 6e3b7250a5

Frequently asked questions

npx skillmds@latest add baijunjie/bug-fix