买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】一种代码覆盖率统计方法、装置、存储介质及终端设备_平安科技(深圳)有限公司_201811423788.1 

申请/专利权人:平安科技(深圳)有限公司

申请日:2018-11-27

公开(公告)日:2024-03-19

公开(公告)号:CN109582574B

主分类号:G06F11/36

分类号:G06F11/36

优先权:

专利状态码:有效-授权

法律状态:2024.03.19#授权;2020.11.27#实质审查的生效;2019.04.05#公开

摘要:本发明公开了一种代码覆盖率统计方法、装置、存储介质及终端设备,所述代码覆盖率统计方法包括:获取预设测试项目中各类的类名,并通过各类的类名获取各类中的实例方法;将所获取的实例方法存储至预设数据库中;执行实例方法,并在执行实例方法时,跳转至执行预设消息转发方法;通过预设消息转发方法进行实例方法的还原执行,并通过预设消息转发方法记录实例方法的还原执行情况;根据还原执行情况,对预设数据库中对应的实例方法添加执行标记;根据执行标记,统计得到预设测试项目的代码覆盖率,实现代码覆盖率的精确统计,在统计过程中,不需要入侵各实例方法的源代码,方便、简化了代码覆盖率的统计工作,极大地提高了代码覆盖率的统计效率。

主权项:1.一种代码覆盖率统计方法,其特征在于,包括:获取预设测试项目中各类的类名,并通过各类的类名获取各类中的实例方法;将所获取的实例方法存储至预设数据库中;获取所述实例方法的第一函数指针,并将所述第一函数指针替换为预设函数指针;创建与所述实例方法对应的执行方法,并将所述执行方法的第二函数指针设置为所述实例方法的第一函数指针,使得在执行所述实例方法时,因无法找到所述实例方法所对应的方法体,从而触发消息转发机制,以跳转至执行所述实例方法所在类中的预设消息转发方法,所述预设消息转发方法即可调用对应的执行方法,以通过对应的执行方法的执行来实现所述实例方法的还原执行;执行所述实例方法,并在执行所述实例方法时,跳转至执行预设消息转发方法;通过所述预设消息转发方法进行所述实例方法的还原执行;构建与所述预设消息转发方法对应的自定义代码块,并在所述自定义代码块中注入预设记录代码;在执行所述预设消息转发方法时,调用所述自定义代码块,以获取并执行所述预设记录代码;通过所述预设记录代码的执行情况记录所述实例方法对应的执行方法的执行情况;根据所述执行方法的执行情况,确定对应的实例方法的还原执行情况;根据所述还原执行情况,对所述预设数据库中对应的实例方法添加执行标记;根据所述执行标记,统计得到所述预设测试项目的代码覆盖率。

全文数据:一种代码覆盖率统计方法、装置、存储介质及终端设备技术领域本发明涉及计算机技术领域,尤其涉及一种代码覆盖率统计方法、装置、存储介质及终端设备。背景技术在IOS软件开发过程中,覆盖率测试通常是一种有效发现问题的手段,通过代码覆盖率的分析可以快速定位哪些代码是没有运行的,以及时发现软件设计中的错误。现有的覆盖率测试中,往往是在原始代码中插入探针函数,以通过探针函数来进行代码覆盖率的统计,即现有的覆盖率测试中,往往需要获取项目的原始代码,并需要在原始代码中插入多个探针函数,才能进行代码覆盖率的统计,而覆盖率统计完毕之后,则需要删除入侵至原始代码中的各探针函数,使得测试操作复杂、繁琐,测试效率低。发明内容本发明实施例提供了一种代码覆盖率统计方法、装置、计算机可读存储介质及终端设备,能够进行代码覆盖率的精确统计,并且在统计过程中,不需要入侵源代码,方便、简化了代码覆盖率的统计工作,极大地提高了代码覆盖率的统计效率。本发明实施例第一方面,提供了一种代码覆盖率统计方法,包括:获取预设测试项目中各类的类名,并通过各类的类名获取各类中的实例方法;将所获取的实例方法存储至预设数据库中;执行所述实例方法,并在执行所述实例方法时,跳转至执行预设消息转发方法;通过所述预设消息转发方法进行所述实例方法的还原执行,并通过所述预设消息转发方法记录所述实例方法的还原执行情况;根据所述还原执行情况,对所述预设数据库中对应的实例方法添加执行标记;根据所述执行标记,统计得到所述预设测试项目的代码覆盖率。本发明实施例第二方面,提供了一种代码覆盖率统计装置,包括:方法获取模块,用于获取预设测试项目中各类的类名,并通过各类的类名获取各类中的实例方法;方法存储模块,用于将所获取的实例方法存储至预设数据库中;跳转执行模块,用于执行所述实例方法,并在执行所述实例方法时,跳转至执行预设消息转发方法;还原执行模块,用于通过所述预设消息转发方法进行所述实例方法的还原执行,并通过所述预设消息转发方法记录所述实例方法的还原执行情况;执行标记模块,用于根据所述还原执行情况,对所述预设数据库中对应的实例方法添加执行标记;代码统计模块,用于根据所述执行标记,统计得到所述预设测试项目的代码覆盖率。本发明实施例第三方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可读指令,所述计算机可读指令被处理器执行时实现如前述第一方面所述代码覆盖率统计方法的步骤。本发明实施例第四方面,提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机可读指令,所述处理器执行所述计算机可读指令时实现如下步骤:获取预设测试项目中各类的类名,并通过各类的类名获取各类中的实例方法;将所获取的实例方法存储至预设数据库中;执行所述实例方法,并在执行所述实例方法时,跳转至执行预设消息转发方法;通过所述预设消息转发方法进行所述实例方法的还原执行,并通过所述预设消息转发方法记录所述实例方法的还原执行情况;根据所述还原执行情况,对所述预设数据库中对应的实例方法添加执行标记;根据所述执行标记,统计得到所述预设测试项目的代码覆盖率。从以上技术方案可以看出,本发明实施例具有以下优点:本发明实施例中,在获取到预设测试项目的所有类后,可通过各类的类名来获取所述预设测试项目中各类的实例方法,并将所获取的实例方法存储预设数据库中,而在执行各实例方法时,可跳转至执行预设消息转发方法,以通过所述预设消息转发方法来进行各实例方法的还原执行,在各实例方法被还原执行时,还可通过所述预设消息转发方法来记录各实例方法的还原执行情况,并以此对预设数据库中对应的实例方法添加执行标记,从而使得可根据预设数据库中保存的各实例方法的执行标记,来统计出预设测试项目的代码覆盖率,实现代码覆盖率的精确统计,在统计过程中,不需要入侵所述预设测试项目中实例方法的源代码,方便、简化了代码覆盖率的统计工作,极大地提高了代码覆盖率的统计效率。附图说明为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例中一种代码覆盖率统计方法的一个实施例流程图;图2为本发明实施例中一种代码覆盖率统计方法在一个应用场景下获取实例方法的流程示意图;图3为本发明实施例中一种代码覆盖率统计方法在一个应用场景下进行实例方法的还原执行的流程示意图;图4为本发明实施例中一种代码覆盖率统计方法在一个应用场景下记录执行方法的执行情况的流程示意图;图5为本发明实施例中一种代码覆盖率统计装置的一个实施例结构图;图6为本发明一实施例提供的终端设备的示意图。具体实施方式本发明实施例提供了一种代码覆盖率统计方法、装置、计算机可读存储介质及终端设备,用于进行代码覆盖率的精确统计,并且在统计过程中,不需要入侵源代码,方便、简化了代码覆盖率的统计工作,极大地提高了代码覆盖率的统计效率。为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。请参阅图1,本发明实施例提供了一种代码覆盖率统计方法,所述代码覆盖率统计方法,包括:步骤S101、获取预设测试项目中各类的类名,并通过各类的类名获取各类中的实例方法;在软件开发过程中,当需要测试某一项目的代码覆盖率时,可首先获取该项目中所有类的类名,以通过类名来获取各类中的实例方法,从而通过统计各类中各实例方法的执行情况,来统计该项目的代码覆盖率。具体地,如图2所示,所述获取预设测试项目中各类的类名,并通过各类的类名获取各类中的实例方法,可以包括:步骤S201、获取所述预设测试项目的项目路径;步骤S202、根据所述项目路径和预设类名获取方法,获取所述预设测试项目中的各类和各类的类名;步骤S203、分别将各类的类名作为第一参数传入至预设实例获取方法中,得到各类中的实例方法。对于步骤S201至步骤S203,可以理解的是,本发明实施例中,在确定了需要统计代码覆盖率的项目时,即上述所述的预设测试项目时,可首先获取所述预设测试项目的项目路径,如在所述预设测试项目的代码编译运行过程中通过调用dladdr函数来获取所述预设测试项目的项目路径path;随后,可将所述项目路径path作为参数传入至预设类名获取方法中,在此,所述预设类名获取方法可以为objc_copyClassNamesForImage方法,即可将所述项目路径path作为参数传入至objc_copyClassNamesForImage方法中,从而可通过调用并执行objc_copyClassNamesForImage来获取到所述预设测试项目所包含的所有类,其中,获取所述预设测试项目所包含的类包括获取各类的类名;在获取到各类的类名后,则可分别将各类的类名作为第一参数传入至预设实例获取方法中,如依次将各类的类名作为第一参数传入至class_copyMethodList方法中,得到class_copyMethodList方法执行后所返回的返回结果,其中,所述返回结果即为对应类中的所有实例方法,所获取的实例方法则可包括方法名、方法类型和该方法实例的函数指针等。例如,在将类A的类名A作为第一参数传入至class_copyMethodList方法中,得到class_copyMethodList方法执行后所返回的返回结果为[a,b,c]时,即可确定类A中的实例方法为a、b以及c;进一步地,在将类B的类名B作为第一参数至class_copyMethodList方法中,得到class_copyMethodList方法执行后所返回的返回结果为[d,e]时,即可确定类B中的实例方法为d和e,依次将各类的类名分别传入至class_copyMethodList方法中,则可得到所有类中的实例方法。步骤S102、将所获取的实例方法存储至预设数据库中;本发明实施例中,在获取到所述预设测试项目中所有类中的所有实例方法后,即可将所有实例方法均存储至所述预设数据库中,如可将所有实例方法的方法名称存储至所述预设数据库中。步骤S103、执行所述实例方法,并在执行所述实例方法时,跳转至执行预设消息转发方法;优选地,本发明实施例中,在开始测试操作之前,即在执行各实例方法之前,还可以包括:步骤a、获取所述实例方法的第一函数指针,并将所述第一函数指针替换为预设函数指针;步骤b、创建与所述实例方法对应的执行方法,并将所述执行方法的第二函数指针设置为对应的实例方法的第一函数指针。对于上述步骤a,可以理解的是,本发明实施例中,在获取到各类中的实例方法时,即可获取到各实例方法的函数指针IMP,即上述的第一函数指针IMP,其中,实例方法的IMP为该实例方法具体实现代码块的地址,该地址指向实现该实例方法的方法体,即指向实现该实例方法的代码块。本发明实施例中,在获取到各实例方法的第一IMP后,即可将所述第一IMP替换为预设函数指针,如将所有实例方法的第一IMP均替换为_objc_msgForward,使得在执行某一实例方法时,因无法找到该实例方法所对应的方法体,从而触发消息转发机制,以跳转至执行该实例方法所在类中的预设消息转发方法。对于上述步骤b,需要说明的是,为在不入侵各实例方法的源代码的情况下,来实现各实例方法执行情况的统计,本发明实施例中,在执行各实例方法之前,还可创建与各实例方法相对应的执行方法,并将所创建的执行方法的第二函数指针IMP设置为对应的实例方法的第一函数指针IMP,如为实例方法FunA创建相对应的执行方法PA_FunA,同时将PA_FunA的IMP设置为FunA的IMP,即将FunA的方法体赋予PA_FunA,以通过PA_FunA的执行来实现FunA的功能,也就是说,当PA_FunA被执行时即表示FunA被执行了,因而可通过PA_FunA的执行情况来统计FunA的执行情况,使得在整个统计过程中,不需要入侵FunA的源代码,不需要在FunA的源代码中插入任何统计代码等,从而避免其他统计代码的执行来影响FunA的执行性能,以影响代码覆盖率的统计效率,实现了高效精确的统计代码覆盖率的目标。步骤S104、通过所述预设消息转发方法进行所述实例方法的还原执行,并通过所述预设消息转发方法记录所述实例方法的还原执行情况;本发明实施例中,当跳转至执行预设消息转发方法时,所述预设消息转发方法即可调用前述所创建的对应的执行方法,以通过对应的执行方法的执行来实现某一实例方法的还原执行,而在对应的执行方法的执行中,还可通过所述预设消息转发方法来记录对应的执行方法的执行情况,从而可得到各实例方法的还原执行情况。可选地,如图3所示,本发明实施例中,所述通过所述预设消息转发方法进行所述实例方法的还原执行,可以包括:步骤S301、在跳转至执行预设消息转发方法时,记录跳转之前所执行的第一实例方法以及所对应的第二参数;步骤S302、确定与所述第一实例方法对应的第一执行方法,并将所述第二参数传入所述第一执行方法中;步骤S303、通过所述预设消息转发方法调用传入所述第二参数后的第一执行方法,以进行所述第一实例方法的还原执行。对于上述步骤S301至步骤S303,可以理解的是,在执行某一实例方法时,因该实例方法中的IMP被替换为了_objc_msgForward,因而,此时将自动触发消息转发机制,并自动跳转至执行该实例方法所在类的预设消息转发方法,即自动跳转至执行该实例方法所在类的forwardInvocation:方法,其中,在跳转至执行该实例方法所在类的forwardInvocation:方法时,该forwardInvocation:方法将会记录触发消息转发机制的实例方法以及该实例方法所对应第二的参数,如组装一个与该实例方法相对应的NSInvocation,该NSInvocation中则包含了该实例方法所对应的第二参数。进一步地,当该forwardInvocation:方法确定了触发消息转发机制的实例方法后,该forwardInvocation:方法即可从预先创建的执行方法中确定出与该实例方法相对应的执行方法,即确定出上述的第一执行方法,并从所组装的NSInvocation中反解出该实例方法所对应的第二参数,然后带着反解出来的第二参数去调用所确定出的第一执行方法,从而实现该实例方法的还原执行,以实现该实例方法的原本功能。进一步,所述通过所述预设消息转发方法记录所述实例方法的还原执行情况,可以包括:步骤c、在所述预设消息转发方法中注入预设记录代码,以通过所述预设记录代码记录所述执行方法的执行情况;步骤d、根据所述执行方法的执行情况,确定对应的实例方法的还原执行情况。对于上述步骤c和步骤d,可以理解的是,本发明实施例中,可在各预设消息转发方法中注入预设记录代码,所述预设记录代码可用于记录各执行方法的执行情况,而因各执行方法的执行是对相应的实例方法的还原执行,因而,所述预设记录代码所记录的执行情况则可体现各实例方法的还原执行情况。本发明实施例中,可通过各预设消息转发方法来进行各实例方法的还原执行,并可通过在各预设消息转发方法中所注入的预设记录代码来记录各实例方法的执行情况,实现了在不入侵实例方法源代码、并在确保各实例方法原本功能的基础上,进行各实例方法执行情况的记录的目的,即在记录中,并不需要将记录代码注入至各实例方法的源代码中,避免了对各实例方法源代码的入侵,从而避免所入侵的统计代码影响各实例方法的执行性能,可提高统计效率和统计准确性。优选地,如图4所示,所述在所述预设消息转发方法中注入预设记录代码,以通过所述预设记录代码记录所述执行方法的执行情况,可以包括:步骤S401、构建与所述预设消息转发方法对应的自定义代码块,并在所述自定义代码块中注入所述预设记录代码;步骤S402、在执行所述预设消息转发方法时,调用所述自定义代码块,以获取并执行所述预设记录代码;步骤S403、通过所述预设记录代码的执行情况记录所述执行方法的执行情况。对于上述步骤S401至步骤S403,可以理解的是,在统计所述预设测试项目的代码覆盖率时,为尽量避免对所述预设测试项目中源代码的入侵,以避免影响所述预设测试项目的执行性能,本发明实施例中,并不是直接将所述预设记录代码注入至各类中的forwardInvocation:方法,而是先构建与各forwardInvocation:方法相对应的自定义代码块block,并在各block中注入所述预设记录代码,在执行forwardInvocation:方法时,该forwardInvocation:方法可首先调用并执行所述自定义代码块,在所述自定义代码块执行完毕后,则可继续调用并执行对应的执行方法,从而通过所述自定义代码块的执行来记录该执行方法的执行情况。当然,本发明实施例中,在执行forwardInvocation:方法时,该forwardInvocation:方法也可首先调用并执行对应的执行方法,并在该执行方法执行完毕后,再调用并执行所述自定义代码块。步骤S105、根据所述还原执行情况,对所述预设数据库中对应的实例方法添加执行标记;可以理解的是,本发明实施例中,在跳转至执行某一预设消息转发方法时,该预设消息转发方法可记录保存触发消息转发机制的实例方法,如记录保存该实例方法的方法名以及所在类等等,以根据方法名等找到对应的执行方法,从而通过调用对应的执行方法来实现该实例方法的还原执行,而此时该预设消息转发方法还可通过执行预设记录代码来记录该实例方法的还原执行情况,如通过调用自定义代码块来记录该实例方法的还原执行情况,执行完成后,可进一步通过方法名等找到所述预设数据库中所存储的该实例方法,然后在所述预设数据库中为该实例方法添加执行标记,以记录该实例方法的执行与否,如执行的话,在所述预设数据库中添加执行次数为1次等执行标记。步骤S106、根据所述执行标记,统计得到所述预设测试项目的代码覆盖率。需要说明的是,在预设测试项目的运行过程中,所执行的每一个实例方法均会触发消息转发机制,而跳转至执行对应的预设消息转发方法,从而可通过预设消息转发方法来记录该预设测试项目中各实例方法的执行情况,并根据执行情况在所述预设数据库中添加对应的执行标记,因而当所述预设测试项目运行完毕时,则可通过分析所述预设数据库中所存储的执行标记,来统计得到所述预设测试项目的代码覆盖率。可选地,本发明实施例中,所述预设测试项目的代码覆盖率包括各类的代码覆盖率和所述预设测试项目总的代码覆盖率,所述将所获取的实例方法存储至预设数据库中,可以包括:将所获取的实例方法与对应的类关联存储至所述预设数据库中;相应地,所述根据所述执行标记,统计得到所述预设测试项目的代码覆盖率,可以包括:分析所述预设数据库中的执行标记,统计得到各类所对应的第一代码覆盖率和统计得到所述预设测试项目的代码覆盖率。本发明实施例,在获取到所述预设测试项目中各类的实例方法时,可将各实例方法与对应的类关联存储至所述预设数据库中,如在获取到某一预设测试项目中包括有类M、类N、类R以及类T四个类,而进一步又获取到类M中包括有实例方法a、实例方法b、实例方法c以及实例方法d四个实例方法,类N中包括有实例方法e、实例方法f以及实例方法g三个实例方法,类R中包括有实例方法h、实例方法i、实例方法j、实例方法k以及实例方法l五个实例方法,而类T中包括有实例方法r、实例方法s、实例方法q以及实例方法t四个实例方法时,则可将实例方法a、实例方法b、实例方法c以及实例方法d与类M关联存储至所述预设数据库中,将实例方法e、实例方法f以及实例方法g与类N关联存储至所述预设数据库中,将实例方法h、原始实例i、实例方法j、实例方法k以及实例方法l与类R关联存储至所述预设数据库中,并将实例方法r、实例方法s、实例方法q以及实例方法t与类T关联存储至所述预设数据库中。可以理解的是,所述预设数据库中存储的仅仅是方法名和类名。当实例方法a在执行时,将会自动触发消息转发机制,并自动跳转至执行类M的forwardInvocation:方法,类M的forwardInvocation:方法则可记录实例方法a的方法名以及对应的第二参数等,并根据实例方法a的方法名等找到实例方法a所对应的执行方法A,调用并执行该执行方法A,而在执行方法A被执行时,类M的forwardInvocation:方法则可通过预设记录代码来记录实例方法a的还原执行情况,即记录执行方法A的执行情况,并在预设数据库中找到类M的实例方法a,对其添加执行标记,如为类M的实例方法a添加flag=1的执行标记等等。可以理解的是,在所述预设测试下项目运行完毕时,即表示完成了所述预设数据库中执行标记的添加,因而,此时可通过分析所述预设数据库中的执行标记,来统计得到各类所对应的第一代码覆盖率以及统计得到所述预设测试项目的代码覆盖率。如在某一具体应用中,所述预设数据库中各实例方法的执行标记如下表1所示:表1因而,通过分析表1中的执行标记,可得到类M中的第一代码覆盖率为13=33.3%,类N中的代码覆盖率为34=75%,类R中的代码覆盖率为25=40%,类T中的代码覆盖率为44=100%,所述预设测试项目中的总代码覆盖率为1+3+2+43+4+5+4=62.5%。本发明实施例中,在获取到预设测试项目的所有类后,可通过各类的类名来获取所述预设测试项目中各类的实例方法,并将所获取的实例方法存储预设数据库中,而在执行各实例方法时,可跳转至执行预设消息转发方法,以通过所述预设消息转发方法来进行各实例方法的还原执行,在各实例方法被还原执行时,还可通过所述预设消息转发方法来记录各实例方法的还原执行情况,并以此对预设数据库中对应的实例方法添加执行标记,从而使得可根据预设数据库中保存的各实例方法的执行标记,来统计出预设测试项目的代码覆盖率,实现代码覆盖率的精确统计,在统计过程中,不需要入侵所述预设测试项目中实例方法的源代码,方便、简化了代码覆盖率的统计工作,极大地提高了代码覆盖率的统计效率。应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。上面主要描述了一种代码覆盖率统计方法,下面将对一种代码覆盖率统计装置进行详细描述。图5示出了本发明实施例中一种代码覆盖率统计装置的一个实施例结构图。如图5所示,所述代码覆盖率统计装置,包括:方法获取模块501,用于获取预设测试项目中各类的类名,并通过各类的类名获取各类中的实例方法;方法存储模块502,用于将所获取的实例方法存储至预设数据库中;跳转执行模块503,用于执行所述实例方法,并在执行所述实例方法时,跳转至执行预设消息转发方法;还原执行模块504,用于通过所述预设消息转发方法进行所述实例方法的还原执行,并通过所述预设消息转发方法记录所述实例方法的还原执行情况;执行标记模块505,用于根据所述还原执行情况,对所述预设数据库中对应的实例方法添加执行标记;代码统计模块506,用于根据所述执行标记,统计得到所述预设测试项目的代码覆盖率。进一步地,所述方法获取模块501,包括:路径获取单元,用于获取所述预设测试项目的项目路径;类名获取单元,用于根据所述项目路径和预设类名获取方法,获取所述预设测试项目中的各类和各类的类名;方法获取单元,用于分别将各类的类名作为第一参数传入至预设实例获取方法中,得到各类中的实例方法。优选地,所述代码覆盖率统计装置,还包括:指针替换模块,用于获取所述实例方法的第一函数指针,并将所述第一函数指针替换为预设函数指针;执行方法创建模块,用于创建与所述实例方法对应的执行方法,并将所述执行方法的第二函数指针设置为对应的实例方法的第一函数指针。可选地,所述还原执行模块504,包括:方法记录单元,用于在跳转至执行预设消息转发方法时,记录跳转之前所执行的第一实例方法以及所对应的第二参数;执行方法确定单元,用于确定与所述第一实例方法对应的第一执行方法,并将所述第二参数传入所述第一执行方法中;还原执行单元,用于通过所述预设消息转发方法调用传入所述第二参数后的第一执行方法,以进行所述第一实例方法的还原执行。进一步地,所述还原执行模块504,还包括:记录代码注入单元,用于在所述预设消息转发方法中注入预设记录代码,以通过所述预设记录代码记录所述执行方法的执行情况;还原执行单元,用于根据所述执行方法的执行情况,确定对应的实例方法的还原执行情况。优选地,所述记录代码注入单元,包括:代码块构建子单元,用于构建与所述预设消息转发方法对应的自定义代码块,并在所述自定义代码块中注入所述预设记录代码;代码块调用子单元,用于在执行所述预设消息转发方法时,调用所述自定义代码块,以获取并执行所述预设记录代码;执行情况记录子单元,用于通过所述预设记录代码的执行情况记录所述执行方法的执行情况。可选地,所述方法存储模块502,还用于将所获取的实例方法与对应的类关联存储至所述预设数据库中;相应地,所述代码统计模块506,还用于分析所述预设数据库中的执行标记,统计得到各类所对应的第一代码覆盖率和统计得到所述预设测试项目的代码覆盖率。图6是本发明一实施例提供的终端设备的示意图。如图6所示,该实施例的终端设备6包括:处理器60、存储器61以及存储在所述存储器61中并可在所述处理器60上运行的计算机可读指令62,例如代码覆盖率统计程序。所述处理器60执行所述计算机可读指令62时实现上述各个代码覆盖率统计方法实施例中的步骤,例如图1所示的步骤S101至S106。或者,所述处理器60执行所述计算机可读指令62时实现上述各装置实施例中各模块单元的功能,例如图5所示模块501至506的功能。示例性的,所述计算机可读指令62可以被分割成一个或多个模块单元,所述一个或者多个模块单元被存储在所述存储器61中,并由所述处理器60执行,以完成本发明。所述一个或多个模块单元可以是能够完成特定功能的一系列计算机可读指令段,该指令段用于描述所述计算机可读指令62在所述终端设备6中的执行过程。所述终端设备6可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述终端设备可包括,但不仅限于,处理器60、存储器61。本领域技术人员可以理解,图6仅仅是终端设备6的示例,并不构成对终端设备6的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端设备还可以包括输入输出设备、网络接入设备、总线等。所述处理器60可以是中央处理单元CentralProcessingUnit,CPU,还可以是其他通用处理器、数字信号处理器DigitalSignalProcessor,DSP、专用集成电路ApplicationSpecificIntegratedCircuit,ASIC、现成可编程门阵列Field-ProgrammableGateArray,FPGA或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。所述存储器61可以是所述终端设备6的内部存储单元,例如终端设备6的硬盘或内存。所述存储器61也可以是所述终端设备6的外部存储设备,例如所述终端设备6上配备的插接式硬盘,智能存储卡SmartMediaCard,SMC,安全数字SecureDigital,SD卡,闪存卡FlashCard等。进一步地,所述存储器61还可以既包括所述终端设备6的内部存储单元也包括外部存储设备。所述存储器61用于存储所述计算机可读指令以及所述终端设备所需的其他程序和数据。所述存储器61还可以用于暂时地存储已经输出或者将要输出的数据。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备可以是个人计算机,服务器,或者网络设备等执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器ROM,Read-OnlyMemory、随机存取存储器RAM,RandomAccessMemory、磁碟或者光盘等各种可以存储程序代码的介质。以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

权利要求:1.一种代码覆盖率统计方法,其特征在于,包括:获取预设测试项目中各类的类名,并通过各类的类名获取各类中的实例方法;将所获取的实例方法存储至预设数据库中;执行所述实例方法,并在执行所述实例方法时,跳转至执行预设消息转发方法;通过所述预设消息转发方法进行所述实例方法的还原执行,并通过所述预设消息转发方法记录所述实例方法的还原执行情况;根据所述还原执行情况,对所述预设数据库中对应的实例方法添加执行标记;根据所述执行标记,统计得到所述预设测试项目的代码覆盖率。2.根据权利要求1所述的代码覆盖率统计方法,其特征在于,所述获取预设测试项目中各类的类名,并通过各类的类名获取各类中的实例方法,包括:获取所述预设测试项目的项目路径;根据所述项目路径和预设类名获取方法,获取所述预设测试项目中的各类和各类的类名;分别将各类的类名作为第一参数传入至预设实例获取方法中,得到各类中的实例方法。3.根据权利要求1所述的代码覆盖率统计方法,其特征在于,在执行所述实例方法之前,还包括:获取所述实例方法的第一函数指针,并将所述第一函数指针替换为预设函数指针;创建与所述实例方法对应的执行方法,并将所述执行方法的第二函数指针设置为对应的实例方法的第一函数指针。4.根据权利要求3所述的代码覆盖率统计方法,其特征在于,所述通过所述预设消息转发方法进行所述实例方法的还原执行,包括:在跳转至执行预设消息转发方法时,记录跳转之前所执行的第一实例方法以及所对应的第二参数;确定与所述第一实例方法对应的第一执行方法,并将所述第二参数传入所述第一执行方法中;通过所述预设消息转发方法调用传入所述第二参数后的第一执行方法,以进行所述第一实例方法的还原执行。5.根据权利要求3所述的代码覆盖率统计方法,其特征在于,所述通过所述预设消息转发方法记录所述实例方法的还原执行情况,包括:在所述预设消息转发方法中注入预设记录代码,以通过所述预设记录代码记录所述执行方法的执行情况;根据所述执行方法的执行情况,确定对应的实例方法的还原执行情况。6.根据权利要求5所述的代码覆盖率统计方法,其特征在于,所述在所述预设消息转发方法中注入预设记录代码,以通过所述预设记录代码记录所述执行方法的执行情况,包括:构建与所述预设消息转发方法对应的自定义代码块,并在所述自定义代码块中注入所述预设记录代码;在执行所述预设消息转发方法时,调用所述自定义代码块,以获取并执行所述预设记录代码;通过所述预设记录代码的执行情况记录所述执行方法的执行情况。7.根据权利要求1至6任一项所述的代码覆盖率统计方法,其特征在于,所述将所获取的实例方法存储至预设数据库中,包括:将所获取的实例方法与对应的类关联存储至所述预设数据库中;相应地,所述根据所述执行标记,统计得到所述预设测试项目的代码覆盖率,包括:分析所述预设数据库中的执行标记,统计得到各类所对应的第一代码覆盖率和统计得到所述预设测试项目的代码覆盖率。8.一种代码覆盖率统计装置,其特征在于,包括:方法获取模块,用于获取预设测试项目中各类的类名,并通过各类的类名获取各类中的实例方法;方法存储模块,用于将所获取的实例方法存储至预设数据库中;跳转执行模块,用于执行所述实例方法,并在执行所述实例方法时,跳转至执行预设消息转发方法;还原执行模块,用于通过所述预设消息转发方法进行所述实例方法的还原执行,并通过所述预设消息转发方法记录所述实例方法的还原执行情况;执行标记模块,用于根据所述还原执行情况,对所述预设数据库中对应的实例方法添加执行标记;代码统计模块,用于根据所述执行标记,统计得到所述预设测试项目的代码覆盖率。9.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可读指令,其特征在于,所述计算机可读指令被处理器执行时实现如权利要求1至7中任一项所述代码覆盖率统计方法的步骤。10.一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机可读指令,其特征在于,所述处理器执行所述计算机可读指令时实现如下步骤:获取预设测试项目中各类的类名,并通过各类的类名获取各类中的实例方法;将所获取的实例方法存储至预设数据库中;执行所述实例方法,并在执行所述实例方法时,跳转至执行预设消息转发方法;通过所述预设消息转发方法进行所述实例方法的还原执行,并通过所述预设消息转发方法记录所述实例方法的还原执行情况;根据所述还原执行情况,对所述预设数据库中对应的实例方法添加执行标记;根据所述执行标记,统计得到所述预设测试项目的代码覆盖率。

百度查询: 平安科技(深圳)有限公司 一种代码覆盖率统计方法、装置、存储介质及终端设备

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。