2. 代码评审基础

在自动化项目中,代码不仅是“能跑就行”的脚本集合,它往往直接控制设备动作、生产节拍、安全联锁和数据采集。一旦逻辑缺陷进入现场,轻则停机返工,重则造成设备损坏或人身风险。因此,代码评审(Code Review)不是形式化的签字流程,而是把个人经验转化为团队质量屏障的关键活动。

一句话定义:代码评审是由开发者之外的人员,对代码及其相关设计、配置、测试证据进行系统性检查,以发现缺陷、评估可维护性并共享知识的过程。它既是一种技术活动,也是一种团队协作机制。

一、代码评审的核心目的

很多团队把评审等同于“找 Bug”,这会导致评审范围过窄。在自动化项目中,评审至少承担五类目的:

  • 缺陷预防:在代码合入主干或下载到 PLC 之前,发现逻辑错误、边界遗漏、异常处理缺失等问题。
  • 一致性保障:确保命名、状态机结构、报警处理、注释风格符合项目规范,降低后期维护成本。
  • 知识共享:让其他成员了解模块设计思路,避免“只有作者能改”的单点依赖。
  • 风险控制:识别安全相关逻辑、互锁条件、急停路径是否被正确实现。
  • 可追溯性:评审记录可作为质量证据,支撑后续审计、复盘和变更管理。

这五类目的中,缺陷预防和风险控制在自动化项目中权重最高,因为现场调试成本远高于桌面修改成本。

二、三种典型评审类型

业界常把评审分为同行评审、走查和审查。三者在正式程度、参与角色和适用场景上有明显差异,自动化项目应根据风险等级选择。

类型正式程度主要形式适用场景输出物
同行评审中作者提交合并请求,1~2 名同行在线评论日常功能模块、非安全关键逻辑评论记录、修改后合入
走查中低作者讲解,参与者提问并记录问题新成员代码、复杂算法、接口设计问题清单、改进建议
审查高按检查表逐项核对,指定角色签字安全逻辑、急停回路、量产发布前审查报告、缺陷统计、签字确认

需要强调的是,三者不是互斥关系。一个安全相关的 PLC 功能块,可以先做同行评审,再在发布前进行正式审查。

三、常见术语与判断标准

评审过程中经常出现一些术语,理解它们有助于统一团队语言:

  • 缺陷(Defect):代码未满足需求或规范,可能导致错误行为。
  • 异味(Smell):不一定立即出错,但暗示可维护性差,如重复代码、过长函数。
  • 阻断项(Blocker):必须修复才能合入的问题,如安全逻辑缺失。
  • 建议项(Suggestion):可优化但不影响当前功能,如命名改进。
  • 检查表(Checklist):评审时逐项核对的条目集合,是审查的核心工具。
判断标准建议:把问题分为“阻断、重要、建议”三级。阻断项必须修复;重要项应在本次迭代内修复;建议项可进入技术债清单。这样能避免评审变成无休止的争论。

四、评审在自动化项目中的重要性

自动化项目具有三个显著特点:软硬件耦合、现场不可逆、安全责任重。这决定了代码评审的价值远高于普通业务系统。

第一,自动化代码经常与传感器、执行器、机器人、视觉系统交互。一个未处理的超时分支,可能导致设备等待到死机。第二,很多逻辑一旦下载到控制器,现场调试需要停机窗口,修复成本极高。第三,安全逻辑必须经过独立验证,评审是形成证据链的重要环节。

下面这张图展示了自动化项目中代码评审的典型位置与信息流:从需求与设计出发,经过开发、评审、修复、验证,最终进入发布与现场。评审不是单点动作,而是质量门禁。

自动化项目代码评审:质量门禁与信息流 需求与设计 功能/安全/接口 开发实现 PLC/机器人/上位机 代码评审 同行/走查/审查 修复与验证 单元/仿真/回放 发布 现场下载 检查表 安全/命名/异常/注释 评审记录 评论/签字/缺陷 阻断项 必须修复 评审关注点(自动化项目) 安全联锁与急停路径 状态机与异常恢复 接口与数据一致性 可维护性与可追溯性

五、案例:一次被评审拦下的“小问题”

某装配线项目中,工程师编写了一个托盘到位后的夹紧逻辑。代码在仿真中运行正常,作者认为可以直接下载。评审时,同行发现夹紧输出没有与“急停复位”状态做互锁,且夹紧超时后只报警不释放。虽然现场测试未必立刻触发,但一旦操作员在急停后复位,夹紧可能意外动作。

// 评审前(简化示意)
IF PartPresent THEN
    ClampCmd := TRUE;
    IF NOT ClampSensor THEN
        Alarm := TRUE;   // 仅报警,未处理输出
    END_IF;
END_IF;

// 评审后
IF PartPresent AND EStopOK AND NOT ClampFault THEN
    ClampCmd := TRUE;
ELSIF ClampTimeout THEN
    ClampCmd := FALSE;
    ClampFault := TRUE;
END_IF;

这个案例说明:评审的价值不在于发现“编译错误”,而在于发现状态组合下的风险。这类问题往往只有熟悉现场的人才能快速识别。

六、常见误区与复盘

  • 误区一:评审就是挑错。如果语气对立,作者会防御,评审效率下降。应聚焦代码,不评价个人。
  • 误区二:只看代码,不看需求。没有需求对照,无法判断逻辑是否完整。评审前应提供需求或设计说明。
  • 误区三:评审通过等于验证完成。评审不能替代仿真、单元测试和现场验证,它只是质量门禁之一。
  • 误区四:没有检查表,凭感觉评审。检查表能显著降低遗漏率,尤其是安全相关项。
复盘建议:每次评审后记录“发现的问题类型”和“漏到现场的问题类型”。如果某类问题反复出现,应把它加入检查表,并考虑在开发阶段增加模板或静态检查规则。

总结来说,代码评审在自动化项目中是连接开发与发布的必要环节。理解其定义、目的和三种类型,掌握常见术语与判断标准,并建立适合团队风险的评审机制,才能让评审真正成为质量屏障,而不是流程负担。