2、系统需求分析:什么是系统需求

各位工程师朋友,咱们今天聊聊系统需求分析。说实话,这是整个V模型开发的起点,也是决定项目成败的关键。我见过太多项目,因为需求没理清楚,后期改得人仰马翻。

系统需求,说白了就是「控制器要干什么」和「干到什么程度」。它分两大类:功能需求和非功能需求。咱们一个一个说。

2.1 功能需求与非功能需求

功能需求,就是控制器必须能做的具体事情。比如:

  • 车窗控制器要能接收升降开关信号
  • BMS要能采集电池电压和温度
  • ESP要能在检测到车轮打滑时主动制动

这些都是「做什么」的问题。我习惯用一句话描述一个功能需求:「系统在什么条件下,对什么输入,产生什么输出」。这样写出来的需求,测试工程师一看就知道怎么测。

非功能需求,则是「做得怎么样」的问题。它不直接描述功能,但决定了功能的品质。常见的有:

类别 举例 典型指标
性能 响应时间、吞吐量 CAN报文延迟 ≤ 10ms
可靠性 MTBF、故障率 系统寿命 ≥ 10年
安全性 ASIL等级、功能安全 ASIL B / ASIL D
可维护性 诊断覆盖率、OTA升级 UDS诊断支持 ≥ 95%
环境适应性 温度、湿度、EMC -40°C ~ 125°C
我的经验: 非功能需求经常被忽略。我曾经接手一个项目,功能需求写得满满当当,但没提工作温度范围。结果夏天路试,控制器直接罢工。从那以后,我每次评审需求,第一件事就是检查非功能需求有没有遗漏。

2.2 需求来源分析

需求不会凭空冒出来。它们有三个主要来源:

客户需求

这是最直接的来源。主机厂(OEM)会给出系统需求规格书(SRS),里面明确说了控制器要做什么。比如:「当车速超过120km/h时,发出报警声」。这些需求通常写在合同里,是必须满足的。

法规需求

这个躲不掉。汽车行业有大量强制法规:

  • GB/T 38698(电动汽车安全要求)
  • ISO 26262(功能安全)
  • UN R155(网络安全)
  • ECE R10(电磁兼容)

我建议在项目启动阶段,就拉一份法规清单。别等到测试了才发现不满足法规,那代价就大了。

内部需求

这部分来自公司内部的经验积累。比如:

  • 平台化要求(复用已有模块)
  • 可制造性要求(PCB布局规范)
  • 可测试性要求(预留诊断接口)
  • 成本目标(BOM成本控制在XX元以内)
避坑指南: 内部需求最容易「被遗忘」。我曾经遇到一个项目,工程师觉得「这个不用写,大家都知道」。结果新来的同事接手,完全不知道有这些隐含要求,最后产品做出来没法量产。所以,内部需求也要白纸黑字写清楚。

2.3 需求层级结构

需求不是平铺直叙的,它有层级。我习惯用三层结构:

  1. 系统级需求: 描述整个控制器系统的行为。比如「BCM(车身控制模块)实现车门锁控制功能」。
  2. 子系统级需求: 拆解到子系统。比如「门锁驱动模块接收CAN信号,输出PWM控制电机」。
  3. 组件级需求: 具体到硬件或软件组件。比如「MCU的GPIO1输出高电平,驱动继电器闭合」。

为什么要分层?你想想看,如果所有需求都写在一个层级,那系统工程师和软件工程师看到的是一份文档,谁也看不懂。分层之后,各司其职:系统工程师关注系统级,软件工程师关注组件级。

下面这张图展示了需求的层级关系:

需求层级结构图 需求层级结构 系统级需求 BCM实现车门锁控制 子系统级需求 门锁驱动模块接收CAN信号,输出PWM 组件级需求 MCU的GPIO1输出高电平,驱动继电器闭合 说明: • 系统级需求:面向系统工程师和客户 • 子系统级需求:面向架构师和子系统负责人 • 组件级需求:面向软件/硬件工程师,可直接用于开发和测试
关键原则: 每个层级的需求都要可追溯。系统级需求要能分解到子系统级,子系统级要能分解到组件级。反过来,每个组件级需求都要能找到它的「上级」。这叫需求追溯性,ASPICE审核时必查。

2.4 需求管理工具简介

需求写好了,怎么管?靠Excel?我劝你别。项目一复杂,Excel根本hold不住。咱们看看主流的工具:

工具 特点 适用场景 我的评价
DOORS 老牌工具,功能强大,支持复杂追溯 大型OEM、Tier1 功能全,但界面老旧,学习曲线陡
Polarion 基于Web,集成ALM,支持敏捷 中型团队、ASPICE项目 我个人比较喜欢,协作方便
Jama 界面现代,易用性好,支持评审流程 初创公司、中小团队 上手快,但定制能力有限
我的建议: 工具只是手段,不是目的。我见过用DOORS用得一团糟的项目,也见过用Excel管得井井有条的团队。关键是流程要规范:需求要唯一编号、要版本控制、要变更管理。工具帮你自动化这些流程,但流程本身得先想清楚。

嗯,这里要注意一点:不管用哪个工具,需求属性一定要定义清楚。我常用的属性包括:

  • 需求ID(唯一标识)
  • 需求描述(一句话说清楚)
  • 优先级(高/中/低)
  • 来源(客户/法规/内部)
  • 状态(草稿/评审中/已批准/已变更)
  • 责任人
  • 关联测试用例

把这些属性维护好,后期做需求追溯、变更影响分析,就轻松多了。