mcpField
U
ub-mode

ub-mode

github.com/unclebob开发3.7k228 次安装3 天前更新
代码仓库

关于 ub-mode

ub-mode 汇集了代码修改实践,引导工作从实现最小可用改动走向验证与清理。它强调测试、修复根因,以及小步且可追踪的执行方式。

主要功能

  1. 01从最小可用改动开始
  2. 02采用测试驱动开发
  3. 03建模领域并校验边界
  4. 04确保操作具备幂等性
  5. 05记录行动及其理由
  6. 06重构并验证行为

适用场景

  1. 01将改动规划为可验证的小单元
  2. 02在重构前后测试行为
  3. 03追查反复失败背后的前提
  4. 04记录工作并准备提交

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/unclebob/ub-mode --skill ub-mode

安装后在 Claude Code 中输入/ub-mode确认已加载。

附带文件README.md

详细介绍

ub-mode

每次收到更改请求时,都要遵循:

  • 先让它能工作。
  • 再让它正确。
  • 遵循实践

先让它能工作

懒惰协议

  • 一项决策只在一个地方做出。
  • 只提交能解决问题的最小改动。

基础思考

  • 编写逻辑之前,先把数据结构设计正确。
  • 优先完成能为后续每个阶段带来帮助的工作。
  • 如果并发写入者会造成影响,就不要共享状态。

TDD

  • 修改代码前,先编写一个会失败的测试。
  • 确认它因预期原因而失败。
  • 只做能让测试通过的最小改动。
  • 如果无法切实编写测试,就不要写糟糕的测试。

从第一性原理重新设计

  • 不要把新需求硬塞进旧设计。
  • 思考如果从一开始就有这项需求,你会如何设计,然后分步交付。

质疑前提

  • 如果两个基于同一前提的修复都无法通过同一个关卡,就用一句话写明该前提,并统计哪些参与者处于失衡状态。
  • 移除该任务分配。
  • 完成这一步之前,不要开始另一项修复。

先做减法,再做加法

  • 添加任何内容之前,先消除复杂性。

以结果为导向执行

  • 以可验证的最终状态为目标。
  • 只要事先规划好并且能够撤销,中途出现中断也可以接受。

打造杠杆

  • 如果工作无法一眼看明白,就打造能完成这项工作的工具。
  • 先手动完成一个单元,再让工具匹配这个单元。

架构

建模领域
  • 用一种能让非法状态无法出现的结构来表达领域。
  • 维护领域术语表。
  • 如果代码已经清晰且局部,就保持原样。
边界规范
  • 在数据进入系统时进行检查。
  • 内部逻辑中,信任数据。
  • 将业务逻辑保留为纯函数。
类型系统规范
  • 让非法值无法写入。
  • 在外部数据进入系统时,只解析一次。
  • 不要屏蔽编译器提示。
让操作具备幂等性
  • 无论运行两次,还是中途崩溃后再运行,最终状态都相同。
序列化共享状态之前先分离
  • 如果它们不需要同一个可变对象,就各自使用独立对象。
  • 如果确实需要共享,就只允许一个写入者,并在结构中强制执行这一点。

再让它正确

修复根本原因

  • 重现问题。
  • 修复原因。
  • 只能掩盖崩溃的防护措施不算修复。

将工作拆分为可验证的单元

  • 完成一个小单元并进行检查。
  • 然后再开始下一个。

测试行为,而非实现

  • 测试应像用户一样调用代码,并检查用户能看到的结果。
  • 如果所有函数都返回空值时测试仍能通过,就丢弃它。

Crapper

  • 使用 crapper 工具
  • 通过拆分函数、测试函数或两者兼用,将每个函数的 CRAP 指数降至 10 以下。
  • 考虑是否值得降低 case 语句的复杂度。

Dryer

  • 使用 dryer 工具消除重复度达到或超过 0.8 的重复内容。

Mutator

  • 使用 mutator 工具
  • 覆盖尚未覆盖的部分。
  • 消灭存活的变异。
  • 删除死代码。

重构

  • 锁定代码的行为。
  • 改变结构。
  • 证明行为没有改变。

实践

记录日志

  • 记录你采取的每项操作及其原因。
  • 完成后报告该日志。

保护上下文窗口

  • 保持主线程精简。
  • 将大部分工作交给其他线程,并保留摘要。

清理工作树

  • 找出可以安全移除的内容,确认没有仍在使用的依赖,然后释放磁盘空间。
  • 未提交的工作须等待决定。

提交并推送

  • 经常提交,并按小步有序提交。
  • 每次提交都要说明原因、改动内容以及验证方式。
  • 最后推送到主线。

评论

支持 Markdown