3. 医疗软件需求工程基础

在医疗软件项目中,需求不是一句“系统要能管理患者”这样的愿望,而是一份可被验证、可被追溯、可被监管审查的工程约定。IEEE 610.12 将需求定义为“系统或组件为满足合同、标准、规范或其他正式文档所必须满足的条件或能力”。放到医疗语境中,这个定义要再加一层约束:需求不仅要让开发团队能实现,还要让临床使用者能确认、让质量与法规人员能举证。因此,医疗软件需求工程的核心任务,是把临床意图、法规义务和技术约束,转化为一组层次清晰、类型明确、可双向追溯的需求条目。

一、需求的层次:从业务目标到可测试条目

需求通常分为四个层次,层次之间是“为什么—做什么—怎么做—怎么验”的分解关系。以“住院患者静脉用药闭环管理”为例:

  • 业务需求:降低用药差错率,满足三级医院评审对用药安全的要求。它回答“为什么做”,通常由医院管理层或临床科室提出。
  • 用户需求:护士希望在床旁用扫码确认患者与药品,医生希望开嘱后能立即看到配伍禁忌提示。它回答“谁要做什么”。
  • 系统需求:系统应在 2 秒内完成患者腕带条码与药品条码的匹配校验,并在不匹配时锁定给药操作。它回答“系统必须提供什么能力”。
  • 软件需求:校验服务应调用患者主索引接口,比对字段包括住院号、姓名、药品编码;比对失败时返回错误码 MED_MISMATCH 并写入审计日志。它回答“软件具体怎么做、怎么验”。

层次划分的价值在于追溯:任何一条软件需求都应能向上追溯到用户需求与业务目标,向下追溯到设计、代码和测试用例。若一条需求无法向上追溯,它很可能是“镀金需求”;若无法向下验证,它只是口号。

二、需求的类型:功能、非功能、法规与安全

医疗软件的需求类型比通用软件更复杂,因为法规与安全往往不是附加项,而是决定系统能否上线的硬约束。

功能需求描述系统“做什么”。例如:医生提交医嘱后,系统应生成待执行任务并推送至护士站;护士执行给药后,系统应记录执行时间、执行人、药品批号。功能需求应尽量写成“触发条件—输入—处理—输出”的形式,避免“系统应友好”这类不可验证表述。

非功能需求描述系统“做得怎么样”。医疗场景中常见的非功能需求包括:可用性(门诊高峰期系统可用率不低于 99.9%)、性能(条码校验响应时间 P95 不超过 2 秒)、可维护性(接口变更后 4 小时内完成回归测试)、易用性(新护士完成一次床旁扫码给药的操作步骤不超过 5 步)。非功能需求必须带度量口径,否则无法验收。

法规需求来自外部强制约束。例如:电子病历系统需符合《电子病历应用管理规范》对操作留痕、时间戳、数据可追溯的要求;若涉及医疗器械软件,还需满足 NMPA 注册审查指导原则中对软件生存周期、风险管理、网络安全的要求。法规需求通常以“应满足……”“应保留……记录不少于……”的形式出现,并需要建立法规条款到需求条目的映射矩阵。

安全需求在医疗软件中至少包含两层含义:一是患者安全,即软件失效不得导致用药、剂量、手术部位等错误;二是信息安全,即患者隐私数据在传输、存储、访问各环节受到保护。典型安全需求如:系统应对药品剂量超出安全范围的情况进行强制拦截,拦截规则不可由普通用户关闭;患者身份信息在数据库中应加密存储,密钥与数据分离管理。

在需求评审中,建议对每条需求标注类型标签(F/N/R/S),并检查四类需求是否都有覆盖。只写功能需求、忽略法规与安全需求,是医疗软件项目最常见的返工来源。

三、需求工程过程模型:从获取到变更

需求工程不是一次性写文档,而是一个持续循环的过程,通常包括需求获取、分析、规格说明、验证和变更管理五个活动。医疗软件尤其强调“临床参与”和“可追溯”,因此过程模型需要把临床用户、法规人员、质量人员和开发人员放在同一条信息链上。

需求获取阶段,常用方法包括临床访谈、现场观察、任务分析和现有系统日志分析。例如,要获取“急诊分诊”需求,仅靠访谈可能得到“要快”,而现场观察会发现护士在分诊时同时操作三个界面,真正的痛点是重复录入。分析阶段则要识别冲突、补齐边界条件,例如“药品库存不足时是否允许开嘱”这类业务规则必须在分析阶段明确。

规格说明阶段,推荐使用结构化需求条目模板,每条需求至少包含:唯一编号、需求描述、类型、优先级、来源、验收标准、追溯关系。验证阶段通过评审、原型走查和测试用例反查来确认需求是否完整、一致、可测试。变更管理阶段则要建立变更影响分析机制:一条需求变更会影响哪些设计模块、哪些测试用例、哪些法规映射,必须可查。

医疗软件需求工程:层次分解 · 类型覆盖 · 过程闭环 需求层次(自上而下分解) 业务需求 降低用药差错 · 满足评审 用户需求 护士床旁扫码 · 医生看禁忌 系统需求 2秒校验 · 不匹配锁定 软件需求 接口字段 · 错误码 · 审计日志 向上追溯目标,向下追溯测试 不可追溯 = 镀金或口号 需求类型(四类覆盖) 功能需求 F 触发—输入—处理—输出 例:医嘱提交生成任务 非功能需求 N 可用率99.9% · P95≤2s 必须带度量口径 法规需求 R 操作留痕 · 时间戳 · 可追溯 NMPA / 电子病历规范 安全需求 S 患者安全:剂量强制拦截 信息安全:加密与密钥分离 四类缺一不可,评审打标签 需求工程过程模型(持续循环) ① 获取 访谈·观察·日志 ② 分析 冲突·边界·规则 ③ 规格说明 编号·验收·追溯 ④ 验证 评审·原型·反查 ⑤ 变更管理 影响分析:设计·测试·法规映射 变更回流 需求条目最小字段 编号 · 描述 · 类型 · 优先级 · 来源 验收标准 · 追溯关系 标注 驱动

四、把需求写成可验收的条目:一个可参考的示例

下面给出一条医疗软件需求的完整写法示例,可直接作为团队需求条目的参考模板。示例中的参数为教学假设,不代表任何真实系统的实测值。

需求编号:REQ-MED-0042
需求名称:床旁给药条码不匹配拦截
类型:功能需求(F) + 安全需求(S)
优先级:高(Must)
来源:护理部访谈记录 2024-03-12;《电子病历应用管理规范》第X条
描述:当护士在床旁扫描患者腕带条码与药品条码后,
      系统应在 2 秒内完成比对;若住院号或药品编码不一致,
      系统应锁定给药确认按钮,显示“患者与药品不匹配”,
      并记录操作人、时间、两个条码值到审计日志。
验收标准:
  1) 正常匹配时,给药确认按钮在 2 秒内可点击;
  2) 不匹配时,按钮保持禁用,错误提示可见;
  3) 审计日志中可查询到本次操作记录,字段完整;
  4) 断网重连后,未同步的拦截记录不丢失。
追溯:上游 USR-012(护士床旁扫码);下游 TC-MED-0042-01~04

这条需求同时覆盖了功能与安全两类,带有明确的触发条件、时间约束、异常路径和可验证的验收标准。评审时,法规人员可以检查它是否满足留痕要求,测试人员可以直接据此设计用例,开发人员也能判断接口与状态机边界。

常见误区:把“系统应安全可靠”当作安全需求,把“符合法规”当作法规需求。这类表述无法验证,也无法追溯。正确做法是拆解到具体条款、具体操作、具体记录字段和具体判断条件。

总结来看,医疗软件需求工程的起点是“定义清楚”,关键是“分层与分类”,保障是“过程闭环与可追溯”。业务需求回答为什么做,用户需求回答谁要做什么,系统需求回答系统提供什么能力,软件需求回答具体怎么实现和怎么验;功能、非功能、法规、安全四类需求共同构成完整约束;获取、分析、规格说明、验证、变更管理五个活动持续循环,任何一条需求变更都能沿追溯链找到受影响的设计、测试与法规映射。做到这三点,需求文档才真正成为医疗软件质量与合规的第一道防线。