在早期的设计阶段,开发者可开发纯粹的行为模型,以阐明并定义软件的详细要求。 % L8 n0 ^1 c% _0 i3 ^8 a/ } 2 y ^3 _) {; l: U9 a 虽然此类模型已经具备了基本解决方案的轮廓,但是它们依然独立于目标平台。这些目标独立的行为模型将用于设计验证和早期的需求确认。 q, T2 w: Y. h* j R9 W0 S
% @5 v$ |2 g! ]5 S% a7 C$ {
用于捕获关键需求、在仿真中展示正确行为以及展示对高层需求可追溯性的模型通常被称为“可执行规范”。 : N3 \4 ]1 C* g4 h' J" {! B, X3 w5 [9 U0 A% e+ T9 U
对可执行规范的进一步开发和具体实现可产生代表最终实现的模型的定义。这就是用于产品代码生成的模型。通常,这些模型会对代码生成做优化;它将从数据类型、目标架构以及要求的代码风格。所有这些变更需要一个验证过程,确保产品代码生成模型中引入的变更不会改变软件的行为。确认生产代码生成模型以及生成代码的正确行为的测试为代码验证。 把验证分布在设计验证和代码验证阶段允许我们更早地开始验证工作,更多的关注在测试上和更短的时间去修复在测试中检测到的错误。在本文的其余部分,我将介绍两个设计验证方法:9 r2 Y- r" X' E/ ]
3 S4 c& q/ C( i- ` Z6 {: w
·模型在环测试 6 n/ v( a) F# h. ?! F$ } ·软件在环测试+ k( i/ Y2 E0 p
# b6 H/ k* L% e3 R6 M' \0 J
以及用于代码验证的两个方法: J% J5 \5 u" C) H
8 F: m# g6 I: N* ^7 i. L, W ·处理器在环测试 3 i8 x H' q" h ·硬件在环测试 * W2 Y, U, I" P/ o- `' `6 K; M5 _( n) y- x* i: @3 N0 } 2 设计验证, \0 i, i, [: J [8 z/ E
# e! o9 S# W [% K. `" M5 I4 h
设计验证的主要目的是确认所有关键要求和设计概念是否已正确体现在设计模型中。 H& T: c [+ n
* [% v. \1 I% W: L& K) K9 y; x( ` ·模型在环测试 2 V! G/ P* T0 v. p6 O, h4 N% A- n5 h8 v
与“静态”的书面设计不同,可在仿真过程中评估可执行规范。通常,通过改变一组模型参数或输入信号,或通过查看输出结果或模型的响应,来完成这一操作。依据模型执行的仿真顺序也称为模型在环测试。 $ |: E/ A! z/ a# S) V! d- x8 C ; | Z [0 i* i+ e4 L- ?# p 模型在环测试的测试数据可来自测试矢量数据库,或来自实际系统的模型,在后一种情况下,我们讨论闭环控制系统。 : Q/ Y1 [, Q: w+ s/ {, V B ) L* Q& Q2 Q- j3 i 可执行规范通常不仅仅包含功能设计模型和软件逻辑,还包括设备和环境模型、高层需求的链接以及其他文件。它通常还包括用于自动化仿真结果评估的验证数据。 模型在环测试的结果可用于验证软件行为是否正确,并确认开发流程的初始需求。通过仿真收集的信息会成为代码验证的基准。 $ J' V6 [' a, _2 b( f1 ~- o6 k k' S/ V. k' w
·软件在环 (SIL) " T" @9 \6 S x5 O2 y u1 N4 C1 A6 g+ F9 j$ i 在许多情况下,在目标环境中部署软件之前,确保所设计的系统的软件组件能够按预期运行,这一点非常重要。1 L' J- S# }7 P8 ?* B
用于 MIL 和 PIL 的模型现在可用作处理器板的测试框架。通过处理器在环,我们仍然可在主机上运行模型,并使用它对软件组件输入生成实际数据。除此之外,我们还可使用调试器分析代码(已编译的代码)逐步说明装配级别说明,就像在完全嵌入式系统中那样进行链接和部署。" ^" y3 M" o/ R* C
0 ]) V4 A D0 q& E! v
通过 PIL,我们还可查看代码函数的执行顺序,并确认操作系统函数的调用或在目标上执行时所需的其他库,以及在执行验证方案过程中监控内存容量。 ! w6 @, {) K: U* w' F [2 F+ Q; X. c4 c5 S6 B 在一些项目中,PIL 可在符合相同规范当来自不同厂商的处理器板上比较算法行为。* @+ @( |0 d% @# U
. V9 i- R u* Y2 C& X 正如 SIL 一样,此验证方法并不用于非实时分析。 0 y. V* v& \' K( F 6 D0 l4 [3 \6 s ·硬件在环 (HIL)6 M# _/ s3 E8 n( L! }8 d7 {
8 L$ j. u. i% g& L! M7 n/ G$ \* e! d4 _ 目前提到的所有测试方法不能用于实时地验证设计。仿真以及与目标板通信的负荷不允许算法的实时测试。, u2 p# Z. F" P K
1 ^1 B1 w$ n/ k3 F
$ X8 i# `9 k- e: T: ]6 P& Y