故障注入的方法与工具

news2024/12/24 21:50:39

可靠性是评估软件质量的重要属性,关键安全系统(Safety Critical Systems,SCS)对可靠性的要求尤为严格,因其一旦失效,将可能对生命、财产或环境造成重大损害。以汽车为例,ISO26262中ASIL D要求相关系统失效率低于10 Fit(Failure in time),即每千件产品在10⁹小时内的故障数需低于10件。

测试软件可靠性的诸多方法中,较为常见的一种为故障注入测试——根据选定的故障模型选择故障注入工具,人为地将故障注入系统并采集系统反应行为信息,从而进行可靠性分析。

学术上,故障注入技术可根据方式的不同分为基于硬件的故障注入、基于仿真的故障注入和基于软件的故障注入三大类;实际应用中,可根据应用场景的不同分为基于仿真的故障注入与基于原型的故障注入两大类。

本文将从学术领域与实际应用两大角度出发,详述各类故障注入技术的方法与工具。

一、学术领域

*学术领域将故障注入划分为基于硬件、基于仿真与基于软件三大类,由于实际应用中也有仿真类别的分类,本章节仅针对软件与硬件类展开叙述。

▲故障注入系统

故障注入系统通常由目标系统和故障输入系统组成。从物理上看,控制器是可以单独在目标系统或计算机上运行的程序。故障注入器为定制的硬件或软件,本身支持不同的故障类型、位置、时间和部分适配的硬件语义或软件结构,注入的内容则来自故障库。图示中的故障库是一个具备更大灵活性和可移植性的单独组件。

软件故障注入和硬件故障注入在前期选择上,主要受故障类型影响。陷入类故障(如迫使软件中某个点保持永久值),则最好选用硬件注入方法;数据损坏类的故障选用软件注入方法足矣。其他诸如储存单位中的位翻转等故障则可采用任意一种方式进行故障注入,此类情况下,成本、准确性、可重复性等都会影响最终方法的选择。

适合硬件故障注入的故障类型有:

  • 开短路故障
  • 桥接故障
  • 固定型故障(电路中的某个信号不可控,永远固定在同一值)
  • 杂散电流故障(指在设计电路外,因泄漏导致流动的电流)
  • 电涌故障(指电压瞬间超过了正常工作电压)

适合软件故障注入的故障类型有:

  • 存储数据损坏(如寄存器、内存、磁盘)
  • 通信数据丢失(如总线和通信网络)
  • 软件缺陷(机器级或更高级的软件缺陷)

1.硬件故障注入

硬件故障注入需要使用额外的硬件将故障引入目标系统的硬件,通常可根据注入故障的类型及其注入位置,分为接触式与非接触式两大类。

接触式故障注入使用与电路引脚直接接触目标系统硬件,通常也被称为“引脚级注入”,是硬件故障注入最为常见的方法。可以使用有源探头或插拔式技术来改变引脚处的电流和电压,几乎不对目标系统产生影响。

非接触式故障注入通过产生重离子辐射将故障注入到目标硬件,重离子会穿过靶器件的耗尽区,虽然能够模仿自然的物理现象,但因无法控制重离子发射或电磁场产生的准确时刻而很难准确控制故障注入的时间和位置。

常见的硬件故障注入工具有:

​法国图卢兹大学的国家科学研究中心系统分析与架构实验室(LAAC-CNRS)所研发的引脚级故障注入工具Messaline,已成功应用与铁路控制系统的集中式联锁系统及“Esprit Delta-4”项目的分布式系统。

▲Messaline总体架构及环境

瑞典查尔姆斯理工大学开发的用于研究瞬时故障效应的故障插入系统FIST(Fault Injection System for Study of Transient Fault Effect),可同时使用非接触式与接触式方法来模拟目标系统内的瞬时故障,还支持放置MOS三极管控制电压降幅来实现故障干扰。

▲FIST环境配置情况

维也纳科技大学所研发的容错分布系统MARS(Maintainable Real-Time System),除使用FIST所使用的重离子辐射外,还可使用电磁场进行非接触式故障注入。

2.软件故障注入

由于无需昂贵的硬件便可进行测试,软件故障注入在近年来受到了较大关注,尤其是其能够针对应用程序及操作系统等硬件故障注入无法触达的部分。虽然软件故障注入的灵活性较强,但仍有访问位置受限、加重系统工作负载及改变原始软件结构的风险。

软件故障注入可按注入时间分为编译时故障注入与运行时故障注入。工具选择上,通常有以下几种:

德克萨斯大学奥斯汀分校所开发的Ferrari(Fault and Error Automatic Real-Time Injection)系统,能够向CPU、内存与总线注入故障,由初始化与激活器、用户信息、故障注入器及数据收集分析器所组成。

伊利诺伊大学所开发的容错与性能评估器Ftape(Fault Tolerance and Performance Evaluator),可将故障以逐位翻转的方式注入至CPU、内存与磁盘子系统中的可访问寄存器。

▲Ferrari环境配置情况

密歇根大学所开发的Doctor(Integrated Software Fault Injection Environment),使用超时、陷阱与代码修改三种方式实现故障注入的触发,允许注入CPU、内存及网络通信故障。

科英布拉大学所开发的Xception,可通过现代处理器中的高级调试及性能监控功能注入更为真实的故障。Xception故障是基于特定地址访问来触发的,因此更具可重复性。可通过以下事件触发故障出入:

①从指定地址获取操作码或加载操作数

②操作数存储到指定地址

③启动后经过的指定时间

④上述故障触发的组合。

3.软硬件故障注入的比较

通过上表可以发现,硬件故障注入和软件故障注入之间的差距主要在于可访问的故障注入点、成本和干扰水平。

硬件方法可以将故障注入芯片引脚和内部组件,例如软件故障注入无法寻址的组合电路和寄存器,可用于评估低级别的错误检测和屏蔽机制。软件故障注入可直接在软件状态级别(例如存储器、寄存器)直接产生变化,更适合于测试更高级别的机制,但需要注意直接在目标系统上运行所导致的更高额的干扰开销。

二、实际应用

实际应用中,故障注入方法可根据应用场景的不同分为基于仿真的故障注入与基于原型的故障注入两大类。

基于原型的故障注入:指向软件或硬件注入故障,仅适用于研究模拟故障。对诸如汽车、航空、航天等领域庞大而又复杂的应用场景而言,其硬件与软件的生产成本高昂,因此现下成本更低、效率更高的基于仿真的故障注入方法更受青睐。

基于仿真的故障注入:指通过建立目标系统的“数字孪生”模型,在模型中引入故障来得到故障注入的结果。这种方法无需特定的硬件设备,也不会对目标系统造成损伤,有助于评估容错机制的有效性及系统可靠性,但大型复杂设备的仿真模型往往开发量庞大,众多企业苦其久矣。

SkyEye,中文全称天目全数字实时仿真软件,能够有效解决仿真故障注入的弊端。作为基于可视化建模的硬件行为级仿真平台,SkyEye可轻松实现复杂模型的搭建,快速落实“数字孪生”模型。

基于SkyEye所搭建的全数字实时仿真模型,用户可进行以下几种模式的故障注入:

1.物理层故障模式

物理层故障模式主要包括断路控制、短路控制、信号串扰、噪声信号、串行以及并行阻抗控制等,用于模拟通信总线上常见的线路故障。

SkyEye中,总线设备被设计为独立的模块,并在虚拟目标硬件脚本中创建总线设备并与内存总线连接。断路故障模式通过外部数据激励软件设计总线故障处理模块,可以在总线设备模块中实现与数据激励软件的通信接口,并使用总线故障处理模块向总线设备发送断路命令。设备接收到该命令后,即不会再接收处理任何来自内存总线发送的地址读写请求。

SkyEye的断路故障模拟设计如下所示:

首先通过Python脚本提供的API接口调用上述的内存监视接口,实现内存监视功能,访问该内存时便会执行注册的回调接口来完成相关功能。

可由此实现故障模拟:通过该API接口注册故障模拟回调接口,当设置该内存地址为断开故障时,每当处理器访问至该地址便会在该回调接口中输出故障信息。用户还可调用SkyEye运行控制接口来暂停运行工程。

2.电气层故障模式

电气层故障模式包括输出幅度调节、占空比调节、信号延迟调节、上升下降沿调节及斜率调节、毛刺模拟等。

真实硬件中电气层故障注入是通过总线信号发生器实现,由高速DAC芯片、SRAM、运算放大器组成。电气层中的输出电压幅度调节可通过DAC和运算放大器实现,输出信号占空比可以通过FPGA控制DAC来实现,输出信号的延迟可以通过采样数据进行缓存来实现。

在SkyEye虚拟仿真环境下,用户可通过配置总线寄存器来修改电平值、边沿时间、占空比等,实现输出电压幅度的调节。

电气层故障注入,包括寄存器故障注入和内存故障注入。

▲寄存器故障注入

▲内存故障注入

3.协议层故障模式

协议层故障模式包括命令字、数据字、状态字奇偶校验、编码错误以及数据替换等。

协议层故障注入是基于不同的总线协议实现的。通过解析总线传输的数据来判断传输信息的类型以及不同类型所需要做的数据处理,可实现需要进行故障注入的通信协议数据分析。与物理层故障模式相似,也可使用SkyEye提供的数据激励软件注入总线的通信协议数据来实现故障注入。

参考文献

[1] https://course.ece.cmu.edu/~ece846/docs/faultInjectionSurvey.pdf

[2] 车建华, 何钦铭, 陈建海, 等. 基于软件模拟的虚拟机系统故障插入工具[J].浙江大学学报 (工学版), 2011, 4: 004.

[3] 徐仁佐. 软件可靠性工程[M]. 北京:清华大学出版社,2007.

[4] 张玲玲,王林章.基于故障剖面的安全关键系统可靠性测试与评估[J].计算机与数字工程,2014,42(12):2304-2310,2320.

[5] 麻彦东.面向虚拟化系统的故障注入平台的研究与设计[D].哈尔滨:哈尔滨工业大学,2015.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/425534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TCP三次握手四次挥手及time_wait状态解析

TCP的建立——三次握手 1.服务器必须准备好接受外来的连接。通常通过调用socket,bind,listen这三个函数来完成,我们称之为被动打开(passive open)。 2. 客户端通过调用connect函数发起主动的打开(active open)。这导致客户TCP发送一个SYN(同步…

【分享】除了压缩文件,WinRAR还有这些好用的功能

WinRAR是一款功能强大的压缩软件,可以解压缩RAR、ZIP及其它类型文件。但很多人不知道,除了解压、压缩文件,WinRAR还有其他的功能,今天小编就来分享一下。 功能一:锁定文件,禁止增删或修改压缩包里的文件 W…

国内外人工智能AI工具网站大全(一键收藏,应有尽有)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 国内外人工智能AI工具网站大全(一键收藏,应有尽有)摘要一、AI写作工具二、AI图像工具2.1、常用AI图像工具2.2、AI图片插画生成2.3、AI图片背景移除…

基于电子商务平台客户管理系统的设计与实现_kaic

摘要 本论文旨在设计和实现一个基于电子商务平台的客户关系管理系统,以提高企业与客户之间的互动和关系维护效率。本文首先介绍了客户关系管理系统的相关理论和技术,并分析了其在电子商务平台中的应用价值。接着,进行了电子商务平台客户关系管…

微信小程序python+vue今日菜谱美食点赞收藏评价系统

谈到外出就餐,我们除了怕排队,也怕这家餐厅的服务员不够用,没人为我们点餐,那么一餐饭排队一小时,点餐恐怕也要花个半小时,这样不仅给消费者的用餐体验大打折扣同时也给商家的口碑造成了严重负面的影响&…

【LeetCode: 剑指 Offer II 090. 环形房屋偷盗(打家窃舍) | 暴力递归=>记忆化搜索=>动态规划】

🍎作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎 🍎座右…

不可区分混淆:GGH+13

参考资料: Joe Kilian. Founding cryptography on oblivious transfer. In Janos Simon, editor, STOC, pages 20–31. ACM, 1988.Barak B, Goldreich O, Impagliazzo R, et al. On the (im) possibility of obfuscating programs[C]//Advances in Cryptology—CRY…

音视频八股文(2)--ffmpeg常见命令(1)

官方文档: https://www.ffmpeg.org/ffplay-all.html https://www.ffmpeg.org/ffmpeg-all.html 01-Windows FFMPEG命令行环境搭建 要在Windows系统上使用FFmpeg命令行,可以按照以下步骤搭建环境: 1.访问FFmpeg官方网站,下载已经…

《趣学数据结构》大纲

文章目录趣学数据结构一、数据结构入门(一)数据结构的基础知识1、基本概念(1)数据(2)数据元素(3)数据项(4)数据对象(5)数据结构2、逻辑…

利用在线Linux内核代码阅读分析网站linux kernel map分析CFS调度器代码调用链路

linux kernel map网址 https://makelinux.github.io/kernel/map/ 源码分析 点击Scheduler标签内的kernel/sched/ 左侧菜单,选择一个内核版本 Search Identifier搜索框输入要搜索的函数,回车执行搜索 结果列出了一处函数定义及两处引用 新窗口打开定义 …

14.Java面向对象----Object类

Object类 Java中Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object,子类可以使用 Object 的所有方法。 Object 类位于 java.lang 包中,编译时会自动导入,我们创建一个类时,如果没有明确继承一个父类&am…

【Spark】介绍 快速入门

目录 介绍 Spark and Hadoop Spark or Hadoop 核心模块 Spark Core Spark SQL Spark Streaming Spark MLlib Spark GraphX 快速上手 来源: 介绍 Spark 是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。 Spark and Hadoop HadoopHadoop 是由 java…

Linux 网络I/O模型

一、Linux下面的I/O模型 Linux下面一共有五种可以使用的I/O模型,如下: 1)阻塞式I/O 2)非阻塞式I/O 3)I/O多路复用(select与epoll) 4)信号驱动式I/O 5)异步I/O 下面重点介…

知识图谱-实体抽取

命名实体识别(Named Entity Recognition,简称NER)是信息抽取、问答系统、句法分析、机器翻译等应用领域的重要基础工具,在自然语言处理技术走向实用化的过程中占有重要地位。一般来说,命名实体识别的任务就是识别出待处…

【产品设计】电商后台系统设计--库存

电商后台产品,涉及众多模块,而以商品、订单、库存为核心模块,模块间存在大量交互。库存决定商品是否可售卖,下单是否能成功。 电商中的库存管理是为了保证前台商品的正常售卖,库存的管理和仓库密不可分,而仓…

Midjourney详细注册和使用教程

来源:Midjoureny详细注册使用教程【探索ChatGPT】 Midjourney,用户只需要输入一段图片的文字描述,即可生成精美的绘画,相信了解Midjourey的小伙伴已经对它强大之处而赞叹! 下面是用通俗易懂的步骤教会大家如何注册和…

【严蔚敏版数据结构】你分得清顺序栈和链栈吗

【严蔚敏版数据结构】顺序栈和链栈的剖析和对比一、顺序栈和链栈的存储结构二、顺序栈和链栈的初始化三、顺序栈和链栈的判断是否栈空四、顺序栈和链栈的入栈五、顺序栈和链栈的弹栈六、顺序栈和链栈的取栈顶元素一、顺序栈和链栈的存储结构 顺序栈的存储结构图如下&#xff1…

Windows 10系统,JDK安装与环境变量配置

引言 随着互联网的日益发展, 越来越多的小伙伴加入了程序员这个行列, 也有很多小伙伴正计划学习编程, 学习Java 那么对于新手来说, 第一件事就是下载安装Java开发工具包, 也就是JDK, 今天我们就来一起详细的说说怎么操作 JDK版本描述 学习环境中, 我们通常使用较新版本的JD…

支持PHP运行环境和系统防火墙配置管理,1Panel开源面板v1.1.0发布

2023年4月17日,现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.1.0版本。 在这一版本中,1Panel新增支持PHP运行环境、系统防火墙配置管理以及同步本地应用等功能,并带来了40多项功能更新和问题修复,感谢各位社区用户的反…

回归预测 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多输入单输出回归预测

回归预测 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多输入单输出回归预测 目录回归预测 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料效果一览 基本介绍 MATLAB实现GA-LSTM遗传算法优化长短期记忆网…