如何在现代 DevOps 流水线中实现 IEC 62304(可追溯性、SOUP、风险控制和 CI/CD 证据)

发布: (2026年1月15日 GMT+8 16:54)
8 min read
原文: Dev.to

Source: Dev.to

如果您正在构建 SaMD 或医疗器械内部的软件,您可能已经搜索过:

“如何在 Agile/DevOps 工作流中实现 IEC 62304?”

真正的挑战不是学习标准,而是 将其落地运营,同时仍然保持现代工程的感觉:PR、CI/CD、IaC、容器、SBOM、自动化测试以及快速发布。

IEC 62304 概要

  • 目的: 定义医疗器械软件的软件生命周期过程。
  • 不可协商的要求: 必须能够端到端证明已实施、已验证软件风险控制,并且已对更改进行控制。
  • 证据管道 = 你的可追溯性图。

Safety Classes

ClassDescription
A不会造成伤害
B可能导致非严重伤害
C可能导致严重伤害或死亡

类别决定了在单元验证、独立性、追踪深度、审查严格程度、异常处理等方面的深入程度。

工程翻译: 定义一个 “合规配置文件”(文档 + CI 规则),其内容会根据类别和特性风险而变化。

最小可行可追溯图

Hazard (ISO 14971) → Risk control → Software requirement → Design element
      → Code change → Test case → Test result → Release

这并不是繁琐的工作——它是证明风险控制有效并在审计中不靠奇迹生存的方式。(IEC 62304 和 ISO 14971 正是因为这种映射而常常一起实施。)

建议的仓库布局

/docs                # compliance docs, risk analyses, etc.
/src                 # source code
/.github   (or /ci)  # CI/CD pipelines, GitHub Actions, etc.

为什么这样可行

  1. 生命周期对齐 – 计划 → 需求 → 设计 → 验证 → 发布。
  2. CI 强制证据 – 后期无需手动追踪。
  3. 与工具无关 – 适用于 GitHub、GitLab、Bitbucket 等。
  4. 第 1 天无需重量级工具 – 只需稳定标识符和机器可检查的链接。

推荐模式:Typed IDs + PR Gating

标识符方案

制品前缀示例
Risk controlRC-RC-012
RequirementSRS-SRS-041
DesignSDS-SDS-010
TestTST-TST-201
AnomalyANOM-ANOM-033

强制规则(通过 CI / PR 模板)

  • PR 描述 必须至少包含一个 SRS-###
  • 如果 PR 涉及安全关键模块,则需要关联一个 RC-###
  • 测试必须在其元数据或文档字符串中引用相应的 SRS-###
  • CI 会生成可追溯性报告,如果缺少必需的链接则 失败

示例 PR 模板片段

### Linked items
- **Requirements:** `SRS-041`, `SRS-044`
- **Risk controls:** `RC-012`
- **Tests:** `TST-201`, `TST-205`
- **Anomalies (if any):** `ANOM-033`

你已经将“可追溯性”转化为可强制执行的契约。

从风险控制到工程制品

常见的合规缺口:风险控制仅存在于 PDF 中,且从未纳入工程工作流。

将风险控制表示为:

  1. 需求(带接受准则)
  2. 设计约束(架构决策)
  3. 自动化验证(测试 + CI 证据)

示例:报警时序风险控制

  • 风险控制 RC-012 – “报警必须在 2 秒内触发。”
  • 需求 SRS-041 – 时序规范。
  • 设计 SDS-010 – 事件循环 + 优先级调度。
  • 测试TST-201(集成),TST-202(系统)。
  • 发布证据 – CI 测试报告 + 性能日志,归档为制品。

这形成了一条从风险 → 验证的清晰链路。

管理 SOUP(未知来源软件)

IEC 62304 将 SOUP(开源库、操作系统组件、第三方 SDK 等)视为安全影响的一部分——如果你发布它,你就拥有它

最小化 SOUP 控制策略

  1. 维护依赖清单(SBOM 为理想选择)。
  2. 锁定版本 并使用 lockfile。
  3. 定义更新规则——计划的、审查的、测试的。
  4. 验证关键依赖的安全影响
  5. 添加补偿性控制——沙箱、超时、重试、看门狗。

CI “SOUP 门”

如果在未提供以下信息的情况下引入新依赖,则构建失败:

  • 记录的用途
  • 负责人
  • 版本锁定
  • 风险说明(即使是简短的)

这将 “我们使用开源” 与 “我们控制 SOUP” 区分开来。

IEC 62304 所需的验证证据

级别典型产物
单元逻辑层测试
集成接口与数据流测试
系统需求层行为测试
非功能性能、可靠性、安全(根据风险需求)

让 CI 生成审计友好的产物

在你的 CI 流水线中:

  • 导出 测试摘要(JUnit XML,HTML 报告)。
  • 归档 带版本的日志(性能、覆盖率、静态分析)。
  • 嵌入 构建元数据(提交哈希、环境、工具版本)。

每次构建都成为可重现的“迷你发布包”。

进一步阅读

关于 IEC 62304、安全等级和典型工件的更深入探讨,请参见以下链接:

什么是 IEC 62304? – CitrusBits

变更管理与发布文档

IEC 62304 要求 受控的变更管理维护

工程翻译

您的 Git 工作流 就是 变更控制系统——只要您正确地组织它。

受监管的 PR 检查清单(轻量但强大)

  • 改动了什么,为什么?
  • 受影响的需求 (SRS-###)?
  • 受影响的风险控制 (RC-###)?
  • 回归范围(需要重新运行哪些测试)?
  • 新的异常?
  • SOUP(商用现成软件)变更?

自动化枯燥的部分

  • 映射被触及的模块 → 所需的测试套件
  • 对安全关键区域 强制必须的审阅者
  • 若缺少追踪链接 阻止合并

CI 生成的发布包

无需手动组装文档,让 CI 生成:

  • 追踪报告(需求 ↔ 测试 ↔ 结果)
  • SBOM / 依赖清单
  • 测试摘要 + 环境元数据
  • 已知异常列表(附风险评估说明)
  • 版本 ID 与制品哈希

将这些存放在不可变的制品库中(签名发布、受控存储)。

这将审计从“讲故事”转变为“这里是证据包”,消除审计的首要失败模式:缺失或不一致的文档。

祝合规编码愉快!

结论

IEC 62304 并不是“一次性完成”的任务,而是需要持续嵌入的过程:

  • 可追溯性 通过 PR + CI 强制执行
  • 风险控制 以需求 + 测试的形式实现
  • SOUP 作为依赖工程的一部分进行管理
  • 发布 打包并附带可复现的证据

如果您希望有一个团队帮助您以仍然符合现代软件交付(敏捷、CI/CD、云)方式实现 IEC 62304,请在此处了解 CitrusBits

https://citrusbits.com/

Back to Blog

相关文章

阅读更多 »

Rapg:基于 TUI 的密钥管理器

我们都有这种经历。你加入一个新项目,首先听到的就是:“在 Slack 的置顶消息里查找 .env 文件”。或者你有多个 .env …

技术是赋能者,而非救世主

为什么思考的清晰度比你使用的工具更重要。Technology 常被视为一种魔法开关——只要打开,它就能让一切改善。新的 software,...

踏入 agentic coding

使用 Copilot Agent 的经验 我主要使用 GitHub Copilot 进行 inline edits 和 PR reviews,让我的大脑完成大部分思考。最近我决定 t...