审查文化
建审查是协作改进非守门战或橡皮图章的文化。
为什么
代码审查文化定过程产更好代码还是仅更慢代码。守门文化——审查是作者须过的测试——使作者防御、审查者对立、反馈辩论而非收。橡皮图章文化——批准自动——使审查无意义、bug 发、团队学审查是形式。学习文化——审查是改进代码的协作——使作者接受、审查者建设、反馈被收和行动。差非清单或工具;是审查为何的共享信念。学习文化更快产更好代码 ,因作者和审查者同侧(代码的)、反馈关于代码(非作者)、目标是改进(非批准)。这文化以身作则建——技术负责人友善审查、问问题、谢审查者、视每评论为学习机会。
何时使用
始终——文化建于每审查交互、每评论、每回应非一次性训练。
如何做
1. 将审查框为协作非守门 - "一起改进这个"非"证这正确" - 审查者和作者同侧: 代码的 - 目标是更好 PR 非批准 PR 2. 以身作则(技术负责人和资深) - 友善审查: 问问题、提例、解释为什么 - 优雅回应: 谢审查者、考虑反馈 - 认错: "好抓、我漏了"建信任 - 团队跟榜样非规则书 3. 使审查为学习机会 - 分享知识: "我见这模式负载下失败,原因..." - 问问题: "缓存冷时怎样?"教作者思考 - 解释推理: "我们用事务因若第二个写失败..." - 作者学、下 PR 更好、团队成长 4. 分开人和代码 - 评代码: "这函数太长" - 非人: "你写长函数" - 用"我们"和"代码"非"你"和"你的代码" - 假设作者聪明且尽力 5. 庆祝好审查 - 谢抓生产 bug 的审查者 - 突出教团队新东西的审查 - 使审查为过程可见、有价值的部分 - 庆祝的重复
示例
// 守门文化(坏): // 审查者: "这错了。修。" // 作者: "能用、我测了。" // 审查者: "仍错。我阻这。" // 作者: "好、你要什么?" // 审查者: "自己想。" // 结果: 作者怨修、学无、未来避那审查者。 // 学习文化(好): // 审查者: "我觉得这里有竞条件。若两请求同时更新同记录, // 第二个覆第一个。你觉得?" // 作者: "哦、未考虑那。该如何处理?" // 审查者: "可用乐观锁——加版本字段仅版本匹配时更新。要我示例吗?" // 作者: "好、我加版本字段和并发更新情况测试。" // 结果: 作者学新模式、代码更好、下 PR 作者正确处理并发。 // 技术负责人示范文化: // "谢审查!你对、我漏了 null 检。 // 我加了它和 null 情况测试。好抓。" // (非: "不会 null、调用者保证。") // 团队会庆祝好审查: // "本周 @alice 的审查发前抓了 SQL 注入漏洞。 // 那审查救我们于潜在入侵。谢 Alice 彻底审查。" // (庆祝的重复。) // 新开发者入文化: // "我们审每 PR、目标是一起改进代码。 // 你首 PR 会得很多评论——那正常、是我们分享知识的方式。 // 每评论关于代码非你。问问题、我们解释推理。"
常见问题
- ⚠资深审查者把审查当作者须过的测试——作者变防御、反馈辩论、初级开发者停开 PR 避对立审查。
- ⚠批准自动的橡皮图章文化——审查者不读 diff 点批准、bug 发、团队学审查是加延迟无价值的形式。
- ⚠个人批评("你总犯这错")使作者防御——有效技术点失于情绪反应、作者不学教训。
- ⚠无反馈文化——审查者无评论、静默批准、作者无学习、无改进、不知代码好还是仅幸运。
最佳实践
- ✓将审查框为改进代码的协作非过的测试——审查者和作者同侧、目标是更好 PR 非批准 PR。
- ✓以身作则——技术负责人和资深友善审查、问问题、谢审查者、认错、团队跟榜样因文化由行为建非规则。
- ✓使每审查为学习机会——分享推理、解释为什么、作者学、下 PR 更好、团队随时间成长。
- ✓公开庆祝好审查——谢抓 bug 的审查者、突出教团队的审查、庆祝的重 复。