首页/开发/代码质量与评审速查/童子军规则(Boy Scout Rule)
重构手法62 条

童子军规则(Boy Scout Rule)

每次经过顺手改善一点:提交时让代码比检出时略干净(改好一个命名、删一段死代码、补一个测试);小额定投比集中整顿更可持续,也天然控制风险。

童子军规则是什么

童子军规则来自营地习惯:离开时比来到时更干净。落到代码里就是每次提交让文件比检出时略好一点——改准一个命名、删掉一段死代码、补上一个用例。小额定投比集中整顿更可持续,也天然控制风险:每次改动都在评审视野内。

基本信息

原意离开营地时比来到时更干净
落地方式每次提交带一个微小且相关的清理
边界不把顺手改扩大成无关的大改动
前提有测试或可验证的行为保证
长期效果债务增长被日常动作持续抵消

典型使用场景

  • 改动某个函数时,顺手把误导性的命名改准确
  • 删掉本文件里已确认无人引用的死代码
  • 补齐本次改动涉及分支的缺失测试
  • 把重复出现三次以上的字面量提成常量
  • 修正与实现不符的注释与文档

评审里怎么提

评审里怎么提
// 可以这样顺手提出:
// 这个分支顺手提取成函数,改动在五行以内
// 这处命名改成与实际职责一致,建议随本次改动一起做
// 顺手补上这个边界条件的用例,避免下次又改坏

该顺手做与不该做

类别例子判断
低风险清理命名、注释、死代码改动小且与本次改动相关
测试补强补当前分支用例有明确验证价值
结构调整拆类、替换设计模式牵扯面大,另开任务
顺手改的上限是相关性:本次改动碰到的那几行、那个函数、那个文件。超出范围就该另开任务,别把评审变成考古现场。
只清理不改测试:行为保证不足时,清理本身也可能引入缺陷;没有测试覆盖的老代码,先用特征测试锁定行为再顺手整理。
顺手清理也走正常流程:正常提交、正常评审、改完跑一遍测试;不要用未经评审的批量脚本替换来清代码,那类改动最容易引入难以定位的小问题。

易错点

  • 顺手改扩大化:一次提交混入大量无关重构,评审疲劳且难以回滚
  • 只清理不改测试:行为保证不足时风险仍然很高
  • 把清理当绩效:统计改了行数而不是减少的问题,反而鼓励为了改而改
  • 只在有空时集中整顿:大扫除式重构风险集中,且常常半途停手

数据来源与参考

  • 《Clean Code》(Robert C. Martin)· 童子军规则,及《重构》的持续小步思想
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌