编辑推荐: |
文章主要介绍了被问到的几个问题基于模型开发,通常包括哪些活动呢?模型开发活动,与ASPICE中的过程(SWE.1 ~ SWE.6)是如何映射的呢?围绕这两个问题讲解。 本文来自于仨人谈起,由火龙果软件Anna编辑、推荐。 |
汽车嵌入式软件开发中,基于模型开发的方法非常普遍,经常被客户及一些评估师问到的问题是:
基于模型开发,要包括哪些活动?
这些活动与ASPICE中的过程(SWE.1 ~ SWE.6)是如何映射的呢?
软件开发过程中,应用模型开发,是指:采用具备一定语法和语义含义的模型,来全部或部分完成软件需求、软件设计、并基于模型来生成代码。
根据使用模型的目的,基于模型开发可以映射到“SWE.1 软件需求分析”、"SWE.2 软件架构设计"和"SWE.3 软件详细设计和单元构建"等ASPICE中的各个Process。
当前比较普遍的用法是用模型进行设计、基于模型生成代码、在模型及代码层面进行验证。使用模型来定义需求的情形不是特别多。
接下来,我们就基于当前比较普遍的这种用法来进行分析:
一、基于模型开发,通常包括哪些活动呢?
① 模型设计
基于模型设计的输入(通常是软件需求和软件架构设计)和模型规范(如: 基于MAAB的模型规则),进行模型设计。
② 模型静态分析
使用工具对模型进行分析,包括:
分析模型是否符合建模规范,如:使用Simulink Verification & Validation检查是否符合MAAB。当现有的规则无法满足要求时,工程师也可以自己动手定制一些检查规则项
模型的形式化验证,如:使用Simulink Design Verifier检查是否有整数溢出,或者是否有死逻辑等
③ 模型评审
评审模型的内部逻辑、评审其是否与模型设计的输入相一致。也就是评审设计的模型否能正确的实现模型设计的输入。
④ 模型动态验证
一般是通过模型在环(MIL)测试的方式对模型进行动态验证。
测试的目的有两个:
功能测试:测试“模型设计的输入”是否被正确的实现了,往往用比如“需求覆盖度”的覆盖度指标进行衡量。
模型内部逻辑的正确性:往往用结构化覆盖度指标进行衡量,比如条件覆盖(Condition Coverage)、判定覆盖(Decision Coverage)、MC/DC覆盖等。
⑤ 自动代码生成
进行一定的代码生成的定制化设置、并使用工具生成代码。
在这个过程中“用户的定制化设置”和"生成代码的工具"都有可能引入错误。
因此,在对代码质量要求很高的场合,会希望做“⑥等效性测试”。
⑥ 等效性测试
通常采用软件在环(SIL)测试和处理器在环(PIL)测试的方式,用来验证代码和模型的一致性。
SIL是将模型生成的代码通过DLL的方式运行在Windows平台上;PIL是将生成的代码运行到目标处理器上,两种模式使用的编译器是不同的,SIL使用的就是Windows下的编译器,比如Visual Studio C++或者LCC编译器,而PIL使用的是目标编译器。
二、模型开发活动,与ASPICE中的过程(SWE.1 ~ SWE.6)是如何映射的呢?
(1) SWE.3 软件详细设计和单元构建
模型设计是设计到可以生成代码的程度,这里面就包括有软件单元的详细设计。
基于模型生成代码,就是软件单元的构建。
注意:有些时候,当模型本身不足以全面、清晰的呈现设计时,是需要有一些补充的文字信息描述的。
(2) SWE.4 软件单元验证
(3) SWE.2 软件架构设计
有些时候,在模型设计中,会包括SWC之间的交互及接口的设计,这个部分是属于软件架构设计的。
(4) SWE.5 软件集成和集成测试
基于模型开发时,模型中SWC与SWC之间的集成步骤,体现的不明显。SWC之间的接口的一致性,往往是由建模工具来检查和保证的。
在"④模型动态验证"和"⑥等效性测试"时,会测试SWC之间的交互,这个部分的测试属于模型的集成测试。