CN105608000B - 获取代码覆盖率数据的方法及装置 - Google Patents

获取代码覆盖率数据的方法及装置 Download PDF

Info

Publication number
CN105608000B
CN105608000B CN201510946569.1A CN201510946569A CN105608000B CN 105608000 B CN105608000 B CN 105608000B CN 201510946569 A CN201510946569 A CN 201510946569A CN 105608000 B CN105608000 B CN 105608000B
Authority
CN
China
Prior art keywords
thread
code coverage
code
coverage data
tested program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201510946569.1A
Other languages
English (en)
Other versions
CN105608000A (zh
Inventor
刘双
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Qihoo Technology Co Ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
Qizhi Software Beijing Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Qihoo Technology Co Ltd, Qizhi Software Beijing Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201510946569.1A priority Critical patent/CN105608000B/zh
Publication of CN105608000A publication Critical patent/CN105608000A/zh
Application granted granted Critical
Publication of CN105608000B publication Critical patent/CN105608000B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供了一种获取代码覆盖率数据的方法及装置。该方法包括:当接收到对被测程序进行测试的指令时,调用第一线程执行所述被测程序的测试用例,生成所述测试用例的测试参数,其中,所述测试参数中包括代码覆盖率数据;新增独立于所述第一线程的第二线程;在所述第一线程的执行过程中,触发所述第二线程从所述测试参数中获取代码覆盖率数据。本发明实施例通过新增独立于第一线程的第二线程,以使得在对被测程序进行测试的过程中,利用第二线程具备的代码覆盖率数据的获取功能,实时获取并导出代码覆盖率数据,从而解决了现有技术中需要修改被测程序的源码,对外提供触发接口导出代码覆盖率数据的问题。

Description

获取代码覆盖率数据的方法及装置
技术领域
本发明涉及测试领域,特别是一种获取代码覆盖率数据的方法及装置。
背景技术
代码覆盖率(code coverage)是反映测试用例对被测程序覆盖程度的重要指标,也是衡量测试完整性的一个参考值。无论是单元测试、API(Application ProgramInterface,应用程序接口)测试还是功能性测试,最终都是调用了程序的代码。测试结束后,通过代码覆盖率数据,可以知道测试是否充分,测试的弱点在哪些方面,进而可以指导开发者或测试者设计能够增加覆盖率的测试用例。
目前,android(安卓)平台的代码覆盖率测试主要使用开源工具Jacoco(Javacode coverage),其测试的流程为:1)构建android项目,同时插入用于生成覆盖率数据的代码;2)执行测试用例进行测试;3)在测试完成后,触发数据导出接口,导出覆盖率数据;4)生成覆盖率报告。
然而,上述测试方法在测试完成后,为了导出覆盖率数据,需要修改被测程序的源码,对外提供触发接口,将覆盖率数据写到本地。因此,如何在不修改被测程序的源码的情况下,更加有效地导出覆盖率数据成为亟待解决的技术问题。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的获取代码覆盖率数据的方法及相应的装置。
依据本发明的一方面,提供了一种获取代码覆盖率数据的方法,包括:
当接收到对被测程序进行测试的指令时,调用第一线程执行所述被测程序的测试用例,生成所述测试用例的测试参数,其中,所述测试参数中包括代码覆盖率数据;
新增独立于所述第一线程的第二线程,其中,所述第二线程具备代码覆盖率数据的获取功能;
在所述第一线程的执行过程中,触发所述第二线程从所述测试参数中获取代码覆盖率数据。
可选地,所述方法还包括:
在对所述被测程序进行测试之前,调用代码覆盖率工具,由所述代码覆盖率工具通过插桩的方式向所述被测程序的代码中插入用于生成代码覆盖率数据的代码,以及由所述代码覆盖率工具向所述被测程序中注入代理插件。
可选地,调用第一线程执行所述被测程序的测试用例,生成所述测试用例的测试参数,包括:
在所述第一线程的执行过程中,由所述代理插件监控所述用于生成代码覆盖率数据的代码的执行情况,生成包含代码覆盖率数据的测试参数。
可选地,所述代理插件与所述被测程序间建立了关联,当所述被测程序启动时,同时启动所述代理插件。
可选地,在所述第一线程的执行过程中,触发所述第二线程从所述测试参数中获取代码覆盖率数据,包括:
在所述第一线程的执行过程中,触发所述第二线程从所述代理插件处获取所述测试参数中的代码覆盖率数据。
可选地,在所述代理插件的进程中新增所述第二线程。
可选地,在所述第一线程的执行过程中,触发所述第二线程从所述测试参数中获取代码覆盖率数据之后,所述方法还包括:
将获取的所述代码覆盖率数据以文件的形式保存至指定位置。
可选地,所述方法还包括:
在测试结束后,从所述指定位置处获取多个代码覆盖率数据文件;
对所述多个代码覆盖率数据文件进行合并处理,得到代码覆盖率数据合并文件。
可选地,对所述多个代码覆盖率数据文件进行合并处理,得到代码覆盖率数据合并文件之后,还包括:
获取所述被测程序的源码;
分析所述代码覆盖率数据合并文件、所述被测程序的源码以及所述被测程序的代码,生成指定格式的覆盖率报告。
依据本发明的另一方面,还提供了一种获取代码覆盖率数据的装置,包括:
测试参数生成模块,适于当接收到对被测程序进行测试的指令时,调用第一线程执行所述被测程序的测试用例,生成所述测试用例的测试参数,其中,所述测试参数中包括代码覆盖率数据;
线程新建模块,适于新增独立于所述第一线程的第二线程,其中,所述第二线程具备代码覆盖率数据的获取功能;
数据获取模块,适于在所述第一线程的执行过程中,触发所述第二线程从所述测试参数中获取代码覆盖率数据。
可选地,所述装置还包括调用模块,适于:
在对所述被测程序进行测试之前,调用代码覆盖率工具,由所述代码覆盖率工具通过插桩的方式向所述被测程序的代码中插入用于生成代码覆盖率数据的代码,以及由所述代码覆盖率工具向所述被测程序中注入代理插件。
可选地,所述测试参数生成模块还适于:
在所述第一线程的执行过程中,由所述代理插件监控所述用于生成代码覆盖率数据的代码的执行情况,生成包含代码覆盖率数据的测试参数。
可选地,所述代理插件与所述被测程序间建立了关联,当所述被测程序启动时,同时启动所述代理插件。
可选地,所述数据获取模块还适于:
在所述第一线程的执行过程中,触发所述第二线程从所述代理插件处获取所述测试参数中的代码覆盖率数据。
可选地,在所述代理插件的进程中新增所述第二线程。
可选地,所述装置还包括保存模块,适于:
在所述数据获取模块在所述第一线程的执行过程中,触发所述第二线程从所述测试参数中获取代码覆盖率数据之后,将获取的所述代码覆盖率数据以文件的形式保存至指定位置。
可选地,所述装置还包括数据合并模块,适于:在测试结束后,从所述指定位置处获取多个代码覆盖率数据文件;
对所述多个代码覆盖率数据文件进行合并处理,得到代码覆盖率数据合并文件。
可选地,所述装置还包括报告生成模块,适于:
在所述数据合并模块对所述多个代码覆盖率数据文件进行合并处理,得到代码覆盖率数据合并文件之后,获取所述被测程序的源码;
分析所述代码覆盖率数据合并文件、所述被测程序的源码以及所述被测程序的代码,生成指定格式的覆盖率报告。
在本发明实施例中,当接收到对被测程序进行测试的指令时,调用第一线程执行被测程序的测试用例,生成该测试用例的包括代码覆盖率数据的测试参数。新增独立于第一线程的第二线程,从而在第一线程的执行过程中,触发第二线程从测试参数中获取代码覆盖率数据。由此可知,本发明实施例通过新增独立于第一线程的第二线程,以使得在对被测程序进行测试的过程中,利用第二线程具备的代码覆盖率数据的获取功能,实时获取并导出代码覆盖率数据,从而解决了现有技术中需要修改被测程序的源码,对外提供触发接口导出代码覆盖率数据的问题。并且,本发明实施例通过循环的方式实时获取代码覆盖率数据,解决了现有技术中是在测试结束后导出数据而存在的被测程序异常退出,导致无法获取代码覆盖率数据的问题。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的获取代码覆盖率数据的方法的流程图;
图2示出了根据本发明另一个实施例的获取代码覆盖率数据的方法的流程图;
图3示出了根据本发明一个实施例的测试流程示意图;
图4示出了根据本发明一个实施例的获取代码覆盖率数据的装置的结构示意图;以及
图5示出了根据本发明一个实施例的获取代码覆盖率数据的装置的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
为解决上述技术问题,本发明实施例提供了一种获取代码覆盖率数据的方法。图1示出了根据本发明一个实施例的获取代码覆盖率数据的方法的流程图。如图1所示,该方法至少包括以下步骤S102至步骤S106:
步骤S102,当接收到对被测程序进行测试的指令时,调用第一线程执行被测程序的测试用例,生成测试用例的测试参数,其中,该测试参数中包括代码覆盖率数据;
步骤S104,新增独立于第一线程的第二线程,其中,该第二线程具备代码覆盖率数据的获取功能;
步骤S106,在第一线程的执行过程中,触发第二线程从测试参数中获取代码覆盖率数据。
在本发明实施例中,当接收到对被测程序进行测试的指令时,调用第一线程执行被测程序的测试用例,生成该测试用例的包括代码覆盖率数据的测试参数。新增独立于第一线程的第二线程,从而在第一线程的执行过程中,触发第二线程从测试参数中获取代码覆盖率数据。由此可知,本发明实施例通过新增独立于第一线程的第二线程,以使得在对被测程序进行测试的过程中,利用第二线程具备的代码覆盖率数据的获取功能,实时获取并导出代码覆盖率数据,从而解决了现有技术中需要修改被测程序的源码,对外提供触发接口导出代码覆盖率数据的问题。并且,本发明实施例通过循环的方式实时获取代码覆盖率数据,解决了现有技术中是在测试结束后导出数据而存在的被测程序异常退出,导致无法获取代码覆盖率数据的问题。
在本发明一实施例中,在对被测程序进行测试之前,可以调用代码覆盖率工具(如Jacoco等),由代码覆盖率工具通过插桩的方式向被测程序的代码中插入用于生成代码覆盖率数据的代码,以及由代码覆盖率工具向被测程序中注入代理插件。
在本发明一实施例中,代码覆盖率工具在进行插桩操作时,是在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针(即,用于生成代码覆盖率数据的代码),通过探针的执行并抛出程序运行的特征数据,通过分析这些特征数据,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息。例如,被测程序的源码生成的class文件为:
if(j==-1)
{doSomething();}
else
{doSomething2();}
代码覆盖率工具通过离线或在线的插桩模式,往被测程序的class文件中插入覆盖率统计标识,插入覆盖率统计标识后的class文件为:
if(j==-1)
{doSomething();
arrayOfBoolean[0]=true;
}
else
{doSomething2();
arrayOfBoolean[1]=true;
}
在本发明一实施例中,当代码覆盖率工具向被测程序中注入代理插件时,上文步骤S102中调用第一线程执行被测程序的测试用例,生成测试用例的测试参数,可以实施为在第一线程的执行过程中,由代理插件监控用于生成代码覆盖率数据的代码的执行情况,生成包含代码覆盖率数据的测试参数。
进一步,可以在代理插件与被测程序间建立关联,当被测程序启动时,同时启动代理插件。以上述例子为例,在被测程序启动时,同时启动代理插件(该代理插件由代码覆盖率工具向被测程序中注入),监控arrayOfBoolean数组(即布尔类型的数组)变化,从而获得代码的执行情况,进而生成包含代码覆盖率数据的测试参数。需要说明的是,此处列举的arrayOfBoolean数组仅是示意性的,用于生成代码覆盖率数据的代码还可以是其他逻辑代码,本发明并不作限制。
这样,上文步骤S106在第一线程的执行过程中,触发第二线程从测试参数中获取代码覆盖率数据,本发明实施例提供了一种可选的方案,在该方案中,可以在第一线程的执行过程中,触发第二线程从代理插件处获取测试参数中的代码覆盖率数据。
在本发明一实施例中,可以在代理插件的进程中新增第二线程,第二线程内部执行循环操作,不断从代理插件生成的测试参数中获取代码覆盖率数据。进一步,在第二线程从测试参数中获取代码覆盖率数据之后,可以将获取的代码覆盖率数据以文件的形式保存至指定位置,以便保存代码覆盖率数据。通常情况下,在移动终端的android系统中,是在虚拟机中对被测程序进行测试,因而指定位置可以是移动终端的本地位置等,本发明对此不作限制。
进一步,在对被测程序进行测试结束后,可以从指定位置处获取多个代码覆盖率数据文件,进而对多个代码覆盖率数据文件进行合并处理,得到代码覆盖率数据合并文件。
此外,在对多个代码覆盖率数据文件进行合并处理,得到代码覆盖率数据合并文件之后,还可以获取被测程序的源码,并分析代码覆盖率数据合并文件、被测程序的源码以及被测程序的代码,生成指定格式的覆盖率报告。
下面通过一实施例详细介绍本发明的获取代码覆盖率数据的方法的实现过程。在该实施例中,在对被测程序进行测试之前,由代码覆盖率工具通过插桩的方式向被测程序的代码中插入用于生成代码覆盖率数据的代码,以及由代码覆盖率工具向被测程序中注入代理插件,这里,被测程序如应用(APP)等。
图2示出了根据本发明另一个实施例的获取代码覆盖率数据的方法的流程图。如图2所示,该方法至少包括以下步骤S202至步骤S208:
步骤S202,接收对被测程序进行测试的指令,启动被测程序,同时启动代理插件。
步骤S204,调用第一线程执行被测程序的测试用例。
步骤S206,在第一线程的执行过程中,由代理插件监控用于生成代码覆盖率数据的代码的执行情况,生成包含代码覆盖率数据的测试参数。
步骤S208,新增独立于第一线程的第二线程,并在第一线程的执行过程中,触发第二线程从测试参数中获取代码覆盖率数据。
该步骤中,可以在代理插件的进程中新增第二线程,第二线程内部执行循环操作,不断从代理插件生成的测试参数中获取代码覆盖率数据。
图3示出了根据本发明一个实施例的测试流程示意图,在图3中,启动被测程序,同时启动代理插件,调用第一线程,利用第一线程执行被测程序的测试用例。在第一线程的执行过程中,由代理插件监控用于生成代码覆盖率数据的代码的执行情况,生成包含代码覆盖率数据的测试参数。在第一线程的执行过程中,第二线程从测试参数中获取代码覆盖率数据,直至测试结束。
进一步,在对被测程序进行测试结束后,可以从指定位置处获取多个代码覆盖率数据文件,进而对多个代码覆盖率数据文件进行合并处理,得到代码覆盖率数据合并文件。进一步,在对多个代码覆盖率数据文件进行合并处理,得到代码覆盖率数据合并文件之后,还可以获取被测程序的源码,并分析代码覆盖率数据合并文件、被测程序的源码以及被测程序的代码,生成指定格式的覆盖率报告。
基于上文各个实施例提供的获取代码覆盖率数据的方法,基于同一发明构思,本发明实施例还提供了一种获取代码覆盖率数据的装置。
图4示出了根据本发明一个实施例的获取代码覆盖率数据的装置的结构示意图。如图4所示,该装置400至少可以包括测试参数生成模块410、线程新建模块420以及数据获取模块430。
现介绍本发明实施例的获取代码覆盖率数据的装置400的各组成或器件的功能以及各部分间的连接关系:
测试参数生成模块410,适于当接收到对被测程序进行测试的指令时,调用第一线程执行被测程序的测试用例,生成测试用例的测试参数,其中,测试参数中包括代码覆盖率数据;
线程新建模块420,适于新增独立于第一线程的第二线程,其中,第二线程具备代码覆盖率数据的获取功能;
数据获取模块430,与测试参数生成模块410以及线程新建模块420相耦合,适于在第一线程的执行过程中,触发第二线程从测试参数中获取代码覆盖率数据。
在本发明一实施例中,如图5所示,图4展示的装置还可以包括调用模块440,适于:
在对被测程序进行测试之前,调用代码覆盖率工具,由代码覆盖率工具通过插桩的方式向被测程序的代码中插入用于生成代码覆盖率数据的代码,以及由代码覆盖率工具向被测程序中注入代理插件。
在本发明一实施例中,测试参数生成模块410还适于:
在第一线程的执行过程中,由代理插件监控用于生成代码覆盖率数据的代码的执行情况,生成包含代码覆盖率数据的测试参数。
在本发明一实施例中,代理插件与被测程序间建立了关联,当被测程序启动时,同时启动代理插件。
在本发明一实施例中,数据获取模块430还适于:
在第一线程的执行过程中,触发第二线程从代理插件处获取测试参数中的代码覆盖率数据。
在本发明一实施例中,在代理插件的进程中新增第二线程。
在本发明一实施例中,如图5所示,图4展示的装置还可以包括保存模块450,与数据获取模块430相耦合适于:
在数据获取模块430在第一线程的执行过程中,触发第二线程从测试参数中获取代码覆盖率数据之后,将获取的代码覆盖率数据以文件的形式保存至指定位置。
在本发明一实施例中,如图5所示,图4展示的装置还可以包括数据合并模块460,与保存模块450相耦合,适于:
在测试结束后,从指定位置处获取多个代码覆盖率数据文件;
对多个代码覆盖率数据文件进行合并处理,得到代码覆盖率数据合并文件。
在本发明一实施例中,如图5所示,图4展示的装置还可以包括报告生成模块470,与数据合并模块460相耦合,适于:
在数据合并模块对多个代码覆盖率数据文件进行合并处理,得到代码覆盖率数据合并文件之后,获取被测程序的源码;
分析代码覆盖率数据合并文件、被测程序的源码以及被测程序的代码,生成指定格式的覆盖率报告。
根据上述任意一个优选实施例或多个优选实施例的组合,本发明实施例能够达到如下有益效果:
在本发明实施例中,当接收到对被测程序进行测试的指令时,调用第一线程执行被测程序的测试用例,生成该测试用例的包括代码覆盖率数据的测试参数。新增独立于第一线程的第二线程,从而在第一线程的执行过程中,触发第二线程从测试参数中获取代码覆盖率数据。由此可知,本发明实施例通过新增独立于第一线程的第二线程,以使得在对被测程序进行测试的过程中,利用第二线程具备的代码覆盖率数据的获取功能,实时获取并导出代码覆盖率数据,从而解决了现有技术中需要修改被测程序的源码,对外提供触发接口导出代码覆盖率数据的问题。并且,本发明实施例通过循环的方式实时获取代码覆盖率数据,解决了现有技术中是在测试结束后导出数据而存在的被测程序异常退出,导致无法获取代码覆盖率数据的问题。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的获取代码覆盖率数据的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。
本发明实施例还公开了:A1、一种获取代码覆盖率数据的方法,包括:
当接收到对被测程序进行测试的指令时,调用第一线程执行所述被测程序的测试用例,生成所述测试用例的测试参数,其中,所述测试参数中包括代码覆盖率数据;
新增独立于所述第一线程的第二线程,其中,所述第二线程具备代码覆盖率数据的获取功能;
在所述第一线程的执行过程中,触发所述第二线程从所述测试参数中获取代码覆盖率数据。
A2、根据A1所述的方法,其中,还包括:
在对所述被测程序进行测试之前,调用代码覆盖率工具,由所述代码覆盖率工具通过插桩的方式向所述被测程序的代码中插入用于生成代码覆盖率数据的代码,以及由所述代码覆盖率工具向所述被测程序中注入代理插件。
A3、根据A2所述的方法,其中,调用第一线程执行所述被测程序的测试用例,生成所述测试用例的测试参数,包括:
在所述第一线程的执行过程中,由所述代理插件监控所述用于生成代码覆盖率数据的代码的执行情况,生成包含代码覆盖率数据的测试参数。
A4、根据A3所述的方法,所述代理插件与所述被测程序间建立了关联,当所述被测程序启动时,同时启动所述代理插件。
A5、根据A3或A4所述的方法,其中,在所述第一线程的执行过程中,触发所述第二线程从所述测试参数中获取代码覆盖率数据,包括:
在所述第一线程的执行过程中,触发所述第二线程从所述代理插件处获取所述测试参数中的代码覆盖率数据。
A6、根据A3-A5任一项所述的方法,其中,在所述代理插件的进程中新增所述第二线程。
A7、根据A1-A6任一项所述的方法,其中,在所述第一线程的执行过程中,触发所述第二线程从所述测试参数中获取代码覆盖率数据之后,所述方法还包括:
将获取的所述代码覆盖率数据以文件的形式保存至指定位置。
A8、根据A7所述的方法,其中,还包括:
在测试结束后,从所述指定位置处获取多个代码覆盖率数据文件;
对所述多个代码覆盖率数据文件进行合并处理,得到代码覆盖率数据合并文件。
A9、根据A8所述的方法,其中,对所述多个代码覆盖率数据文件进行合并处理,得到代码覆盖率数据合并文件之后,还包括:
获取所述被测程序的源码;
分析所述代码覆盖率数据合并文件、所述被测程序的源码以及所述被测程序的代码,生成指定格式的覆盖率报告。
B10、一种获取代码覆盖率数据的装置,包括:
测试参数生成模块,适于当接收到对被测程序进行测试的指令时,调用第一线程执行所述被测程序的测试用例,生成所述测试用例的测试参数,其中,所述测试参数中包括代码覆盖率数据;
线程新建模块,适于新增独立于所述第一线程的第二线程,其中,所述第二线程具备代码覆盖率数据的获取功能;
数据获取模块,适于在所述第一线程的执行过程中,触发所述第二线程从所述测试参数中获取代码覆盖率数据。
B11、根据B10所述的装置,其中,还包括调用模块,适于:
在对所述被测程序进行测试之前,调用代码覆盖率工具,由所述代码覆盖率工具通过插桩的方式向所述被测程序的代码中插入用于生成代码覆盖率数据的代码,以及由所述代码覆盖率工具向所述被测程序中注入代理插件。
B12、根据B11所述的装置,其中,所述测试参数生成模块还适于:
在所述第一线程的执行过程中,由所述代理插件监控所述用于生成代码覆盖率数据的代码的执行情况,生成包含代码覆盖率数据的测试参数。
B13、根据B12所述的装置,其中,所述代理插件与所述被测程序间建立了关联,当所述被测程序启动时,同时启动所述代理插件。
B14、根据B12或B13所述的装置,其中,所述数据获取模块还适于:
在所述第一线程的执行过程中,触发所述第二线程从所述代理插件处获取所述测试参数中的代码覆盖率数据。
B15、根据B12-B14任一项所述的装置,其中,在所述代理插件的进程中新增所述第二线程。
B16、根据B10-B15任一项所述的装置,其中,还包括保存模块,适于:
在所述数据获取模块在所述第一线程的执行过程中,触发所述第二线程从所述测试参数中获取代码覆盖率数据之后,将获取的所述代码覆盖率数据以文件的形式保存至指定位置。
B17、根据B16所述的装置,其中,还包括数据合并模块,适于:在测试结束后,从所述指定位置处获取多个代码覆盖率数据文件;
对所述多个代码覆盖率数据文件进行合并处理,得到代码覆盖率数据合并文件。
B18、根据B17所述的装置,其中,还包括报告生成模块,适于:
在所述数据合并模块对所述多个代码覆盖率数据文件进行合并处理,得到代码覆盖率数据合并文件之后,获取所述被测程序的源码;
分析所述代码覆盖率数据合并文件、所述被测程序的源码以及所述被测程序的代码,生成指定格式的覆盖率报告。

Claims (12)

1.一种获取代码覆盖率数据的方法,包括:
当接收到对被测程序进行测试的指令时,调用第一线程执行所述被测程序的测试用例,生成所述测试用例的测试参数,其中,所述测试参数中包括代码覆盖率数据;
新增独立于所述第一线程的第二线程,其中,所述第二线程具备代码覆盖率数据的获取功能;
在所述第一线程的执行过程中,触发所述第二线程从所述测试参数中获取代码覆盖率数据;
其中,调用第一线程执行所述被测程序的测试用例,生成所述测试用例的测试参数,包括:
在所述第一线程的执行过程中,由代理插件监控用于生成代码覆盖率数据的代码的执行情况,生成包含代码覆盖率数据的测试参数;
所述第二线程新增于所述代理插件的进程中;并且
所述代理插件与所述被测程序间建立了关联,当所述被测程序启动时,同时启动所述代理插件。
2.根据权利要求1所述的方法,其中,还包括:
在对所述被测程序进行测试之前,调用代码覆盖率工具,由所述代码覆盖率工具通过插桩的方式向所述被测程序的代码中插入用于生成代码覆盖率数据的代码,以及由所述代码覆盖率工具向所述被测程序中注入所述代理插件。
3.根据权利要求1或2所述的方法,其中,在所述第一线程的执行过程中,触发所述第二线程从所述测试参数中获取代码覆盖率数据,包括:
在所述第一线程的执行过程中,触发所述第二线程从所述代理插件处获取所述测试参数中的代码覆盖率数据。
4.根据权利要求1或2所述的方法,其中,在所述第一线程的执行过程中,触发所述第二线程从所述测试参数中获取代码覆盖率数据之后,所述方法还包括:
将获取的所述代码覆盖率数据以文件的形式保存至指定位置。
5.根据权利要求4所述的方法,其中,还包括:
在测试结束后,从所述指定位置处获取多个代码覆盖率数据文件;
对所述多个代码覆盖率数据文件进行合并处理,得到代码覆盖率数据合并文件。
6.根据权利要求5所述的方法,其中,对所述多个代码覆盖率数据文件进行合并处理,得到代码覆盖率数据合并文件之后,还包括:
获取所述被测程序的源码;
分析所述代码覆盖率数据合并文件、所述被测程序的源码以及所述被测程序的代码,生成指定格式的覆盖率报告。
7.一种获取代码覆盖率数据的装置,包括:
测试参数生成模块,适于当接收到对被测程序进行测试的指令时,调用第一线程执行所述被测程序的测试用例,生成所述测试用例的测试参数,其中,所述测试参数中包括代码覆盖率数据;
线程新建模块,适于新增独立于所述第一线程的第二线程,其中,所述第二线程具备代码覆盖率数据的获取功能;
数据获取模块,适于在所述第一线程的执行过程中,触发所述第二线程从所述测试参数中获取代码覆盖率数据;
其中,所述测试参数生成模块还适于:
在所述第一线程的执行过程中,由代理插件监控用于生成代码覆盖率数据的代码的执行情况,生成包含代码覆盖率数据的测试参数;
所述第二线程新增于所述代理插件的进程中;并且
所述代理插件与所述被测程序间建立了关联,当所述被测程序启动时,同时启动所述代理插件。
8.根据权利要求7所述的装置,其中,还包括调用模块,适于:
在对所述被测程序进行测试之前,调用代码覆盖率工具,由所述代码覆盖率工具通过插桩的方式向所述被测程序的代码中插入用于生成代码覆盖率数据的代码,以及由所述代码覆盖率工具向所述被测程序中注入所述代理插件。
9.根据权利要求7或8所述的装置,其中,所述数据获取模块还适于:
在所述第一线程的执行过程中,触发所述第二线程从所述代理插件处获取所述测试参数中的代码覆盖率数据。
10.根据权利要求7或8所述的装置,其中,还包括保存模块,适于:
在所述数据获取模块在所述第一线程的执行过程中,触发所述第二线程从所述测试参数中获取代码覆盖率数据之后,将获取的所述代码覆盖率数据以文件的形式保存至指定位置。
11.根据权利要求10所述的装置,其中,还包括数据合并模块,适于:在测试结束后,从所述指定位置处获取多个代码覆盖率数据文件;
对所述多个代码覆盖率数据文件进行合并处理,得到代码覆盖率数据合并文件。
12.根据权利要求11所述的装置,其中,还包括报告生成模块,适于:
在所述数据合并模块对所述多个代码覆盖率数据文件进行合并处理,得到代码覆盖率数据合并文件之后,获取所述被测程序的源码;
分析所述代码覆盖率数据合并文件、所述被测程序的源码以及所述被测程序的代码,生成指定格式的覆盖率报告。
CN201510946569.1A 2015-12-16 2015-12-16 获取代码覆盖率数据的方法及装置 Active CN105608000B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510946569.1A CN105608000B (zh) 2015-12-16 2015-12-16 获取代码覆盖率数据的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510946569.1A CN105608000B (zh) 2015-12-16 2015-12-16 获取代码覆盖率数据的方法及装置

Publications (2)

Publication Number Publication Date
CN105608000A CN105608000A (zh) 2016-05-25
CN105608000B true CN105608000B (zh) 2019-05-31

Family

ID=55987952

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510946569.1A Active CN105608000B (zh) 2015-12-16 2015-12-16 获取代码覆盖率数据的方法及装置

Country Status (1)

Country Link
CN (1) CN105608000B (zh)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106126314B (zh) * 2016-06-15 2019-11-05 龙芯中科技术有限公司 扩充指令的模拟方法和装置
CN106155909A (zh) * 2016-07-26 2016-11-23 网易(杭州)网络有限公司 代码覆盖率测试结果的处理方法及装置
CN106294129A (zh) * 2016-07-27 2017-01-04 北京小米移动软件有限公司 代码覆盖率测试方法及装置
CN108132877B (zh) * 2017-12-08 2021-04-20 中航(成都)无人机系统股份有限公司 一种飞行控制软件中增益覆盖率测试的方法
CN109002395B (zh) * 2018-07-06 2020-11-24 京东数字科技控股有限公司 一种代码覆盖率管理方法和装置
CN109117365B (zh) * 2018-07-18 2022-04-22 北京城市网邻信息技术有限公司 一种测试方法、装置、存储介质及终端
CN109992511B (zh) * 2019-03-25 2022-11-22 口碑(上海)信息技术有限公司 获取代码测试覆盖率的装置及方法
CN111090586B (zh) * 2019-12-09 2024-02-09 广州品唯软件有限公司 代码覆盖率数据文件的上报方法、装置和计算机设备
CN112069066B (zh) * 2020-09-01 2024-05-07 招商银行股份有限公司 代码覆盖率统计方法、装置、设备及计算机可读存储介质
CN112214414B (zh) * 2020-10-29 2024-05-17 平安银行股份有限公司 基于自动化测试的覆盖率处理方法、装置、设备及介质
CN114253862A (zh) * 2021-12-29 2022-03-29 湖南泛联新安信息科技有限公司 一种hdl代码仿真覆盖率异步事件驱动自动分析方法
CN115658534B (zh) * 2022-11-04 2024-01-19 上海安般信息科技有限公司 一种基于多引擎融合的分布式模糊测试方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103631707A (zh) * 2012-08-27 2014-03-12 腾讯科技(深圳)有限公司 一种获取代码覆盖率的方法及装置
CN104391795A (zh) * 2014-12-03 2015-03-04 北京京东尚科信息技术有限公司 一种分布式系统中自动化测试覆盖率的测试方法及系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102053906A (zh) * 2009-10-30 2011-05-11 国际商业机器公司 用于收集程序运行时信息的系统和方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103631707A (zh) * 2012-08-27 2014-03-12 腾讯科技(深圳)有限公司 一种获取代码覆盖率的方法及装置
CN104391795A (zh) * 2014-12-03 2015-03-04 北京京东尚科信息技术有限公司 一种分布式系统中自动化测试覆盖率的测试方法及系统

Also Published As

Publication number Publication date
CN105608000A (zh) 2016-05-25

Similar Documents

Publication Publication Date Title
CN105608000B (zh) 获取代码覆盖率数据的方法及装置
US8561033B2 (en) Selective branch-triggered trace generation apparatus and method
CN103365770B (zh) 移动终端软件测试系统及软件测试方法
Pretschner et al. One evaluation of model-based testing and its automation
Muccini et al. Using software architecture for code testing
US20150363296A1 (en) Function test apparatus based on unit test cases reusing and function test method thereof
CN105573915B (zh) 一种基于代码覆盖率的测试方法和装置
CN105630671B (zh) 代码覆盖率报告的生成方法及装置
CN105589805B (zh) 一种代码覆盖率报告的生成方法和装置
CN104820640A (zh) 一种网页测试方法和装置
CN104657247A (zh) 基于jtag调试方式实现通用型故障注入系统和故障注入方法
CN107678938A (zh) 一种应用程序的调试方法及设备
CN110688313B (zh) 一种VxWorks操作系统下软件测试的故障注入方法
CN110704306A (zh) 测试中的断言处理方法、装置、设备及存储介质
CN108021791B (zh) 数据保护方法及装置
CN105224457B (zh) 一种测试框架实现方法和装置
CN103699485B (zh) 应用程序调试方法和装置
CN103049374B (zh) 一种自动化测试的方法及装置
CN110704314A (zh) 一种嵌入式软件测试的故障注入方法
CN107329889B (zh) 一种c编译器自动化测试的方法
US20140351664A1 (en) Testing an integrated circuit
CN109857637A (zh) 一种基于注解的Java语言方法覆盖率和方法输入输出统计方法及装置
CN105446886B (zh) 一种计算机程序调试方法和装置
CN111026638A (zh) 一种网页自动化测试方法、装置、电子设备和存储介质
CN109992511A (zh) 获取代码测试覆盖率的装置及方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20220715

Address after: Room 801, 8th floor, No. 104, floors 1-19, building 2, yard 6, Jiuxianqiao Road, Chaoyang District, Beijing 100015

Patentee after: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Address before: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park)

Patentee before: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Patentee before: Qizhi software (Beijing) Co.,Ltd.