公开/公告号CN104657263A
专利类型发明专利
公开/公告日2015-05-27
原文格式PDF
申请/专利权人 上海创景计算机系统有限公司;
申请/专利号CN201510070389.1
申请日2015-02-10
分类号G06F11/36(20060101);
代理机构31236 上海汉声知识产权代理有限公司;
代理人郭国中;樊昕
地址 201203 上海市浦东新区张江高科技园区郭守敬路498号浦东软件园14幢22301-985座
入库时间 2023-12-18 08:54:31
法律状态公告日
法律状态信息
法律状态
2017-12-26
专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F11/36 变更前: 变更后: 申请日:20150210
专利权人的姓名或者名称、地址的变更
2017-10-24
授权
授权
2015-06-24
实质审查的生效 IPC(主分类):G06F11/36 申请日:20150210
实质审查的生效
2015-05-27
公开
公开
技术领域
本发明涉及一种测试系统和测试方法,具体地,涉及一种基于JTAG调试方式 实现通用型目标码覆盖率测试系统和测试方法。
背景技术
嵌入式程序往往具有高可靠性和稳定性的特点,因此需要对嵌入式程序进行严 格的测试,确定程序代码的覆盖率是否达到要求,如代码覆盖率、分支覆盖率和调 用覆盖率。
目前确定嵌入式程序覆盖率的方法一般是通过修改嵌入式程序源代码,在源代 码中植入探针代码,重新编译并执行嵌入式程序,然后通过分析探针的输出结果来 确定该嵌入式程序的各种代码覆盖率。现有方案因为要在源代码中植入探针代码, 必然导致嵌入式程序目标代码的膨胀,而嵌入式设备的存储空间往往是非常有限的, 可能会无法容纳膨胀后的程序代码,并且因为探针的存在,可能无法反映目标代码 的真实执行情况。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种基于JTAG调试方式实现通 用型目标码覆盖率测试系统和测试方法,其不需要对嵌入式程序的源码进行插桩, 不改变被测程序的源代码的程序结构,目标代码不会产生膨胀。另外,不修改嵌入 式程序的二进制目标代码的程序结构,直接测试运行于嵌入式设备上的程序代码, 确保被测代码和最终代码完全一致,可以反映目标代码的真实执行情况。
根据本发明的一个方面,提供一种基于JTAG调试方式实现通用型目标码覆盖率 测试系统,其特征在于,包括:
覆盖率监控模块,用于对目标代码进行分析处理,划分指令执行单元,驱动测试正 常执行和生成测试结果;
测试执行控制模块,用于接收覆盖率监控模块的指令并转换为JTAG命令,控制被 测件执行相应的指令并返回指令执行结果。
优选地,所述测试执行控制模块由带有JTAG功能的仿真器组成。
优选地,所述测试执行控制模块通过网络与覆盖率监控模块连接。
优选地,所述覆盖率监控模块包含五个子模块:代码分析模块、代码管理模块、 运行控制模块、结果整合模块和报告生成模块;其中,代码分析模块用于对被测目标代 码进行反汇编,解析指令类型,分析每条指令之间的逻辑关系,并根据指令间的逻辑关 系划分指令执行单元,在每个指令执行单元设置一个或多个程序断点,并根据程序的实 际执行过程调整断点的设置;代码管理模块用于管理被测代码,解析与被测代码相关的 符号信息,必要时建立被测二进制代码与源代码之间的关联关系,维护被测二进制程序、 符号信息和源代码之间的关联关系,并通过汇编、混合汇编等方式展现被测程序的内容; 运行控制模块用于管理与测试执行模块之间的通信,管理并驱动被测代码的执行,标记 当前断点触发的指令地址,根据触发断点的位置重新调用代码分析模块对当前代码块进 行分析,调整断点的设置位置,调整程序执行方式,让被测程序走单步或者运行;结果 整合模块用于被测程序的执行结果进行整理,根据代码分析模块划分的指令执行单元和 运行控制模块在被测程序执行过程中所标记的断点执行位置,分析被执行过的指令单元, 整理出被执行过的代码块、分支执行情况和函数调用执行情况,计算语句覆盖率、分支 覆盖率、调用覆盖率和MCDC覆盖率;报告生成模块用于将测试结果生成各种格式的测 试报告,根据用户设置和测试报告模板,将测试结果生成html报告、pdf报告等常见格 式的报告文件,便于用户对测试结果进行管理。
优选地,所述测试执行控制模块包含通信控制模块和JTAG执行模块两个子模块; 通信控制模块通过网络与上述运行控制模块连接并接收运行控制模块的指令信息,控制 指令执行流程、解析指令内容并反馈指令执行结果;JTAG执行模块通过JTAG数据线直 接连接嵌入式被测设备的JTAG接口,将通信控制模块的指令转换为JTAG命令,驱使被 测设备执行该JTAG命令并反馈命令执行结果给通信控制模块。
本发明还提供一种基于JTAG调试方式实现通用型目标码覆盖率测试方法,其特 征在于,包括以下步骤:
步骤一:建立与JTAG仿真器的连接,加载被测程序的二进制代码,对被测程 序进行反汇编处理,分析被测范围内各条指令的指令类型;
步骤二:加载并解析与被测程序相关的符号信息,管理被测程序与符号信息、 源代码之间的关联关系,通过符号窗口、汇编窗口、混合汇编等窗口展示被测程序 内容,让用户选择覆盖率监控范围;
步骤三:根据上述步骤的执行结果,对监控范围内的指令依据某种策略划分指 令执行单元,在每个指令执行单元设置一个或若干个程序断点;
步骤四:通过JTAG仿真器下载被测程序,将步骤三中每个指令单元中设置的 程序断点设置到被测嵌入式设备中,复位被测嵌入式设备;
步骤五:利用JTAG仿真器,驱动程序走单步或者运行,走单步停止或者触发 断点后对该指令地址进行标记,计算出当前的指令覆盖、分支覆盖、调用覆盖和 MC/DC等覆盖率数据;
步骤六:依据当前指令执行情况和程序PC所在的指令地址,对后续指令进行 分析,移除某些断点或设置新的软件断点,调整驱动方式和驱动策略;
步骤七:重复步骤五和步骤六,直到程序运行到目标地址或者被用户终止运行;
步骤八:整理程序执行结果,依据被测程序执行过程中所触发的程序断点的位 置和步骤三种划分的指令执行单元,分析每个指令执行单元的语句、分支、调用、 MCDC等执行情况;
步骤九:汇总步骤八中每个指令执行单元的执行情况,统计出整个被测范围的 指令语句覆盖率、分支覆盖率、调用覆盖率和MCDC覆盖率;
步骤十:根据用户设置和用户自定义的测试报告模板,将步骤九中整理的测试 结果生成测试报告,同时以其它方式展示目标代码实际执行情况。
与现有技术相比,本发明具有如下的有益效果:本发明可以采用不插桩,不在 被测程序中植入探针的方式测试嵌入式程序的语句、分支、调用和MC/DC等覆盖率 信息。本发明不改变被测目标代码的程序逻辑和程序结构,被测目标代码不会产生 代码膨胀,同时可以更真实地反映被测程序在被测设备上的运行情况。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、 目的和优点将会变得更明显:
图1为本发明基于JTAG调试方式实现通用型目标码覆盖率测试系统的简易原理框 图。
图2为本发明基于JTAG调试方式实现通用型目标码覆盖率测试系统的具体原理框 图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人 员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技 术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进。这些都属于 本发明的保护范围。
如图1和图2所示,本发明基于JTAG调试方式实现通用型目标码覆盖率测试系统 包括:
覆盖率监控模块:本模块用于对目标代码进行分析处理,划分指令执行单元,驱动 测试正常执行和生成测试结果。本模块包含五个子模块:代码分析模块、代码管理模块、 运行控制模块、结果整合模块和报告生成模块;其中,代码分析模块用于对被测目标代 码进行反汇编,解析指令类型,分析每条指令之间的逻辑关系,并根据指令间的逻辑关 系划分指令执行单元,在每个指令执行单元设置一个或多个程序断点,并根据程序的实 际执行过程调整断点的设置;代码管理模块用于管理被测代码,解析与被测代码相关的 符号信息,必要时建立被测二进制代码与源代码之间的关联关系,维护被测二进制程序、 符号信息和源代码之间的关联关系,并通过汇编、混合汇编等方式展现被测程序的内容; 运行控制模块用于管理与测试执行模块之间的通信,管理并驱动被测代码的执行,标记 当前断点触发的指令地址,根据触发断点的位置重新调用代码分析模块对当前代码块进 行分析,调整断点的设置位置,调整程序执行方式,让被测程序走单步或者运行;结果 整合模块用于被测程序的执行结果进行整理,根据代码分析模块划分的指令执行单元和 运行控制模块在被测程序执行过程中所标记的断点执行位置,分析被执行过的指令单元, 整理出被执行过的代码块、分支执行情况和函数调用执行情况,计算语句覆盖率、分支 覆盖率、调用覆盖率和MCDC覆盖率;报告生成模块用于将测试结果生成各种格式的测 试报告,根据用户设置和测试报告模板,将测试结果生成html报告、pdf报告等常见格 式的报告文件,便于用户对测试结果进行管理。
测试执行控制模块:本模块主要由带有JTAG功能的仿真器组成,用于接收运行控 制模块的指令并转换为JTAG命令,控制被测件执行相应的指令并返回指令执行结果。 该模块包含通信控制模块和JTAG执行模块两个子模块。通信控制模块通过网络与上述 运行控制模块连接并接收运行控制模块的指令信息,控制指令执行流程、解析指令内容 并反馈指令执行结果;JTAG执行模块通过JTAG数据线直接连接嵌入式被测设备的JTAG 接口,将通信控制模块的指令转换为JTAG命令,驱使被测设备执行该JTAG命令并反馈 命令执行结果给通信控制模块。测试执行控制模块提供的指令主要包括:被测设备复位、 被测设备初始化、读写寄存器、读写内存、设置或删除断点、运行、走单步、停止运行、 断点触发等命令。
本发明基于JTAG调试方式实现通用型目标码覆盖率测试方法包括以下步骤:
步骤一:建立与JTAG仿真器的连接,加载被测程序的二进制代码,对被测程 序进行反汇编处理,分析被测范围内各条指令的指令类型;
步骤二:加载并解析与被测程序相关的符号信息,管理被测程序与符号信息、 源代码之间的关联关系,通过符号窗口、汇编窗口、混合汇编等窗口展示被测程序 内容,让用户选择覆盖率监控范围;
步骤三:根据上述步骤的执行结果,对监控范围内的指令依据某种策略划分指 令执行单元,在每个指令执行单元设置一个或若干个程序断点;
步骤四:通过JTAG仿真器下载被测程序,将步骤三中每个指令单元中设置的 程序断点设置到被测嵌入式设备中,复位被测嵌入式设备;
步骤五:利用JTAG仿真器,驱动程序走单步或者运行,走单步停止或者触发 断点后对该指令地址进行标记,计算出当前的指令覆盖、分支覆盖、调用覆盖和 MC/DC等覆盖率数据;
步骤六:依据当前指令执行情况和程序PC所在的指令地址,对后续指令进行 分析,移除某些断点或设置新的软件断点,调整驱动方式和驱动策略;
步骤七:重复步骤五和步骤六,直到程序运行到目标地址或者被用户终止运行;
步骤八:整理程序执行结果,依据被测程序执行过程中所触发的程序断点的位 置和步骤三种划分的指令执行单元,分析每个指令执行单元的语句、分支、调用、 MCDC等执行情况;
步骤九:汇总步骤八中每个指令执行单元的执行情况,统计出整个被测范围的 指令语句覆盖率、分支覆盖率、调用覆盖率和MCDC覆盖率;
步骤十:根据用户设置和用户自定义的测试报告模板,将步骤九中整理的测试 结果生成测试报告,同时以其它方式展示目标代码实际执行情况。
其中步骤一包括两种情况:(1)被测程序没有被下载到嵌入式设备中。选择 并加载要测试的嵌入式程序目标代码文件,将该嵌入式程序通过仿真器下载到嵌入 式设备中,然后再通过仿真器加载指定地址范围的二进制代码,进行分析。(2) 被测程序已经被下载到嵌入式设备中并在嵌入式设备上运行。通过仿真器直接从嵌 入式设备上读取指定地址范围的二进制代码,进行分析。
本发明不需要对嵌入式程序的源码进行插桩,不改变被测程序的源代码的程序 结构,目标代码不会产生膨胀。另外,不修改嵌入式程序的二进制目标代码的程序 结构,直接测试运行于嵌入式设备上的程序代码,确保被测代码和最终代码完全一 致,可以反映目标代码的真实执行情况。本发明借助于仿真器的JTAG调试方式, 通过在嵌入式程序的目标代码中设置软件断点并监控断点的执行情况,确定嵌入式 程序目标代码的语句、分支、调用等覆盖率信息,测试过程中和测试过程完成后会 删除断点,不影响被测程序的正常运行。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上 述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改, 这并不影响本发明的实质内容。
机译: 测试方法以及如何使用其调试JTAG接口电路和JTAG相应的半导体器件
机译: 具有三组引线的JTAG调试测试系统适配器
机译: 应用于JTAG抽头装置,JTAG主机和目标系统的方案,能够实现数据验证以及节省片上电路成本