4、系统建模工具搭建:基于PREEvision/Enterprise Architect的系统架构模型建立
系统建模这件事,说实话,在ASPICE里是个硬骨头。很多团队一上来就急着写代码,结果到后面需求追溯、接口定义全乱套了。我个人习惯是,先把系统架构模型搭起来,再谈别的。
今天咱们聊聊两个主流工具:PREEvision和Enterprise Architect(简称EA)。它们各有各的脾气,选哪个得看你的项目场景。
4.1 为什么非要用系统建模工具?
你想想看,一个汽车电子系统,少说几十个ECU,多则上百。每个ECU又有成百上千的信号。光靠Excel和Visio?我试过,维护成本高得吓人。
我在2018年参与过一个ADAS项目,团队用Word文档画架构图。结果需求变了三次,图改了五版,最后谁也说不清哪个版本是对的。嗯,从那以后,我再也不敢不用建模工具了。
核心价值:
- 需求到架构的双向追溯
- 接口一致性自动检查
- 自动生成文档和代码框架
- 支持ASPICE的SWE.1/SWE.2过程
4.2 PREEvision:适合复杂EE架构
PREEvision是Vector家的产品,主打EE架构设计。它把需求、功能、硬件、软件、线束全串在一起了。
4.2.1 核心概念
说白了,PREEvision用了几层模型来组织信息:
| 层级 | 内容 | ASPICE对应 |
|---|---|---|
| 需求层 | 系统需求、功能需求 | SYS.1/SWE.1 |
| 功能层 | 逻辑功能、信号流 | SYS.2 |
| 硬件层 | ECU、传感器、执行器 | SYS.3 |
| 软件层 | SWC、Runnable、Port | SWE.2 |
| 线束层 | 连接器、导线、拓扑 | 物理设计 |
我记得第一次用PREEvision时,被它的层级关系搞晕了。后来发现一个窍门:从功能层开始画,再往下细化。别一上来就画线束,那是最后一步。
4.2.2 搭建步骤
我一般按这个顺序来:
- 创建项目结构:按系统、子系统、组件建好包
- 导入需求:从ReqIF或Excel导入系统需求
- 建立功能架构:画功能块、定义信号接口
- 分配硬件:把功能映射到ECU上
- 生成软件架构:自动生成SWC框架
- 一致性检查:跑一遍内置的规则检查
小技巧:PREEvision有个"变体管理"功能。我在做平台化项目时,用这个功能管理不同配置的架构,省了不少事。
4.3 Enterprise Architect:适合系统级建模
EA是Sparx Systems的产品,更偏向UML/SysML建模。如果你做的是系统级功能分析,EA比PREEvision灵活。
4.3.1 为什么选EA?
说白了,EA便宜,而且扩展性强。我见过不少Tier 1用EA做系统需求分析,然后导出到PREEvision做详细设计。
EA支持SysML,这是系统建模的关键。SysML的块定义图(BDD)和内部块图(IBD)特别适合描述系统架构。
4.3.2 搭建系统架构模型
我习惯用EA做三件事:
- 上下文图:用块定义图画出系统边界和外部接口
- 用例图:描述系统功能场景
- 内部块图:细化子系统间的连接关系
举个例子,一个BMS(电池管理系统)的上下文图:
// 这不是代码,是SysML模型的文本表示
Block: BMS_System
Parts:
- BMU: Battery Management Unit
- CMU: Cell Monitoring Unit
- HV_Contactors: High Voltage Contactors
Ports:
- CAN_Bus: CANInterface
- HV_Power: PowerInterface
- Temp_Sensor: AnalogInput
Connections:
- BMU.CAN_Port -> CAN_Bus
- CMU.Temp_Out -> BMU.Temp_In
注意:EA的模型元素命名一定要规范。我曾经接手过一个项目,里面全是"Block1"、"Block2"这种名字,追溯起来简直要命。
4.4 工具链集成要点
光有建模工具还不够,得跟上下游工具打通。我总结了几条经验:
| 集成方向 | 工具 | 方法 |
|---|---|---|
| 需求管理 | DOORS / Polarion | 通过ReqIF双向同步 |
| 代码生成 | Simulink / DaVinci | 从模型导出ARXML |
| 测试管理 | TestWeaver / ECU-TEST | 模型导出测试用例 |
| 配置管理 | SVN / Git | 模型文件版本控制 |
我个人最看重的是需求追溯。在PREEvision里,每个功能块都能追溯到原始需求。这样ASPICE审核时,审计员问"这个功能从哪来的",你直接点一下就能看到。
4.5 避坑指南
做系统建模这些年,我踩过不少坑。分享几个典型的:
坑1:模型过度细化
我曾经在一个项目里,把每个信号的电平都画进模型了。结果需求一变,改模型比改代码还慢。记住:模型是沟通工具,不是代码。细化到接口级别就够了,别画到寄存器位。
坑2:忽略版本管理
PREEvision的模型文件是二进制格式,不能直接diff。我建议每天下班前都提交一次,并写清楚变更说明。不然两周后,你根本不知道模型为什么变了。
坑3:不建评审基线
每次架构评审前,建一个基线。评审通过后,锁住这个版本。我见过有人评审完了还偷偷改模型,结果测试时发现跟评审结果对不上。
4.6 我的推荐方案
如果你问我怎么选,我的建议是:
- 大型OEM或Tier 1:用PREEvision做EE架构,EA做系统功能分析
- 中小团队:只用EA就够了,配合SysML插件
- ASPICE Level 2以上:必须上PREEvision,它的过程支持更完整
最后说一句,工具只是手段。我见过用Visio画图也能过ASPICE Level 2的团队,关键在于流程的严谨性。但如果你问我个人偏好,我还是选PREEvision——省心。
下一章咱们聊聊如何把模型跟代码生成工具串起来,那才是真正提效的地方。