CN110647467B - 基于单步异常的目标码覆盖率测试方法、系统及介质 - Google Patents
基于单步异常的目标码覆盖率测试方法、系统及介质 Download PDFInfo
- Publication number
- CN110647467B CN110647467B CN201910900845.9A CN201910900845A CN110647467B CN 110647467 B CN110647467 B CN 110647467B CN 201910900845 A CN201910900845 A CN 201910900845A CN 110647467 B CN110647467 B CN 110647467B
- Authority
- CN
- China
- Prior art keywords
- instruction
- monitoring
- branch
- processor
- function
- 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.)
- Active
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/3676—Test management for coverage 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)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种基于单步异常的目标码覆盖率测试方法、系统及介质,包括:编译步骤:在测试前对被测程序进行编译,将监控模块与被测程序一起编译,并在监控范围的开始点和结束点分别调用监控开始函数和监控结束函数;监控开始步骤:目标代码执行到监控开始函数时,监控开始函数使能处理器的单步异常,从而使得处理器每执行一条指令就产生一个单步异常。本发明不需要借助额外的调试硬件,在应用上具有更高的灵活性;本发明不仅可以做目标码的语句覆盖率分析,同时可以做目标码的分支覆盖率分析和目标码的调用覆盖率分析。
Description
技术领域
本发明涉及目标码覆盖率分析技术,具体地,基于单步异常的目标码覆盖率测试方法、系统及介质,尤其地,涉及一种基于单步异常的嵌入式软件目标码覆盖率测试方法、系统及介质。
背景技术
为了解决在不插桩源代码并且不借助仿真器的情况下对嵌入式软件进行目标码测试的问题。
传统的进行目标码测试的方式包括:插桩的方式进行目标码测试、基于EJTAG方式通用型目标码覆盖率测试方法、通过走单步的方式进行目标码覆盖率测试的方法、基于CPU模拟器的目标码覆盖率测试方法。
检索到以下专利:
①一种符合DO-178B/C A级软件目标码覆盖分析方法(专利申请号:201410717703.6)。对比该专利,本发明不插桩源代码。
②基于JTAG调试方式实现通用型目标码覆盖率测试系统和测试方法(专利申请号:201510070389.1)。对比该专利,本发明不需要借助额外的调试硬件,在应用上具有更高的灵活性。
③一种安全关键嵌入式软件目标码覆盖率分析方法(专利申请号:201610681532.5)。对比该专利,本发明不仅可以做目标码的语句覆盖率分析,同时可以做目标码的分支覆盖率分析和目标码的调用覆盖率分析。
④一种基于CPU模拟器的嵌入式C语言目标码级单元测试方法(专利申请号:201410381755.0)。对该该专利,本发明依托真实的物理环境得出的覆盖率更具可信性。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种基于单步异常的目标码覆盖率测试方法、系统及介质。
根据本发明提供的一种基于单步异常的目标码覆盖率测试方法,包括:
编译步骤:在测试前对被测程序进行编译,将监控模块与被测程序一起编译,并在监控范围的开始点和结束点分别调用监控开始函数和监控结束函数;
监控开始步骤:目标代码执行到监控开始函数时,监控开始函数使能处理器的单步异常,从而使得处理器每执行一条指令就产生一个单步异常;
执行监控步骤:目标代码产生单步异常后,在单步异常的异常处理函数中记录当前指令的指令地址,并将该指令标记为已执行,记录非分支指令的执行情况,同时判断当前指令是否为分支指令:如果当前指令为分支指令,则分析该分支指令的真假执行情况,并记录分支指令的执行情况;否则,则不分析;
监控结束步骤:当目标代码执行到监控结束函数时,令监控模块关闭单步异常;通过通信链路将已执行的目标代码信息及覆盖率信息发送给上位机;
计算覆盖率步骤:上位机将目标代码与监控结束步骤中已执行的目标代码信息及覆盖率信息相结合,从而标记并计算目标代码的语句覆盖率、分支覆盖率和调用覆盖率。
优选地,所述编译步骤:
所述监控模块是一个函数库,其中包含且不局限于如下函数:监控开始函数、监控结束函数、异常处理函数;
所述监控开始函数:将监控模块中的单步异常处理函数挂载到处理器的单步异常向量表中,同时使能处理器的单步异常,监控开始函数预示着监控模块开始收集被测目标代码的覆盖率信息;
所述监控结束函数:关闭处理器的单步异常,结束收集被测目标代码的覆盖率信息。
优选地,所述执行监控步骤:
所述异常处理函数:处理器单步异常的处理函数,收集并分析当前指令的执行情况。
优选地,所述执行监控步骤
所述判断当前指令是否为分支指令:
根据所执行当前指令的二进制码分析当前指令是否是分支指令:若当前指令是分支指令则结合当前状态寄存器和相关寄存器的值,分析当前分支指令的真假执行情况,并标记分支指令的执行情况;否则,则不分析;
所述状态寄存器是指处理器内部的一个寄存器,存储处理器当前的状态信息;
相关寄存器是指处理器内部跟指令执行相关的一组寄存器,寄存器的具体名称根据处理器的变化而不同。
优选地,所述已执行的目标代码信息及覆盖率信息包括:被执行到的指令地址及指令执行情况;
所述执行情况包括:
非分支指令的执行情况:非分支指令是否被执行;
分支指令的执行情况:分支指令是否被执行,以及若分支指令被执行了,该被执行的分支指令是真分支还是假分支。
根据本发明提供的一种基于单步异常的目标码覆盖率测试系统,包括:
编译模块:在测试前对被测程序进行编译,将监控模块与被测程序一起编译,并在监控范围的开始点和结束点分别调用监控开始函数和监控结束函数;
监控开始模块:目标代码执行到监控开始函数时,监控开始函数使能处理器的单步异常,从而使得处理器每执行一条指令就产生一个单步异常;
执行监控模块:目标代码产生单步异常后,在单步异常的异常处理函数中记录当前指令的指令地址,并将该指令标记为已执行,记录分支指令的执行情况,同时判断当前指令是否为分支指令:如果当前指令为分支指令,则分析该分支指令的真假执行情况,并记录分支指令的执行情况;否则,则不分析;
监控结束模块:当目标代码执行到监控结束函数时,令监控模块关闭单步异常;通过通信链路将已执行的目标代码信息及覆盖率信息发送给上位机;
计算覆盖率模块:上位机将目标代码与接收的已执行的目标代码信息及覆盖率信息相结合,从而标记并计算目标代码的语句覆盖率、分支覆盖率和调用覆盖率。
优选地,所述编译模块:
所述监控模块是一个函数库,其中包含且不局限于如下函数:监控开始函数、监控结束函数、异常处理函数;
所述监控开始函数:将监控模块中的单步异常处理函数挂载到处理器的单步异常向量表中,同时使能处理器的单步异常,监控开始函数预示着监控模块开始收集被测目标代码的覆盖率信息;
所述监控结束函数:关闭处理器的单步异常,结束收集被测目标代码的覆盖率信息。
优选地,所述执行监控模块:
所述异常处理函数:处理器单步异常的处理函数,收集并分析当前指令的执行情况。
优选地,所述执行监控模块
所述判断当前指令是否为分支指令:
根据所执行当前指令的二进制码分析当前指令是否是分支指令:若当前指令是分支指令则结合当前状态寄存器和相关寄存器的值,分析当前分支指令的真假执行情况,并标记分支指令的执行情况;否则,则不分析;
所述状态寄存器是指处理器内部的一个寄存器,存储处理器当前的状态信息;
相关寄存器是指处理器内部跟指令执行相关的一组寄存器,寄存器的具体名称根据处理器的变化而不同;
所述已执行的目标代码信息及覆盖率信息包括:被执行到的指令地址及指令执行情况;
所述执行情况包括:
非分支指令的执行情况:非分支指令是否被执行;
分支指令的执行情况:分支指令是否被执行,以及若分支指令被执行了,该被执行的分支指令是真分支还是假分支。
根据本发明提供的一种存储有计算机程序的计算机可读存储介质,所述计算机程序被处理器执行时实现上述中任一项所述的一种基于单步异常的目标码覆盖率测试方法的步骤。
与现有技术相比,本发明具有如下的有益效果:
1、本发明不需要借助额外的调试硬件,在应用上具有更高的灵活性;
2、本发明不仅可以做目标码的语句覆盖率分析,同时可以做目标码的分支覆盖率分析和目标码的调用覆盖率分析;
3、本发明依托真实的物理环境得出的覆盖率更具可信性。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为基于单步异常的嵌入式软件被测目标代码的编译生成方式示意图
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
根据本发明提供的一种基于单步异常的目标码覆盖率测试方法,包括:
编译步骤:在测试前对被测程序进行编译,将监控模块与被测程序一起编译,并在监控范围的开始点和结束点分别调用监控开始函数和监控结束函数;
监控开始步骤:目标代码执行到监控开始函数时,监控开始函数使能处理器的单步异常,从而使得处理器每执行一条指令就产生一个单步异常;
执行监控步骤:目标代码产生单步异常后,在单步异常的异常处理函数中记录当前指令的指令地址,并将该指令标记为已执行,记录非分支指令的执行情况,同时判断当前指令是否为分支指令:如果当前指令为分支指令,则分析该分支指令的真假执行情况,并记录分支指令的执行情况;否则,则不分析;
监控结束步骤:当目标代码执行到监控结束函数时,令监控模块关闭单步异常;通过通信链路将已执行的目标代码信息及覆盖率信息发送给上位机;
计算覆盖率步骤:上位机将目标代码与监控结束步骤中已执行的目标代码信息及覆盖率信息相结合,从而标记并计算目标代码的语句覆盖率、分支覆盖率和调用覆盖率。
具体地,所述编译步骤:
所述监控模块是一个函数库,其中包含且不局限于如下函数:监控开始函数、监控结束函数、异常处理函数;
所述监控开始函数:将监控模块中的单步异常处理函数挂载到处理器的单步异常向量表中,同时使能处理器的单步异常,监控开始函数预示着监控模块开始收集被测目标代码的覆盖率信息;
所述监控结束函数:关闭处理器的单步异常,结束收集被测目标代码的覆盖率信息。
具体地,所述执行监控步骤:
所述异常处理函数:处理器单步异常的处理函数,收集并分析当前指令的执行情况。
具体地,所述执行监控步骤
所述判断当前指令是否为分支指令:
根据所执行当前指令的二进制码分析当前指令是否是分支指令:若当前指令是分支指令则结合当前状态寄存器和相关寄存器的值,分析当前分支指令的真假执行情况,并标记分支指令的执行情况;否则,则不分析;
所述状态寄存器是指处理器内部的一个寄存器,存储处理器当前的状态信息;
相关寄存器是指处理器内部跟指令执行相关的一组寄存器,寄存器的具体名称根据处理器的变化而不同。
具体地,所述已执行的目标代码信息及覆盖率信息包括:被执行到的指令地址及指令执行情况;
所述执行情况包括:
非分支指令的执行情况:非分支指令是否被执行;
分支指令的执行情况:分支指令是否被执行,以及若分支指令被执行了,该被执行的分支指令是真分支还是假分支。
根据本发明提供的一种基于单步异常的目标码覆盖率测试系统,包括:
编译模块:在测试前对被测程序进行编译,将监控模块与被测程序一起编译,并在监控范围的开始点和结束点分别调用监控开始函数和监控结束函数;
监控开始模块:目标代码执行到监控开始函数时,监控开始函数使能处理器的单步异常,从而使得处理器每执行一条指令就产生一个单步异常;
执行监控模块:目标代码产生单步异常后,在单步异常的异常处理函数中记录当前指令的指令地址,并将该指令标记为已执行,记录分支指令的执行情况,同时判断当前指令是否为分支指令:如果当前指令为分支指令,则分析该分支指令的真假执行情况,并记录分支指令的执行情况;否则,则不分析;
监控结束模块:当目标代码执行到监控结束函数时,令监控模块关闭单步异常;通过通信链路将已执行的目标代码信息及覆盖率信息发送给上位机;
计算覆盖率模块:上位机将目标代码与接收的已执行的目标代码信息及覆盖率信息相结合,从而标记并计算目标代码的语句覆盖率、分支覆盖率和调用覆盖率。
具体地,所述编译模块:
所述监控模块是一个函数库,其中包含且不局限于如下函数:监控开始函数、监控结束函数、异常处理函数;
所述监控开始函数:将监控模块中的单步异常处理函数挂载到处理器的单步异常向量表中,同时使能处理器的单步异常,监控开始函数预示着监控模块开始收集被测目标代码的覆盖率信息;
所述监控结束函数:关闭处理器的单步异常,结束收集被测目标代码的覆盖率信息。
具体地,所述执行监控模块:
所述异常处理函数:处理器单步异常的处理函数,收集并分析当前指令的执行情况。
具体地,所述执行监控模块
所述判断当前指令是否为分支指令:
根据所执行当前指令的二进制码分析当前指令是否是分支指令:若当前指令是分支指令则结合当前状态寄存器和相关寄存器的值,分析当前分支指令的真假执行情况,并标记分支指令的执行情况;否则,则不分析;
所述状态寄存器是指处理器内部的一个寄存器,存储处理器当前的状态信息;
相关寄存器是指处理器内部跟指令执行相关的一组寄存器,寄存器的具体名称根据处理器的变化而不同;
所述已执行的目标代码信息及覆盖率信息包括:被执行到的指令地址及指令执行情况;
所述执行情况包括:
非分支指令的执行情况:非分支指令是否被执行;
分支指令的执行情况:分支指令是否被执行,以及若分支指令被执行了,该被执行的分支指令是真分支还是假分支。
根据本发明提供的一种存储有计算机程序的计算机可读存储介质,所述计算机程序被处理器执行时实现上述中任一项所述的一种基于单步异常的目标码覆盖率测试方法的步骤。
下面通过优选例,对本发明进行更为具体地说明。
优选例1:
下述增加了对监控模块的文字说明及图片说明
监控模块(函数库)跟被测程序一起编译,在被测程序指定的位置调用监控开始接口,由监控模块使能目标板的单步异常,在单步异常的异常处理中,记录当前指令的地址。根据当前指令的二进制码,结合处理器当前/当时状态寄存器和其它相关寄存器的内容分析当前指令是否是分支指令并分析出当前分支指令的真假执行情况。当目标码运行到监控结束接口时,关闭单步异常并将覆盖率执行结果发送回上位机,上位机收到执行结果后标记目标码的执行情况并计算目标码的语句覆盖率、分支覆盖率和调用覆盖率。
此方法在不插桩源代码并且不借助仿真器的情况下可以对嵌入式软件进行目标码的语句、分支、调用覆盖率分析测试。总体分为五个步骤:
1、在测试前对被测程序进行编译,将监控模块与被测程序一起编译,如图1所示。并在监控范围的开始和结束点分别调用监控开始函数和监控结束函数.(后面有描述说明)
2、目标代码执行到监控开始函数时,监控函数使能处理器的单步异常,从而使得处理器每执行一条指令就产生一个单步异常。
3、目标码产生单步异常后,在单步异常的异常处理函数中记录当前指令的指令地址,根据当前指令的二进制码分析当前指令是否是分支指令,如果是分支指令则结合当前/当时处理器的状态寄存器和其它相关寄存器的值(状态寄存器:处理器内部的一个寄存器,主要是存储处理器当前的状态信息。其它相关寄存器:处理器内部跟指令执行相关的一组寄存器,寄存器的具体名称根据处理器的变化而不同。)分析当前分支指令的真假执行情况(分支指令在执行时要么执行真分支,要么执行假分支。在此处分析出该分支指令是执行真分支还是假分支),并标记分支指令的执行结果(前述分析出来的分支指令的执行结果,如执行真分支,或执行假分支。这些分析出来的执行结果会被记录在监控模块内)。
4、当目标码执行到监控结束函数时,监控模块关闭单步异常。通过通信链路将已执行的目标代码信息及覆盖率信息(被测目标代码内的指令有的会被执行到,有的不会被执行到。这里只将被执行到的指令地址及指令的执行情况发送给上位机。)(执行情况:普通指令的执行情况是指:该普通指令是否被执行。分支指令的执行情况是指:该分支指令是否被执行,如果被执行的话是执行了真分支还是执行了假分支)发送给上位机。
5、上位机将编译生成的二进制目标码与目标机上实际运行的目标码比对,从而标记并计算语句覆盖率、分支覆盖率和调用覆盖率。
图1监控模块的说明:
监控模块是一个函数库,其中包含且不局限于如下函数:监控开始函数、监控结束函数、异常处理函数。
监控开始函数:主要是将监控模块中的单步异常处理函数挂载到处理器的单步异常向量表中,同时使能/开启(“使能”:嵌入式系统的专用名词)处理器的单步异常。监控开始函数预示着监控模块开始收集被测目标代码的覆盖率信息。
监控结束函数:主要是关闭处理器的单步异常,结束收集被测目标代码的覆盖率信息。
异常处理函数:处理器单步异常的处理函数,主要是收集并分析当前指令的执行情况。
优选例2:
根据本发明提供的一种基于单步异常的目标码覆盖率测试方法,包括如下步骤:
编译步骤:在测试前对被测程序进行编译,包括监控模块与被测程序,如图1所示,并在监控范围的开始点和结束点分别调用监控开始函数和监控结束函数;
监控开始步骤:目标代码执行到监控开始函数时,监控开始函数使能处理器的单步异常,从而使得处理器每执行一条指令就产生一个单步异常;
执行监控步骤:目标码产生单步异常后,在单步异常的异常处理函数中记录当前指令的指令地址,并将该指令标记为已执行;同时判断当前是否为分支指令,如果当前指令为分支指令,则分析该分支指令的真假执行情况,分支指令在执行时要么执行真分支,要么执行假分支。在此处分析出该分支指令是执行真分支还是假分支,并标记分支指令的执行结果;如执行真分支,或执行假分支,这些分析出来的执行结果会被记录在监控模块内;
监控结束步骤:当目标码执行到监控结束函数时,监控模块关闭单步异常。通过通信链路将已执行的目标代码信息及覆盖率信息发送给上位机;被测目标代码内的指令有的会被执行到,有的不会被执行到。这里只将被执行到的指令地址及指令的执行情况发送给上位机。而执行情况是指普通指令的执行情况,该普通指令是否被执行。分支指令的执行情况是指该分支指令是否被执行,如果被执行的话是执行了真分支还是执行了假分支。
覆盖率信息主要是指执行监控步骤中生成的标记结果。例如:地址0x0,(普通语句),语句已执行;地址0x4,(分支语句),语句已执行,真分支已执行等。
计算覆盖率步骤:上位机将被测试目标代码与监控结束步骤中已执行的目标代码信息及覆盖率信息相结合,从而标记并计算被测试目标代码的语句覆盖率、分支覆盖率和调用覆盖率。
语句覆盖率的计算方法:凡是触发了单步异常的指令,都被标记为已执行;
(某地址区间内被标记为已执行的指令条数)/(某地址区间内的指令总条数)*100%=某地址区间的语句覆盖率。
分支覆盖率的计算方法:凡是触发了单步异常的指令,会被分析是否是分支指令,如果是分支指令,则会分析出分支指令的真假执行情况,并标记该分支指令的执行结果,该分支执行了真分支或假分支;
覆盖率的公式为:(某地址区间内被标记为已执行的真分支指令条数+某地址区间内被标记为已执行的假分支指令条数)/(某地址区间内的分支指令总条数*2)*100%=某地址区间的分支覆盖率。
优选地,监控模块是一个函数库,其中包含且不局限于如下函数:监控开始函数、监控结束函数、异常处理函数。
优选地,监控开始函数:主要是将监控模块中的单步异常处理函数挂载到处理器的单步异常向量表中,同时使能处理器的单步异常,监控开始函数预示着监控模块开始收集被测目标代码的覆盖率信息。
优选地,监控结束函数:主要是关闭处理器的单步异常,结束收集被测目标代码的覆盖率信息。
优选地,异常处理函数:处理器单步异常的处理函数,主要是收集并分析当前指令的执行情况。
优选地,根据所执行当前指令的二进制码分析当前指令是否是分支指令。
优选地,若当前指令是分支指令则结合当前状态寄存器和其他相关寄存器的值,分析当前分支指令的真假执行情况,并标记分支指令的执行结果;
状态寄存器是指处理器内部的一个寄存器,主要是存储处理器当前的状态信息;
其它相关寄存器是指处理器内部跟指令执行相关的一组寄存器,寄存器的具体名称根据处理器的变化而不同。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
Claims (8)
1.一种基于单步异常的目标码覆盖率测试方法,其特征在于,包括:
编译步骤:在测试前对被测程序进行编译,将监控模块与被测程序一起编译,并在监控范围的开始点和结束点分别调用监控开始函数和监控结束函数;
监控开始步骤:目标代码执行到监控开始函数时,监控开始函数使能处理器的单步异常,从而使得处理器每执行一条指令就产生一个单步异常;
执行监控步骤:目标代码产生单步异常后,在单步异常的异常处理函数中记录当前指令的指令地址,并将该指令标记为已执行,记录非分支指令的执行情况,同时判断当前指令是否为分支指令:如果当前指令为分支指令,则分析该分支指令的真假执行情况,并记录分支指令的执行情况;否则,则不分析;
监控结束步骤:当目标代码执行到监控结束函数时,令监控模块关闭单步异常;通过通信链路将已执行的目标代码信息及覆盖率信息发送给上位机;
计算覆盖率步骤:上位机将目标代码与监控结束步骤中已执行的目标代码信息及覆盖率信息相结合,从而标记并计算目标代码的语句覆盖率、分支覆盖率和调用覆盖率;
所述编译步骤:
所述监控模块是一个函数库,其中包含且不局限于如下函数:监控开始函数、监控结束函数、异常处理函数;
所述监控开始函数:将监控模块中的单步异常处理函数挂载到处理器的单步异常向量表中,同时使能处理器的单步异常,监控开始函数预示着监控模块开始收集被测目标代码的覆盖率信息;
所述监控结束函数:关闭处理器的单步异常,结束收集被测目标代码的覆盖率信息。
2.根据权利要求1所述的一种基于单步异常的目标码覆盖率测试方法,其特征在于,所述执行监控步骤:
所述异常处理函数:处理器单步异常的处理函数,收集并分析当前指令的执行情况。
3.根据权利要求2所述的一种基于单步异常的目标码覆盖率测试方法,其特征在于,所述执行监控步骤
所述判断当前指令是否为分支指令:
根据所执行当前指令的二进制码分析当前指令是否是分支指令:若当前指令是分支指令则结合当前状态寄存器和相关寄存器的值,分析当前分支指令的真假执行情况,并标记分支指令的执行情况;否则,则不分析;
所述状态寄存器是指处理器内部的一个寄存器,存储处理器当前的状态信息;
相关寄存器是指处理器内部跟指令执行相关的一组寄存器,寄存器的具体名称根据处理器的变化而不同。
4.根据权利要求1所述的一种基于单步异常的目标码覆盖率测试方法,其特征在于,所述已执行的目标代码信息及覆盖率信息包括:被执行到的指令地址及指令执行情况;
所述执行情况包括:
非分支指令的执行情况:非分支指令是否被执行;
分支指令的执行情况:分支指令是否被执行,以及若分支指令被执行了,该被执行的分支指令是真分支还是假分支。
5.一种基于单步异常的目标码覆盖率测试系统,其特征在于,包括:
编译模块:在测试前对被测程序进行编译,将监控模块与被测程序一起编译,并在监控范围的开始点和结束点分别调用监控开始函数和监控结束函数;
监控开始模块:目标代码执行到监控开始函数时,监控开始函数使能处理器的单步异常,从而使得处理器每执行一条指令就产生一个单步异常;
执行监控模块:目标代码产生单步异常后,在单步异常的异常处理函数中记录当前指令的指令地址,并将该指令标记为已执行,记录分支指令的执行情况,同时判断当前指令是否为分支指令:如果当前指令为分支指令,则分析该分支指令的真假执行情况,并记录分支指令的执行情况;否则,则不分析;
监控结束模块:当目标代码执行到监控结束函数时,令监控模块关闭单步异常;通过通信链路将已执行的目标代码信息及覆盖率信息发送给上位机;
计算覆盖率模块:上位机将目标代码与接收的已执行的目标代码信息及覆盖率信息相结合,从而标记并计算目标代码的语句覆盖率、分支覆盖率和调用覆盖率;
其特征在于,所述编译模块:
所述监控模块是一个函数库,其中包含且不局限于如下函数:监控开始函数、监控结束函数、异常处理函数;
所述监控开始函数:将监控模块中的单步异常处理函数挂载到处理器的单步异常向量表中,同时使能处理器的单步异常,监控开始函数预示着监控模块开始收集被测目标代码的覆盖率信息;
所述监控结束函数:关闭处理器的单步异常,结束收集被测目标代码的覆盖率信息。
6.根据权利要求5所述的一种基于单步异常的目标码覆盖率测试系统,其特征在于,所述执行监控模块:
所述异常处理函数:处理器单步异常的处理函数,收集并分析当前指令的执行情况。
7.根据权利要求6所述的一种基于单步异常的目标码覆盖率测试系统,其特征在于,所述执行监控模块
所述判断当前指令是否为分支指令:
根据所执行当前指令的二进制码分析当前指令是否是分支指令:若当前指令是分支指令则结合当前状态寄存器和相关寄存器的值,分析当前分支指令的真假执行情况,并标记分支指令的执行情况;否则,则不分析;
所述状态寄存器是指处理器内部的一个寄存器,存储处理器当前的状态信息;
相关寄存器是指处理器内部跟指令执行相关的一组寄存器,寄存器的具体名称根据处理器的变化而不同;
所述已执行的目标代码信息及覆盖率信息包括:被执行到的指令地址及指令执行情况;
所述执行情况包括:
非分支指令的执行情况:非分支指令是否被执行;
分支指令的执行情况:分支指令是否被执行,以及若分支指令被执行了,该被执行的分支指令是真分支还是假分支。
8.一种存储有计算机程序的计算机可读存储介质,其特征在于,所述计算机程序被处理器执行时实现权利要求1至4中任一项所述的一种基于单步异常的目标码覆盖率测试方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910900845.9A CN110647467B (zh) | 2019-09-23 | 2019-09-23 | 基于单步异常的目标码覆盖率测试方法、系统及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910900845.9A CN110647467B (zh) | 2019-09-23 | 2019-09-23 | 基于单步异常的目标码覆盖率测试方法、系统及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110647467A CN110647467A (zh) | 2020-01-03 |
CN110647467B true CN110647467B (zh) | 2021-05-28 |
Family
ID=68992380
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910900845.9A Active CN110647467B (zh) | 2019-09-23 | 2019-09-23 | 基于单步异常的目标码覆盖率测试方法、系统及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110647467B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116955118B (zh) * | 2023-09-19 | 2023-12-29 | 统信软件技术有限公司 | 性能分析方法、系统、计算设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101464829A (zh) * | 2007-12-18 | 2009-06-24 | 珠海金山软件股份有限公司 | 确定代码覆盖率的方法、测试装置 |
WO2010041973A1 (en) * | 2008-10-09 | 2010-04-15 | Siemens Aktiengesellschaft | Method and apparatus for test coverage analysis |
CN104156311A (zh) * | 2014-08-05 | 2014-11-19 | 北京控制工程研究所 | 一种基于cpu模拟器的嵌入式c语言目标码级单元测试方法 |
CN109614290A (zh) * | 2018-12-10 | 2019-04-12 | 苏州思必驰信息科技有限公司 | 容器中的进程异常信息记录方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102831054B (zh) * | 2012-06-30 | 2015-12-02 | 华为技术有限公司 | 程序断点处理方法及装置 |
-
2019
- 2019-09-23 CN CN201910900845.9A patent/CN110647467B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101464829A (zh) * | 2007-12-18 | 2009-06-24 | 珠海金山软件股份有限公司 | 确定代码覆盖率的方法、测试装置 |
WO2010041973A1 (en) * | 2008-10-09 | 2010-04-15 | Siemens Aktiengesellschaft | Method and apparatus for test coverage analysis |
CN104156311A (zh) * | 2014-08-05 | 2014-11-19 | 北京控制工程研究所 | 一种基于cpu模拟器的嵌入式c语言目标码级单元测试方法 |
CN109614290A (zh) * | 2018-12-10 | 2019-04-12 | 苏州思必驰信息科技有限公司 | 容器中的进程异常信息记录方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN110647467A (zh) | 2020-01-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110580226B (zh) | 操作系统级程序的目标码覆盖率测试方法、系统及介质 | |
CN109800159B (zh) | 程序调试方法、程序调试装置、终端设备及存储介质 | |
US6071316A (en) | Automated validation and verification of computer software | |
KR101019210B1 (ko) | 이뮬레이트를 활용한 임베디드 소프트웨어 테스트 장치 및그 방법 | |
US20070079288A1 (en) | System and method for capturing filtered execution history of executable program code | |
CN109101416B (zh) | 一种内核故障注入方法及电子设备 | |
RU2010114709A (ru) | Способ автоматического генерирования сценария для проверки правильности функционального программного обеспечения системы, установленной на борту летательного аппарата, и устройство для применения способа | |
CN109255240B (zh) | 一种漏洞处理方法和装置 | |
JP6827340B2 (ja) | ソフトウェア試験装置、ソフトウェア試験システム、ソフトウェア試験方法およびプログラム | |
US8650547B2 (en) | Method for debugging operational software of a system onboard an aircraft and device for implementing the same | |
CN108021791B (zh) | 数据保护方法及装置 | |
CN110647467B (zh) | 基于单步异常的目标码覆盖率测试方法、系统及介质 | |
Weiss et al. | Understanding and fixing complex faults in embedded cyberphysical systems | |
CN114510429B (zh) | 一种基于动态符号执行的调试方法、系统和介质 | |
CN108132799B (zh) | 过程间静态程序分析信息提取方法、装置及设备 | |
CN110554969B (zh) | 基于预设断点的目标码覆盖率测试方法、系统及介质 | |
CN107291617B (zh) | 一种基于隐式污点传播的漏洞分析方法 | |
CN109726115A (zh) | 一种基于Intel处理器跟踪的反调试自动绕过方法 | |
CN110727577B (zh) | 嵌入式系统软件中概率复现问题的调试方法、系统及介质 | |
CN105718375A (zh) | 嵌入式系统的可恢复性度量方法 | |
DE60021092D1 (de) | Vorrichtung und Verfahren zur Echtzeitfehlerbeseitigung von Quellprogrammen, insbesondere für DSP | |
JP2008210059A (ja) | 情報処理装置、デバッグ支援方法及びプログラム | |
KR100428712B1 (ko) | 멀티 태스크 프로그램의 논스톱 디버깅을 위한트레이스포인트 설정 방법 | |
Spinellis | Debuggers and logging frameworks | |
CN112527571B (zh) | 一种cpu指令集覆盖率计算方法及装置 |
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 |