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 搭建步骤

我一般按这个顺序来:

  1. 创建项目结构:按系统、子系统、组件建好包
  2. 导入需求:从ReqIF或Excel导入系统需求
  3. 建立功能架构:画功能块、定义信号接口
  4. 分配硬件:把功能映射到ECU上
  5. 生成软件架构:自动生成SWC框架
  6. 一致性检查:跑一遍内置的规则检查

小技巧: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——省心。

下一章咱们聊聊如何把模型跟代码生成工具串起来,那才是真正提效的地方。