首页> 中国专利> 覆盖率测试方法及覆盖率测试装置

覆盖率测试方法及覆盖率测试装置

摘要

本发明提供一种覆盖率测试方法及覆盖率测试装置,该覆盖率测试方法包括:检测执行函数的执行操作,并获取执行函数对应的脚本函数的函数位置、操作码以及操作码偏移;对脚本函数的函数位置、操作码以及操作码偏移进行记录,并生成执行函数表;以及在检测操作完毕后,将执行函数表与自定义函数表进行对比,获取软件代码的覆盖率。本发明还提供一种覆盖率测试装置,本发明的覆盖率测试方法及覆盖率测试装置通过设置自定义函数表与执行函数表进行对比,以生成代码覆盖率,并可通过自定义函数表有效的兼容各种软件代码,整个测试过程简单。

著录项

  • 公开/公告号CN105468505A

    专利类型发明专利

  • 公开/公告日2016-04-06

    原文格式PDF

  • 申请/专利权人 腾讯科技(深圳)有限公司;

    申请/专利号CN201410394793.X

  • 发明设计人 严明;邱学倩;

    申请日2014-08-12

  • 分类号G06F11/36(20060101);

  • 代理机构深圳翼盛智成知识产权事务所(普通合伙);

  • 代理人黄威

  • 地址 518000 广东省深圳市福田区振兴路赛格科技园2栋东403室

  • 入库时间 2023-12-18 15:24:54

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-12-28

    授权

    授权

  • 2017-05-31

    实质审查的生效 IPC(主分类):G06F11/36 申请日:20140812

    实质审查的生效

  • 2016-04-06

    公开

    公开

说明书

技术领域

本发明涉及软件测试领域,特别是涉及一种软件代码的覆盖率测试方法及 覆盖率测试装置。

背景技术

在C/C++软件开发的质量保证体系中,覆盖率(软件中代码的运行比率) 测试通常是一种有效发现问题的手段,通过代码覆盖率的分析,可以快速定位 到哪些代码是没有运行的,从而构造相应的测试案例来覆盖这些代码,以发现 软件设计中的错误。

目前软件代码覆盖率测试广泛使用的是开源gcov工具,gcov工具是集成 在gcc(GNUCompilerCollection,GUN编译器套件)中的一个检测代码覆盖 率的工具,它通过编译阶段(即将源代码编译成可执行代码),在源代码中插 入探针函数(插入探针函数也称为插桩,用来标识代码的运行次数),来记录 代码是否运行,并根据记录的运行信息分析出软件代码行、函数、分支的覆盖 情况。

但是使用gcov工具进行软件代码的覆盖率测试具有以下几个缺点:

一、gcov工具需要在检测代码时插入探针函数,因此该软件发布时,需要 对软件代码进行重新编译,以将探针函数去除,因此该覆盖率测试的过程较为 复杂。

二、由于虚拟机执行的软件代码需要了解虚拟机转换机制才能进行很好的 编译,因此对于虚拟机执行的非编译类的软件代码无法进行探针函数的插入操 作,进而无法进行软件代码的覆盖率测试。

故现有的覆盖率测试方法的测试过程较为复杂,且不能对所有的软件代码 均进行有效的覆盖率测试。

发明内容

本发明实施例提供一种测试过程简单,且可对所有软件代码均可进行有效 的覆盖率测试的覆盖率测试方法及覆盖率测试装置,以解决现有的覆盖率测试 方法及覆盖率测试装置的测试过程复杂,且不能对所有的软件代码均进行有效 的覆盖率测试的技术问题。

为解决上述问题,本发明提供的技术方案如下:

本发明实施例提供一种覆盖率测试方法,其包括:

检测执行函数的执行操作,并获取所述执行函数对应的脚本函数的函数位 置、操作码以及相应的操作码偏移;

对所述执行函数对应的脚本函数的函数位置、所述操作码以及所述操作码 偏移进行记录,并生成执行函数表;以及

在所述检测操作完毕后,将所述执行函数表与所述自定义函数表进行对比, 获取软件代码的覆盖率;其中所述自定义函数表包括所述软件代码的所有脚本 函数的函数位置、操作码、操作码偏移以及函数名。

本发明实施例还提供一种覆盖率测试装置,其包括:

执行函数获取模块,用于检测执行函数的执行操作,并获取所述执行函数 对应的脚本函数的函数位置、操作码以及相应的操作码偏移;

参数记录模块,用于对所述执行函数对应的脚本函数的函数位置、所述操 作码以及所述操作码偏移进行记录,并生成执行函数表;以及

覆盖率获取模块,用于在所述检测操作完毕后,将所述执行函数表与所述 自定义函数表进行对比,获取软件代码的覆盖率;其中所述自定义函数表包括 所述软件代码的所有脚本函数的函数位置、操作码、操作码偏移以及函数名。

相较于现有技术的覆盖率测试方法及覆盖率测试装置,本发明的覆盖率测 试方法及覆盖率测试装置通过设置自定义函数表与执行函数表进行对比,以生 成代码覆盖率,并可通过自定义函数表有效的兼容各种软件代码,整个测试过 程简单;解决了现有的覆盖率测试方法及覆盖率测试装置的测试过程复杂,且 不能对所有的软件代码均进行有效的覆盖率测试的技术问题。

附图说明

图1为本发明的覆盖率测试方法的第一优选实施例的流程图;

图2为本发明的覆盖率测试方法的第二优选实施例的流程图;

图3为本发明的覆盖率测试装置的第一优选实施例的结构示意图;

图4为本发明的覆盖率测试装置的第二优选实施例的结构示意图;

图5为本发明的覆盖率测试方法的具体实施例的流程图。

具体实施方式

请参照图式,其中相同的组件符号代表相同的组件,本发明的原理是以实 施在一适当的运算环境中来举例说明。以下的说明是基于所例示的本发明具体 实施例,其不应被视为限制本发明未在此详述的其它具体实施例。

在以下的说明中,本发明的具体实施例将参考由一部或多部计算机所执行 之作业的步骤及符号来说明,除非另有述明。因此,其将可了解到这些步骤及 操作,其中有数次提到为由计算机执行,包括了由代表了以一结构化型式中的 数据之电子信号的计算机处理单元所操纵。此操纵转换该数据或将其维持在该 计算机之内存系统中的位置处,其可重新配置或另外以本领域技术人员所熟知 的方式来改变该计算机之运作。该数据所维持的数据结构为该内存之实体位置, 其具有由该数据格式所定义的特定特性。但是,本发明原理以上述文字来说明, 其并不代表为一种限制,本领域技术人员将可了解到以下所述的多种步骤及操 作亦可实施在硬件当中。

如本申请所使用的术语“组件”、“模块”、“系统”、“接口”、“进程”等等一般 地旨在指计算机相关实体:硬件、硬件和软件的组合、软件或执行中的软件。 例如,组件可以是但不限于是运行在处理器上的进程、处理器、对象、可执行 应用、执行的线程、程序和/或计算机。通过图示,运行在控制器上的应用和 该控制器二者都可以是组件。一个或多个组件可以有在于执行的进程和/或线 程内,并且组件可以位于一个计算机上和/或分布在两个或更多计算机之间。

而且,要求保护的主题可以被实现为使用标准编程和/或工程技术产生软 件、固件、硬件或其任意组合以控制计算机实现所公开的主题的方法、装置或 制造品。本文所使用的术语“制造品”旨在包含可从任意计算机可读设备、载体 或介质访问的计算机程序。当然,本领域技术人员将认识到可以对该配置进行 许多修改,而不脱离要求保护的主题的范围或精神。

尽管没有要求,但是在“计算机可读指令”被一个或多个电子设备执行的通 用背景下描述实施例。计算机可读指令可以经由计算机可读介质来分布(下文 讨论)。计算机可读指令可以实现为程序模块,比如执行特定任务或实现特定抽 象数据类型的功能、对象、应用编程接口(API)、数据结构等等。典型地,该计 算机可读指令的功能可以在各种环境中随意组合或分布。

本文提供了实施例的各种操作。在一个实施例中,所述的一个或多个操作 可以构成一个或多个计算机可读介质上存储的计算机可读指令,其在被电子设 备执行时将使得计算设备执行所述操作。描述一些或所有操作的顺序不应当被 解释为暗示这些操作必需是顺序相关的。本领域技术人员将理解具有本说明书 的益处的可替代的排序。而且,应当理解,不是所有操作必需在本文所提供的 每个实施例中存在。

而且,本文所使用的词语“优选的”意指用作实例、示例或例证。奉文描述 为“优选的”任意方面或设计不必被解释为比其他方面或设计更有利。相反,词 语“优选的”的使用旨在以具体方式提出概念。如本申请中所使用的术语“或”旨 在意指包含的“或”而非排除的“或”。即,除非另外指定或从上下文中清楚,“X 使用A或B”意指自然包括排列的任意一个。即,如果X使用A;X使用B;或 X使用A和B二者,则“X使用A或B”在前述任一示例中得到满足。

而且,尽管已经相对于一个或多个实现方式示出并描述了本公开,但是本 领域技术人员基于对本说明书和附图的阅读和理解将会想到等价变型和修改。 本公开包括所有这样的修改和变型,并且仅由所附权利要求的范围限制。特别 地关于由上述组件(例如元件、资源等)执行的各种功能,用于描述这样的组 件的术语旨在对应于执行所述组件的指定功能(例如其在功能上是等价的)的 任意组件(除非另外指示),即使在结构上与执行本文所示的本公开的示范性实 现方式中的功能的公开结构不等同。此外,尽管本公开的特定特征已经相对于 若干实现方式中的仅一个被公开,但是这种特征可以与如可以对给定或特定应 用而言是期望和有利的其他实现方式的一个或多个其他特征组合。而且,就术 语“包括”、“具有”、“含有”或其变形被用在具体实施方式或权利要求中而言, 这样的术语旨在以与术语“包含”相似的方式包括。

本发明实施例的覆盖率测试方法可应用在游戏服务器中,对游戏服务器中 的游戏虚拟引擎脚本进行覆盖率测试。游戏虚拟引擎脚本是指游戏开发人员按 照虚拟引擎开发商提供的UnrealScript语法编写的游戏脚本,该游戏脚本能够 实现游戏对局的逻辑功能,如游戏中玩家的移动、开火、房间模式以及技能等。 当然该覆盖率测试方法以及覆盖率测试装置可应用在各种电子设备或各种功能 的服务器中。

请参照图1,图1为本发明的覆盖率测试方法的第一优选实施例的流程图。 本优选实施例的覆盖率测试方法包括:

步骤S101,检测执行函数的执行操作,并获取执行函数对应的脚本函数的 函数位置、操作码以及操作码偏移;

步骤S102,对执行函数对应的脚本函数的函数位置、操作码以及操作码偏 移进行记录,并生成执行函数表;

步骤S103,在检测操作完毕后,将执行函数表与自定义函数表进行对比, 获取软件代码的覆盖率。

下面详细说明本优选实施例的覆盖率测试方法的各步骤的具体流程。

在步骤S101中,检测执行函数的执行操作,这里的执行函数是指服务器(如 游戏服务器)提供的运行实际代码的各种函数(如执行游戏中的人物的跳的动 作或任务的跑的动作)。该执行函数通过运行预设的脚本函数来实现服务器中 的各种代码操作。这里的脚本函数是指代码开发人员为了完成服务器中的各种 代码操作而设置的函数,该脚本函数支持代码开发人员设计的所有的代码操作, 因此脚本函数应覆盖所有的执行函数,而执行函数一般不能完全覆盖脚本函数。

随后获取执行函数对应的脚本函数的函数位置、操作码以及操作码偏移。 函数位置是指脚本函数的字节码的存储位置,操作码是指脚本函数的字节码的 具体操作代码,即一个字节码可包括多个操作码,操作码偏移是指某个操作码 在字节码中的位置。随后转到步骤S102。

在步骤S102中,对执行函数对应的脚本函数的函数位置、操作码以及操作 码偏移进行记录,并生成执行函数表;即使用执行函数表记录执行函数的函数 位置、操作码以及操作码偏移。通过不断检测执行函数的执行操作,可使用执 行函数表记录下所有执行函数的函数位置、操作码以及操作码偏移。随后转到 步骤S103。

在步骤S103中,通过反复执行步骤S101和步骤S102,完成了执行函数的 执行操作的检测,同时也生成了包含所有执行函数的函数位置、操作码以及操 作码偏移的执行函数表。将执行函数表和自定义函数表进行对比,获取软件代 码的覆盖率,其中自定义函数表包括软件代码的所有脚本函数的函数位置、操 作码、操作码偏移以及函数名。由于自定义函数表可覆盖所有的脚本函数,因 此通过执行函数表与自定义函数表的对比,可获取该软件代码的覆盖率。

这样即完成了本优选实施例的覆盖率测试方法的覆盖率测试过程。

本优选实施例的覆盖率测试方法通过设置自定义函数表与执行函数表进行 对比,以生成代码覆盖率,并可通过自定义函数表有效的兼容各种软件代码, 整个测试过程简单。

请参照图2,图2为本发明的覆盖率测试方法的第二优选实施例的流程图。 本优选实施例的覆盖率测试方法包括:

步骤S201,在软件运行过程中,获取软件代码的所有脚本函数的函数位置 以及函数名;

步骤S202,根据脚本函数的函数位置,获取脚本函数的字节码;

步骤S203,对脚本函数的字节码进行解析操作,获取脚本函数的操作码以 及操作码偏移;

步骤S204,将软件代码中的脚本函数的操作码、操作码偏移、函数名以及 函数位置保存为自定义函数表;

步骤S205,检测执行函数的执行操作,并获取执行函数对应的脚本函数的 函数位置、操作码以及操作码偏移;

步骤S206,对执行函数对应的脚本函数的函数位置、操作码以及操作码偏 移进行记录,并生成执行函数表;

步骤S207,在检测操作完毕后,将执行函数表与自定义函数表进行对比, 获取软件代码的覆盖率;

步骤S208,以源码为单元,对脚本函数对应的软件代码的覆盖率进行统计;

下面详细说明本优选实施例的覆盖率测试方法的各步骤的具体流程。

在步骤S201中,在软件运行过程中,获取软件代码的所有脚本函数的函数 位置以及函数名;具体可包括:

一、软件运行时,获取与软件代码对应的全局对象表和全局名字表,其中 全局对象表包括软件代码中的对象的对象位置。全局对象表管理软件代码中的 所有对象,无论是类、函数还是actor都是通过对象来进行管理的。全局名字 表包括软件代码中的所有对象的对象名以及实例类别,全局名字表中的对象与 全局对象表中的对象一一对应。

二、根据全局名字表中所有对象的实例类别,获取全局名字表中所有脚本 函数的函数名,以及全局对象表中所有脚本函数的函数位置;如将实例类名为 “UFunction”的对象判断为函数对象。随后转到步骤S202。

在步骤S202中,根据脚本函数的函数位置,获取脚本函数的字节码,这里 的字节码为该脚本函数的具体代码,可包括多个操作码。随后转到步骤S203。

在步骤S203中,对脚本函数的字节码进行偏移解析,将字节码切割为对应 的操作码以及操作码偏移,并根据操作码以及相应的操作码偏移生成用于表示 执行操作的源码。随后转到步骤S204。

在步骤S204中,将软件代码中的脚本函数的操作码、操作码偏移、函数名、 函数位置以及源码保存为自定义函数表,优选的,为了防止脚本函数重名,还 可将脚本函数的类名加入到自定义函数表中。生成的自定义函数表如表1所示。

表1

随后转到步骤S207。

在步骤S205中,检测执行函数的执行操作,具体可包括:

一、在函数解析表(Gnative函数)的所有执行函数中设置相应的跳转函数 (HOOK函数),即通过修改函数解析表的所有执行函数的前5个字节,实现 跳转函数的跳转操作。其中函数解析表用于查找执行函数对应的脚本函数的函 数位置、操作码以及相应的操作码偏移。

二、通过跳转函数的跳转操作,检测执行函数的执行操作。随后转到步骤 S206。

在步骤S206中,通过跳转函数对执行函数对应的脚本函数的函数位置、操 作码以及操作码偏移进行记录,并生成执行函数表;即使用执行函数表记录执 行函数的函数位置、操作码以及操作码偏移。通过不断检测执行函数的执行操 作,可使用执行函数表记录下所有执行函数的函数位置、操作码以及操作码偏 移。同时参数记录模块的跳转单元跳转回所述函数解析表,以对所述执行函数 进行执行操作。随后转到步骤S207。

在步骤S207中,通过反复执行步骤S205和步骤S206,完成了执行函数的 执行操作的检测,同时也生成了包含所有执行函数的函数位置、操作码以及操 作码偏移的执行函数表。将执行函数表和自定义函数表进行对比,获取软件代 码的覆盖率。具体可包括:

判断执行函数表是否记录有脚本函数的所有操作码及相应的操作码偏移;

如执行函数表记录有脚本函数的所有操作码及相应的操作码偏移,则判断 脚本函数对应的软件代码已被覆盖,如执行函数表并未记录有脚本函数的所有 操作码及相应的操作码偏移,则判断脚本函数对应的软件代码未被覆盖。如表 2所示的脚本函数对应的软件代码已被覆盖,表3所示的脚本函数对应的软件 代码未被覆盖。由于自定义函数表可覆盖所有的脚本函数,因此通过执行函数 表与自定义函数表的对比,可获取该软件代码的覆盖率。随后转到步骤S208。

表2

表3

在步骤S208中,以源码为单元,对脚本函数对应的软件代码的覆盖率进行 统计,由于源码(或反编译源码)便于代码开发人员理解,代码开发人员可根 据该统计结果快速的对相应的源码进行修正,进一步提高了测试效率。

这样即完成了本优选实施例的覆盖率测试方法的覆盖率测试过程。

本优选实施例的覆盖率测试方法在第一优选实施例的基础上,通过跳转函 数以及源码的设置进一步提高了覆盖率测试的效率。

本发明还提供一种覆盖率测试装置,请参照图3,图3为本发明的覆盖率 测试装置的第一优选实施例的结构示意图。本优选实施例的覆盖率测试装置30 包括执行函数获取模块31、参数记录模块32以及覆盖率获取模块33。执行函 数获取模块31用于检测执行函数的执行操作,并获取执行函数对应的脚本函数 的函数位置、操作码以及操作码偏移;参数记录模块32用于执行函数对应的脚 本函数的函数位置、操作码以及操作码偏移进行记录,并生成执行函数表;覆 盖率获取模块33用于在检测操作完毕后,将执行函数表与自定义函数表进行对 比,获取软件代码的覆盖率,其中自定义函数表包括软件代码的所有脚本函数 的函数位置、操作码、操作码偏移以及函数名。

本优选实施例的覆盖率测试装置30使用时,首先执行函数获取模块31检 测执行函数的执行操作,这里的执行函数是指服务器(如游戏服务器)提供的 运行实际代码的各种函数(如执行游戏中的人物的跳的动作或任务的跑的动 作)。该执行函数通过运行预设的脚本函数来实现服务器中的各种代码操作。 这里的脚本函数是指代码开发人员为了完成服务器中的各种代码操作而设置的 函数,该脚本函数支持代码开发人员设计的所有的代码操作,因此脚本函数应 覆盖所有的执行函数,而执行函数一般不能完全覆盖脚本函数。

随后执行函数获取模块31获取执行函数对应的脚本函数的函数位置、操作 码以及操作码偏移。函数位置是指脚本函数的字节码的存储位置,操作码是指 脚本函数的字节码的具体操作代码,即一个字节码可包括多个操作码,操作码 偏移是指某个操作码在字节码中的位置。

然后参数记录模块32对执行函数对应的脚本函数的函数位置、操作码以及 操作码偏移进行记录,并生成执行函数表;即使用执行函数表记录执行函数的 函数位置、操作码以及操作码偏移。通过不断检测执行函数的执行操作,可使 用执行函数表记录下所有执行函数的函数位置、操作码以及操作码偏移。

最后执行函数获取模块31完成了执行函数的执行操作的检测,同时参数记 录模块32也生成了包含所有执行函数的函数位置、操作码以及操作码偏移的执 行函数表。覆盖率获取模块33将执行函数表和自定义函数表进行对比,获取软 件代码的覆盖率,其中自定义函数表包括软件代码的所有脚本函数的函数位置、 操作码、操作码偏移以及函数名。由于自定义函数表可覆盖所有的脚本函数, 因此通过执行函数表与自定义函数表的对比,可获取该软件代码的覆盖率。

这样即完成了本优选实施例的覆盖率测试装置30的覆盖率测试过程。

本优选实施例的覆盖率测试装置通过设置自定义函数表与执行函数表进行 对比,以生成代码覆盖率,并可通过自定义函数表有效的兼容各种软件代码, 整个测试过程简单。

请参照图4,图4为本发明的覆盖率测试装置的第二优选实施例的结构示 意图。本优选实施例的覆盖率测试装置40包括执行函数获取模块41、参数记 录模块42、覆盖率获取模块43、脚本函数获取模块44、字节码获取模块45、 字节码解析模块46、自定义函数表生成模块47以及统计模块48。

执行函数获取模块41用于检测执行函数的执行操作,并获取执行函数对应 的脚本函数的函数位置、操作码以及操作码偏移;参数记录模块42用于对执行 函数对应的脚本函数的函数位置、操作码以及操作码偏移进行记录,并生成执 行函数表;覆盖率获取模块43用于在检测操作完毕后,将执行函数表与自定义 函数表进行对比,获取软件代码的覆盖率;其中自定义函数表包括软件代码的 所有脚本函数的函数位置、操作码、操作码偏移以及函数名。

脚本函数获取模块44用于在软件运行过程中,获取软件代码的所有脚本函 数的函数位置以及函数名;字节码获取模块45用于根据脚本函数的函数位置, 获取脚本函数的字节码;字节码解析模块46用于对脚本函数的字节码进行解析 操作,获取脚本函数的操作码以及操作码偏移;自定义函数表生成模块47用于 将软件代码中的脚本函数的操作码、操作码偏移、函数名以及函数位置保存为 自定义函数表。统计模块48用于以源码为单元,对脚本函数对应的软件代码的 覆盖率进行统计。

其中脚本函数获取模块44包括参数表获取单元441以及脚本函数获取单元 442。参数表获取单元441用于获取与软件代码对应的全局对象表和全局名字 表,其中全局对象表包括软件代码中的所有对象的对象位置;全局名字表包括 软件代码中的所有对象的对象名以及实例类别。脚本函数获取单元442用于根 据全局名字表中所有对象的实例类别,获取全局名字表中所有脚本函数的函数 名,以及全局对象表中所有脚本函数的函数位置。

其中执行函数获取模块41包括跳转函数设置单元411以及执行操作检测单 元412;跳转函数设置单元411用于在函数解析表的所有执行函数中设置相应 的跳转函数,其中函数解析表用于查找执行函数对应的脚本函数的函数位置、 操作码以及相应的操作码偏移;执行操作检测单元412用于通过跳转函数的跳 转操作,检测执行函数的执行操作。

其中参数记录模块42包括参数记录单元421以及跳转单元422;参数记录 单元421用于通过跳转函数对脚本函数的函数位置、操作码以及相应的操作码 偏移进行记录;跳转单元422用于跳转回函数解析表,以对执行函数进行执行 操作。

其中覆盖率获取模块43包括判断单元431以及覆盖率获取单元432;判断 单元431用于判断执行函数表是否记录有脚本函数的所有操作码及相应的操作 码偏移;覆盖率获取单元432用于如执行函数表记录有脚本函数的所有操作码 及相应的操作码偏移,则判断脚本函数对应的软件代码已被覆盖;否则判断脚 本函数对应的软件代码未被覆盖。

本优选实施例的覆盖率测试装置40使用时,首先在软件运行过程中,脚本 函数获取模块44获取软件代码的所有脚本函数的函数位置以及函数名;具体可 包括:

一、软件运行时,脚本函数获取模块44的参数表获取单元441获取与软件 代码对应的全局对象表和全局名字表,其中全局对象表包括软件代码中的对象 的对象位置。全局对象表管理软件代码中的所有对象,无论是类、函数还是actor 都是通过对象来进行管理的。全局名字表包括软件代码中的所有对象的对象名 以及实例类别,全局名字表中的对象与全局对象表中的对象一一对应。

二、脚本函数获取模块44的脚本函数获取单元442根据全局名字表中所有 对象的实例类别,获取全局名字表中所有脚本函数的函数名,以及全局对象表 中所有脚本函数的函数位置;如将实例类名为“UFunction”的对象判断为函数 对象。

随后字节码获取模块45根据脚本函数的函数位置,获取脚本函数的字节 码,这里的字节码为该脚本函数的具体代码,可包括多个操作码。字节码解析 模块46对脚本函数的字节码进行偏移解析,将字节码切割为对应的操作码以及 操作码偏移,并根据操作码以及相应的操作码偏移生成表示执行操作的源码。 自定义函数表生成模块47将软件代码中的脚本函数的操作码、操作码偏移、函 数名、函数位置以及源码保存为自定义函数表,优选的,为了防止脚本函数重 名,还可将脚本函数的类名加入到自定义函数表中。生成的自定义函数表如表 1所示。

然后执行函数获取模块41检测执行函数的执行操作,具体可包括:

一、执行函数获取模块41的跳转函数设置单元411在函数解析表(Gnative 函数)的所有执行函数中设置相应的跳转函数(HOOK函数),即通过修改函 数解析表的所有执行函数的前5个字节,实现跳转函数的跳转操作。其中函数 解析表用于查找执行函数对应的脚本函数的函数位置、操作码以及相应的操作 码偏移。

二、执行函数获取模块41的执行操作检测单元412通过跳转函数的跳转操 作,检测执行函数的执行操作。

随后参数记录模块42的参数记录单元421通过跳转函数对执行函数对应的 脚本函数的函数位置、操作码以及操作码偏移进行记录,并生成执行函数表; 即使用执行函数表记录执行函数的函数位置、操作码以及操作码偏移。通过不 断检测执行函数的执行操作,可使用执行函数表记录下所有执行函数的函数位 置、操作码以及操作码偏移。同时参数记录模块42的跳转单元422跳转回所述 函数解析表,以对所述执行函数进行执行操作。

最后执行函数获取模块41完成了执行函数的执行操作的检测,同时参数记 录模块42也生成了包含所有执行函数的函数位置、操作码以及操作码偏移的执 行函数表。将执行函数表和自定义函数表进行对比,获取软件代码的覆盖率。 具体可包括:

覆盖率获取模块43的判断单元431判断执行函数表是否记录有脚本函数的 所有操作码及相应的操作码偏移;

如执行函数表记录有脚本函数的所有操作码及相应的操作码偏移,则覆盖 率获取模块43的覆盖率获取单元432判断脚本函数对应的软件代码已被覆盖, 如执行函数表并未记录有脚本函数的所有操作码及相应的操作码偏移,则覆盖 率获取模块43的覆盖率获取单元432判断脚本函数对应的软件代码未被覆盖。 如表2所示的脚本函数对应的软件代码已被覆盖,表3所示的脚本函数对应的 软件代码未被覆盖。由于自定义函数表可覆盖所有的脚本函数,因此通过执行 函数表与自定义函数表的对比,可获取该软件代码的覆盖率。

优选的,统计模块48以源码为单元,对脚本函数对应的软件代码的覆盖率 进行统计,由于源码(或反编译源码)便于代码开发人员理解,代码开发人员 可根据该统计结果快速的对相应的源码进行修正,进一步提高了测试效率。

这样即完成了本优选实施例的覆盖率测试装置40的覆盖率测试过程。

本优选实施例的覆盖率测试装置在第一优选实施例的基础上,通过跳转函 数以及源码的设置进一步提高了覆盖率测试的效率。

下面通过一具体实施例说明本发明的覆盖率测试方法及覆盖率测试装置的 具体工作流程。请参照图5,图5为本发明的覆盖率测试方法的具体实施例的 流程图。该具体实施例包括:

步骤S501,测试人员启动游戏客户端;

步骤S502,将写好的DLL(DynamicLinkLibrary,动态链接库)或SO (ServiceObject,服务对象)注入到游戏客户端的游戏进程中;

步骤S503,通过注入的DLL或SO遍历游戏进程,获取内存的虚幻引擎的 全局对象表和全局名字表;

步骤S504,通过全局对象表和全局名字表,获取脚本函数的函数名和函数 位置;

步骤S505,获取脚本函数的字节码的地址,并获取该字节码对应的操作码 以及操作码偏移,并将操作码反编译为源码,生成记录脚本函数的操作码、操 作码偏移、函数名、函数位置以及源码的自定义函数表;

步骤S506,遍历GNative表(函数解析表),通过修改函数解析表中每个 执行函数的头5位,以设置跳转函数;

步骤S507,测试人员运行软件代码,进行覆盖率测试;

步骤S508,通过调用跳转函数检测语句的执行操作;

步骤S509,所有语句的执行操作完毕后,生成执行函数表;

步骤S510,将执行函数表和自定义函数表进行对比,如自定义函数表中的 脚本函数中的操作码及操作码偏移均被语句执行到,则该脚本函数认为被覆盖, 否则认为该脚本函数未被覆盖,然后将对比结果进行展示。

步骤S511,根据对比结果,对软件代码进行补充测试,对未覆盖的脚本函 数对应的执行函数再次进行测试。

步骤S512,将测试记录上传至后台服务器,后台服务器可通过前端客户端 进行覆盖率的展示和分析,这样即完成软件代码的语句覆盖率测试。

本发明的覆盖率测试方法及覆盖率测试装置通过设置自定义函数表与执行 函数表进行对比,以生成代码覆盖率,并可通过自定义函数表有效的兼容各种 软件代码,整个测试过程简单;解决了现有的覆盖率测试方法及覆盖率测试装 置的测试过程复杂,且不能对所有的软件代码均进行有效的覆盖率测试的技术 问题。

本发明实施例中的各功能单元可以集成在一个处理模块中,也可以是各个 单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成 的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所 述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用 时,也可以存储在一个计算机可读取存储介质中。上述提到的存储介质可以是 只读存储器,磁盘或光盘等。上述的各装置或系统,可以执行相应方法实施例 中的方法。

综上所述,虽然本发明已以优选实施例揭露如上,但上述优选实施例并非 用以限制本发明,本领域的普通技术人员,在不脱离本发明的精神和范围内, 均可作各种更动与润饰,因此本发明的保护范围以权利要求界定的范围为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号