首页/开发/代码质量与评审速查/评审评论怎么写:问题 + 原因 + 建议
代码评审64 条

评审评论怎么写:问题 + 原因 + 建议

Google 评论写作指南:评论要说明问题的原因与影响,并给出方向性建议或提问,而不是只丢一句结论。

评论要写清什么

Google 的评论写作指南要求一条评审评论说清三件事:问题是什么、原因或影响是什么、建议怎么改(或者提出一个具体问题)。只给结论的评论会把背景藏起来,作者只能反复追问,评审轮次因此变多;写清为什么的评论还能被后来人读懂,成为代码历史的注解。

基本信息

结构问题 + 原因或影响 + 建议(或提问)
语气就事论事,指向代码与行为而不是人
长度一条评论只谈一个主题
优先级阻塞项与非阻塞项分开标注,方便作者排序
适用场景PR/MR 行内评论、代码走查、离线评审记录

反例与正例对比

反例与正例对比
# 反例:只有结论
这里不要这么写。

# 反例:把个人偏好说成规则
我不喜欢这种命名,改掉。

# 正例:问题 + 影响 + 建议
两次查询之间没有事务,并发下可能读到不一致状态;
能不能合并成一次查询,或者用事务把两次读包起来?

# 正例:提问代替命令(作者可能掌握更多上下文)
这里不处理 null 是有意的吗?如果是漏了,建议加一次早返回。

写作要点

  • 先写观察到的事实,再给判断:事实可核对,判断可讨论。
  • 说明影响:会出错、难以维护、性能退化,用具体后果代替「不好」。
  • 给出方向而非命令:建议、提问、示例都可以,作者更容易接受。
  • 一条评论只谈一件事:混在一起作者容易漏改,讨论线索也会分叉。
  • 不确定意图时先用提问确认,确认后再给结论,避免误判。
  • 标出优先级:必须改的与可选的分别标注,降低来回确认成本。

不同类型评论的写法

类型写法要点示例开头
阻塞问题说清后果与触发条件这里在并发下会……
改进建议给出方向,允许作者判断可以考虑……你觉得呢
确认提问先问意图,再下结论这里是有意为之吗
肯定做法指明好在哪里,便于复用这里的重试封装很清楚

常见表达的改写

  • 「这样不好」→ 说清哪里不好、在什么条件下会出问题。
  • 「按规范改」→ 引用具体条款或贴出示例,只提规范名等于让作者去猜。
  • 「重写吧」→ 指出结构问题与拆分方向,给一个可执行的起点。
  • 「随便」不要写:要么明确标为非阻塞,要么干脆不提。

把意见写得可执行

  • 先说清触发条件:什么输入、什么时序下会出问题,作者才能复现。
  • 描述你期望的行为:只说不合适没有用,说明改成什么样子才算好。
  • 附上依据:团队规范条款、接口约定、性能数据或已有的先例。
  • 区分本次必须改与以后再说:前者列为阻塞项,后者标注为后续改进。
  • 提问时给出自己的猜测:说明你担心什么,作者的回答会更聚焦。
  • 涉及取舍时列出可选方案:把选项讲清楚,作者更容易下结论。
同一处问题只在第一条评论里展开,后续用「同上」加行号引用,避免重复长文稀释重点。
评论越接近「照着做就行」,往返次数越少;但建议不等于指令,作者仍对最终方案负责。
把主语换成代码或行为(「这个查询」而不是「你」):讨论更容易停留在技术层面。

易错点

  • 只给结论不给原因:作者只能猜评审者意图,来回轮次明显变多。
  • 一条评论塞多个问题:作者容易漏改,讨论线索也混在一起无法收敛。
  • 把个人偏好写成规则(我不喜欢这种写法):作者无法判断要不要采纳,只能反复确认。
  • 用第二人称评价人(你怎么又这样写):讨论转向情绪,技术问题被搁置。
  • 把必须改的问题藏在非阻塞语气里:作者按非阻塞处理,缺陷被带上线。

数据来源与参考

  • Google Engineering Practices · How to write code review comments
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌