【软件测试】MIL/HIL/PIL/SIL测试
V字型开发流程
引用文章:汽车行业V模型开发详解
V模型开发(V-Model Development)是一种广泛应用于汽车行业的系统开发方法。它以字母“V”形状的图表形式展示了开发过程中不同阶段之间的关系,从需求分析到系统整合和验证,再到产品发布。V模型强调需求与测试之间的关系,以确保各阶段的输出能满足客户需求。

V模型开发主要包括以下几个阶段:
需求阶段:在这个阶段,项目团队收集、分析和定义客户需求。需求文档通常以规格说明书的形式出现,包括功能需求、性能需求、接口需求等。需求阶段的产物将直接影响后续开发过程。
系统设计阶段:在这个阶段,项目团队根据需求规格说明书,对整个系统进行高层次的架构设计。设计师在此阶段确定系统的主要组成部分、功能划分和交互方式。此阶段产生的文档主要为系统架构设计文档。
子系统设计阶段:在这个阶段,项目团队将系统分解为若干子系统,并为每个子系统创建详细设计文档。这些文档描述了子系统的内部结构、功能、接口等。同时,软件和硬件设计师开始进行相应的设计工作。
模块设计与实现阶段:在这个阶段,项目团队进一步将子系统分解为模块,并编写模块级别的设计文档。软件工程师根据设计文档编写源代码,硬件工程师则进行硬件电路设计。
单元测试阶段:在完成模块设计与实现后,项目团队针对每个模块进行单元测试,以验证模块是否满足其设计要求。这个阶段产出的主要文档是单元测试计划和单元测试报告。
集成测试阶段:在这个阶段,项目团队将各个模块组合成子系统,并进行集成测试。测试人员通过执行集成测试用例检查子系统之间的接口是否正确,以及子系统的整体功能是否符合预期。此阶段产生的文档主要为集成测试计划和集成测试报告。
系统测试阶段:在这个阶段,项目团队对整个系统进行综合性能、功能、兼容性等方面的测试。测试人员需要确保系统满足客户需求,并达到规定的质量标准。此阶段产生的文档主要为系统测试计划和系统测试报告。
验证与验收阶段:在这个阶段,客户或第三方机构对整个系统进行验证和验收。根据验证和验收的结果,项目团队可能需要对产品进行相应的调整和优化。完成验证和验收后,项目团队将正式交付产品。
作为嵌入式软件工程师,在V模型开发过程中,需要关注以下阶段:
子系统设计阶段:嵌入式软件工程师需要理解子系统的功能需求和接口要求,参与子系统设计并为其创建详细设计文档。
模块设计与实现阶段:在此阶段,嵌入式软件工程师需要根据设计文档编写源代码,并确保代码符合规范、健壮、可靠和可维护。
单元测试阶段:在完成模块设计与实现后,嵌入式软件工程师需要对每个模块进行单元测试,以验证其功能正确性和性能。
集成测试阶段:在此阶段,需要确保软件与硬件之间的接口正确,并进行集成测试,以检验整个子系统的功能和性能。
系统测试阶段:在整个系统的测试过程中,嵌入式软件工程师需要密切关注软件方面的问题,快速定位和解决软件缺陷。
MBD
引用文章:https://blog.csdn.net/weixin_44182878/article/details/88721259
代码生成最大的好处是,算法的早期验证,之前NASA有研究表明,开发初期引入的bug,如果到了晚期才发现出来,那么修复这一的bug,会产生非常大的费用。所以,我们期望能够尽早的发现开发过程中引入的bug。
说一下MBD开发过程中都有哪些验证工作(verification)要做。
模型出来并且可以编译之后,首先要做建模标准检查,这个过程使用工具(比如MathWorks公司的Simulink Verification & Validation提供的model advisor)自动化的完成,检查过后,修改模型中不符合公司建模规则的项目。
接下来,就可以进行模型评审了,也就是说,评审的模型有两个前提,一是可以编译的,二是符合公司建模规则的。这两个前提可以帮助我们消除模型中的一些低级错误,避免在评审过程中有太多的时间花费在这些错误上。因为评审是建模的工程师和其他同事共同参与的活动,做到上述两个前提,也是对其他同事工作时间的一种尊重。
评审之后,建模的工程师会修改评审中发现的问题,问题多的话,一般会要求修改之后再进行“再评审”,直到在评审中不会发现大量问题。
接下来,我们可以使用Simulink Design Verifier进行模型的结构分析,借助于Simulink Design Verifier自动生成测试用例的功能,去检查结构上是否存在问题,比如是否有不合理的逻辑设计,是否有运行不到的分支等。
再往后,就可以进行模型单元级别的功能测试了。软件开发过程中,对单元测试的要求是很高的,一般会根据应用的安全性、可靠性要求,给出测试的覆盖率要求。
这个过程中工作量最大的应该是测试用例设计以及测试向量的生成。测试用例设计,我们一般会根据需求去设计测试用例,当然,也会结合模型结构设计测试用例,这样说来,这里的测试,已经包含了黑盒测试和白盒测试。有了测试用例,如何把测试用例转换为测试向量,这也是非常重要的环节。我们知道,在MBD开发过程中,代码都可以自动生成,其他环节,我们要努力做到自动化实现。我们可以使用MATLAB脚本开发一些转换工具用于将测试用例转换为测试向量,我们还可以通过脚本实现测试过程的自动化。
MIL/HIL/PIL/SIL测试
MIL、SIL、PIL、HIL是个啥,你搞懂了吗?
MIL,Model in the Loop:模型在环测试;
SIL,Software in the Loop:软件在环测试;
PIL,Processor in the Loop:处理器在环测试;
HIL,Hardware in the Loop:硬件在环测试。
MIL (Model-in-the-Loop):模型在环路中。在 MIL 测试中,系统模型(通常是软件模型)被用于测试系统的功能。这种测试方法通常在开发的早期阶段进行,以验证系统的基本功能和逻辑。
SIL (Software-in-the-Loop):软件在环路中。在 SIL 测试中,软件模型被嵌入到仿真环境中,以便测试软件的功能和性能。SIL 测试可以帮助开发人员验证软件在实际硬件上运行之前的行为。
PIL (Processor-in-the-Loop):处理器在环路中。在 PIL 测试中,处理器被嵌入到仿真环境中,以便测试处理器的功能和性能。这种测试方法可以帮助开发人员验证处理器在实际应用程序中的行为,特别是在嵌入式系统开发中常常使用。因此,PIL 测试通常涉及将处理器与仿真模型相结合,以评估处理器在特定环境下的行为和性能。这种测试方法有助于确保处理器在实际应用中能够按预期工作,并且能够与其他系统组件有效地交互。
HIL (Hardware-in-the-Loop):硬件在环路中。HIL 测试涉及将实际硬件与仿真模型相结合,以评估硬件和软件之间的交互作用。这种测试方法可以提供更接近于实际操作条件的测试环境,帮助验证系统在实际硬件上的运行情况。

这些测试方法通常在软件开发和系统集成的不同阶段使用,以确保系统能够按预期工作并达到所需的性能指标。每种测试方法都有其优势和适用的场景,开发团队可以根据具体需求选择最合适的测试方法来确保系统的质量和稳定性。
以上四中测试,其中MIL、SIL、PIL三种测试都是和MBD开发模式下特有的,而HIL不同,无论你是否使用MBD开发,都可能需要做HIL。不是所有的应用都需要,但是以下两种情况建议做HIL:
1.在控制器软硬件不成熟的条件下,运行出错可能会导致人身伤害或者重大财产损失的情况;
2.在开发过程中,被控对象开发滞后于控制器开发的情况。另外,HIL测试通常比实物测试更节省成本,比如,做汽油机台架测试,需要有大量的汽油消耗,而通过HIL测试汽油机控制器,就没有汽油消耗。但这并不是说HIL可以替代实物测试,HIL测试之后,通常会跟着做实物测试。
相关文章:
【软件测试】MIL/HIL/PIL/SIL测试
V字型开发流程 引用文章:汽车行业V模型开发详解 V模型开发(V-Model Development)是一种广泛应用于汽车行业的系统开发方法。它以字母“V”形状的图表形式展示了开发过程中不同阶段之间的关系,从需求分析到系统整合和验证&#x…...
WebKit结构深度解析:打造高效与安全的浏览器引擎
WebKit结构深度解析:打造高效与安全的浏览器引擎 在现代网络世界中,浏览器作为连接用户与互联网信息的桥梁,其背后的技术架构至关重要。WebKit,作为当今最流行的开源浏览器引擎之一,其结构设计和功能实现对于提升浏览…...
SQLSERVER对等发布问题处理
问题1: 无法对 数据库Sast_Business 执行 删除,因为它正用于复制。 (.Net SqlClient Data Provider) 处理: USE [master]; GO EXEC sp_replicationdboption dbname NSast_Business, optname Npublish, value Nfalse; EXEC sp_replica…...
CentOS 7 中时间快了 8 小时
1.查看系统时间 1.1 timeZone显示时区 [adminlocalhost ~]$ timedatectlLocal time: Mon 2024-04-15 18:09:19 PDTUniversal time: Tue 2024-04-16 01:09:19 UTCRTC time: Tue 2024-04-16 01:09:19Time zone: America/Los_Angeles (PDT, -0700)NTP enabled: yes NTP synchro…...
itext7 pdf转图片
https://github.com/thombrink/itext7.pdfimage 新建asp.net core8项目,安装itext7和system.drawing.common 引入itext.pdfimage核心代码 imageListener下有一段不安全的代码 unsafe{for (int y 0; y < image.Height; y){byte* ptrMask (byte*)bitsMask.Scan…...
搜维尔科技:Manus Xsens Metagloves新一代手指捕捉
Manus Xsens Metagloves新一代手指捕捉 搜维尔科技:Manus Xsens Metagloves新一代手指捕捉...
Python与Redis:提升性能,确保可靠性,掌握最佳实践
在 Python 中,有多个库可用于与 Redis 数据库进行交互,其中最受欢迎的是 redis-py。这是一个 Python 客户端库,提供了与 Redis 数据库进行通信的丰富功能。 Python操作Redis操作步骤 安装 redis-py 使用 pip 安装 redis-py: p…...
GPT国内能用吗
2022年11月,Open AI发布ChatGPT,ChatGPT展现了大型语模型在自然语言处理方面的惊人进步,其生成文本的流畅度和连贯性令人印象深刻,为AI应用打开了新的可能性。 ChatGPT的出现推动了AI技术在各个领域的应用,例如&#x…...
中科亿海微-CL1656功能验证开发板
I. 引言 A. 研究背景与意义 CL1656是一款精度高、功耗低、成本低的5V单片低功耗运放,由核心互联公司研发制造,CL1656 是一个 16-bit、快速、低功耗逐次逼近型 ADC,吞吐速率高达 250 kSPS,并且内置低噪声、宽 带宽采样保持放大器。…...
学习STM32第十五天
SPI外设 一、简介 STM32F4XX内部集成硬件SPI收发电路,可以由硬件自动执行时钟生成、数据收发等功能,减轻CPU负担,可配置8位/16位数据帧,高位(最常用)/低位先行,三组SPI接口,支持DMA…...
【面试题】MySQL 事务的四大特性说一下?
事务是一个或多个 SQL 语句组成的一个执行单元,这些 SQL 语句要么全部执行成功,要么全部不执行,不会出现部分执行的情况。事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。 事务的主要作用是保证数…...
案例实践 | InterMat:基于长安链的材料数据发现与共享系统
案例名称:InterMat-基于区块链的材料数据发现与共享系统 ■ 建设单位 北京钢研新材科技有限公司 ■ 用户群体 材料数据上下游单位 ■ 应用成效 已建设10共识节点、50轻节点,1万注册用户 案例背景 材料是构成各种装备和工程的物质载体,…...
【数据挖掘】实验8:分类与预测建模
实验8:分类与预测建模 一:实验目的与要求 1:学习和掌握回归分析、决策树、人工神经网络、KNN算法、朴素贝叶斯分类等机器学习算法在R语言中的应用。 2:了解其他分类与预测算法函数。 3:学习和掌握分类与预测算法的评…...
go语言并发实战——日志收集系统(三) 利用sarama包连接KafKa实现消息的生产与消费
环境的搭建 Kafka以及相关组件的下载 我们要实现今天的内容,不可避免的要进行对开发环境的配置,Kafka环境的配置比较繁琐,需要配置JDK,Scala,ZoopKeeper和Kafka,这里我们不做赘述,如果大家不知道如何配置环境&#x…...
Go 单元测试之Mysql数据库集成测试
文章目录 一、 sqlmock介绍二、安装三、基本用法四、一个小案例五、Gorm 初始化注意点 一、 sqlmock介绍 sqlmock 是一个用于测试数据库交互的 Go 模拟库。它可以模拟 SQL 查询、插入、更新等操作,并且可以验证 SQL 语句的执行情况,非常适合用于单元测试…...
Prometheus + Grafana 搭建监控仪表盘
目标要求 1、需要展现的仪表盘: SpringBoot或JVM仪表盘 Centos物理机服务器(实际为物理分割的虚拟服务器)仪表盘 2、展现要求: 探索Prometheus Grafana搭建起来的展示效果,尽可能展示能展示的部分。 一、下载软件包 监控系统核心…...
机器人管理系统的增删查改(Python)
#交互模式 robot ["机器人1","机器人2","机器人3","机器人4"] name input("请输入您的姓名:") print("%s您好欢迎使用机器人管理系统"%(name))while True:print("您可以进行 1.查找 2.修改 3.增…...
【.Net动态Web API】背景与实现原理
🚀前言 本文是《.Net Core进阶编程课程》教程专栏的导航站(点击链接,跳转到专栏主页,欢迎订阅,持续更新…) 专栏介绍:通过源码实例来讲解Asp.Net Core进阶知识点,让大家完全掌握每一…...
JS-43-Node.js02-安装Node.js和npm
Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,可以让JavaScript实现后端开发,所以,首先在本机安装Node.js环境。 一、安装Node.js 官网:下载 Node.js 默认两个版本的下载: 64位windows系统的LTS(Long Tim…...
设计模式(分类)
目录 设计模式(分类) 设计模式(六大原则) 设计模式是软件工程中一种经过验证的、用于解决特定设计问题的通用解决方案。它们是面向对象编程(Object-Oriented Programming, OOP)实践中提炼出的最佳实…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
jdbc查询mysql数据库时,出现id顺序错误的情况
我在repository中的查询语句如下所示,即传入一个List<intager>的数据,返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致,会导致返回的id是从小到大排列的,但我不希望这样。 Query("SELECT NEW com…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...
