确定代码覆盖率的方法、测试装置制造方法及图纸

技术编号:2912278 阅读:259 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及计算机领域,本发明专利技术实施例公开了一种确定代码覆盖率的方法、测试装置,该方法包括:确定被测试程序的总代码量、该被测试程序的基础地址、各代码行的相对虚拟地址;根据该基础地址、该各代码行的虚拟地址,在该各代码行内设置中断;监测该被测试程序过程中是否有中断发生,如果是,则标记该中断所在的代码行;监测该测试是否执行完毕,如果否,则返回该监测是否有中断发生的步骤;如果是,则累计已标记的代码行的总代码获取被执行的代码总量,根据该被执行的代码总量、该总代码量获取该被测试程序的代码覆盖率。应用本发明专利技术实施例的技术方案能够准确获取被测试程序的代码覆盖率,并且有利于保证被测试程序的稳定性。

【技术实现步骤摘要】

本专利技术涉及计算机领域,尤其涉及计算机程序测试中一种确定代码覆盖率的方法、测试装置
技术介绍
在计算机程序的测试过程中,代码覆盖率是评价测试活动覆盖产品代码的指标。代码覆盖率测试的目的是确认产品代码是否按预期工作。代码覆盖率可以看作是产品代码工作方式的说明文档,是产品代码质量的间接指标,其用于确定测试的有效性。代码覆盖率用于评价测试代码是否已经覆盖了产品代码所有的路径。不同的测试案例对代码覆盖率的要求不同,因此,在测试程序过程中一般需要检查程序的代码覆盖率。为了确定代码覆盖率,现有技术主要使用以下两种技术方案:第一种具体是:在程序运行的过程中,高频采样程序的运行状态,在测试结束后,根据采样结果统计代码覆盖率。由于使用该技术方案对程序运行状态的采样会必然会忽略掉相当多的执行细节,采样不能反映程序执行的真实情况,因而采用该技术方案所获取的代码覆盖率只能是一个粗略统计,而不是真实的代码覆盖率。第二种具体是,在测试之前,首先需要获取被测试程序的源代码,并对源代码和工程配置进行修改:在需要进行代码覆盖率统计的源代码上增加调试信息输出设置,在修改后,将经修改后的源代码重新编译生成被测试程序。测试过程中,程序内部根据在源代码内增加的调试信息,记录有哪些代码被执行过,从而在测试结束时根据记录统计被执行过的代码总量,从而获取代码覆盖率。-->然而该技术方案的应用需要测试人员对被测试程序的源代码作修改,因此该技术方案不利于保持被测试程序的稳定性和安全性。
技术实现思路
本专利技术实施例提供了一种确定代码覆盖率的方法,采用该方法能够准确获取被测试程序的代码覆盖率,并且有利于保证被测试程序的稳定性。本专利技术实施例还提供了一种测试装置,采用该装置能够准确获取被测试程序的代码覆盖率,并且有利于保证被测试程序的稳定性。本专利技术实施例提供的一种确定代码覆盖率的方法,包括:确定被测试程序的总代码量、所述被测试程序的基础地址、各代码行的相对虚拟地址;根据所述基础地址、所述各代码行的虚拟地址,在所述各代码行内设置中断;监测所述被测试程序过程中是否有中断发生,如果是,则标记所述中断所在的代码行;监测所述测试是否执行完毕,如果否,则返回所述监测是否有中断发生的步骤;如果是,则:累计已标记的代码行的总代码获取被执行的代码总量,根据所述被执行的代码总量、所述总代码量获取所述被测试程序的代码覆盖率。本专利技术实施例提供的一种测试装置,包括:参数确定单元,用于确定所述被测试程序的总代码量、所述被测试程序的基础地址、各代码行的相对虚拟地址;中断设置单元,用于根据所述基础地址、各代码行的相对虚拟地址,在所述各代码行内设置中断;-->中断监测单元,用于监测所述被测试程序过程中是否有中断发生;标记中断操作单元,用于当所述中断监测单元监测到当前有中断发生时,标记所述中断所在的代码行;结束监测单元,用于监测所述测试是否执行完毕;计算单元,用于当所述结束监测单元监测到所述测试执行完毕时,累计已标记的各代码行的代码量获取被执行的代码总量,并根据所述被执行的代码总量、以及所述被执行的代码总量,获取所述被测试程序的代码覆盖率。由上看见,应用本专利技术实施例的技术方案,通过在对被测试程序进行测试时,在各代码行内设置中断形成断点,使得测试执行到各代码行的断点处便产生中断,如果有中断发生,则无疑的该中断所在的代码行无疑被执行,反之,该代码行被执行则肯定会有中断发生。在每次中断发生时均标记所述中断所在的代码行,在测试完毕后,根据标记可以找到真实被执行过的各代码行,从而累计已标记的代码行的总代码获取被执行的代码总量,最后再根据被测试程序的总代码量得到真实的代码覆盖率。另外的,在本专利技术实施例的技术方案中,通过在各代码行内设置断点从而根据断点的发生确定具体被执行的代码行,而中断的设置只需要修改被测试程序的执行流程,而不需要对源程序文件本身作修改,即不需要修改被测试程序的源代码,该技术方案的应用相对于现有技术的第二种技术方案更有利于保证被测试程序及测试目标的稳定性。另外的,应用本专利技术实施例的技术方案,测试人员还可以根据中断的发生,实时直观的获知代码执行的详细情况。附图说明此处所说明的附图用来提供对本专利技术的进一步理解,构成本申请的一部分,并不构成对本专利技术的不当限定,在附图中:-->图1为实施例1提供的方法流程示意图;图2为实施例2提供的装置结构示意图。具体实施方式下面将结合附图以及具体实施例来详细说明本专利技术,在此本专利技术的示意性实施例以及说明用来解释本专利技术,但并不作为对本专利技术的限定。实施例1:在执行本实施例的方法前可以首先将dbghelp.dll文件路径、待被测试程序的文件路径、程序数据库(Program DataBase,简称PDB)文件路径传递至代码覆盖率测试工具以便初始化测试环境信息,从而可以使用代码覆盖率测试工具在该测试环境下进行测试,该代码覆盖率测试工具可以以悬挂调试方式启动被测试模块,以准备后续的测试:图1为本实施例提供的确定代码覆盖率的方法流程示意图,如图示,该方法可以包括:步骤101:确定被测试程序的总代码量、被测试程序的基础地址、各代码行的相对虚拟地址。分析被测试程序的PE头信息,找到该程序基础地址。根据该被测试程序的PDB文件,在该PDB文件内找到该程序的总代码量、各代码行的相对虚拟地址等信息。步骤102:根据程序的基础地址、各代码行的相对虚拟地址,在各代码行内设置中断。在本步骤中,可以在各代码行内的任意位置设置至少一个中断。根据程序的基础地址、以及各代码行的相对虚拟地址,确定各代码行的虚拟地址:比如,第i行代码行的虚拟地址为被测试程序的基础地址加上第i代码行的相对虚拟地址,文中所述的虚拟地址均指内存地址。-->在各代码行内的任意位置设置中断具体可以为:在各相邻代码行的虚拟地址之间的任何地址设置中断,比如,第i行代码的虚拟地址为a(i),第i+1行代码行的虚拟地址为a(i+1),可以在虚拟地址集合{a|a(i)<=a<a(i+1)本文档来自技高网...

【技术保护点】
一种确定代码覆盖率的方法,其特征是,包括: 确定被测试程序的总代码量、所述被测试程序的基础地址、各代码行的相对虚拟地址; 根据所述基础地址、所述各代码行的虚拟地址,在所述各代码行内设置中断; 监测所述被测试程序过程中是否有中断发生,如果是,则标记所述中断所在的代码行; 监测所述测试是否执行完毕,如果否,则返回所述监测是否有中断发生的步骤;如果是,则: 累计已标记的代码行的总代码获取被执行的代码总量,根据所述被执行的代码总量、所述总代码量获取所述被测试程序的代码覆盖率。

【技术特征摘要】
1、一种确定代码覆盖率的方法,其特征是,包括:确定被测试程序的总代码量、所述被测试程序的基础地址、各代码行的相对虚拟地址;根据所述基础地址、所述各代码行的虚拟地址,在所述各代码行内设置中断;监测所述被测试程序过程中是否有中断发生,如果是,则标记所述中断所在的代码行;监测所述测试是否执行完毕,如果否,则返回所述监测是否有中断发生的步骤;如果是,则:累计已标记的代码行的总代码获取被执行的代码总量,根据所述被执行的代码总量、所述总代码量获取所述被测试程序的代码覆盖率。2、根据权利要求1所述的方法,其特征是,确定所述总代码量、所述被测试程序的基础地址、各代码行的相对虚拟地址,具体是:根据所述被测试程序的PE头信息,获取所述被测试程序的基础地址;根据所述被测试程序的程序数据库文件,获取所述被测试程序的总代码量、所述各代码行的相对虚拟地址。3、根据权利要求1所述的方法,其特征是,在所述各代码行内设置中断,具体是:在所述各代码行内写入中断标识。4、根据权利要求1、2或3所述的方法,其特征是,在所述各代码行内设置中断,具体是:在所述各代码行的入口点设置所述中断。5、根据权利要求4所述的方法,其特征是,在所述各代码行的入口点设置所述中断,包括:根据程序数据库文件路径初始化符号句柄,使用所述符号句柄定位所述各代码行的虚拟地址,在所述各代码行的虚拟地址处设置所述各代码行的中断,其中所述各代码行的虚拟地址由所述基础地址、所述代码行的相对虚拟地址确定。6、根据权利要求1、2或3所述的方法,其特征是,标记所述中断所在的代码行...

【专利技术属性】
技术研发人员:张康宗王钊戴赞洵
申请(专利权)人:珠海金山软件有限公司
类型:发明
国别省市:44[中国|广东]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1