1 背景
将需求结构化后,需求能够被计算机自动化处理,实现需求缺陷检查、面向需求的用例生成等功能。这一方法已经在多个工程应用中展现出强大能力,例如对系统完整需求生成十万级别的覆盖用例、对复杂决策逻辑进行缺陷检查等。
由于Matlab Simulink在仿真验证及嵌入式代码生成方面的广泛应用,结构化需求是否能自动转换成Simulink模型,成为多次被提起讨论的问题。
目前看来,这一问题不存在技术上的障碍,更重要的是从需求类别及应用目的角度进行考虑。
2 技术可行性角度
所谓结构化需求,是指基于明确定义的语法表达的需求。这种方式形成的结构化需求是半形式化的(semi-formal),可以转换为严格语义模型。因此,结构化需求可以向其他合适的工具进行自动化转换。
Matlab提供了一套操作Simulink模型的接口,通过脚本程序化创建Simulink模型的技术较为成熟。多个此类项目已经完成工程实施,包括:基于接口数据(ICD)自动创建Simuilink接口模型、自动创建Simulink框架模型,基于结构化逻辑自动生成Simulink功能模型等。
因此,OneLogic结构化需求转换为Simulink模型,不存在技术问题。
3 需求类别角度
下面讨论3类需求。
3.1 确定性功能需求
确定性功能需求是一类常见需求,描述了目标对象应该具备的确定性属性。在某些设计中会给出清晰的需求逻辑,甚至逻辑表达式,如,
VOut= (IN_A_F || IN_B_F || !Valid(IN_A_F) && !Valid(IN_B_F)))。
此类需求经过解析,可以自动转换为Simulink模型。
3.2 非确定性功能需求
非确定性需求是指描述目标对象允许(有效)属性空间的一类需求。
本质上,需求定义了一组针对目标对象的约束,该约束集合形成一个解空间。如果需求是一致的(consistency),则存在一个或多个实现,都能满足约束。
例如,对如下需求“当故障条件P成立时,应在100ms内发出故障数据”,不论是在1ms、10ms、99ms发出故障数据,都认为是满足需求的。该需求描述了一种可能性,其语义如下图的时间自动机所示。

图1 基于时间自动机的需求语义
对于该类需求,在Simulink中描述精确语义则较为困难。如果在Simulink中将该需求描述成“当故障条件P成立时,则发出故障数据”,则退化成该需求的一个具体实现。
3.3 安全性需求
安全性需求是一种负面(negative)需求,表明某种属性永不应被满足。例如:“左转向灯、右转向灯不能同时闪烁”。
对于安全性需求,可以在Simulink中转换为观测器(Observer),即持续对信号进行观测,如果特定行为发生,则置错误状态。
4 应用目的角度
需求转换为模型,是为目的服务的。应基于目的来决定转换方式。
从结构化需求的角度,可能的应用目的有如下几类:
需求检查:包括发现需求中存在的一致性、完整性缺陷等;
需求仿真:由于明确定义了需求语义,可以实现一定程度的需求在环(RIL)仿真;
模型检查:结构化需求具有明确语义,可用于形式化检查模型对需求规约的满足性;
用例生成:基于需求生成测试用例;
需求检查和基于需求的用例生成一般由专用工具实现。因此,结构化需求转换为Simulink模型,一般用于需求仿真或模型检查两个目的。
4.1 需求仿真
从需求仿真的目的,安全性需求不描述对象的正向功能,因此不需要转换。
确定性功能需求可直接转换以支持需求仿真。
非确定性功能需求的转换,存在精确语义、退化语义两种选择,应根据实际应用进行考虑。
4.2 模型检查
从模型检查的目的,前文提到的三种需求都可以且应当被转换为Simulink中的被验证属性。
此时,上文提到的“当故障条件P成立时,应在100ms内发出故障数据”这一需求,被转换成一个观测器,其语义如下图所示。如果在模型中检测到fail状态可达,则说明模型违反该需求。

图2 需求实例的观测器语义
5 总结
综上,结构化需求能否转换为Simulink模型这一问题,应首先明确应用目的,即转换成Simulink模型要做什么。然后,应该检查实际应用中的需求类型,看是否适合转换。解决了上述问题,则转换在技术上不存在障碍。