CN110554969A - 基于预设断点的目标码覆盖率测试方法、系统及介质 - Google Patents
基于预设断点的目标码覆盖率测试方法、系统及介质 Download PDFInfo
- Publication number
- CN110554969A CN110554969A CN201910900830.2A CN201910900830A CN110554969A CN 110554969 A CN110554969 A CN 110554969A CN 201910900830 A CN201910900830 A CN 201910900830A CN 110554969 A CN110554969 A CN 110554969A
- Authority
- CN
- China
- Prior art keywords
- instruction
- monitoring
- branch
- executed
- target code
- 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
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
-
- 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/3688—Test management for test execution, e.g. scheduling of test suites
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、本发明基于数据断点或硬件断点的方式分析目标码覆盖率,因为特征点不是连续设置的,覆盖率分析效率更高。同时本发明不仅可以做目标码的语句覆盖率分析,还可以做目标码的分支覆盖率分析和目标码的调用覆盖率分析。
4、本发明依托真实的物理环境得出的覆盖率更具可信性。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为基于预设断点的嵌入式软件被测目标代码的编译生成方式示意图
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
根据本发明提供的一种基于预设断点的目标码覆盖率测试方法,包括:
编译步骤:在测试前对被测程序进行编译,将监控模块与被测程序一起编译,并在监控范围的开始点和结束点分别调用监控开始函数和监控结束函数;
开始监控步骤:目标代码执行到监控开始函数时,监控开始函数在监控范围的开始点设置预设断点并使能调试中断;
执行监控步骤:目标代码触发预设断点后,在预设断点的中断处理函数中记录当前指令的指令地址,判断是否为分支指令:若当前指令不是分支指令,则直接记录当前指令已执行,标记非分支指令的执行结果;若当前指令是分支指令,则标记分支指令的执行结果;同时,分析下一个特征点的位置并在下一个特征点处设置预设断点;所述特征点指:被测目标代码中,下一条即将被执行到的指令;
监控结束步骤:当目标代码执行到监控结束函数时,监控模块关闭调试中断并删除预设断点;通过通信链路将已执行的目标码信息及覆盖率信息发送给上位机;
计算覆盖率步骤:令上位机将被测试目标代码与接收的已执行的目标代码信息及覆盖率信息相结合,标记并计算被测试目标代码的语句覆盖率、分支覆盖率和调用覆盖率。
具体地,包括编译步骤:
监控模块是一个函数库,其中包含且不局限于如下函数:监控开始函数、监控结束函数、中断处理函数;
监控开始函数:将监控模块中的预设断点的中断处理函数挂载到处理器的中断向量表中,同时使能处理器的调试中断;监控开始函数预示着监控模块开始收集被测目标代码的覆盖率信息;
监控结束函数:关闭处理器的调试中断,结束收集被测目标代码的覆盖率信息。
具体地,所述执行监控步骤:
所述中断处理函数:处理器发生预设断点中断后执行的处理函数,收集并分析当前指令的执行情况;
所述分支指令指:改变程序流程的指令,在实际执行时,根据处理器的状态执行真分支或者假分支;
所述判断是否为分支指令:根据当前指令的二进制码分析当前指令是否是分支指令:若当前指令是分支指令则结合当前处理器的状态寄存器和相关寄存器的值,分析当前分支指令的真假执行情况,并标记分支指令的执行结果;
所述分支指令的执行结果包括:执行真分支或执行假分支;
所述分支指令的执行结果被记录在监控模块内。
具体地,所述状态寄存器指:处理器内部的一个寄存器,存储处理器当前的状态信息;
所述相关寄存器:处理器内部跟指令执行相关的一组寄存器,寄存器的具体名称根据处理器的变化而不同。
具体地,所述预设断点包括:数据断点、硬件断点;
所述已执行的目标代码信息及覆盖率信息包括:被执行到的指令地址及指令执行结果;
所述执行结果包括:
非分支指令的执行结果:指令是否被执行;
分支指令的执行结果:分支指令是否被执行,以及若分支指令被执行了,该被执行的分支指令是真分支还是假分支。
根据本发明提供的一种基于预设断点的目标码覆盖率测试系统,包括:
编译步骤:在测试前对被测程序进行编译,将监控模块与被测程序一起编译,并在监控范围的开始点和结束点分别调用监控开始函数和监控结束函数;
开始监控步骤:目标代码执行到监控开始函数时,监控开始函数在监控范围的开始点设置预设断点并使能调试中断;
执行监控步骤:目标代码触发预设断点后,在预设断点的中断处理函数中记录当前指令的指令地址,判断是否为分支指令:若当前指令不是分支指令,则直接记录当前指令已执行,标记非分支指令的执行结果;若当前指令是分支指令,则标记分支指令的执行结果;同时,分析下一个特征点的位置并在下一个特征点处设置预设断点;所述特征点指:被测目标代码中,下一条即将被执行到的指令;
监控结束步骤:当目标代码执行到监控结束函数时,监控模块关闭调试中断并删除预设断点;通过通信链路将已执行的目标码信息及覆盖率信息发送给上位机;
计算覆盖率步骤:令上位机将被测试目标代码与接收的已执行的目标代码信息及覆盖率信息相结合,标记并计算被测试目标代码的语句覆盖率、分支覆盖率和调用覆盖率。
具体地,包括编译步骤:
监控模块是一个函数库,其中包含且不局限于如下函数:监控开始函数、监控结束函数、中断处理函数;
监控开始函数:将监控模块中的预设断点的中断处理函数挂载到处理器的中断向量表中,同时使能处理器的调试中断;监控开始函数预示着监控模块开始收集被测目标代码的覆盖率信息;
监控结束函数:关闭处理器的调试中断,结束收集被测目标代码的覆盖率信息。
具体地,所述执行监控步骤:
所述中断处理函数:处理器发生预设断点中断后执行的处理函数,收集并分析当前指令的执行情况;
所述分支指令指:改变程序流程的指令,在实际执行时,根据处理器的状态执行真分支或者假分支;
所述判断是否为分支指令:根据当前指令的二进制码分析当前指令是否是分支指令:若当前指令是分支指令则结合当前处理器的状态寄存器和相关寄存器的值,分析当前分支指令的真假执行情况,并标记分支指令的执行结果;
所述分支指令的执行结果包括:执行真分支或执行假分支;
所述分支指令的执行结果被记录在监控模块内。
具体地,所述状态寄存器指:处理器内部的一个寄存器,存储处理器当前的状态信息;
所述相关寄存器:处理器内部跟指令执行相关的一组寄存器,寄存器的具体名称根据处理器的变化而不同;
所述预设断点包括:数据断点、硬件断点;
所述已执行的目标代码信息及覆盖率信息包括:被执行到的指令地址及指令执行结果;
所述执行结果包括:
非分支指令的执行结果:指令是否被执行;
分支指令的执行结果:分支指令是否被执行,以及若分支指令被执行了,该被执行的分支指令是真分支还是假分支。
一种存储有计算机程序的计算机可读存储介质,其特征在于,所述计算机程序被处理器执行时实现上述中任一项所述的一种基于预设断点的目标码覆盖率测试方法的步骤。
根据本发明提供的一种基于预设断点的目标码覆盖率测试介质,所述计算机程序被处理器执行时实现上述所述的一种基于预设断点的目标码覆盖率测试方法的步骤。本发明提供的系统,可以通过本发明给的方法的步骤流程实现。本领域技术人员可以将所述方法,理解为所述系统的一个优选例。
下面通过优选例,对本发明进行更为具体地说明。
优选例1:
一种基于数据断点的目标码覆盖率测试方法,其步骤包括:
编译步骤:在测试前对被测程序进行编译,将监控模块与被测程序一起编译,如图1所示,并在监控范围的开始点和结束点分别调用监控开始函数和监控结束函数。
开始监控步骤:目标代码执行到监控开始函数时,监控开始函数在监控范围的开始点设置数据断点并使能调试中断。
执行监控步骤:目标代码触发数据断点后,在数据断点的中断处理函数中记录当前指令的指令地址,判断是否为分支指令,若当前指令不是分支指令,则直接记录当前指令已执行;若当前指令是分支指令,则标记分支指令的执行结果。同时,分析下一个特征点的位置并在下一个特征点处设置数据断点;
特征点指:被测目标代码中,下一条即将被执行到的指令。如当前被执行指令是非分支指令且地址是0x4,则该指令的下一个特征点是0x8。如当前被执行指令是分支指令且地址是0x4,假如分析出该指令执行了真分支且其真分支的地址是0x20,则该指令的下一个特征点是0x20。
监控结束步骤:当目标代码执行到监控结束函数时,监控模块关闭调试中断并删除数据断点。通过通信链路将已执行的目标码信息及覆盖率信息发送给上位机。
计算覆盖率步骤:上位机将被测试目标代码与监控结束步骤中“已执行的目标代码信息及覆盖率信息”相结合,从而标记并计算被测试目标代码的语句覆盖率、分支覆盖率和调用覆盖率。
优选地,监控模块是一个函数库,其中包含且不局限于如下函数:监控开始函数、监控结束函数、中断处理函数。
监控开始函数:主要是将监控模块中的数据断点的中断处理函数挂载到处理器的中断向量表中,同时使能处理器的调试中断。监控开始函数预示着监控模块开始收集被测目标代码的覆盖率信息。
监控结束函数:主要是关闭处理器的调试中断,结束收集被测目标代码的覆盖率信息。
优选地,中断处理函数:处理器发生数据断点中断后执行的处理函数,主要是收集并分析当前指令的执行情况。
优选地,分支指令:改变程序流程的指令,在实际执行时,根据处理器的状态执行真分支或者假分支;
优选地,若当前指令是分支指令则结合当前处理器的状态寄存器和其它相关寄存器的值,分析当前分支指令的真假执行情况,并标记分支指令的执行结果。
优选地,分支指令的执行结果包括若执行真分支或执行假分支,这些分析出来的执行结果会被记录在监控模块内。
优选地,状态寄存器:处理器内部的一个寄存器,主要是存储处理器当前的状态信息。
其它相关寄存器:处理器内部跟指令执行相关的一组寄存器,寄存器的具体名称根据处理器的变化而不同。
根据当前状态寄存器和其它相关寄存器的值来分析该分支指令的真假执行情况。亦可以理解为:处理器的状态寄存器中保存了分支指令的真假执行情况,通过分析状态寄存器,即可分析出当前指令的真假执行情况。
根据本发明提供的一种基于数据断点的目标码覆盖率测试系统,运用于上述一种基于数据断点的目标码覆盖率测试方法。
优选例2:
下述增加了对监控模块的文字说明及图片说明
监控模块(函数库)跟被测程序一起编译,在被测程序指定的位置调用监控开始接口,由监控模块使能目标板的调试中断,在数据断点所对应的调试中断中记录发生中断时的指令地址,并根据中断时指令的二进制码,结合处理器当前(当时)状态寄存器和其它相关寄存器的内容分析发生中断的指令是否是分支指令并分析出当前分支指令的真假执行情况。同时分析下一个特征点的位置并在下一个特征点处设置数据断点。当目标码运行到监控结束接口时,关闭调试中断并将覆盖率执行结果发送回上位机,上位机收到执行结果后标记目标码的执行情况并计算目标码的语句覆盖率、分支覆盖率和调用覆盖率。
此方法在不插桩源代码并且不借助仿真器的情况下可以对嵌入式软件进行目标码的语句、分支、调用覆盖率分析测试。总体分为五个步骤:
①、在测试前对被测程序进行编译,将监控模块与被测程序一起编译,如图1所示。并在监控范围的开始和结束点分别调用监控开始函数和监控结束函数(后面有描述说明)。
②、目标代码(目标代码:计算机专用术语,可百度查询,主要是指源代码编译后生成的二进制代码)执行到监控开始函数时,监控函数在覆盖率监控开始点设置数据断点并使能调试中断(使能:嵌入式专用术语,可百度查询)。
③、目标代码触发数据断点后,在数据断点的中断处理函数(后续有说明)中记录当前指令(即触发数据断点时正在或正要执行的指令)的指令地址,并根据当前指令的二进制码分析当前指令是否是分支指令(分支指令:改变程序流程的指令。在实际执行时,根据处理器的状态执行真分支或者假分支)。若当前指令不是分支指令,则直接标记(记录)当前指令已执行;若当前指令是分支指令则结合当前处理器的状态寄存器和其它相关寄存器的值(状态寄存器:处理器内部的一个寄存器,主要是存储处理器当前的状态信息。其它相关寄存器:处理器内部跟指令执行相关的一组寄存器,寄存器的具体名称根据处理器的变化而不同。)分析当前分支指令的真假执行情况(分支指令在执行时要么执行真分支,要么执行假分支。在此处分析出该分支指令是执行真分支还是假分支),并标记分支指令的执行结果(前述分析出来的分支指令的执行结果,如执行真分支,或执行假分支。这些分析出来的执行结果会被记录在监控模块内)。同时,分析下一个特征点的位置并在下一个特征点处设置数据断点。
④、当目标代码执行到监控结束函数时,监控模块关闭调试中断并删除数据断点。通过通信链路将已执行的目标码信息及覆盖率信息(被测目标代码内的指令有的会被执行到,有的不会被执行到。这里只将被执行到的指令地址及指令的执行情况发送给上位机。)(执行情况:普通指令的执行情况是指:该普通指令是否被执行。分支指令的执行情况是指:该分支指令是否被执行,如果被执行的话是执行了真分支还是执行了假分支)发送给上位机。
⑤上位机将被测试目标代码与步骤四中发上来的“已执行的目标代码信息及覆盖率信息”相结合,从而标记并计算被测试目标代码的语句覆盖率、分支覆盖率和调用覆盖率。
图1监控模块的说明:
监控模块是一个函数库,其中包含且不局限于如下函数:监控开始函数、监控结束函数、中断处理函数。
监控开始函数:主要是将监控模块中的数据断点的中断处理函数挂载到处理器的中断向量表中,同时使能/开启(“使能”:嵌入式系统的专用名词)处理器的调试中断。监控开始函数预示着监控模块开始收集被测目标代码的覆盖率信息。
监控结束函数:主要是关闭处理器的调试中断,结束收集被测目标代码的覆盖率信息。
中断处理函数:处理器发生数据断点中断后执行的处理函数,主要是收集并分析当前指令的执行情况。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
Claims (10)
1.一种基于预设断点的目标码覆盖率测试方法,其特征在于,包括:
编译步骤:在测试前对被测程序进行编译,将监控模块与被测程序一起编译,并在监控范围的开始点和结束点分别调用监控开始函数和监控结束函数;
开始监控步骤:目标代码执行到监控开始函数时,监控开始函数在监控范围的开始点设置预设断点并使能调试中断;
执行监控步骤:目标代码触发预设断点后,在预设断点的中断处理函数中记录当前指令的指令地址,判断是否为分支指令:若当前指令不是分支指令,则直接记录当前指令已执行,标记非分支指令的执行结果;若当前指令是分支指令,则标记分支指令的执行结果;同时,分析下一个特征点的位置并在下一个特征点处设置预设断点;所述特征点指:被测目标代码中,下一条即将被执行到的指令;
监控结束步骤:当目标代码执行到监控结束函数时,监控模块关闭调试中断并删除预设断点;通过通信链路将已执行的目标码信息及覆盖率信息发送给上位机;
计算覆盖率步骤:令上位机将被测试目标代码与接收的已执行的目标代码信息及覆盖率信息相结合,标记并计算被测试目标代码的语句覆盖率、分支覆盖率和调用覆盖率。
2.根据权利要求1所述的一种基于预设断点的目标码覆盖率测试方法,其特征在于,包括编译步骤:
监控模块是一个函数库,其中包含且不局限于如下函数:监控开始函数、监控结束函数、中断处理函数;
监控开始函数:将监控模块中的预设断点的中断处理函数挂载到处理器的中断向量表中,同时使能处理器的调试中断;监控开始函数预示着监控模块开始收集被测目标代码的覆盖率信息;
监控结束函数:关闭处理器的调试中断,结束收集被测目标代码的覆盖率信息。
3.根据权利要求1所述的一种基于预设断点的目标码覆盖率测试方法,其特征在于,所述执行监控步骤:
所述中断处理函数:处理器发生预设断点中断后执行的处理函数,收集并分析当前指令的执行情况;
所述分支指令指:改变程序流程的指令,在实际执行时,根据处理器的状态执行真分支或者假分支;
所述判断是否为分支指令:根据当前指令的二进制码分析当前指令是否是分支指令:若当前指令是分支指令则结合当前处理器的状态寄存器和相关寄存器的值,分析当前分支指令的真假执行情况,并标记分支指令的执行结果;
所述分支指令的执行结果包括:执行真分支或执行假分支;
所述分支指令的执行结果被记录在监控模块内。
4.根据权利要求3所述的一种基于预设断点的目标码覆盖率测试方法,其特征在于,所述状态寄存器指:处理器内部的一个寄存器,存储处理器当前的状态信息;
所述相关寄存器:处理器内部跟指令执行相关的一组寄存器,寄存器的具体名称根据处理器的变化而不同。
5.根据权利要求1所述的一种基于预设断点的目标码覆盖率测试方法,其特征在于,所述预设断点包括:数据断点、硬件断点;
所述已执行的目标代码信息及覆盖率信息包括:被执行到的指令地址及指令执行结果;
所述执行结果包括:
非分支指令的执行结果:指令是否被执行;
分支指令的执行结果:分支指令是否被执行,以及若分支指令被执行了,该被执行的分支指令是真分支还是假分支。
6.一种基于预设断点的目标码覆盖率测试系统,其特征在于,包括:
编译步骤:在测试前对被测程序进行编译,将监控模块与被测程序一起编译,并在监控范围的开始点和结束点分别调用监控开始函数和监控结束函数;
开始监控步骤:目标代码执行到监控开始函数时,监控开始函数在监控范围的开始点设置预设断点并使能调试中断;
执行监控步骤:目标代码触发预设断点后,在预设断点的中断处理函数中记录当前指令的指令地址,判断是否为分支指令:若当前指令不是分支指令,则直接记录当前指令已执行,标记非分支指令的执行结果;若当前指令是分支指令,则标记分支指令的执行结果;同时,分析下一个特征点的位置并在下一个特征点处设置预设断点;所述特征点指:被测目标代码中,下一条即将被执行到的指令;
监控结束步骤:当目标代码执行到监控结束函数时,监控模块关闭调试中断并删除预设断点;通过通信链路将已执行的目标码信息及覆盖率信息发送给上位机;
计算覆盖率步骤:令上位机将被测试目标代码与接收的已执行的目标代码信息及覆盖率信息相结合,标记并计算被测试目标代码的语句覆盖率、分支覆盖率和调用覆盖率。
7.根据权利要求6所述的一种基于预设断点的目标码覆盖率测试系统,其特征在于,包括编译步骤:
监控模块是一个函数库,其中包含且不局限于如下函数:监控开始函数、监控结束函数、中断处理函数;
监控开始函数:将监控模块中的预设断点的中断处理函数挂载到处理器的中断向量表中,同时使能处理器的调试中断;监控开始函数预示着监控模块开始收集被测目标代码的覆盖率信息;
监控结束函数:关闭处理器的调试中断,结束收集被测目标代码的覆盖率信息。
8.根据权利要求6所述的一种基于预设断点的目标码覆盖率测试系统,其特征在于,所述执行监控步骤:
所述中断处理函数:处理器发生预设断点中断后执行的处理函数,收集并分析当前指令的执行情况;
所述分支指令指:改变程序流程的指令,在实际执行时,根据处理器的状态执行真分支或者假分支;
所述判断是否为分支指令:根据当前指令的二进制码分析当前指令是否是分支指令:若当前指令是分支指令则结合当前处理器的状态寄存器和相关寄存器的值,分析当前分支指令的真假执行情况,并标记分支指令的执行结果;
所述分支指令的执行结果包括:执行真分支或执行假分支;
所述分支指令的执行结果被记录在监控模块内。
9.根据权利要求8所述的一种基于预设断点的目标码覆盖率测试系统,其特征在于,所述状态寄存器指:处理器内部的一个寄存器,存储处理器当前的状态信息;
所述相关寄存器:处理器内部跟指令执行相关的一组寄存器,寄存器的具体名称根据处理器的变化而不同;
所述预设断点包括:数据断点、硬件断点;
所述已执行的目标代码信息及覆盖率信息包括:被执行到的指令地址及指令执行结果;
所述执行结果包括:
非分支指令的执行结果:指令是否被执行;
分支指令的执行结果:分支指令是否被执行,以及若分支指令被执行了,该被执行的分支指令是真分支还是假分支。
10.一种存储有计算机程序的计算机可读存储介质,其特征在于,所述计算机程序被处理器执行时实现权利要求1至5中任一项所述的一种基于预设断点的目标码覆盖率测试方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910900830.2A CN110554969B (zh) | 2019-09-23 | 2019-09-23 | 基于预设断点的目标码覆盖率测试方法、系统及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910900830.2A CN110554969B (zh) | 2019-09-23 | 2019-09-23 | 基于预设断点的目标码覆盖率测试方法、系统及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110554969A true CN110554969A (zh) | 2019-12-10 |
CN110554969B CN110554969B (zh) | 2021-05-25 |
Family
ID=68741120
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910900830.2A Active CN110554969B (zh) | 2019-09-23 | 2019-09-23 | 基于预设断点的目标码覆盖率测试方法、系统及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110554969B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010041973A1 (en) * | 2008-10-09 | 2010-04-15 | Siemens Aktiengesellschaft | Method and apparatus for test coverage analysis |
CN101706750A (zh) * | 2009-11-16 | 2010-05-12 | 西安邮电学院 | 一种基于嵌入式模拟器的测试桩获取方法 |
CN104657263A (zh) * | 2015-02-10 | 2015-05-27 | 上海创景计算机系统有限公司 | 基于jtag调试方式实现通用型目标码覆盖率测试系统和测试方法 |
CN104657264A (zh) * | 2015-02-10 | 2015-05-27 | 上海创景计算机系统有限公司 | 二进制码覆盖率的测试系统及其测试方法 |
CN106445803A (zh) * | 2016-08-17 | 2017-02-22 | 中国航空工业集团公司西安飞行自动控制研究所 | 一种安全关键嵌入式软件目标码覆盖率分析方法 |
CN107391375A (zh) * | 2017-07-25 | 2017-11-24 | 北京计算机技术及应用研究所 | 执行c25汇编语言时获取语句和分支覆盖率的方法 |
-
2019
- 2019-09-23 CN CN201910900830.2A patent/CN110554969B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010041973A1 (en) * | 2008-10-09 | 2010-04-15 | Siemens Aktiengesellschaft | Method and apparatus for test coverage analysis |
CN101706750A (zh) * | 2009-11-16 | 2010-05-12 | 西安邮电学院 | 一种基于嵌入式模拟器的测试桩获取方法 |
CN104657263A (zh) * | 2015-02-10 | 2015-05-27 | 上海创景计算机系统有限公司 | 基于jtag调试方式实现通用型目标码覆盖率测试系统和测试方法 |
CN104657264A (zh) * | 2015-02-10 | 2015-05-27 | 上海创景计算机系统有限公司 | 二进制码覆盖率的测试系统及其测试方法 |
CN106445803A (zh) * | 2016-08-17 | 2017-02-22 | 中国航空工业集团公司西安飞行自动控制研究所 | 一种安全关键嵌入式软件目标码覆盖率分析方法 |
CN107391375A (zh) * | 2017-07-25 | 2017-11-24 | 北京计算机技术及应用研究所 | 执行c25汇编语言时获取语句和分支覆盖率的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110554969B (zh) | 2021-05-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110580226B (zh) | 操作系统级程序的目标码覆盖率测试方法、系统及介质 | |
KR101019210B1 (ko) | 이뮬레이트를 활용한 임베디드 소프트웨어 테스트 장치 및그 방법 | |
CA2332650C (en) | Software analysis system having an apparatus for selectively collecting analysis data from a target system executing software instrumented with tag statements and method for use thereof | |
US20070079288A1 (en) | System and method for capturing filtered execution history of executable program code | |
US20030208746A1 (en) | Conditional breakpoint encountered indication | |
CN106055983A (zh) | 一种基于IDA通信的Android应用反调试方法 | |
US20150006961A1 (en) | Capturing trace information using annotated trace output | |
CN106021101B (zh) | 对移动终端进行测试的方法及装置 | |
CN108021791B (zh) | 数据保护方法及装置 | |
US6978399B2 (en) | Debug thread termination control points | |
CN109543417B (zh) | 一种基于Qemu平台的漏洞挖掘方法和装置 | |
US8533683B2 (en) | Stack walking enhancements using sensorpoints | |
KR102013657B1 (ko) | 연관된 다중 파일 정적 분석 장치 | |
CN109783284A (zh) | 信息获取方法、系统及服务器、计算机可读存储介质 | |
CN112685299B (zh) | 自动测试方法、装置、电子设备及可读存储介质 | |
CN106598836A (zh) | 一种客户端软件的测试方法及系统 | |
CN110647467B (zh) | 基于单步异常的目标码覆盖率测试方法、系统及介质 | |
CN110554969B (zh) | 基于预设断点的目标码覆盖率测试方法、系统及介质 | |
CN110209565A (zh) | 一种元数据模型调试方法及其装置 | |
CN114510429B (zh) | 一种基于动态符号执行的调试方法、系统和介质 | |
CN115599645B (zh) | 一种linux驱动模块稳定性测试方法及装置 | |
JP2008135008A (ja) | プログラムモジュール検証方式 | |
CN107291617B (zh) | 一种基于隐式污点传播的漏洞分析方法 | |
CN109726115A (zh) | 一种基于Intel处理器跟踪的反调试自动绕过方法 | |
KR100428712B1 (ko) | 멀티 태스크 프로그램의 논스톱 디버깅을 위한트레이스포인트 설정 방법 |
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 |