3. 需求分析
在构建审批工作流之前,必须对“变更”本身进行精确的需求分析。本章以一个典型的代码合并(Pull Request)与文档审批混合场景为例,解读其背后的核心需求。该场景融合了技术资产(代码)与业务资产(文档)的变更管理,是工程团队中最常见的协作模式。
3.1 场景定义:混合资产变更
假设我们正在为一个内部微服务项目“Order-Service”实施变更。本次变更涉及两部分内容:
- 代码变更:修复订单超时计算的边界条件 Bug,修改了
src/core/order.go和src/api/handler.go两个文件。 - 文档变更:同步更新了 API 接口文档
docs/api-order-v2.md,并新增了变更日志CHANGELOG.md条目。
该变更的审批流程不能简单一刀切,必须根据资产类型和变更影响范围进行差异化处理。
核心矛盾:代码变更需要技术负责人(Tech Lead)审查代码质量与单元测试;文档变更需要产品负责人(Product Owner)确认业务描述准确性。如何在一个工作流中统一协调这两种审查意见?
3.2 需求文档关键要素解读
一份合格的变更需求文档(通常以 PR 描述或变更单形式存在)应包含以下五个核心要素。我们以表格形式进行结构化解读:
| 要素 | 字段示例 | 工程含义 |
|---|---|---|
| 变更标识 | CHG-2025-003 |
全局唯一 ID,用于关联 CI/CD 流水线、回滚记录和审计日志。 |
| 变更范围 | src/core/order.go (M), docs/api-order-v2.md (A) |
使用文件变更类型标记:M=修改,A=新增,D=删除。这是自动化权限判断的基础。 |
| 影响分析 | 影响模块:订单超时、API 响应格式;风险等级:中 | 决定是否需要额外审批环节(如安全审查或架构委员会评审)。 |
| 审查人指派 | 代码审查:@alice (Tech Lead);文档审查:@bob (Product Owner) | 基于 CODEOWNERS 文件或组织架构自动匹配,支持手动覆盖。 |
| 验收标准 | 1. 所有单元测试通过;2. API 文档与代码行为一致;3. 无新增安全漏洞 | 作为审批通过的硬性条件,可被自动化工具(如 CI 状态检查)预验证。 |
3.3 权限模型:谁可以批准什么?
基于上述需求要素,我们可以推导出权限模型。权限不是简单的“管理员/普通用户”二元划分,而是基于文件路径和变更类型的细粒度控制。
- 路径匹配规则:
src/*路径下的变更由@tech-leads组审查;docs/*路径下的变更由@product-owners组审查。 - 变更类型规则:对于
D(删除)类型的变更,无论路径如何,都需要@architects组额外批准。 - 冲突处理:当同一个文件同时被代码和文档审查人关注时(如
README.md),采用“任一通过即通过”或“全部通过才通过”的策略。本案例采用后者,确保质量。
工程实践:在 Git 仓库中,
CODEOWNERS 文件是实现路径匹配权限的事实标准。我们的审批工作流应直接解析该文件,避免权限配置的二次维护。
3.4 变更记录:不可篡改的审计轨迹
每一次审查意见、状态变更、权限判定都必须被记录,形成完整的变更记录(Change Log)。这不仅是合规要求,更是事后追溯和问题定位的关键。
一个典型的变更记录条目应包含以下字段:
{
"changeId": "CHG-2025-003",
"timestamp": "2025-04-08T10:30:00Z",
"actor": "alice",
"action": "APPROVE",
"resource": "src/core/order.go",
"context": {
"reviewComment": "边界条件处理逻辑正确,单元测试覆盖充分。",
"previousStatus": "PENDING_REVIEW",
"newStatus": "APPROVED"
},
"signature": "sha256:abc123..."
}
该记录采用结构化 JSON 格式,便于写入事件存储(如 Kafka 或数据库审计表)。signature 字段用于防止记录被篡改,是工程合规性的重要保障。
3.5 需求分析总结:从文档到工作流
通过上述需求解读,我们可以将零散的需求文档转化为可执行的工作流规则。下图展示了从“变更提交”到“审批完成”的核心逻辑:
该流程图清晰地展示了:变更提交后,系统自动解析范围,通过 CODEOWNERS 匹配审查人,然后触发并行审查。只有当所有必要的审查意见都通过后,汇总决策环节才会执行最终的合并或批准操作,并生成不可篡改的变更记录。
常见陷阱:不要将“审查意见”等同于“审批通过”。审查意见可以包含“需要修改”、“信息询问”、“拒绝”等多种状态。工作流必须能处理这些非二值状态,并支持迭代修订。