CN110704314A - 一种嵌入式软件测试的故障注入方法 - Google Patents
一种嵌入式软件测试的故障注入方法 Download PDFInfo
- Publication number
- CN110704314A CN110704314A CN201910915616.4A CN201910915616A CN110704314A CN 110704314 A CN110704314 A CN 110704314A CN 201910915616 A CN201910915616 A CN 201910915616A CN 110704314 A CN110704314 A CN 110704314A
- Authority
- CN
- China
- Prior art keywords
- fault
- software
- target system
- monitor
- xxx
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
Abstract
本发明涉及一种嵌入式软件测试的故障注入方法,涉及嵌入式软件测试技术领域。本发明设计一种嵌入式软件测试的故障注入方法,该方法通过在软件源代码中增加测试代码的方式,能够实现在特定的位置和特定的时刻对软件源代码中的全局变量、局部变量、寄存器、堆栈以及软件接口等的故障注入和测试,提高软件的测试覆盖率和可靠性。
Description
技术领域
本发明涉及嵌入式软件测试技术领域,具体涉及一种嵌入式软件测试的故障注入方法。
背景技术
将故障注入技术作为软件测试技术,一般来讲是制定特定的故障模型,采用人为的、有意识的方式产生故障,并施加于待测系统中,用来加速该系统的错误和失效的产生,同时观测并反馈对所注入故障的响应信息,通过分析对系统进行验证和评价的过程。基于软件的故障注入通常是根据故障模型,通过修改目标系统的内存映像来模拟系统硬件或软件故障的发生,按故障注入的时刻可分为运行前注入和运行时注入。
目前基于嵌入式系统软件故障注入的测试方法有以下几种:
(1)直接修改源程序的静态故障注入方法。该方法直接修改被测系统源代码模拟故障产生,不需要额外接口资源和监控软件,属于运行前注入故障的方式。该方法容易模拟永久故障,模拟时序相关的故障逻辑时,需要编写复杂的故障模拟代码,费时费力,且易引入新的故障,不满足灵活性和重用性要求;
(2)软件开发环境支持的故障注入方法。该方法适用于软件开发人员在编码、调试阶段通过设置断点来修改内存或寄存器内容产生所需的故障,具有简单灵活的特点。但是由于设置断点会导致测试不能连续运行,对于涉及多任务和中断处理的软件,很难测试任务之间或中断处理与主流程之间的相互影响;
(3)设计运行时的软件故障注入器,利用故障脚本描述语言、故障库和故障注入器算法获取故障现场的信息。该方法能够有效的将故障注入被测软件中,便于捕捉并重现故障信息。但是上述方法的实现比较复杂,通常需要设计主控制器、故障注入器、脚本解析器、监视器、数据采集器和数据收集器等,技术门槛较高,还需要针对不同类型的故障注入模型设计相应的故障注入器算法,灵活性较差。
针对目前基于嵌入式系统软件故障注入的测试方法中存在的不足,需要提出一种嵌入式软件测试的故障注入方法。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是:如何实现在特定的位置和特定的时刻对软件源代码中的全局变量、局部变量、寄存器、堆栈以及软件接口等的故障注入和测试,提高软件的测试覆盖率和可靠性。
(二)技术方案
为了解决上述技术问题,本发明提供了一种嵌入式软件测试的故障注入方法,包括以下步骤:
S1、建立软件故障测试用例库;
S2、基于所述软件故障测试用例库向被测试的目标系统注入故障。
优选地,步骤S1具体为:通过对嵌入式软件建立详细级失效模式及影响分析,对嵌入式软件源代码进行故障模式和信息提取,最终建立软件故障测试用例库。
优选地,步骤S2具体为通过监控器向目标系统注入故障:监控器根据故障测试用例向目标系统注入故障,该故障测试用例为单点故障或者故障序列,监控器通过物理接口将故障测试用例按照约定的通讯协议格式发送给目标系统,目标系统通过解析通讯协议完成故障注入工作。
优选地,步骤S2具体包括:
S21、设目标系统的软件源代码从寄存器、硬件地址或是软件接口中读取的信息保存在局部变量A中,则在软件源代码中局部变量A获得当前寄存器、硬件地址或是软件接口中的信息后增加如下代码:
if(TRUE==XXX_Debug)
A=Global_XXX;
其中,Global_XXX为全局变量名称,XXX_Debug初始值为FALSE,即不改变当前获得的A的值,只有在接收到监控器的指令报文后才将XXX_Debug的值设置为TRUE;监控器独立于目标系统运行,它和目标系统之间通过物理接口进行通讯;
S22、在目标系统软件源代码中需要增加一个任务或线程,该任务或线程的优先级低于该软件本身运行的所有任务和线程的优先级,这个任务或线程用于接收并处理监控器发送的指令报文;
S23、在需要进行故障注入测试时,由监控器通过物理接口物理接口以指令报文的方式向目标系统发送故障测试用例,以通知目标系统此次需要给哪些全局变量赋值;
S24、目标系统在任务或线程中接收到该指令报文后,解析该指令报文的内容,将指令报文中涉及到的每个XXX_Debug的值设置为TRUE,且直接修改目标系统软件源代码中相关全局变量的值,上述操作完成后,目标系统按照该故障测试用例设置的故障时序或故障测试路径完成软件测试工作;
S25、执行完一条故障测试用例后,监控器通知目标系统将每个XXX_Debug的值设置为FALSE,将全局变量的值设置为初始值。
优选地,在步骤S2之后还包括步骤S3、记录测试结果并进行数据分析。
优选地,所述单点故障是仅有一个变量、寄存器或硬件地址内容异常。
优选地,所述物理接口为CAN总线。
优选地,所述物理接口为以太网。
优选地,所述物理接口为1553B总线。
优选地,所述物理接口为RS-422接口或RS-485接口。
(三)有益效果
本发明该方法首先通过对嵌入式软件建立详细级失效模式及影响分析,建立软件故障测试用例库;然后通过监控器向目标系统注入故障;最后对故障运行前后的测试结果进行分析和评估。该方法不需要修改原有的软件源代码,只是在软件运行时,根据故障注入的时间和位置增加部分测试软件源代码,通过增加的这部分代码,可以实现软件运行过程中动态的改变代码中关键的全局变量、局部变量、寄存器、硬件地址和软件接口等信息内容,实现在特定的位置和特定的时刻对软件源代码中的全局变量、局部变量、寄存器、堆栈以及软件接口等的故障注入和测试,提高软件的测试覆盖率和可靠性。该方法实现简单,对被测试目标系统软件影响较小,极大地提高了嵌入式软件的容错性、可靠性和安全性。
附图说明
图1是本发明的软件测试故障注入的原理图。
具体实施方式
为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
针对目前软件测试过程中难以有效获得故障现场信息的问题,本发明提出了一种嵌入式软件测试的故障注入方法,如图1所示,该方法包括以下步骤:
S1、建立软件故障测试用例库
对嵌入式软件进行功能故障树分析,建立系统级和详细级失效模式及影响分析,最终从软件源代码中识别出关键的全局变量、局部变量、寄存器、硬件地址和软件接口等信息;然后基于识别出的上述信息进行软件测试用例设计,完成软件故障测试用例库;
S2、通过监控器向被测试的目标系统注入故障,具体为:
S21、设目标系统的软件源代码从寄存器、硬件地址或是软件接口中读取的信息保存在局部变量A中,则在软件源代码中局部变量A获得当前寄存器、硬件地址或是软件接口中的信息后增加如下代码:
if(TRUE==XXX_Debug)
A=Global_XXX;
上述Global_XXX为全局变量名称,XXX_Debug初始情况下的值为FALSE(即不改变当前获得的A的值),只有在接收到监控器的指令报文后才将XXX_Debug的值设置为TRUE;监控器独立于目标系统运行,它和目标系统之间通过物理接口(CAN总线、以太网、1553板总线、RS-422/RS-485接口等)进行通讯。
S22、在目标系统软件源代码中需要增加一个任务或是一个线程,该任务或线程的优先级低于该软件本身运行的所有任务和线程的优先级,这个任务或线程用于接收并处理监控器发送的指令报文;
S23、在需要进行故障注入测试时,由监控器通过物理接口物理接口(CAN总线、以太网、1553板总线、RS-422/RS-485接口等)以指令报文的方式向目标系统发送故障测试用例,以通知目标系统此次需要给哪些全局变量赋值;
S24、目标系统在任务或线程中接收到该指令报文后,解析该指令报文的内容,将指令报文中涉及到的每个XXX_Debug的值设置为TRUE,且直接修改目标系统软件源代码中相关全局变量的值,上述操作完成后,目标系统按照该故障测试用例设置的故障时序或故障测试路径完成软件测试工作;
S25、执行完一条故障测试用例后,监控器通知目标系统将每个XXX_Debug的值设置为FALSE,将全局变量的值设置为初始值;
S3、记录测试结果并进行数据分析
在对目标系统进行故障注入前,目标系统本身应带有数据记录功能,在系统中的关键的状态和参数发生变化时,记录相关的参数数据。在进行故障注入后,由于测试人员人为的改变了系统状态(比如硬件地址中的内容、全局变量的值、软件接口数据等),目标系统应记录故障注入后的系统状态信息。在执行完故障注入后,对故障注入前后的记录数据进行分析和评估,用于辅助决策目标系统软件是否执行正常。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (10)
1.一种嵌入式软件测试的故障注入方法,其特征在于,包括以下步骤:
S1、建立软件故障测试用例库;
S2、基于所述软件故障测试用例库向被测试的目标系统注入故障。
2.如权利要求1所述的方法,其特征在于,步骤S1具体为:通过对嵌入式软件建立详细级失效模式及影响分析,对嵌入式软件源代码进行故障模式和信息提取,最终建立软件故障测试用例库。
3.如权利要求2所述的方法,其特征在于,步骤S2具体为通过监控器向目标系统注入故障:监控器根据故障测试用例向目标系统注入故障,该故障测试用例为单点故障或者故障序列,监控器通过物理接口将故障测试用例按照约定的通讯协议格式发送给目标系统,目标系统通过解析通讯协议完成故障注入工作。
4.如权利要求3所述的方法,其特征在于,步骤S2具体包括:
S21、设目标系统的软件源代码从寄存器、硬件地址或是软件接口中读取的信息保存在局部变量A中,则在软件源代码中局部变量A获得当前寄存器、硬件地址或是软件接口中的信息后增加如下代码:
if(TRUE==XXX_Debug)
A=Global_XXX;
其中,Global_XXX为全局变量名称,XXX_Debug初始值为FALSE,即不改变当前获得的A的值,只有在接收到监控器的指令报文后才将XXX_Debug的值设置为TRUE;监控器独立于目标系统运行,它和目标系统之间通过物理接口进行通讯;
S22、在目标系统软件源代码中需要增加一个任务或线程,该任务或线程的优先级低于该软件本身运行的所有任务和线程的优先级,这个任务或线程用于接收并处理监控器发送的指令报文;
S23、在需要进行故障注入测试时,由监控器通过物理接口物理接口以指令报文的方式向目标系统发送故障测试用例,以通知目标系统此次需要给哪些全局变量赋值;
S24、目标系统在任务或线程中接收到该指令报文后,解析该指令报文的内容,将指令报文中涉及到的每个XXX_Debug的值设置为TRUE,且直接修改目标系统软件源代码中相关全局变量的值,上述操作完成后,目标系统按照该故障测试用例设置的故障时序或故障测试路径完成软件测试工作;
S25、执行完一条故障测试用例后,监控器通知目标系统将每个XXX_Debug的值设置为FALSE,将全局变量的值设置为初始值。
5.如权利要求1所述的方法,其特征在于,在步骤S2之后还包括步骤S3、记录测试结果并进行数据分析。
6.如权利要求3所述的方法,其特征在于,所述单点故障是仅有一个变量、寄存器或硬件地址内容异常。
7.如权利要求3所述的方法,其特征在于,所述物理接口为CAN总线。
8.如权利要求3所述的方法,其特征在于,所述物理接口为以太网。
9.如权利要求3所述的方法,其特征在于,所述物理接口为1553B总线。
10.如权利要求3所述的方法,其特征在于,所述物理接口为RS-422接口或RS-485接口。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910915616.4A CN110704314B (zh) | 2019-09-26 | 2019-09-26 | 一种嵌入式软件测试的故障注入方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910915616.4A CN110704314B (zh) | 2019-09-26 | 2019-09-26 | 一种嵌入式软件测试的故障注入方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110704314A true CN110704314A (zh) | 2020-01-17 |
CN110704314B CN110704314B (zh) | 2023-03-10 |
Family
ID=69196485
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910915616.4A Active CN110704314B (zh) | 2019-09-26 | 2019-09-26 | 一种嵌入式软件测试的故障注入方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110704314B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111611164A (zh) * | 2020-05-22 | 2020-09-01 | 厦门理工学院 | 基于故障注入的嵌入式测绘导航软件测试系统与方法 |
CN111651353A (zh) * | 2020-05-29 | 2020-09-11 | 北京百度网讯科技有限公司 | 故障注入的方法、装置、电子设备和存储介质 |
CN112054938A (zh) * | 2020-08-31 | 2020-12-08 | 天津津航计算技术研究所 | 一种1553b总线的bm软件通用测试方法 |
CN115629996A (zh) * | 2022-12-21 | 2023-01-20 | 深圳市微克科技有限公司 | 一种嵌入式软件自动化测试方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4996688A (en) * | 1988-09-19 | 1991-02-26 | Unisys Corporation | Fault capture/fault injection system |
CN101334754A (zh) * | 2008-08-05 | 2008-12-31 | 浙江大学 | 基于故障注入的嵌入式系统测评方法 |
CN103529820A (zh) * | 2013-09-26 | 2014-01-22 | 北京航天自动控制研究所 | 一种适用于嵌入式设备的故障注入测试系统及测试方法 |
US20150378859A1 (en) * | 2014-06-25 | 2015-12-31 | Altibase Corp. | Fault injection testing apparatus and method |
CN108737187A (zh) * | 2018-05-23 | 2018-11-02 | 哈尔滨工业大学 | 一种can总线故障模拟系统及故障模拟方法 |
-
2019
- 2019-09-26 CN CN201910915616.4A patent/CN110704314B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4996688A (en) * | 1988-09-19 | 1991-02-26 | Unisys Corporation | Fault capture/fault injection system |
CN101334754A (zh) * | 2008-08-05 | 2008-12-31 | 浙江大学 | 基于故障注入的嵌入式系统测评方法 |
CN103529820A (zh) * | 2013-09-26 | 2014-01-22 | 北京航天自动控制研究所 | 一种适用于嵌入式设备的故障注入测试系统及测试方法 |
US20150378859A1 (en) * | 2014-06-25 | 2015-12-31 | Altibase Corp. | Fault injection testing apparatus and method |
CN108737187A (zh) * | 2018-05-23 | 2018-11-02 | 哈尔滨工业大学 | 一种can总线故障模拟系统及故障模拟方法 |
Non-Patent Citations (1)
Title |
---|
陈强等: "基于模型的软件接口故障注入测试平台技术", 《计算机测量与控制》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111611164A (zh) * | 2020-05-22 | 2020-09-01 | 厦门理工学院 | 基于故障注入的嵌入式测绘导航软件测试系统与方法 |
CN111611164B (zh) * | 2020-05-22 | 2023-04-07 | 厦门理工学院 | 基于故障注入的嵌入式测绘导航软件测试系统与方法 |
CN111651353A (zh) * | 2020-05-29 | 2020-09-11 | 北京百度网讯科技有限公司 | 故障注入的方法、装置、电子设备和存储介质 |
CN112054938A (zh) * | 2020-08-31 | 2020-12-08 | 天津津航计算技术研究所 | 一种1553b总线的bm软件通用测试方法 |
CN112054938B (zh) * | 2020-08-31 | 2022-02-22 | 天津津航计算技术研究所 | 一种1553b总线的bm软件通用测试方法 |
CN115629996A (zh) * | 2022-12-21 | 2023-01-20 | 深圳市微克科技有限公司 | 一种嵌入式软件自动化测试方法 |
CN115629996B (zh) * | 2022-12-21 | 2023-03-10 | 深圳市微克科技有限公司 | 一种嵌入式软件自动化测试方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110704314B (zh) | 2023-03-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110704314B (zh) | 一种嵌入式软件测试的故障注入方法 | |
CN110688313B (zh) | 一种VxWorks操作系统下软件测试的故障注入方法 | |
CN107463473B (zh) | 基于uvm和fpga的芯片软硬件仿真环境 | |
CN109840207B (zh) | 一种基于autosar网络管理自动化测试系统及测试方法 | |
CN110704315B (zh) | 一种嵌入式软件测试的故障注入装置 | |
CN103077111B (zh) | 一种持续集成失败用例的定位方法及系统 | |
CN104657247A (zh) | 基于jtag调试方式实现通用型故障注入系统和故障注入方法 | |
CN107329889B (zh) | 一种c编译器自动化测试的方法 | |
Pezze et al. | Generating effective integration test cases from unit ones | |
Kormann et al. | Automated test case generation approach for PLC control software exception handling using fault injection | |
Svenningsson et al. | Model-implemented fault injection for hardware fault simulation | |
CN114168454B (zh) | 一种基于动态插桩-销桩技术的异步测试方法 | |
CN104699617A (zh) | 一种游戏用自动化测试方法 | |
CN115470138A (zh) | 一种基于不同调试级别交叉验证的调试器缺陷检测方法 | |
Jeong et al. | Fifa: A kernel-level fault injection framework for arm-based embedded linux system | |
CN110633199A (zh) | 用于支持智能合约的区块链的测试装置、方法及介质 | |
Barbosa et al. | Verification and validation of (real time) COTS products using fault injection techniques | |
Bombieri et al. | Functional qualification of TLM verification | |
CN114138670B (zh) | 基于接口自动化测试与功能、性能、安全测试融合的方法 | |
CN115470141A (zh) | 一种故障模拟方法、装置及相关设备 | |
Iyenghar et al. | An architecture for deploying model based testing in embedded systems | |
CN107315685A (zh) | 一种非侵入式程序实时调试方法 | |
CN113836046B (zh) | Mcu上虚拟机应用程序调试方法及系统 | |
Keränen et al. | Validation of model-based testing in hardware in the loop platform | |
CN112527680B (zh) | 一种基于Fitnesse框架的项目API级全链路自动化测试方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |