首页/开发/代码质量与评审速查/生成代码的评审方法
代码评审64 条

生成代码的评审方法

生成代码(ORM 迁移、protobuf、模板产物)重点不看逐行实现,而看输入与生成规则:源头正确、差异符合预期、生成物可重现。

生成代码怎么评审

生成代码(ORM 迁移、protobuf 产物、模板渲染结果)不该逐行看实现,而应看输入与生成规则:源头定义是否正确、生成命令与生成器版本是什么、差异模式是否符合预期。判断标准是可重现——重新生成一遍,产物应当与提交内容完全一致。

基本信息

评审重点源头定义、生成命令与版本、差异模式
源头文件schema、proto 文件、模板
可重现验证重新生成后确认与提交内容一致
目录约定生成物与手写代码分开放置,避免互相覆盖

典型使用场景

  • 数据库迁移脚本:核对 schema 改动是否确有其意
  • 接口定义变更:先看 proto 文件,产物差异顺手检查
  • 模板渲染结果:确认模板改动范围,再看产物
  • 生成器升级:升级带来的大范围差异应单独提交
  • 发现产物被手工改过:要求回到源头修改后重新生成

评审生成代码的四个动作

  • 先看源头文件是否合理
  • 确认生成命令与生成器版本
  • 扫描差异模式,找出异常的删除与重命名
  • 重新生成一遍,验证产物可重现

可重现验证

可重现验证
# 重新生成之后确认工作区没有变化
git status --porcelain
# 若产物与提交不一致,说明生成器版本或参数不同
protoc --version

差异模式与含义

差异模式可能原因
大量重命名生成器版本升级或命名规则调整
范围之外的删除源头定义被误删,属于阻断项
同一文件反复抖动生成顺序或时间戳被写进了产物
只有少量新增常见的正常增量
手改生成产物是坑:下次生成就被覆盖,评审时应该要求回到源头去改。
生成器升级与业务改动混在一次提交:差异巨大,问题定位成本陡增。

易错点

  • 手改生成文件:下次生成时被覆盖,改动静默丢失
  • 生成器升级与业务改动混提:差异巨大,难以定位问题
  • 逐行评审生成产物:注意力花在机器输出上,源头问题反而没人看
  • 检查排除规则把生成目录一起跳过:源头改动也顺带没人审了
  • 生成物与手写代码放在同一目录:下次生成顺手覆盖掉手写改动

数据来源与参考

  • protobuf 官方文档(生成代码管理)
  • OpenAPI Generator 文档(生成产物工作流)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌