首页> 中国专利> 一种Java程序运行代码覆盖率的测试方法及系统

一种Java程序运行代码覆盖率的测试方法及系统

摘要

本发明公开了一种Java程序运行代码覆盖率的测试方法及系统,其中,方法包括:S1、预先设置代码行监视项、回调函数;根据代码行监视项获取对应函数中的有效代码行表,获取有效代码表中有效代码行的位置;将有效代码行的位置保存至数据库中,并设置中断;S2、当程序运行过程中触发中断,则调用回调函数、获取程序当前运行位置;根据程序当前运行位置,在数据库中查找到对应代码行位置、更新对应代码行位置的运行次数,并返回继续执行程序运行;S3、当程序运行完毕,统计数据库中所有有效代码行个数与所有运行次数大于0的代码行个数,并计算得到程序运行代码覆盖率。本发明给Java程序开发过程提供了较佳的运行代码覆盖率测试方式。

著录项

  • 公开/公告号CN105930271A

    专利类型发明专利

  • 公开/公告日2016-09-07

    原文格式PDF

  • 申请/专利权人 惠州TCL移动通信有限公司;

    申请/专利号CN201610254632.X

  • 发明设计人 邹章锋;

    申请日2016-04-21

  • 分类号G06F11/36(20060101);

  • 代理机构44268 深圳市君胜知识产权代理事务所;

  • 代理人王永文;刘文求

  • 地址 516006 广东省惠州市仲恺高新区和畅七路西86号

  • 入库时间 2023-06-19 00:28:54

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-06-04

    授权

    授权

  • 2017-01-25

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

    实质审查的生效

  • 2016-09-07

    公开

    公开

说明书

技术领域

本发明涉及Java程序测试技术领域,尤其涉及一种Java程序运行代码覆盖率的测试方法及系统。

背景技术

目前,在Java程序开发过程中,在程序员做Java程序的自测试或者单元测试时,特别是Java程序设计开发软件过程中采用的白盒测试,为了保证开发的测试用例对代码能进行充分的测试验证,经常需要分析哪些代码行未执行到, 然后针对未执行的代码另编写测试用例,并且在该过程中,程序运行的代码覆盖率是评估测试验证是否充分的一个重要依据。譬如,在Android手机软件开发时,为了保证软件质量,需要求工程师对修改的代码做充分测试验证。另一方面,在软件外包行业,如电玩游戏机制造产业,也可以将代码覆盖率用作评估第三方开发的软件是否经测试验证充分。然而,现有技术中对程序运行测试是否充分以及什么地方测试验证不重复,却没有很好的工具。

有鉴于此,现有技术有待改进和提高。

发明内容

鉴于现有技术的不足,本发明目的在于提供一种Java程序运行代码覆盖率的测试方法及系统。本发明测试代码覆盖率的方法,旨在解决现有技术中软件开发过程中不具备较佳的测试方式或工具统计Java程序运行覆盖率的问题。

本发明的技术方案如下:

一种Java程序运行代码覆盖率的测试方法,其中,包括以下步骤:

S1、预先设置代码行监视项、回调函数;根据所述代码行监视项获取对应函数中的有效代码行表,获取有效代码表中有效代码行的位置;将所述有效代码行的位置保存至数据库中,并设置中断;

S2、当程序运行过程中触发中断,则调用所述回调函数、获取程序当前运行位置;根据程序当前运行位置,在所述数据库中查找到对应代码行位置、更新所述对应代码行位置的运行次数,并返回继续执行程序运行;

S3、当程序运行完毕,统计数据库中所有有效代码行个数与所有运行次数大于0的代码行个数,根据所述所有有效代码行个数、所有运行次数大于0的代码行个数计算得到程序运行代码覆盖率。

所述的Java程序运行代码覆盖率的测试方法,其中,所述代码行监视项设置为“Java类名+函数名”或“Java文件路径+代码行号”;所述有效代码表中的代码行位置包含Java类名、函数名和代码行号。

所述的Java程序运行代码覆盖率的测试方法,其中,当按“Java类名+函数名”设置代码行监视项时,所述步骤S1可以包括:

S111、根据所述代码行监视项获取对应函数的有效代码行表;

S112、在所述对应函数的有效代码行表中查询有效代码行的位置,将查询得到的有效代码行的位置保存到数据库中;

S113、设置所述对应函数中断,将中断方式设置为函数进入中断。

所述的Java程序运行代码覆盖率的测试方法,其中,当按“Java文件路径+代码行号”设置代码行监视项时,所述步骤S1还可以包括:

S121、根据所述Java文件路径解析Java源文件,获得该Java源文件的Java类名;按获得的Java源文件的Java类名,获取所对应函数的有效代码行表;

S122、判断所述代码行监视项中的代码行号是否在获取得到的有效代码表中;

S123、若判定所述代码行号没有所述有效代码表中,则判定设置的代码行监视项无效,需重新设置代码行监视项;

S124、若判定所述代码行号在所述有效代码表中,则根据所述代码行号查询对应的有效代码行的位置,将查询得到的有效代码行的位置保存到数据库中;并按所述对应的有效代码行的位置设置中断,将中断方式设置为行中断。

所述的Java程序运行代码覆盖率的测试方法,其中,所述步骤S2具体包括:

S21、当程序运行过程中触发所述函数进入中断、代码行中断,或者执行单步运行,则调用所述回调函数、获取程序当前运行位置;

S22、根据所述代码行监视项判断所述当前运行位置对应的函数是否被监视;

S23、若判断出所述当前运行位置对应的函数没有被监视,则直接返回继续执行程序运行;

S24、若判断出所述当前运行位置对应的函数有被监视,则根据程序当前运行位置,在所述数据库中查找到对应代码行位置、更新所述对应代码行位置的运行次数,并返回继续执行程序运行。

所述的Java程序运行代码覆盖率的测试方法,其中,所述步骤S3还包括:

S31、当程序运行完毕,查询数据库中所有运行次数为0的代码行,并按所属对应函数按顺序显示列出。

本发明还提供一种Java程序运行代码覆盖率的测试系统,其中,包括:

监视设置模块、用于预先设置代码行监视项、回调函数;根据所述代码行监视项获取对应函数中的有效代码行表,获取有效代码表中有效代码行的位置;将所述有效代码行的位置保存至数据库中,并设置中断;

程序运行控制模块、用于当程序运行过程中触发中断,则调用所述回调函数、获取程序当前运行位置;根据程序当前运行位置,在所述数据库中查找到对应代码行位置、更新所述对应代码行位置的运行次数,并返回继续执行程序运行;

覆盖率统计模块、用于当程序运行完毕,统计数据库中所有有效代码行个数与所有运行次数大于0的代码行个数,根据所述所有有效代码行个数、所有运行次数大于0的代码行个数计算得到程序运行代码覆盖率。

所述的Java程序运行代码覆盖率的测试系统,其中,所述系统还包括:

未执行代码行显示模块、用于当程序运行完毕,查询数据库中所有运行次数为0的代码行,并按所属对应函数按顺序显示列出。

所述的Java程序运行代码覆盖率的测试系统,其中,所述系统还包括:

JDWP程序调试连接模块, 用于负责与被测试的运行程序直接通信,通过JDWP协议控制被测试运行程序的中断与运行。

所述的Java程序运行代码覆盖率的测试系统,其中,所述代码行监视项设置为“Java类名+函数名”或“Java文件路径+代码行号”;所述有效代码表中的代码行位置包含Java类名、函数名和代码行号。

有益效果:本申请的一种Java程序运行代码覆盖率的测试方法及系统,为Java程序开发软件过程,提供了一种运行代码覆盖率的分析测试方式,程序员可据此来获取软件测试验证的代码覆盖率,并找出未找行的代码行。本发明所述方法可用于评估代码是否做了充分测试验证,以保证软件质量,并且该覆盖率测试方法也可以作为评估第三方开发的软件质量,为软件测试工程师提供较佳的覆盖率测试工具。

附图说明

图1为本发明的Java程序运行代码覆盖率的测试方法较佳实施例的流程图。

图2为本发明的Java程序运行代码覆盖率的测试方法中监视设置过程第一较较实施例的流程图。

图3为本发明的Java程序运行代码覆盖率的测试方法中监视设置过程第二较较实施例的流程图。

图4为本发明的Java程序运行代码覆盖率的测试方法较佳实施例中的程序运行控制过程的流程图。

图5为本发明的Java程序运行代码覆盖率的测试系统较佳实施例的模块框图。

具体实施方式

本发明提供一种Java程序运行代码覆盖率的测试方法及系统,为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

请参阅图1,本发明的Java程序运行代码覆盖率的测试方法较佳实施例的流程图。如图所示,所述Java程序运行代码覆盖率的测试方法包括以下步骤:

S1、预先设置代码行监视项、回调函数;根据所述代码行监视项获取对应函数中的有效代码行表,获取有效代码表中有效代码行的位置;将所述有效代码行的位置保存至数据库中,并设置中断。

在代码覆盖率测试过程中,可以按预先设置的代码行监视项,监视Java程序中代码行被运行执行的情况,本发明具体实施时,所述代码行监视项设置为“Java类名+函数名”或“Java文件路径+代码行号”。并且,在程序运行过程中,可以根据设置的代码行监视项获取对应函数中的有效代码行表,有效代码行表,有效代码行表指的是源Java程序代码中的可执行代码的集合,如注释代码行或者空白行等都不算,有效代码行用于生成目标代码。

在本发明中,要按设置的代码行监视项快速地统计出程序运行过程中的有效代码行,要求在软件项目代码的存放遵循一致的存放规则,譬如,主线、分支、标签等必须按划分的规则和目录存放,因而代码在开发过程中在提交到主线之前,须经过严格的代码审查。以便于在本发明实施时能快速地按监视项快速地统计出有效代码行。

根据查找到的有效代码行,获取有效代码表中有效代码行的位置;将所述有效代码行的位置保存至数据库中,并设置中断。所述有效代码表中的代码行位置包含Java类名、函数名和代码行号,因此通过查询代码行位置能得到代码行所属函数、所属Java内部类、以及代码行所在行号。其中,中断的设置是为了在程序运行过程中若中断被触发,则调用预先设置的回调函数返回主运行程序来处理或完成一定的操作,譬如,更新代码行位置的运行次数等处理。本发明具体实施时,中断方式可以为函数进入中断、代码行中断,进一步地,在程序运行中执行单步运行代码时,也能触发中断。优选地,本发明根据不同的代码行监视项设置相应的中断方式,即采用不同的监视设置,具体步骤如下:

当按“Java类名+函数名”设置代码行监视项时,所述步骤S1可以包括,如图2所示:

S111、将“Java类名+函数名”设置代码行监视项,即设置函数运行过程中的监视项目。

S111、根据所述代码行监视项获取对应函数的有效代码行表。

S112、在所述对应函数的有效代码行表中查询有效代码行的位置,将查询得到的有效代码行的位置保存到数据库中。

S113、设置所述对应函数中断,将中断方式设置为函数进入中断。

当按“Java文件路径+代码行号”设置代码行监视项时,所述步骤S1还可以包括,如图3所示:

S120、将“Java文件路径+代码行号”设置代码行监视项,即设置函数运行过程中的监视项目。

S121、根据所述Java文件路径解析Java源文件,获得该Java源文件的Java类名;

S122、按获得的Java源文件的Java类名,获取所对应函数的有效代码行表。

S123、判断所述代码行监视项中的代码行号是否在获取得到的有效代码表中。即判断监视项中的代码行是否为可执行有效代码行,若否则转入步骤S124,若是则转入步骤S125。

S124、若判定所述代码行号没有在所述有效代码表中,则判定设置的代码行监视项无效,需重新设置代码行监视项。

S125、若判定所述代码行号在所述有效代码表中,则根据所述代码行号查询对应的有效代码行的位置,转入下一步骤S126。

S126、将查询得到的有效代码行的位置保存到数据库中,转入下一步骤S127。

S127、按所述对应的有效代码行的位置设置中断,将中断方式设置为行中断。

本发明根据设置函数监视项的具体情况设置相应的中断触发条伯,使测试代码覆盖率增加了可选择的两种监视设置方式。

S2、当程序运行过程中触发中断,则调用所述回调函数、获取程序当前运行位置;根据程序当前运行位置,在所述数据库中查找到对应代码行位置、更新所述对应代码行位置的运行次数,并返回继续执行程序运行。

本步骤为程序运行控制过程,具体包括以下步骤,如图4所示:

S21、当程序运行过程中触发所述函数进入中断、代码行中断,或者执行单步运行,则调用所述回调函数、获取程序当前运行位置。

S22、根据所述代码行监视项判断所述当前运行位置对应的函数是否被监视;即判断当前运行位置所对应的函数的代码行是否在代码行监视项中,以判断其是否受监视;若否则转入步骤S23;若是则转入步骤S24。

S23、若判断出所述当前运行位置对应的函数没有被监视,则直接返回继续执行程序运行,即若函数没有被监视,则中断清除,返回继续运行程序。

S24、若判断出所述当前运行位置对应的函数有被监视,则根据程序当前运行位置,在所述数据库中查找到对应代码行位置、更新所述对应代码行位置的运行次数。

S25、中断清除,返回继续执行程序运行;若为单步执行程序,则返回单步执行程序。

本发明通过上述步骤S20~S25完成了整个测试运行控制过程,更新了有效代码行被运行执行的次数,为下一步统计计算代码覆盖率提供条件。

S3、当程序运行完毕,统计数据库中所有有效代码行个数与所有运行次数大于0的代码行个数,根据所述所有有效代码行个数、所有运行次数大于0的代码行个数计算得到程序运行代码覆盖率。

本发明具体实施时,所述步骤S3还包括:

S31、当程序运行完毕,查询数据库中所有运行次数为0的代码行,并按所属对应函数按顺序显示列出。即将未执行的代码行显示出来,通过该方式能统计到未被测试执行的源代码。分析所得到的未执行的代码行,能针对性地编写相应的测试用例,以完善代码测试验证。

由上可见,本发明提供的运行代码覆盖率的分析测试方法,程序员可据此来获取软件测试验证的代码覆盖率,并找出未找行的代码行,并且该覆盖率测试方法也可以作为评估第三方开发的软件质量,为软件测试工程师提供较佳的覆盖率测试工具。

进一步地,本发明还提供一种Java程序运行代码覆盖率的测试系统,如图5所示,包括JDWP程序调试连接模块100、监视设置模块110、程序运行控制模块120和覆盖率统计模块130、未执行代码行显示模块140:

监视设置模块110、用于预先设置代码行监视项、回调函数;根据所述代码行监视项获取对应函数中的有效代码行表,获取有效代码表中有效代码行的位置;将所述有效代码行的位置保存至数据库中,并设置中断;具体如上述方法实施例所述,这里不作赘述。

程序运行控制模块120、用于当程序运行过程中触发中断,则调用所述回调函数、获取程序当前运行位置;根据程序当前运行位置,在所述数据库中查找到对应代码行位置、更新所述对应代码行位置的运行次数,并返回继续执行程序运行;具体如上述方法实施例所述,这里不作赘述。

覆盖率统计模块130、用于当程序运行完毕,统计数据库中所有有效代码行个数与所有运行次数大于0的代码行个数,根据所述所有有效代码行个数、所有运行次数大于0的代码行个数计算得到程序运行代码覆盖率。具体如上述方法实施例所述,这里不作赘述。

所述系统还包括:

未执行代码行显示模块140、用于当程序运行完毕,查询数据库中所有运行次数为0的代码行,并按所属对应函数按顺序显示列出。具体如上述方法实施例所述。

进一步地,为协调整个程序的代码测试过程,本系统还包括:

JDWP程序调试连接模块100, 用于负责与被测试的运行程序直接通信,通过JDWP协议控制被测试运行程序的中断与运行。JPDA(Java Platform Debugger Architecture)是Java平台调试体系结构的缩写,通过JPDA提供的API,开发人员可以方便灵活的搭建Java调试应用程序。本发明通过Java 调试线协议(即JDWP)控制被测试运行程序的中断与运行。

所述系统中,所述代码行监视项设置为“Java类名+函数名”或“Java文件路径+代码行号”;所述有效代码表中的代码行位置包含Java类名、函数名和代码行号。

当按“Java类名+函数名”设置代码行监视项时,所述步骤监视设置模块110可以包括:

第一有效代码行表获取单元、用于根据所述代码行监视项获取对应函数的有效代码行表;具体如上述方法实施例所述。

第一查询与保存单元、用于在所述对应函数的有效代码行表中查询有效代码行的位置,将查询得到的有效代码行的位置保存到数据库中;具体如上述方法实施例所述。

第一中断设置单元、用于设置所述对应函数中断,将中断方式设置为函数进入中断。具体如上述方法实施例所述。

当按“Java文件路径+代码行号”设置代码行监视项时,所述步骤监视设置模块110可以包括:

第二有效代码行表获取单元、用于根据所述Java文件路径解析Java源文件,获得该Java源文件的Java类名;按获得的Java源文件的Java类名,获取所对应函数的有效代码行表;具体如上述方法实施例所述。

代码行有效性判断单元、用于判断所述代码行监视项中的代码行号是否在获取得到的有效代码表中;具体如上述方法实施例所述。

代码行无效处理单元、用于若判定所述代码行号没有所述有效代码表中,则判定设置的代码行监视项无效,需重新设置代码行监视项;具体如上述方法实施例所述。

第二中断设置单元、用于若判定所述代码行号在所述有效代码表中,则根据所述代码行号查询对应的有效代码行的位置,将查询得到的有效代码行的位置保存到数据库中;并按所述对应的有效代码行的位置设置中断,将中断方式设置为行中断。具体如上述方法实施例所述。

进一步地,本系统所述程序运行控制模块120具体包括:

触发与调用单元、用于当程序运行过程中触发所述函数进入中断、代码行中断,或者执行单步运行,则调用所述回调函数、获取程序当前运行位置;具体如上述方法实施例所述。

函数监视判断单元、用于根据所述代码行监视项判断所述当前运行位置对应的函数是否被监视;具体如上述方法实施例所述。

第一恢复执行程序单元、用于若判断出所述当前运行位置对应的函数没有被监视,则直接返回继续执行程序运行;具体如上述方法实施例所述。

第二恢复执行程序单元、用于若判断出所述当前运行位置对应的函数有被监视,则根据程序当前运行位置,在所述数据库中查找到对应代码行位置、更新所述对应代码行位置的运行次数,并返回继续执行程序运行。若为单步执行程序,则返回单步执行程序。具体如上述方法实施例所述。

综上所述,本发明的Java程序运行代码覆盖率的测试方法及系统,为Java程序开发软件过程,提供了一种运行代码覆盖率的分析测试方式,程序员可据此来获取软件测试验证的代码覆盖率,并找出未找行的代码行。本发明所述方法可用于评估代码是否做了充分测试验证,以保证软件质量,并且该覆盖率测试方法也可以作为评估第三方开发的软件质量,为软件测试工程师提供较佳的覆盖率测试工具。

应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号