CN103699476B - 覆盖率测试方法及系统 - Google Patents
覆盖率测试方法及系统 Download PDFInfo
- Publication number
- CN103699476B CN103699476B CN201210369615.2A CN201210369615A CN103699476B CN 103699476 B CN103699476 B CN 103699476B CN 201210369615 A CN201210369615 A CN 201210369615A CN 103699476 B CN103699476 B CN 103699476B
- Authority
- CN
- China
- Prior art keywords
- information
- program
- coverage
- function
- run
- 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
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提出一种覆盖率测试方法及系统,其包括:编译源代码,在每一段代码中均插入探针函数;记录所有探针函数的位置信息;运行程序,记录探针函数的计数信息;根据已经运行的程序中探针函数的位置信息以及相应探针函数的计数信息,生成第一覆盖信息;根据没有调用到的程序中探针函数的位置信息,生成第二覆盖信息;将所述第一覆盖信息和所述第二覆盖信息合并,计算获得最终覆盖率结果。本发明更准确客观地反映出程序代码的真实覆盖率,且适用于后台服务类程序的测试。
Description
技术领域
本发明涉及软件测试技术,特别涉及一种软件代码的覆盖率测试方法及系统。
背景技术
在C/C++软件开发的质量保证体系中,覆盖率(软件中代码的运行比率)测试通常是一种有效发现问题的手段,通过代码覆盖率的分析,可以快速定位到哪些代码是没有运行的,从而构造相应的测试案例来覆盖这些代码,以发现软件设计中的错误。
目前软件代码覆盖率测试广泛使用的是开源gcov工具,gcov工具是集成在gcc(GNU Compiler Collection,GUN编译器套件)中的一个检测代码覆盖率的工具,它通过编译阶段(即将源代码编译成可执行代码),在源代码中插入探针函数(插入探针函数也称为插桩,用来标识代码的运行次数),来记录代码是否运行,并根据记录的运行信息分析出软件代码行、函数、分支的覆盖情况。
测试时,运行程序,首先将探针函数的位置信息记录在一个文件中(例如通常将探针信息记录在以.gcno结尾的文件中,后面简称为gcno文件)。
其次,在程序运行过程中对每段代码的覆盖率进行统计,覆盖率的数值可以利用探针函数本身的计数功能来获得,即运行过的代码,相应的探针函数便会计数,并在程序优雅退出(这里所述的优雅退出是指程序正常退出,例如调用exit()函数退出程序)后将统计得到的覆盖率写入一个文件中(例如通常将覆盖率记录在以.gcda结尾的文件中,后面简称为gcda文件)。
最后,请参见图1,从gcno文件和gcda文件中收集和汇总软件的覆盖率信息,产出覆盖率报告。
但是,现有的这种覆盖率测试方法存在两类问题:
(1)获得覆盖率结果准确性低
生成gcda文件时候,有一个前提,就是对于源文件A,只有当程序运行时使用或调用了源文件A中的代码时,才会生成源文件A的gcda文件(A.gcda),而收集源文件A的覆盖率信息时,必须A.gcno、A.gcda都存在时才可以收集得到。对于测试来说,考虑到测试时间,多数情况都没有办法保证测试案例可以将一个软件程序完整地运行,因此很多时候只生成了部分源代码的gcda文件,而测试过程中没有运行的源代码却并没有被纳入计算范围,所以会造成得出的覆盖率结果不准确。
(2)对于不支持非优雅退出的程序,无法获取覆盖率运行信息
gcda文件的生成,是在程序正常退出(即优雅退出)后对覆盖率统计得到的。但是对于后台服务类程序来说,其程序运行是循环的,本身不提供优雅退出机制,因而无法生成gcda文件,从而无法获取覆盖率信息。
发明内容
本发明的目的是提供一种覆盖率测试方法及系统,以解决现有覆盖率测试技术获得的覆盖率结果准确性低的问题。
本发明提出一种覆盖率测试方法,包括:
编译源代码,在每一段代码中均插入探针函数;
记录所有探针函数的位置信息;
运行程序,记录探针函数的计数信息;
根据已经运行的程序中探针函数的位置信息以及相应探针函数的计数信息,生成第一覆盖信息;
根据没有调用到的程序中探针函数的位置信息,生成第二覆盖信息;
将所述第一覆盖信息和所述第二覆盖信息合并,计算获得最终覆盖率结果。
依照本发明较佳实施例所述的覆盖率测试方法,还包括:
运行程序过程中,定时对已经运行的程序中探针函数的计数信息进行记录,并获取已经运行的程序中代码的覆盖信息。
依照本发明较佳实施例所述的覆盖率测试方法,还包括:
注册调用函数和信号处理函数;
运行程序过程中,在所述调用函数接收到调用信号后,调用所述处理函数获取已经运行的程序中代码的覆盖信息。
依照本发明较佳实施例所述的覆盖率测试方法,所述注册调用函数和信号处理函数的步骤包括:利用动态库预加载的特性注册所述注册调用函数和所述信号处理函数。
依照本发明较佳实施例所述的覆盖率测试方法,在程序运行正常退出时,对已经运行的程序中探针函数的计数信息进行记录。
依照本发明较佳实施例所述的覆盖率测试方法,还包括:
将探针函数的位置信息写入第一文件;
根据已经运行的程序中探针函数的位置信息以及相应探针函数的计数信息,获得已经运行的程序中代码覆盖信息,并写入第二文件;
所述根据已经运行的程序中探针函数的位置信息以及相应探针函数的计数信息,生成第一覆盖信息的步骤包括:扫描所述第一文件获得已经运行的程序中探针函数的位置信息,扫描所述第二文件获得已经运行的程序中探针函数的计数信息,并根据已经运行的程序中探针函数的位置信息以及相应探针函数的计数信息,生成第一覆盖信息。
依照本发明较佳实施例所述的覆盖率测试方法,所述根据没有调用到的程序中探针函数的位置信息,生成第二覆盖信息的步骤包括:
扫描所述第一文件,获得没有调用到的程序中探针函数的位置信息,并生成第二覆盖信息。
依照本发明较佳实施例所述的覆盖率测试方法,所述编译源代码的步骤还包括:去除源代码中空行、注释、括号行、声明语句等无效、非逻辑的代码行。
本发明另提出一种覆盖率测试系统,包括:
编译模块,用于编译源代码,并在每一段代码中均插入探针函数;
记录模块,用于记录所有探针函数的位置信息,以及记录探针函数的计数信息;
第一覆盖信息生成模块,用于根据已经运行的程序中探针函数的位置信息以及相应探针函数的计数信息,生成第一覆盖信息;
第二覆盖信息生成模块,用于根据没有调用到的程序中探针函数的位置信息,生成第二覆盖信息;
合并模块,用于将所述第一覆盖信息和所述第二覆盖信息合并,计算获得最终覆盖率结果。
依照本发明较佳实施例所述的覆盖率测试系统,所述记录模块在运行程序过程中,定时对已经运行的程序中探针函数的计数信息进行记录。
依照本发明较佳实施例所述的覆盖率测试系统,所述记录模块在程序运行正常退出时,对已经运行的程序中探针函数的计数信息进行记录。
依照本发明较佳实施例所述的覆盖率测试系统,所述记录模块将探针函数的位置信息写入第一文件,以及根据已经运行的程序中探针函数的位置信息以及相应探针函数的计数信息,获得已经运行的程序中代码覆盖信息,并写入第二文件;
所述第一覆盖信息生成模块通过扫描所述第一文件获得已经运行的程序中探针函数的位置信息,通过扫描所述第二文件获得已经运行的程序中探针函数的计数信息,并根据已经运行的程序中探针函数的位置信息以及相应探针函数的计数信息,生成第一覆盖信息。
依照本发明较佳实施例所述的覆盖率测试系统,所述第二覆盖信息生成模块通过扫描所述第一文件,获得没有调用到的程序中探针函数的位置信息,并生成第二覆盖信息。
依照本发明较佳实施例所述的覆盖率测试系统,所述编译模块在编译源代码时,去除源代码中空行、注释、括号行、声明语句等无效、非逻辑的代码行。
相对于现有技术,本发明的有益效果是:本发明将测试过程中已经运行的程序和没有运行的程序都考虑在计算范围内,不受测试数据变化的影响,即使在测试软件没有完全运行的情况下,也可以准确客观地反映出程序代码的真实覆盖率。此外,本发明可以在程序运行过程中对探针函数的动态计数,支持覆盖率数据的动态生成,同样适用于后台服务类程序的测试。
当然,实施本发明的任一产品并不一定需要同时达到以上所述的所有优点。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。
附图说明
图1为现有的软件代码覆盖率测试汇总示意图;
图2为本发明实施例的一种覆盖率测试方法流程图;
图3为本发明实施例的一种动态生成第二文件的原理图;
图4为本发明实施例的一种获得最终覆盖率结果的原理图;
图5为本发明实施例的一种覆盖率测试系统的结构图。
具体实施方式
为更进一步阐述本发明达成预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明提出的覆盖率测试方法及系统其具体实施方式、方法、步骤及功效,详细说明如后。
有关本发明的前述及其他技术内容、特点及功效,在以下配合参考图式的较佳实施例详细说明中将可清楚的呈现。通过具体实施方式的说明,当可对本发明为达成预定目的所采取的技术手段及功效得以更加深入且具体的了解,然而所附图式仅是提供参考与说明之用,并非用来对本发明加以限制。
请参见图2,其为本发明实施例的一种覆盖率测试方法流程图,其包括以下步骤:
S21,编译源代码,在每一段代码中均插入探针函数。
编译源代码是将源代码编译成可执行代码的过程,其中包括去除源代码中空行、注释、括号行、声明语句等无效、非逻辑的代码行,也即是将源代码编译成有效代码行。
在编译源代码的过程中,会在每一段代码中均插入探针函数。这里所说的每一段代码是指程序的基本块。如果一段代码的第一条语句被执行过一次,这段代码中的每一个都要执行一次,称为基本块。一个基本块中的所有语句的执行次数一定是相同的。一般由多个顺序执行语句后边跟一个跳转语句组成。所以一般情况下基本块的最后一条语句一定是一个跳转语句,跳转的目的地是另外一个基本块的第一条语句,如果跳转时有条件的,就产生了分支,该基本块就有两个基本块作为目的地。
在每一段代码中插入探针函数也称为在代码中插桩,代码插桩技术是在保证被测程序原有逻辑完整性的基础上,在代码中插入一些探针(又称为“探测仪”),通过探针的执行并抛出代码运行的特征数据,通过对这些数据的分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息,从而实现测试目的的方法。这里所述的探针函数具有计数的功能,当探针函数所在的一段代码运行一次后,该探针函数便自动计数一次,也即表示该段代码被覆盖。
S22,记录所有探针函数的位置信息。
在软件程序测试运行过程中,有的代码是被覆盖的(会运行的),而有些代码却没有被覆盖(不会运行),这部分没有被覆盖的代码会成为系统的负担,甚至会导致程序出错,所以测试的目的就是通过计算软件运行时代码的覆盖率,进而找出这些没有覆盖到的代码。因为探针函数可以标示出代码的运行情况,所以为了计算覆盖率,需要记录所有探针函数的位置信息,探针函数的位置关系表现为一个树状的结构。在实际操作中,可以将探针函数的位置信息写入一个第一文件中,例如以.gcno结尾的文件(后面所述的gcno文件即指第一文件)。
S23,运行程序,记录探针函数的计数信息。
在程序运行过程中,一段代码被执行后,对应的探针函数便会有计数,从而便能计算出已运行代码的覆盖信息,可以将这个已运行代码的覆盖信息写入一个第二文件中,例如以.gcda结尾的文件(后面所述的gcda文件即指第二文件)。在实际操作中,可以在程序入口处,通过atexit函数,注册一个用于把运行阶段的覆盖信息写入本地文件的函数gcov_exit(),从而调用gcov_exit()函数时就会把覆盖信息写入gcda文件中。
其中,记录已运行探针函数的计数信息(也即生成gcda文件)可以采用两种方式:
(1)在程序运行正常退出时,对已经运行的程序中探针函数的计数信息进行记录。程序运行正常退出也称为优雅退出,这种方式适合支持优雅退出的程序,即程序优雅退出时,调用gcov_exit()函数将已运行的覆盖信息写入gcda文件中。
(2)运行程序过程中,定时对已经运行的程序中探针函数的计数信息进行记录。基于有些程序不支持优雅退出(如后台服务类程序),而且优雅退出后程序的重新启动往往较慢,所以也可以采用这种动态方式来对覆盖信息进行记录。
具体的实现方式可以是:利用动态库预加载的特性,先在程序中注册一个调用函数和一个信号处理函数,然后在程序运行过程中,定时(当然也可以在需要的时候)向调用函数发送一个调用信号,从而调用函数会调用处理函数获取已运行的代码的计数信息,从而获得已经运行的程序中代码的覆盖信息,并写入gcda文件中。而每次调用信号处理函数而获取的代码计数信息,都会累加写入gcda文件中。
请结合参见图3,其为动态生成gcda文件的原理图,其中_attribute_((constructor))void_ctorGcovRegister()函数即为调用函数,void_sigHandlerGcov(int status)函数即为信号处理函数,USR1信号即为调用信号。当_attribute_((constructor))void_ctorGcovRegister()函数捕获USR1信号时,就会调用void_sigHandlerGcov(int status)函数,该函数内部会调用gcov_exit()函数把覆盖信息写入到gcda文件中。
S24,根据已经运行的程序中探针函数的位置信息以及相应探针函数的计数信息,生成第一覆盖信息。
所述的第一覆盖信息是指已运行的程序中代码的相关覆盖信息,如已运行程序中代码的覆盖率结果、运行的代码的数量位置、未运行代码的数量位置等。
实际操作中,扫描gcno文件可以获得已经运行的程序中探针函数的位置信息,也即获得了已经运行的程序中代码段的总数。扫描gcda文件可以获得已经运行的程序中代码的计数信息,即哪些代码运行过,哪些代码没有运行过。从而通过扫描gcno文件和gcda文件所得到的信息便能生成第一覆盖信息。
S25,根据没有调用到的程序中探针函数的位置信息,生成第二覆盖信息。
所述第二覆盖信息是指没有运行的程序中代码的相关信息,如这部分代码的覆盖率(为0),代码的数量位置等。实际操作中,可以通过扫描gcno文件,获得没有调用到的程序中探针函数的位置信息,即可以获得相应代码的数量和位置信息,从而并生成第二覆盖信息。
S26,将所述第一覆盖信息和所述第二覆盖信息合并,计算获得最终覆盖率结果。
所述最终覆盖率结果是指反映软件测试真实的代码覆盖率。请结合参见图4,其为获得最终覆盖率结果的原理图,由于第一覆盖信息中包含了已运行的程序中代码的相关覆盖信息,第二覆盖信息中包含了没有运行的程序中代码的相关信息,由第一覆盖信息和第二覆盖信息合并汇总才能得到真实的代码覆盖率。
例如,假设一个软件中包含10个文件,而每个文件包含1000段代码,在测试过程中,由于程序冗长耗时过久而仅运行了5个文件的程序代码,假设运行的这5个文件中,每个文件均只覆盖了500段代码。
如果按照现有的计算方法,则:
覆盖率=覆盖的有效代码行/所有覆盖到的源文件的有效代码行之和
=5*500/5*1000=50%
可见,由于未将没有运行的5个文件考虑在内,因而得出的覆盖率是不准确的。而如果按照本发明的计算方法,则:
覆盖率=覆盖的有效代码行/所有源文件的有效代码行之和
=5*500/10*1000=25%
显然由于本发明将已经运行的程序和未运行的程序都考虑在计算范围内,可以更客观更准确地反映测试结果。
本发明另提出一种覆盖率测试系统,请参见图5,其包括编译模块51、记录模块52、第一覆盖信息生成模块53、第二覆盖信息生成模块54以及合并模块55。记录模块52与编译模块51相连,第一覆盖信息生成模块53和第二覆盖信息生成模块54均与记录模块52连接,合并模块55分别与第一覆盖信息生成模块53和第二覆盖信息生成模块54相连。
进行测试时,首先由编译模块51对源代码进行编译,并在每一段代码中均插入探针函数。编译过程中,可以去除源代码中空行、注释、括号行、声明语句等无效、非逻辑的代码行。
编译过程中,记录模块52会记录下所有探针函数的位置信息,并将其写入一个以.gcno结尾的文件(即第一文件)。探针函数的位置关系表现为一个树状的结构。
编译完成后,便开始执行程序。在程序运行过程中,一段代码被执行后,对应的探针函数便会有计数,从而便能计算出已运行程序中代码的覆盖信息记录模块52还会记录下这个已运行程序中代码的覆盖信息,并写入一个以.gcda结尾的文件(即第二文件)。
其中,记录模块52记录已运行探针函数的计数信息(也即生成gcda文件)可以采用两种方式:
(1)在程序运行正常退出时,对已经运行的程序中探针函数的计数信息进行记录。程序运行正常退出也称为优雅退出,这种方式适合支持优雅退出的程序,即程序优雅退出时,将已运行的覆盖信息写入gcda文件中。
(2)运行程序过程中,定时对已经运行的程序中探针函数的计数信息进行记录。基于有些程序不支持优雅退出(如后台服务类程序),而且优雅退出后程序的重新启动往往较慢,所以也可以采用这种动态方式来对覆盖信息进行记录。
具体的实现方式可以是:利用动态库预加载的特性,在记录模块52中注册一个调用函数和一个信号处理函数,然后在程序运行过程中,定时(当然也可以在需要的时候)向调用函数发送一个调用信号,从而调用函数会调用处理函数获取已运行的代码的计数信息,从而获得已经运行的程序中代码的覆盖信息,并写入gcda文件中。而每次调用信号处理函数而获取的代码计数信息,都会累加写入gcda文件中。
程序运行结束后(此时所执行的程序可能是软件的所有程序,也可能是软件的一部分程序),第一覆盖信息生成模块53会根据已经运行的程序中探针函数的位置信息以及相应探针函数的计数信息,生成第一覆盖信息。所述的第一覆盖信息是指已运行的程序中代码的相关覆盖信息,如已运行程序中代码的覆盖率结果、运行的代码的数量位置、未运行代码的数量位置等。具体为:第一覆盖信息生成模块53通过扫描gcno文件可以获得已经运行的程序中探针函数的位置信息,也即获得了已经运行的程序中代码段的总数。通过扫描gcda文件可以获得已经运行的程序中代码的计数信息,即哪些代码运行过,哪些代码没有运行过。从而通过扫描gcno文件和gcda文件所得到的信息便能生成第一覆盖信息。
第二覆盖信息生成模块54会根据没有调用到的程序中探针函数的位置信息,生成第二覆盖信息。所述第二覆盖信息是指没有运行的程序中代码的相关信息,如这部分代码的覆盖率(为0),代码的数量位置等。具体为:第二覆盖信息生成模块54通过扫描gcno文件,可以获得没有调用到的程序中探针函数的位置信息,即可以获得相应代码的数量和位置信息,从而并生成第二覆盖信息。
最后,合并模块55将第一覆盖信息生成模块53和第二覆盖信息生成模块54输出的第一覆盖信息和第二覆盖信息进行汇总合并,并计算出最终覆盖率结果。
本发明将测试过程中已经运行的程序和没有运行的程序都考虑在计算范围内,不受测试数据变化的影响,即使在测试软件没有完全运行的情况下,也可以准确客观地反映出程序代码的真实覆盖率。此外,本发明可以在程序运行过程中对探针函数的动态计数,支持覆盖率数据的动态生成,同样适用于后台服务类程序的测试。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容作出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
Claims (13)
1.一种覆盖率测试方法,其特征在于,包括:
编译源代码,在每一段代码中均插入探针函数;
记录所有探针函数的位置信息;
运行程序,记录探针函数的计数信息,其中,在程序中注册调用函数和信号处理函数,并在运行程序过程中,在所述调用函数接收到调用信号后,调用所述处理函数获取已经运行的程序中代码的覆盖信息;
根据已经运行的程序中探针函数的位置信息以及相应探针函数的计数信息,生成第一覆盖信息;
根据没有调用到的程序中探针函数的位置信息,生成第二覆盖信息,所述第二覆盖信息是指没有运行的程序中代码的相关信息;
将所述第一覆盖信息和所述第二覆盖信息合并,计算获得最终覆盖率结果。
2.如权利要求1所述的覆盖率测试方法,其特征在于,还包括:
运行程序过程中,定时对已经运行的程序中探针函数的计数信息进行记录,并获取已经运行的程序中代码的覆盖信息。
3.如权利要求2所述的覆盖率测试方法,其特征在于,所述注册调用函数和信号处理函数的步骤包括:利用动态库预加载的特性注册所述注册调用函数和所述信号处理函数。
4.如权利要求1所述的覆盖率测试方法,其特征在于,在程序运行正常退出时,对已经运行的程序中探针函数的计数信息进行记录。
5.如权利要求1所述的覆盖率测试方法,其特征在于,还包括:
将探针函数的位置信息写入第一文件;
根据已经运行的程序中探针函数的位置信息以及相应探针函数的计数信息,获得已经运行的程序中代码覆盖信息,并写入第二文件;
所述根据已经运行的程序中探针函数的位置信息以及相应探针函数的计数信息,生成第一覆盖信息的步骤包括:扫描所述第一文件获得已经运行的程序中探针函数的位置信息,扫描所述第二文件获得已经运行的程序中探针函数的计数信息,并根据已经运行的程序中探针函数的位置信息以及相应探针函数的计数信息,生成第一覆盖信息。
6.如权利要求5所述的覆盖率测试方法,其特征在于,所述根据没有调用到的程序中探针函数的位置信息,生成第二覆盖信息的步骤包括:
扫描所述第一文件,获得没有调用到的程序中探针函数的位置信息,并生成第二覆盖信息。
7.如权利要求1所述的覆盖率测试方法,其特征在于,所述编译源代码的步骤还包括:去除源代码中空行、注释、括号行、声明语句等无效、非逻辑的代码行。
8.一种覆盖率测试系统,其特征在于,包括:
编译模块,用于编译源代码,并在每一段代码中均插入探针函数;
记录模块,用于记录所有探针函数的位置信息,以及记录探针函数的计数信息,其中,在程序中注册调用函数和信号处理函数,并在运行程序过程中,在所述调用函数接收到调用信号后,调用所述处理函数获取已经运行的程序中代码的覆盖信息;
第一覆盖信息生成模块,用于根据已经运行的程序中探针函数的位置信息以及相应探针函数的计数信息,生成第一覆盖信息;
第二覆盖信息生成模块,用于根据没有调用到的程序中探针函数的位置信息,生成第二覆盖信息,所述第二覆盖信息是指没有运行的程序中代码的相关信息;
合并模块,用于将所述第一覆盖信息和所述第二覆盖信息合并,计算获得最终覆盖率结果。
9.如权利要求8所述的覆盖率测试系统,其特征在于,所述记录模块在运行程序过程中,定时对已经运行的程序中探针函数的计数信息进行记录。
10.如权利要求8所述的覆盖率测试系统,其特征在于,所述记录模块在程序运行正常退出时,对已经运行的程序中探针函数的计数信息进行记录。
11.如权利要求8所述的覆盖率测试系统,其特征在于,
所述记录模块将探针函数的位置信息写入第一文件,以及根据已经运行的程序中探针函数的位置信息以及相应探针函数的计数信息,获得已经运行的程序中代码覆盖信息,并写入第二文件;
所述第一覆盖信息生成模块通过扫描所述第一文件获得已经运行的程序中探针函数的位置信息,通过扫描所述第二文件获得已经运行的程序中探针函数的计数信息,并根据已经运行的程序中探针函数的位置信息以及相应探针函数的计数信息,生成第一覆盖信息。
12.如权利要求11所述的覆盖率测试系统,其特征在于,所述第二覆盖信息生成模块通过扫描所述第一文件,获得没有调用到的程序中探针函数的位置信息,并生成第二覆盖信息。
13.如权利要求8所述的覆盖率测试系统,其特征在于,所述编译模块在编译源代码时,去除源代码中空行、注释、括号行、声明语句等无效、非逻辑的代码行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210369615.2A CN103699476B (zh) | 2012-09-27 | 2012-09-27 | 覆盖率测试方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210369615.2A CN103699476B (zh) | 2012-09-27 | 2012-09-27 | 覆盖率测试方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103699476A CN103699476A (zh) | 2014-04-02 |
CN103699476B true CN103699476B (zh) | 2018-07-27 |
Family
ID=50361012
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210369615.2A Active CN103699476B (zh) | 2012-09-27 | 2012-09-27 | 覆盖率测试方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103699476B (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104063326A (zh) * | 2014-07-14 | 2014-09-24 | 上海零一拼装信息技术有限公司 | 一种用于软件测试数据分析的示波器及方法 |
CN105468505B (zh) * | 2014-08-12 | 2018-12-28 | 腾讯科技(深圳)有限公司 | 覆盖率测试方法及覆盖率测试装置 |
CN106155897B (zh) * | 2015-04-16 | 2020-12-08 | 腾讯科技(深圳)有限公司 | 一种业务处理方法及装置 |
CN105005645B (zh) * | 2015-06-30 | 2018-10-02 | 浪潮(北京)电子信息产业有限公司 | 一种覆盖率的统计方法及装置 |
CN106708721B (zh) * | 2015-11-13 | 2020-08-14 | 阿里巴巴集团控股有限公司 | 代码覆盖测试的实现方法和装置 |
CN105573915B (zh) * | 2015-12-16 | 2019-07-05 | 北京奇虎科技有限公司 | 一种基于代码覆盖率的测试方法和装置 |
CN105930271B (zh) * | 2016-04-21 | 2019-06-04 | 惠州Tcl移动通信有限公司 | 一种Java程序运行代码覆盖率的测试方法及系统 |
EP3497574A4 (en) | 2016-08-09 | 2020-05-13 | Sealights Technologies Ltd. | SYSTEM AND METHOD FOR THE CONTINUOUS EXAMINATION AND PROVISION OF SOFTWARE |
CN106326124A (zh) * | 2016-08-25 | 2017-01-11 | 网易(杭州)网络有限公司 | 覆盖率检测方法、装置和设备 |
CN108664389B (zh) * | 2017-03-31 | 2023-03-31 | 腾讯科技(深圳)有限公司 | 一种测试方法、装置及终端 |
US11086759B2 (en) | 2018-09-27 | 2021-08-10 | SeaLights Technologies LTD | System and method for probe injection for code coverage |
CN109460357B (zh) * | 2018-10-19 | 2021-10-29 | 北京新能源汽车股份有限公司 | 一种代码覆盖率的测试方法、装置和设备 |
CN110704303B (zh) * | 2019-09-05 | 2021-07-20 | 深圳开源互联网安全技术有限公司 | 一种测试覆盖度信息的获取方法及装置 |
CN110580226B (zh) * | 2019-09-23 | 2021-09-14 | 上海创景信息科技有限公司 | 操作系统级程序的目标码覆盖率测试方法、系统及介质 |
US11573885B1 (en) | 2019-09-26 | 2023-02-07 | SeaLights Technologies LTD | System and method for test selection according to test impact analytics |
CN110990265B (zh) * | 2019-11-12 | 2023-10-03 | 苏州洞察云信息技术有限公司 | 一种覆盖率确定方法、装置及存储介质 |
CN111090586B (zh) * | 2019-12-09 | 2024-02-09 | 广州品唯软件有限公司 | 代码覆盖率数据文件的上报方法、装置和计算机设备 |
CN111026665B (zh) * | 2019-12-09 | 2023-02-28 | 建信金融科技有限责任公司 | 测试范围分析方法、装置及设备 |
CN111221737B (zh) * | 2020-01-09 | 2023-11-14 | 苏州洞察云信息技术有限公司 | 一种覆盖率确定方法、装置及存储介质 |
CN111290943A (zh) * | 2020-01-13 | 2020-06-16 | 北京三快在线科技有限公司 | 代码覆盖率处理方法、装置、服务器及存储介质 |
CN113297064A (zh) * | 2020-07-29 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 代码覆盖率测试方法、系统、设备及存储介质 |
CN112214414B (zh) * | 2020-10-29 | 2024-05-17 | 平安银行股份有限公司 | 基于自动化测试的覆盖率处理方法、装置、设备及介质 |
CN112597008A (zh) * | 2020-12-15 | 2021-04-02 | 平安普惠企业管理有限公司 | 基于网页代码测试的功能点标记方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1885273A (zh) * | 2005-06-21 | 2006-12-27 | 华为技术有限公司 | 一种逻辑测试的功能覆盖率分析方法 |
CN101561777A (zh) * | 2008-04-14 | 2009-10-21 | 中兴通讯股份有限公司 | 一种实现覆盖率测试的系统和方法 |
CN102419731A (zh) * | 2011-12-08 | 2012-04-18 | 北京控制工程研究所 | C语言嵌入式软件插桩及动态测试覆盖率信息提取方法 |
-
2012
- 2012-09-27 CN CN201210369615.2A patent/CN103699476B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1885273A (zh) * | 2005-06-21 | 2006-12-27 | 华为技术有限公司 | 一种逻辑测试的功能覆盖率分析方法 |
CN101561777A (zh) * | 2008-04-14 | 2009-10-21 | 中兴通讯股份有限公司 | 一种实现覆盖率测试的系统和方法 |
CN102419731A (zh) * | 2011-12-08 | 2012-04-18 | 北京控制工程研究所 | C语言嵌入式软件插桩及动态测试覆盖率信息提取方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103699476A (zh) | 2014-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103699476B (zh) | 覆盖率测试方法及系统 | |
CN110059009B (zh) | 用于测试代码文件的方法和装置 | |
JP5430570B2 (ja) | システムコールカバレッジ基準による試験スイート削減のための方法 | |
CN105787367B (zh) | 一种软件更新的补丁安全性检测方法及系统 | |
CN107111544B (zh) | 生产诊断中的历史控制流可视化 | |
US8645924B2 (en) | Lossless path reduction for efficient symbolic execution and automatic test generation | |
CN109446107B (zh) | 一种源代码检测方法及装置、电子设备 | |
CN109871326A (zh) | 一种脚本录制的方法和装置 | |
US9836379B2 (en) | Method and system for generating a memory trace of a program code executable on a programmable target | |
CN102414668A (zh) | 二进制软件分析 | |
CN104850411B (zh) | 存储系统基准评测程序生成方法及装置 | |
CN102567200A (zh) | 基于函数调用图的并行化安全漏洞检测方法 | |
JP6342129B2 (ja) | 混合モードプログラムのソースコードエラー位置検出装置及び方法 | |
CN103218297B (zh) | 测试数据的筛选方法及装置 | |
Ball et al. | Using paths to measure, explain, and enhance program behavior | |
Xu et al. | Melton: a practical and precise memory leak detection tool for C programs | |
US9274925B2 (en) | Programmable symbolic execution based dynamic checker | |
CN106529304A (zh) | 一种安卓应用并发漏洞检测系统 | |
US6678884B1 (en) | Method for determining the status of variables during the execution of optimized code | |
CN103365772B (zh) | 软件测试自动评价装置以及方法 | |
CN110609703A (zh) | 性能检测工具实现方法、装置、可读存储介质及终端设备 | |
CN105468530B (zh) | 一种基于有限状态机的程序错误检测方法及系统 | |
KR102117905B1 (ko) | 신뢰성 테스트 결과 관리 데이터 자동 생성 방법 및 신뢰성 테스트 결과 관리 데이터 자동 생성 장치 | |
US20110239197A1 (en) | Instance-based field affinity optimization | |
CN108229903A (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 |