CN108519945A - 覆盖率测试方法、装置及存储设备 - Google Patents
覆盖率测试方法、装置及存储设备 Download PDFInfo
- Publication number
- CN108519945A CN108519945A CN201810237218.7A CN201810237218A CN108519945A CN 108519945 A CN108519945 A CN 108519945A CN 201810237218 A CN201810237218 A CN 201810237218A CN 108519945 A CN108519945 A CN 108519945A
- Authority
- CN
- China
- Prior art keywords
- code
- coverage
- row
- edition
- version
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
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
技术领域
本发明实施例涉及软件测试技术领域,特别是涉及一种覆盖率测试方法、装置及存储设备。
背景技术
覆盖率是软件测试中的一种度量,其描述程序中代码被执行的比例和程度。覆盖率测试是一种有效发现问题的手段,通过对代码覆盖率进行分析,可以快速定位到哪些代码是没有运行的,从而构造相应的测试用例来覆盖这些代码,以发现软件设计中存在的缺陷和错误。
目前,软件代码覆盖率测试广泛使用的是gcov工具(一款代码覆盖率检测工具),它通过编译阶段,在当前版本代码中插入探针函数(也称插桩,用来标识代码的运行次数),来记录代码是否运行,并根据记录的运行信息分析出当前版本代码的覆盖情况。
测试时,首先将探针函数的位置信息记录在一个文件中,通常将该位置信息记录在以.gcno结尾的文件中,后面简称为gcno文件。
在程序运行过程中,对代码的覆盖信息进行统计,即运行过的代码,相应的探针函数便会计数,最后将统计的覆盖信息写入一个文件中,通常将该覆盖信息记录在以.gcda结尾的文件中,后面简称为gcda文件。
将gcno文件和gcda文件置于同一目录下,测试结束时,如图1所示,采用gcov工具从gcno文件和gcda文件中收集和汇总代码的覆盖率信息,产出当前版本的覆盖率报告。
上述覆盖率检测工具只能得到单个版本的覆盖率信息,但是,在实际测试过程中,由于开发人员在不断地对应用程序进行漏洞修复、需求开发,这是一个不断迭代的过程,使得同一应用程序往往会存在多个版本,单个版本的覆盖率情况对我们的意义并不大,从产品管理的过程来看,更希望能够拿到整个测试过程中应用程序的整体的覆盖率信息。
发明内容
本发明实施例提供了一种覆盖率测试方法、装置及存储设备,能够得到应用程序的整体覆盖率。
本发明实施例提供的覆盖率测试方法,包括:
获取测试应用程序的第一版本代码得到的第一覆盖信息文件,以及获取测试所述应用程序的第二版本代码得到的第二覆盖信息文件,所述第一覆盖信息文件中包括所述第一版本代码的代码覆盖行,所述第二覆盖信息文件中包括所述第二版本代码的代码覆盖行;
对比所述第一版本代码和所述第二版本代码,得到所述第一版本代码与所述第二版本代码的代码差异信息;
根据所述代码差异信息将所述第一版本代码的代码覆盖行映射至所述第二版本代码,得到所述第二版本代码的历史覆盖行;
根据所述第二版本代码的历史覆盖行和所述第二版本代码的代码覆盖行,计算所述应用程序的整体覆盖率。
本发明实施例提供的覆盖率测试装置,包括:
获取单元,用于获取测试应用程序的第一版本代码得到的第一覆盖信息文件,以及获取测试所述应用程序的第二版本代码得到的第二覆盖信息文件,所述第一覆盖信息文件中包括所述第一版本代码的代码覆盖行,所述第二覆盖信息文件中包括所述第二版本代码的代码覆盖行;
对比单元,用于对比所述第一版本代码和所述第二版本代码,得到所述第一版本代码与所述第二版本代码的代码差异信息;
映射单元,用于根据所述代码差异信息将所述第一版本代码的代码覆盖行映射至所述第二版本代码,得到所述第二版本代码的历史覆盖行;
第一计算单元,用于根据所述第二版本代码的历史覆盖行和所述第二版本代码的代码覆盖行,计算所述应用程序的整体覆盖率。
本发明实施例还提供了一种存储设备,所述存储设备用于储存多条指令,所述指令适于由处理器加载并执行本发明实施例所提供的覆盖率测试方法。
本发明实施例中,在获取测试应用程序的多个版本得到的覆盖信息文件之后,会根据多个版本之间的代码差异信息将多个版本的覆盖信息进行整合,即根据所述代码差异信息将应用程序的第一版本代码的代码覆盖行,映射至应用程序的第二版本代码,得到第二版本代码的历史覆盖行,对第二版本代码的历史覆盖行和第二版本代码的代码覆盖行进行计算,即可得到应用程序的整体覆盖率,对应用程序的整体覆盖率信息进行分析,可以为应用程序的版本迭代提供强有力的支持。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是现有技术中测试单个版本的代码覆盖率的方法示意图。
图2a是本发明实施例提供的覆盖率测试方法的应用场景示意图。
图2b是本发明实施例提供的覆盖率测试方法的另一应用场景示意图。
图3是本发明实施例提供的覆盖率测试方法的流程示意图。
图4是本发明实施例提供的覆盖率测试方法的另一流程示意图。
图5是本发明实施例提供的覆盖率测试方法的又一流程示意图。
图6是本发明实施例提供的整体覆盖率的测试方法示意图。
图7是本发明实施例提供的差异覆盖率的测试方法示意图。
图8是本发明实施例提供的覆盖率测试装置的结构示意图。
图9是本发明实施例提供的覆盖率测试装置的另一结构示意图。
图10是本发明实施例所提供的服务器的结构示意图。
具体实施方式
请参照图式,其中相同的组件符号代表相同的组件,本申请的原理是以实施在一适当的运算环境中来举例说明。以下的说明是基于所例示的本申请具体实施例,其不应被视为限制本申请未在此详述的其它具体实施例。
在以下的说明中,本申请的具体实施例将参考由一部或多部计算机所执行的步骤及符号来说明,除非另有述明。因此,这些步骤及操作将有数次提到由计算机执行,本文所指的计算机执行包括了由代表了以一结构化型式中的数据的电子信号的计算机处理单元的操作。此操作转换该数据或将其维持在该计算机的内存系统中的位置处,其可重新配置或另外以本领域测试人员所熟知的方式来改变该计算机的运作。该数据所维持的数据结构为该内存的实体位置,其具有由该数据格式所定义的特定特性。但是,本申请原理以上述文字来说明,其并不代表为一种限制,本领域测试人员将可了解到以下所述的多种步骤及操作亦可实施在硬件当中。
本文所使用的术语“模块”可看做为在该运算系统上执行的软件对象。本文所述的不同组件、模块、引擎及服务可看做为在该运算系统上的实施对象。而本文所述的装置及方法可以以软件的方式进行实施,当然也可在硬件上进行实施,均在本申请保护范围之内。
本申请中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或模块的过程、方法、系统、产品或设备没有限定于已列出的步骤或模块,而是某些实施例还包括没有列出的步骤或模块,或某些实施例还包括对于这些过程、方法、产品或设备固有的其它步骤或模块。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
本发明实施例提供了一种覆盖率测试方法、装置及存储介质,该覆盖率测试方法的执行主体可以是本发明实施例提供的覆盖率测试装置,该覆盖率测试装置可以采用硬件或者软件的方式实现。在一个具体的实施例中,该覆盖率测试装置可以是服务器,该服务器可以指集成了多个服务器(比如:中转服务器、网页web服务器以及研发管理RDM服务器)功能的服务器,或者该服务器也可以指一个服务器系统,该服务器系统中可以包括:中转服务器、网页web服务器以及研发管理RDM服务器。
以该服务器为集成了多个服务器功能的服务器为例,请参阅图2a,图2a为本申请实施例提供的覆盖率测试方法的应用场景示意图,开发人员可以将编写的应用程序APP的各个版本的源代码存储在服务器中,比如,开发人员在编写出某APP的第一版本的源代码之后,将第一版本的源代码存储在服务器中,该第一版本的源代码即为该APP的第一版本代码,服务器将该第一版本代码编译后发送给测试设备进行测试,从测试设备获取测试第一版本代码得到的第一覆盖信息文件,对第一覆盖信息文件进行分析,如果发现该第一版本代码存在缺陷,则对该第一版本代码进行修改,得到第二版本的源代码,该第二版本的源代码即为应用程序的第二版本代码,同样,将该第二版本代码编译后发送给测试设备进行测试,从测试设备获取测试第二版本代码得到的第二覆盖信息文件,所述第一覆盖信息文件中包括所述第一版本代码的代码覆盖行(比如,覆盖的行号),所述第二覆盖信息文件中包括所述第二版本代码的代码覆盖行(比如,覆盖的行号)。
在得到该APP的不同版本的覆盖信息文件之后,服务器可以对比所述第一版本代码和所述第二版本代码,得到所述第一版本代码与所述第二版本代码的代码差异信息(比如存在差异的行号),根据所述代码差异信息将所述第一版本代码的代码覆盖行映射至所述第二版本代码,得到所述第二版本代码的历史覆盖行(比如,得到第一版本代码中覆盖的行号对应在第二版本代码中的行号),根据所述第二版本代码的历史覆盖行和所述第二版本代码的代码覆盖行,计算所述应用程序的整体覆盖率;比如服务器可以将所述第二版本代码的历史覆盖行的行数(根据行号可得)和所述第二版本代码的代码覆盖行的行数(根据行号可得)相加,将相加的结果与所述第二版本代码的有效代码行的行数的比值作为所述APP的整体覆盖率,对该APP的整体覆盖率信息进行分析,可以为该APP的版本迭代提供强有力的支持。
以该服务器为服务器系统为例,请参阅图2b,图2b为本申请实施例提供的覆盖率测试方法的另一应用场景示意图,在该场景中,开发人员可以将编写好的APP的各个版本的源代码存储在RDM服务器中,比如,开发人员在编写出某APP的第一版本的源代码之后,可以将第一版本的源代码存储在RDM服务器中,该第一版本的源代码即为该APP的第一版本代码;当需要对该APP的第一版本代码进行测试时,RDM服务器可以对第一版本代码进行编译,生成第一版本代码对应的gcno文件和编译结果,将第一版本代码的编译结果通过web服务器和中转服务器发送给测试设备(测试设备可以包括多个,可以发送给任意一个测试设备)进行测试,测试之后,测试设备将测试第一版本代码得到的第一覆盖信息文件通过中转服务器发送给web服务器;开发人员可以在web服务器中查看第一覆盖信息文件,对第一覆盖信息文件进行分析,如果发现该第一版本代码存在缺陷,则对该第一版本代码进行修改,得到第二版本的源代码,该第二版本的源代码即为应用程序的第二版本代码,第二版本代码同样可以存储RDM服务器中;同样,RDM服务器可以对第二版本代码进行编译,生成第二版本代码对应的gcno文件和编译结果,将第二版本代码的编译结果通过web服务器和中转服务器发送给测试设备进行测试,测试之后,测试设备将测试第二版本代码得到的第二覆盖信息文件通过中转服务器发送给web服务器,所述第一覆盖信息文件中包括所述第一版本代码的代码覆盖行(比如,覆盖的行号),所述第二覆盖信息文件中包括所述第二版本代码的代码覆盖行(比如,覆盖的行号)。
在得到该APP的不同版本的覆盖信息文件之后,web服务器可以对比所述第一版本代码和所述第二版本代码,得到所述第一版本代码与所述第二版本代码的代码差异信息(比如存在差异的行号),根据所述代码差异信息将所述第一版本代码的代码覆盖行映射至所述第二版本代码,得到所述第二版本代码的历史覆盖行(比如,得到第一版本代码中覆盖的行号对应在第二版本代码中的行号),根据所述第二版本代码的历史覆盖行和所述第二版本代码的代码覆盖行,计算所述应用程序的整体覆盖率;比如web服务器可以将所述第二版本代码的历史覆盖行的行数(根据行号可得)和所述第二版本代码的代码覆盖行的行数(根据行号可得)相加,将相加的结果与所述第二版本代码的有效代码行的行数(根据RDM服务器中存储的第二版本代码对应的gcno文件可得)的比值作为所述APP的整体覆盖率,对该APP的整体覆盖率信息进行分析,可以为该APP的版本迭代提供强有力的支持。
以下分别进行详细说明。
本实施例将从覆盖率测试装置的角度进行描述,该覆盖率测试装置可以是服务器,如图3所示,本实施例的方法的具体流程可以如下:
步骤S201、获取测试应用程序的第一版本代码得到的第一覆盖信息文件,以及获取测试所述应用程序的第二版本代码得到的第二覆盖信息文件,所述第一覆盖信息文件中包括所述第一版本代码的代码覆盖行,所述第二覆盖信息文件中包括所述第二版本代码的代码覆盖行。
应用程序的各版本代码,通常是由开发人员编写的,开发人员可以将编写的应用程序的各版本代码存储在服务器中。
通常,在开发某个APP时,开发人员首先编写出该APP的第一版本的源代码,即第一版本代码,将第一版本代码存储在服务器中。测试人员需要对第一版本代码进行测试,测试人员可以通过测试设备向服务器发送下载请求,下载请求中可以包括需要测试的应用程序的名称、版本号等信息。服务器在接收到下载请求之后,可以对第一版本代码进行编译,比如可以将第一版本代码编译成二进制可执行代码,并去除无效代码行和非逻辑代码行,比如去除空行、注释、括号行、声明语句等,得到第一版本代码的有效代码行。比如,第一版本代码的可执行代码共有15行,其中,有效代码行为2、3、4、5、6以及8、9、10、11、12行,共10行。另外,在对第一版本代码进行编译的过程中,可以在第一版本代码中插入探针函数,并将探针函数的位置信息记录在gcno文件中,这里所记载的探针函数的位置信息,可以用第一版本代码的有效代码行的行号表示,即探针函数在有效代码行处;这里所述的探针函数具有计数功能,当探针函数所在的代码行运行一次后,该探针函数便自动计数一次,也即表示该行代码被覆盖。编译之后,服务器可以将第一版本代码的编译结果发送给测试设备,以由测试人员在测试设备上利用所设计的测试用例对所述编译结果进行测试,测试结束后,生成第一覆盖信息文件,服务器从测试设备获取第一覆盖信息文件。
第一覆盖信息文件中,包括第一版本代码的代码覆盖行,即第一版本代码的有效代码行中被执行到的代码行,在上面的例子中,例如,2、3、4行可以为代码覆盖行。另外,第一覆盖信息文件中还可以包括其他信息,例如:应用程序的名称、版本号,测试该版本代码的测试设备的标识信息(例如测试设备的广告标识符),测试该版本代码的测试人员的标识信息(例如测试人员的姓名),测试时间等信息。
开发人员可以对第一版本代码的gcno文件及第一覆盖信息文件进行分析,得到第一版本代码的代码覆盖率,以及第一版本代码的有效代码行中没有执行到的代码行,开发人员可以根据分析结果对第一版本代码进行修改,得到该APP的第二版本代码,同样,服务器可以对第二版本代码进行编译,比如可以将第二版本代码编译成二进制可执行代码,并去除无效代码行和非逻辑代码行,比如去除空行、注释、括号行、声明语句等,得到第二版本代码的有效代码行。比如,在上面的例子中,在第一版本代码的第2行之前,新增了5行,得到第二版本代码,则第二版本代码中共有20行,其中,2、3、4、5、6、7、8、9、10、11以及13、14、15、16、17行为有效代码行,共15行。另外,在对第二版本代码进行编译的过程中,可以在第二版本代码中插入探针函数,并将探针函数的位置信息记录在gcno文件中,这里所记载的探针函数的位置信息,可以用第二版本代码的有效代码行的行号表示,即探针函数在有效代码行处;这里所述的探针函数具有计数功能,当探针函数所在的代码行运行一次后,该探针函数便自动计数一次,也即表示该行代码被覆盖。编译之后,服务器可以将第二版本代码的编译结果发送给测试设备,以由测试人员在测试设备上利用所设计的测试用例对所述编译结果进行测试,测试结束后,生成第二覆盖信息文件,服务器从测试设备获取第二覆盖信息文件。
第二覆盖信息文件中,包括第二版本代码的代码覆盖行,即第二版本代码的有效代码行中被执行到的代码行,比如,在上面的例子中,第4、5行为代码覆盖行。另外,第二覆盖信息文件中还可以包括其他信息,例如:应用程序的名称、版本号,测试该版本代码的测试设备的标识信息(例如测试设备的广告标识符),测试该版本代码的测试人员的标识信息(例如测试人员的姓名),测试时间等信息。
比如,在开发APP1时,开发人员首先编写出APP1的第一版本代码1.1,当测试人员需要对1.1版本进行测试时,服务器可以对1.1版本进行编译,编译之后,将编译结果发送给测试设备进行测试,测试之后,从测试设备获取1.1版本的覆盖信息文件APP1 1.1.txt;开发人员对APP1 1.1.txt进行分析之后,对1.1版本进行了修改,得到1.2版本,对1.2版本编译之后,将编译结果发送给测试设备进行测试,测试之后,从测试设备获取1.2版本的覆盖信息文件APP1 1.2.txt。
本实施例中,第二版本代码可以指应用程序的当前版本代码,即最新版代码,第一版本代码可以指当前版本代码的上一版代码。比如,开发人员针对某个应用程序先后编写出了三版代码,版本一、版本二和版本三,其中,版本二为修改版本一得到的,版本三为修改版本二得到的,则第二版本代码可以是版本三,第一版本代码可以是版本二。
步骤S202、对比所述第一版本代码和所述第二版本代码,得到所述第一版本代码与所述第二版本代码的代码差异信息。
具体地,在得到第一覆盖信息文件和第二覆盖信息文件之后,服务器可以根据应用程序的名称及版本号从自身的存储中调取所述第一版本代码和所述第二版本代码,采用预设比较工具(比如,diff工具)对所述第一版本代码和所述第二版本代码进行解析,得到所述第一版本代码与所述第二版本代码的代码差异信息,比如,可以得到差异代码行及差异代码行的行号等信息。在上面的例子中,第一版本代码和第二版本代码的差异代码行即为2、3、4、5、6行。
步骤S203、根据所述代码差异信息将所述第一版本代码的代码覆盖行映射至所述第二版本代码,得到所述第二版本代码的历史覆盖行。
由于第二版本代码是通过修改第一版本代码得到的,因此,相同的内容在不同的版本中,可能具有不同的行号。具体地,可以根据所述代码差异信息,找出所述第一版本代码的代码覆盖行(行号)对应在所述第二版本代码中的行号,得到所述第二版本代码的历史覆盖行。比如,在上面的例子中,第一版本代码的代码覆盖行为2、3、4行,第二版本代码为在第一版本代码的第2行之前新增了5行代码得到的,则第一版本代码的代码覆盖行2、3、4映射至第二版本代码,得到的所述第二版本代码的历史覆盖行为7、8、9行。
步骤S204、根据所述第二版本代码的历史覆盖行和所述第二版本代码的代码覆盖行,计算所述应用程序的整体覆盖率。
具体地,可以合并所述第二版本代码的历史覆盖行和所述第二版本代码的代码覆盖行,得到所述应用程序的整体覆盖行,将所述应用程序的整体覆盖行与所述第二版本代码的有效代码行的比值作为所述应用程序的整体覆盖率。
比如,在上面的例子中,第二版本代码的历史覆盖行为7、8、9行,第二版本代码的代码覆盖行为4、5行,则该应用程序的整体覆盖行为4、5、7、8、9行,共5行,第二版本代码的有效代码行为20行,则该应用程序的整体覆盖率为5/20,即25%。
另外,还可以根据所述代码差异信息及所述第二版本代码的代码覆盖行,计算所述应用程序的差异覆盖率。差异覆盖率等于覆盖的差异代码行与差异代码行的总行数的比值。比如,在上面的例子中,第一版本代码与第二版本代码的差异代码行为2、3、4、5、6行,共5行,第二版本代码的代码覆盖行为4、5行,则该应用程序的差异覆盖率为2/5,即40%。
在得到每个版本的覆盖信息文件之后,还可以根据每个版本的gcno文件和覆盖信息文件,计算每个版本的代码覆盖率,每个版本的代码覆盖率为该版本覆盖的代码行数与该版本的有效代码行的行数的比值。比如,在上面的例子中,第一版本代码的代码覆盖率为3/15,即20%;第二版本代码的代码覆盖率为2/20,即10%。
本实施例中,同一应用程序的不同版本,可以由相同或不同的测试人员在相同或不同的测试设备上进行测试,测试生成的覆盖率文件中包括测试对应版本的测试人员的标识信息和测试对应版本的测试设备的标识信息,因此,服务器可以根据测试人员的标识信息获取每个测试人员测得的覆盖信息文件,根据根据每个测试人员测得的覆盖信息文件计算对应测试人员的测试覆盖率。每个测试人员的测试覆盖率为:该测试人员测试的所有代码覆盖行行数之和与该测试人员测试的所有有效代码行行数之和的比值。另外,服务器还可以根据测试设备的标识信息获得每个测试设备生成的覆盖信息文件,根据每个测试设备生成的覆盖信息文件计算对应测试设备的测试覆盖率。每个测试设备的测试覆盖率为:该测试设备上测试的所有代码覆盖行行数之和与该测试设备上测试的所有有效代码行行数之和的比值。
比如,服务器获得的覆盖信息文件中,有两个覆盖信息文件中包含测试人员1的标识信息,即这两个覆盖信息文件是测试人员1测试得到的,第一个覆盖信息文件中的代码覆盖行为5行,第一个覆盖信息文件是测试APP2的1.3版本得到的,APP2的1.3版本的有效代码行为8行,第二个覆盖信息文件中的代码覆盖行为7行,第二个覆盖信息文件是测试APP2的2.3版本得到的,APP2的2.3版本的有效代码行为15行,则测试人员1的测试覆盖率为:(5+7)/(8+15),即52%。
比如,服务器获得的覆盖信息文件中,有两个覆盖信息文件中包含测试设备1的标识信息,即这两个覆盖信息文件是测试设备1测试生成的,第一个覆盖信息文件中的代码覆盖行为4行,第一个覆盖信息文件是测试APP2的3.1版本得到的,APP2的3.1版本的有效代码行为10行,第二个覆盖信息文件中的代码覆盖行为6行,第二个覆盖信息文件是测试APP2的3.3版本得到的,APP2的3.3版本的有效代码行为20行,则测试设备1的测试覆盖率为:(4+6)/(10+20),即33%。
在多测试设备、多人合作的版本迭代测试场景中,测试人员的测试覆盖率以及测试设备的测试覆盖率,能够在一定的程度上说明测试用例设计和测试任务分配的合理性,可以为测试工作的改善提供参考依据。
另外,服务器还可以根据得到的上述各个覆盖率测试数据,生成覆盖率测试报告并展示,覆盖率测试报告中,可以包括应用程序的整体覆盖率、差异覆盖率,各个测试人员的测试覆盖率、各个测试设备的测试覆盖率等等。
进一步地,服务器还可以接收用户的查询请求,根据查询请求生成对应的覆盖率测试报告并展示;比如,当用户要查询某个测试人员的测试覆盖率时,查询请求中可以包含该测试人员的标识信息,服务器根据该测试人员的标识信息调取对应的覆盖信息文件,生成该测试人员的测试覆盖率报告。再比如,当用户要查询某个测试设备的测试覆盖率时,查询请求中可以包含该测试设备的标识信息,服务器根据该测试设备的标识信息调取对应的覆盖信息文件,生成该测试设备的测试覆盖率报告。
本发明实施例中,在获取应用程序的多个版本的覆盖信息文件之后,会根据多个版本之间的代码差异信息将多个版本的覆盖信息进行整合,即根据所述代码差异信息将应用程序的第一版本代码的代码覆盖行,映射至应用程序的第二版本代码,得到第二版本代码的历史覆盖行,对第二版本代码的历史覆盖行和第二版本代码的代码覆盖行进行计算,即可得到应用程序的整体覆盖率,对应用程序的整体覆盖率信息进行分析,可以为应用程序的版本迭代提供强有力的支持。
上述实施例所描述的方法,以下将举例作进一步详细说明。如图4所示,本实施例的覆盖率测试方法的具体流程可以如下:
步骤S301、获取测试应用程序的第一版本代码得到的第一覆盖信息文件,以及获取测试所述应用程序的第二版本代码得到的第二覆盖信息文件,所述第一覆盖信息文件中包括所述第一版本代码的代码覆盖行,所述第二覆盖信息文件中包括所述第二版本代码的代码覆盖行。
具体实现中,在开发人员编写好应用程序的第一版本代码,并将第一版本代码存储在服务器中之后,服务器可以对应用程序的第一版本代码进行编译,并将编译结果发送给测试设备进行测试,从测试设备获取测试第一版本代码得到的第一覆盖信息文件。
第一覆盖信息文件中,包括第一版本代码的代码覆盖行,即第一版本代码的有效代码行中被执行到的代码行。另外,第一覆盖信息文件中还可以包括其他信息,例如:应用程序的名称、版本号,测试该版本代码的测试设备的标识信息(例如测试设备的广告标识符),测试该版本代码的测试人员的标识信息(例如测试人员的姓名),测试时间等信息。
开发人员可以对编译第一版本代码得到的gcno文件及测试第一版本代码得到的第一覆盖信息文件进行分析,得到第一版本代码的代码覆盖率,以及第一版本代码的有效代码行中没有执行到的代码行,开发人员可以根据分析结果对第一版本代码进行修改,得到该应用程序的第二版本代码,并将第二版本代码存储在服务器中。服务器可以对应用程序的第二版本代码进行编译,并将编译结果发送给测试设备进行测试,从测试设备获取测试第二版本代码得到的第二覆盖信息文件。
第二覆盖信息文件中,包括第二版本代码的代码覆盖行,即第二版本代码的有效代码行中被执行到的代码行。另外,第二覆盖信息文件中还可以包括其他信息,例如:应用程序的名称、版本号,测试该版本代码的测试设备的标识信息(例如测试设备的广告标识符),测试该版本代码的测试人员的标识信息(例如测试人员的姓名),测试时间等信息。
步骤S302、对比所述第一版本代码和所述第二版本代码,得到所述第一版本代码与所述第二版本代码的代码差异信息。
具体地,在得到第一覆盖信息文件和第二覆盖信息文件之后,服务器可以根据应用程序的名称及版本号,从存储中调取所述第一版本代码和所述第二版本代码,采用预设比较工具(比如,diff工具)对所述第一版本代码和所述第二版本代码进行解析,得到所述第一版本代码与所述第二版本代码的代码差异信息,比如可以得到差异代码行及差异代码行的行号等信息。
步骤S303、根据所述代码差异信息,找出所述第一版本代码的代码覆盖行对应在所述第二版本代码中的行号,得到所述第二版本代码的历史覆盖行。
由于第二版本代码是通过修改第一版本代码得到的,因此,相同的内容在不同的版本中,可能具有不同的行号。具体地,可以根据所述代码差异信息,找出所述第一版本代码的代码覆盖行(行号)对应在所述第二版本代码中的行号,得到所述第二版本代码的历史覆盖行。
步骤S304、合并所述第二版本代码的历史覆盖行和所述第二版本代码的代码覆盖行,得到所述应用程序的整体覆盖行,将所述应用程序的整体覆盖行与所述第二版本代码的有效代码行的比值作为所述应用程序的整体覆盖率。
步骤S305、根据所述代码差异信息及所述第二版本代码的代码覆盖行,计算所述应用程序的差异覆盖率。
其中,差异覆盖率等于覆盖的差异代码行与差异代码行的总行数的比值。
步骤S306、生成覆盖率测试报告并展示。
具体地,生成的覆盖率测试报告可以用图、表等方式进行展示。
下面举例进行说明:
以在第一版本代码中新增若干行得到第二版本代码为例。比如,在开发APP3时,开发人员首先编写出APP3的第一版本代码1.1,而1.1版本编译之后共有10行,其中,3、4、5,7、8、9为有效代码行,即1.1版本的有效代码行为6行;在对1.1版本进程覆盖率测试之后,生成覆盖信息文件APP3 1.1.txt,APP31.1.txt中的代码覆盖行为7、8行;开发人员在看到测试结果之后,对1.1版本进行了修改,在1.1版本的第5行后新增了2行,得到1.2版,则1.2版的有效代码行为3、4、5、6、7、9、10、11,共8行,差异代码行为6、7行;对1.2版本进行覆盖率测试之后,生成覆盖信息文件APP3 1.2.txt,APP3 1.2.txt中的代码覆盖行为3、4、5、6行,则将1.1版本的代码覆盖行7、8行映射到1.2版本之后,得到的1.2版本的历史覆盖行为9、10行,则APP3的整体覆盖行为3、4、5、6、9、10行,共6行,则APP3的整体覆盖率为6/8,即75%,APP3的差异覆盖率为1/2,即50%。
以修改第一版本代码的若干行得到第二版本代码为例。比如,在开发APP4时,开发人员首先编写出APP4的第一版本代码1.1,而1.1版本代码编译之后有15行,其中,3、4、5、6、7、9、10、11、12、13为有效代码行,即1.1版本的有效代码共10行,在对1.1版本进程覆盖率测试之后,生成覆盖信息文件APP41.1.txt,APP4 1.1.txt中的代码覆盖行为3、4、5、6、9、10行;开发人员在看到测试结果之后,对1.1版本进行了修改,修改了1.1版本中的3、4行,得到1.2版,则1.2版的有效代码行仍为3、4、5、6、7、9、10、11、12、13行,差异代码行为3、4行;对1.2版进行覆盖率测试之后,生成覆盖信息文件APP4 1.2.txt,APP3 1.2.txt中的代码覆盖行为4、5行,则将1.1版本的代码覆盖行3、4、5、6、9、10行映射到1.2版本之后,得到的1.2版本的历史覆盖行为5、6、9、10行,则APP4的整体覆盖行为4、5、6、9、10行,共5行,则APP4的整体覆盖率为5/10,即50%,APP4的差异覆盖率为1/2,即50%。
以删除第一版本代码的若干行得到第二版本代码为例。比如,在开发APP5时,开发人员首先编写出APP5的第一版本代码1.1,而1.1版本代码编译之后有12行,其中,2、3、4、5、7、8、10、11、12行为有效代码行,即1.1版本的有效代码共9行,在对1.1版本进程覆盖率测试之后,生成覆盖信息文件APP5 1.1.txt,APP5 1.1.txt中的代码覆盖行为10、11行;开发人员在看到测试结果之后,对1.1版本进行了修改,删除了1.1版本中的7、8行,得到1.2版,则1.2版的有效代码行为2、3、4、5、8、9、10行;对1.2版进行覆盖率测试之后,生成覆盖信息文件APP5 1.2.txt,APP5 1.2.txt中的代码覆盖行为2、3行,则将1.1版本的代码覆盖行10、11行映射到1.2版本之后,得到的1.2版本的历史覆盖行为8、9行,则APP5的整体覆盖行为2、3、8、9行,共4行,则APP5的整体覆盖率为4/7,即57%,APP5的差异覆盖率为0。
本实施例中,在获取测试应用程序的多个版本得到的覆盖信息文件之后,会根据多个版本之间的代码差异信息将多个版本的覆盖信息进行整合,即根据所述代码差异信息将应用程序的第一版本代码的代码覆盖行,映射至应用程序的第二版本代码,得到第二版本代码的历史覆盖行,对第二版本代码的历史覆盖行和第二版本代码的代码覆盖行进行计算,即可得到应用程序的整体覆盖率,对差异代码信息及第二版本代码的代码覆盖行进行计算,可以得到差异覆盖率,对应用程序的整体覆盖率信息及差异覆盖率信息进行分析,可以为应用程序的版本迭代提供强有力的支持。
在一个具体的实施例中,本发明提供的覆盖率测试方法还可如图5所示,具体如下:
服务器在将应用程序的各版本代码发送给测试设备进行测试之后,服务器可以定时(例如每隔5秒)查询是否有测试设备上传覆盖信息文件(例如gcda文件),若有测试设备上传gcda文件,则获取该gcda文件并将该gcda文件存放在应用程序对应版本的目录下(比如,应用程序的第一版本代码的gcda文件存放在该应用程序的第一版本目录下,第二版本代码的gcda文件存放在该应用程序的第二版本目录下),gcda文件中,可以包括当前版本的覆盖代码行(行号)、测试当前版本的测试人员的标识信息、测试当前版本的测试设备的标识信息等;服务器可以调用gcvo工具根据当前版本的gcno文件和gcda文件生成覆盖率文件(也称info文件),并将覆盖率文件解析成字典,字典中以键值对(key-value)的方式存储了当前版本的覆盖代码行、可执行代码行、测试人员的标识信息、测试设备的标识信息等,服务器可以将字典中存储的信息转换成列表格式插入至产品(应用程序)记录表;插入之后,可以查询产品记录表中是否存在当前版本的上一版本的测试记录,若存在,则根据当前版本的测试记录和上一版本的测试记录,计算差异覆盖率,差异覆盖率等于覆盖的差异代码行与差异代码行的总行数的比值;进一步地,服务器还可以根据产品记录表计算个人覆盖率及设备覆盖率,即计算每个测试人员的测试覆盖率以及每个测试设备的测试覆盖率,测试人员的测试覆盖率为:该测试人员测试的所有代码覆盖行行数之和与该测试人员测试的所有有效代码行行数之和的比值;测试设备的测试覆盖率为:该测试设备上测试的所有代码覆盖行行数之和与该测试设备上测试的所有有效代码行行数之和的比值,服务器可以根据计算结果更新对应测试人员的测试覆盖率和/或对应测试设备的测试覆盖率;另外,服务器还可以查询产品记录表判断是否存在针对同一版本重复进行测试的记录,例如,同一版本由不同的测试人员或在不同的测试设备上进行了测试,若存在,则更新重复文件列表,以记录测试重复情况。
另外,在得到应用程序前后两个版本的覆盖率文件之后,服务器还可以根据得到的覆盖率文件计算应用程序的整体覆盖率,计算方法可如图6所示,具体如下:
服务器可以采用diff工具对第i版本代码与第i+1版本代码进行解析,得到两个版本代码的代码差异信息,读取存储的第i个版本的覆盖率文件和第i+1个版本的覆盖率文件,依次判断第i个版本中的每一个可执行代码行是否发生变更;将发生变更的可执行代码行的执行次数置为0,将未发生变更的可执行代码行的行号变更为新行号(即找出未发生变更的可执行代码行在第i+1版本中对应的行号);判断未发生变更的可执行代码行是否为覆盖代码行,若不是覆盖代码行,则可以将该可执行代码行的信息删除;若是覆盖代码行,则将该未发生变更的可执行代码行与第i+1版本中的覆盖代码行合并,即将该未发生变更的可执行代码在第i+1版本中的行号,与第i+1版本中的覆盖代码行的行号合并,得到整体覆盖行,将该整体覆盖行的行数与第i+1版本中的可执行代码行的行数的比值,作为该应用程序的整体覆盖率。
另外,在得到应用程序前后两个版本的覆盖率文件之后,服务器还可以根据得到的覆盖率文件计算应用程序的差异覆盖率,计算方法可如图7所示,具体如下:
服务器可以获取第i版本代码与第i+1版本代码的代码差异信息,读取第i+1版本的覆盖率文件,根据两个版本的代码差异信息对第i+1版本代码的可执行代码行逐行进行变更判断;若该可执行代码行不是变更代码行,则可以删除该可执行代码行;若该可执行代码为变更代码行,则保留该可执行代码行;根据第i+1版本代码的覆盖代码行以及第i+1版本代码的变更代码行,计算差异覆盖率,比如可以将第i+1版本代码中覆盖的变更代码行的行数与第i+1版本代码中所有变更代码行的行数的比值,作为差异覆盖率。
为了更好地实施以上方法,本发明实施例还提供一种覆盖率测试装置,如图8所示,该覆盖率测试装置包括:获取单元401、对比单元402、映射单元403及第一计算单元404,如下:
获取单元401,用于获取测试应用程序的第一版本代码得到的第一覆盖信息文件,以及获取测试所述应用程序的第二版本代码得到的第二覆盖信息文件,所述第一覆盖信息文件中包括所述第一版本代码的代码覆盖行,所述第二覆盖信息文件中包括所述第二版本代码的代码覆盖行;
对比单元402,用于对比所述第一版本代码和所述第二版本代码,得到所述第一版本代码与所述第二版本代码的代码差异信息;
映射单元403,用于根据所述代码差异信息将所述第一版本代码的代码覆盖行映射至所述第二版本代码,得到所述第二版本代码的历史覆盖行;
第一计算单元404,用于根据所述第二版本代码的历史覆盖行和所述第二版本代码的代码覆盖行,计算所述应用程序的整体覆盖率。
在一些实施例中,映射单元403具体用于:
根据所述代码差异信息,找出所述第一版本代码的代码覆盖行对应在所述第二版本代码中的行号,得到所述第二版本代码的历史覆盖行。
在一些实施例中,所述第一计算单元404具体用于:
合并所述第二版本代码的历史覆盖行和所述第二版本代码的代码覆盖行,得到所述应用程序的整体覆盖行,将所述应用程序的整体覆盖行与所述第二版本代码的有效代码行的比值作为所述应用程序的整体覆盖率。
在一些实施例中,如图9所示,所述装置还包括:
编译单元405,用于对所述第二版本代码进行编译,并去除无效代码行和非逻辑代码行,得到所述第二版本代码的有效代码行。
在一些实施例中,如图9所示,所述装置还包括:
第二计算单元406,用于根据所述代码差异信息及所述第二版本代码的代码覆盖行,计算所述应用程序的差异覆盖率。
在一些实施例中,所述第一覆盖信息文件中还包括测试所述第一版本代码的测试人员的标识信息,所述第二覆盖信息文件中还包括测试所述第二版本代码的测试人员的标识信息,如图9所示,所述装置还包括:
第三计算单元407,用于根据每个测试人员的标识信息获取对应测试人员的代码覆盖行,并根据对应测试人员的代码覆盖行计算对应测试人员的测试覆盖率。
在一些实施例中,所述第一覆盖信息文件中还包括测试所述第一版本代码的测试设备的标识信息,所述第二覆盖信息文件中还包括测试所述第二版本代码的测试设备的标识信息,如图9所示,所述装置还包括:
第四计算单元408,用于根据每个测试设备的标识信息获取对应测试设备的代码覆盖行,并根据对应测试设备的代码覆盖行计算对应测试设备的测试覆盖率。
需要说明的是,上述实施例提供的覆盖率测试装置在进行覆盖率测试时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的覆盖率测试装置与覆盖率测试方法属于同一构思,其具体实现过程详见方法实施例,此处不再赘述。
本实施例中,在获取单元获取测试应用程序的多个版本得到的覆盖信息文件之后,映射单元会根据多个版本之间的代码差异信息将多个版本的覆盖信息进行整合,即根据所述代码差异信息将应用程序的第一版本代码的代码覆盖行,映射至应用程序的第二版本代码,得到第二版本代码的历史覆盖行,第一计算单元对第二版本代码的历史覆盖行和第二版本代码的代码覆盖行进行计算,即可得到应用程序的整体覆盖率,对应用程序的整体覆盖率信息进行分析,可以为应用程序的版本迭代提供强有力的支持。
本发明实施例还提供一种服务器,如图10所示,其示出了本发明实施例所涉及的服务器的结构示意图,具体来讲:
该服务器可以包括一个或者一个以上处理核心的处理器501、一个或一个以上计算机可读存储介质的存储器502、射频(Radio Frequency,RF)电路503、电源505、输入单元505、以及显示单元506等部件。本领域技术人员可以理解,图10中示出的服务器结构并不构成对服务器的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器501是该服务器的控制中心,利用各种接口和线路连接整个服务器的各个部分,通过运行或执行存储在存储器502内的软件程序和/或模块,以及调用存储在存储器502内的数据,执行服务器的各种功能和处理数据,从而对服务器进行整体监控。可选的,处理器501可包括一个或多个处理核心;优选的,处理器501可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器501中。
存储器502可用于存储软件程序以及模块,处理器501通过运行存储在存储器502的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器502可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据服务器的使用所创建的数据等。此外,存储器502可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器502还可以包括存储器控制器,以提供处理器501对存储器502的访问。
RF电路503可用于收发信息过程中,信号的接收和发送,特别地,将基站的下行信息接收后,交由一个或者一个以上处理器501处理;另外,将涉及上行的数据发送给基站。通常,RF电路503包括但不限于天线、至少一个放大器、调谐器、一个或多个振荡器、用户身份模块(SIM)卡、收发信机、耦合器、低噪声放大器(LNA,Low Noise Amplifier)、双工器等。此外,RF电路503还可以通过无线通信与网络和其他设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(GSM,Global System of Mobilecommunication)、通用分组无线服务(GPRS,General Packet Radio Service)、码分多址(CDMA,Code Division Multiple Access)、宽带码分多址(WCDMA,Wideband CodeDivision Multiple Access)、长期演进(LTE,Long Term Evolution)、电子邮件、短消息服务(SMS,Short Messaging Service)等。
服务器还包括给各个部件供电的电源504(比如电池),优选的,电源504可以通过电源管理系统与处理器501逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源504还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该服务器还可包括输入单元505,该输入单元505可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,在一个具体的实施例中,输入单元505可包括触敏表面以及其他输入设备。触敏表面,也称为触摸显示屏或者触控板,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触敏表面上或在触敏表面附近的操作),并根据预先设定的程式驱动相应的连接服务器。可选的,触敏表面可包括触摸检测服务器和触摸控制器两个部分。其中,触摸检测服务器检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测服务器上接收触摸信息,并将它转换成触点坐标,再送给处理器501,并能接收处理器501发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触敏表面。除了触敏表面,输入单元505还可以包括其他输入设备。具体地,其他输入设备可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
该服务器还可包括显示单元506,该显示单元506可用于显示由用户输入的信息或提供给用户的信息以及服务器的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元506可包括显示面板,可选的,可以采用液晶显示器(LCD,Liquid Crystal Display)、有机发光二极管(OLED,Organic Light-EmittingDiode)等形式来配置显示面板。进一步的,触敏表面可覆盖显示面板,当触敏表面检测到在其上或附近的触摸操作后,传送给处理器501以确定触摸事件的类型,随后处理器501根据触摸事件的类型在显示面板上提供相应的视觉输出。虽然在图10中,触敏表面与显示面板是作为两个独立的部件来实现输入和输入功能,但是在某些实施例中,可以将触敏表面与显示面板集成而实现输入和输出功能。
尽管未示出,服务器还可以包括摄像头、蓝牙模块等,在此不再赘述。具体在本实施例中,服务器中的处理器501会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器502中,并由处理器501来运行存储在存储器502中的应用程序,从而实现各种功能,如下:
获取测试应用程序的第一版本代码得到的的第一覆盖信息文件,以及获取测试所述应用程序的第二版本代码得到的第二覆盖信息文件,所述第一覆盖信息文件中包括所述第一版本代码的代码覆盖行,所述第二覆盖信息文件中包括所述第二版本代码的代码覆盖行;
对比所述第一版本代码和所述第二版本代码,得到所述第一版本代码与所述第二版本代码的代码差异信息;
根据所述代码差异信息将所述第一版本代码的代码覆盖行映射至所述第二版本代码,得到所述第二版本代码的历史覆盖行;
根据所述第二版本代码的历史覆盖行和所述第二版本代码的代码覆盖行,计算所述应用程序的整体覆盖率。
一实施例中,在根据所述代码差异信息将所述第一版本代码的代码覆盖行映射至所述第二版本代码,得到所述第二版本代码的历史覆盖行时,处理器501具体用于执行以下步骤:
根据所述代码差异信息,找出所述第一版本代码的代码覆盖行对应在所述第二版本代码中的行号,得到所述第二版本代码的历史覆盖行。
一实施例中,在根据所述第二版本代码的历史覆盖行和所述第二版本代码的代码覆盖行,计算所述应用程序的整体覆盖率时,处理器501具体用于执行以下步骤:
合并所述第二版本代码的历史覆盖行和所述第二版本代码的代码覆盖行,得到所述应用程序的整体覆盖行,将所述应用程序的整体覆盖行与所述第二版本代码的有效代码行的比值作为所述应用程序的整体覆盖率。
一实施例中,在根据所述第二版本代码的历史覆盖行和所述第二版本代码的代码覆盖行,计算所述应用程序的整体覆盖率之前,处理器501还用于执行以下步骤:
对所述第二版本代码进行编译,并去除无效代码行和非逻辑代码行,得到所述第二版本代码的有效代码行。
一实施例中,处理器501还用于执行以下步骤:
根据所述代码差异信息及所述第二版本代码的代码覆盖行,计算所述应用程序的差异覆盖率。
一实施例中,所述第一覆盖信息文件中还包括测试所述第一版本代码的测试人员的标识信息,所述第二覆盖信息文件中还包括测试所述第二版本代码的测试人员的标识信息,处理器501还用于执行以下步骤:
根据每个测试人员的标识信息获取对应测试人员的代码覆盖行;
根据对应测试人员的代码覆盖行计算对应测试人员的测试覆盖率。
一实施例中,所述第一覆盖信息文件中还包括测试所述第一版本代码的测试设备的标识信息,所述第二覆盖信息文件中还包括测试所述第二版本代码的测试设备的标识信息,处理器501还用于执行以下步骤:
根据每个测试设备的标识信息获取对应测试设备的代码覆盖行;
根据对应测试设备的代码覆盖行计算对应测试设备的测试覆盖率。
一实施例中,处理器501还用于执行以下步骤:
生成覆盖率测试报告并展示。
本实施例的服务器,在获取测试应用程序的多个版本得到的覆盖信息文件之后,会根据多个版本之间的代码差异信息将多个版本的覆盖信息进行整合,即根据所述代码差异信息将应用程序的第一版本代码的代码覆盖行,映射至应用程序的第二版本代码,得到第二版本代码的历史覆盖行,对第二版本代码的历史覆盖行和第二版本代码的代码覆盖行进行计算,即可得到应用程序的整体覆盖率,对应用程序的整体覆盖率信息进行分析,可以为应用程序的版本迭代提供强有力的支持。
本申请实施例还提供一种存储设备,所述存储设备存储有计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行上述任一实施例中的会话信息处理方法,比如:获取测试应用程序的第一版本代码得到的第一覆盖信息文件,以及获取测试所述应用程序的第二版本代码得到的第二覆盖信息文件,所述第一覆盖信息文件中包括所述第一版本代码的代码覆盖行,所述第二覆盖信息文件中包括所述第二版本代码的代码覆盖行;对比所述第一版本代码和所述第二版本代码,得到所述第一版本代码与所述第二版本代码的代码差异信息;根据所述代码差异信息将所述第一版本代码的代码覆盖行映射至所述第二版本代码,得到所述第二版本代码的历史覆盖行;根据所述第二版本代码的历史覆盖行和所述第二版本代码的代码覆盖行,计算所述应用程序的整体覆盖率。
在本申请实施例中,存储设备可以是磁碟、光盘、只读存储器(Read Only Memory,ROM,)、或者随机存取记忆体(Random Access Memory,RAM)等。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
需要说明的是,对本申请实施例的覆盖率测试方法而言,本领域普通决策人员可以理解实现本申请实施例的覆盖率测试方法的全部或部分流程,是可以通过计算机程序来控制相关的硬件来完成,所述计算机程序可存储于一计算机可读取存储介质中,如存储在电子设备的存储器中,并被该电子设备内的至少一个处理器执行,在执行过程中可包括如覆盖率测试方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储器、随机存取记忆体等。
对本申请实施例的覆盖率测试装置而言,其各功能模块可以集成在一个处理芯片中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中,所述存储介质譬如为只读存储器,磁盘或光盘等。
以上对本申请实施例所提供的一种覆盖率测试方法、终端及存储设备进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (12)
1.一种覆盖率测试方法,其特征在于,包括:
获取测试应用程序的第一版本代码得到的第一覆盖信息文件,以及获取测试所述应用程序的第二版本代码得到的第二覆盖信息文件,所述第一覆盖信息文件中包括所述第一版本代码的代码覆盖行,所述第二覆盖信息文件中包括所述第二版本代码的代码覆盖行;
对比所述第一版本代码和所述第二版本代码,得到所述第一版本代码与所述第二版本代码的代码差异信息;
根据所述代码差异信息将所述第一版本代码的代码覆盖行映射至所述第二版本代码,得到所述第二版本代码的历史覆盖行;
根据所述第二版本代码的历史覆盖行和所述第二版本代码的代码覆盖行,计算所述应用程序的整体覆盖率。
2.根据权利要求1所述的覆盖率测试方法,其特征在于,根据所述代码差异信息将所述第一版本代码的代码覆盖行映射至所述第二版本代码,得到所述第二版本代码的历史覆盖行,包括:
根据所述代码差异信息,找出所述第一版本代码的代码覆盖行对应在所述第二版本代码中的行号,得到所述第二版本代码的历史覆盖行。
3.根据权利要求1所述的覆盖率测试方法,其特征在于,根据所述第二版本代码的历史覆盖行和所述第二版本代码的代码覆盖行,计算所述应用程序的整体覆盖率,包括:
合并所述第二版本代码的历史覆盖行和所述第二版本代码的代码覆盖行,得到所述应用程序的整体覆盖行,将所述应用程序的整体覆盖行与所述第二版本代码的有效代码行的比值作为所述应用程序的整体覆盖率。
4.根据权利要求3所述的覆盖率测试方法,其特征在于,在根据所述第二版本代码的历史覆盖行和所述第二版本代码的代码覆盖行,计算所述应用程序的整体覆盖率之前,所述方法还包括:
对所述第二版本代码进行编译,并去除无效代码行和非逻辑代码行,得到所述第二版本代码的有效代码行。
5.根据权利要求1至4任意一项所述的覆盖率测试方法,其特征在于,所述方法还包括:
根据所述代码差异信息及所述第二版本代码的代码覆盖行,计算所述应用程序的差异覆盖率。
6.根据权利要求1至4任意一项所述的覆盖率测试方法,其特征在于,所述第一覆盖信息文件中还包括测试所述第一版本代码的测试人员的标识信息,所述第二覆盖信息文件中还包括测试所述第二版本代码的测试人员的标识信息,所述方法还包括:
根据每个测试人员的标识信息获取对应测试人员的代码覆盖行;
根据对应测试人员的代码覆盖行计算对应测试人员的测试覆盖率。
7.根据权利要求1至4任意一项所述的覆盖率测试方法,其特征在于,所述第一覆盖信息文件中还包括测试所述第一版本代码的测试设备的标识信息,所述第二覆盖信息文件中还包括测试所述第二版本代码的测试设备的标识信息,所述方法还包括:
根据每个测试设备的标识信息获取对应测试设备的代码覆盖行;
根据对应测试设备的代码覆盖行计算对应测试设备的测试覆盖率。
8.根据权利要求1所述的覆盖率测试方法,其特征在于,所述方法还包括:
生成覆盖率测试报告并展示。
9.一种覆盖率测试装置,其特征在于,包括:
获取单元,用于获取测试应用程序的第一版本代码得到的第一覆盖信息文件,以及获取测试所述应用程序的第二版本代码得到的第二覆盖信息文件,所述第一覆盖信息文件中包括所述第一版本代码的代码覆盖行,所述第二覆盖信息文件中包括所述第二版本代码的代码覆盖行;
对比单元,用于对比所述第一版本代码和所述第二版本代码,得到所述第一版本代码与所述第二版本代码的代码差异信息;
映射单元,用于根据所述代码差异信息将所述第一版本代码的代码覆盖行映射至所述第二版本代码,得到所述第二版本代码的历史覆盖行;
第一计算单元,用于根据所述第二版本代码的历史覆盖行和所述第二版本代码的代码覆盖行,计算所述应用程序的整体覆盖率。
10.根据权利要求9所述的覆盖率测试装置,其特征在于,所述第一计算单元具体用于:
合并所述第二版本代码的历史覆盖行和所述第二版本代码的代码覆盖行,得到所述应用程序的整体覆盖行,将所述应用程序的整体覆盖行与所述第二版本代码的有效代码行的比值作为所述应用程序的整体覆盖率。
11.根据权利要求9或10所述的覆盖率测试装置,其特征在于,所述装置还包括:
第二计算单元,用于根据所述代码差异信息及所述第二版本代码的代码覆盖行,计算所述应用程序的差异覆盖率。
12.一种存储设备,其特征在于,所述存储设备用于储存多条指令,所述指令适于由处理器加载并执行如权利要求1至8任一项所述的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810237218.7A CN108519945A (zh) | 2018-03-21 | 2018-03-21 | 覆盖率测试方法、装置及存储设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810237218.7A CN108519945A (zh) | 2018-03-21 | 2018-03-21 | 覆盖率测试方法、装置及存储设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108519945A true CN108519945A (zh) | 2018-09-11 |
Family
ID=63432914
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810237218.7A Pending CN108519945A (zh) | 2018-03-21 | 2018-03-21 | 覆盖率测试方法、装置及存储设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108519945A (zh) |
Cited By (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109388566A (zh) * | 2018-09-27 | 2019-02-26 | 北京城市网邻信息技术有限公司 | 一种代码覆盖率分析方法、装置、设备及存储介质 |
CN109857631A (zh) * | 2018-11-02 | 2019-06-07 | 平安科技(深圳)有限公司 | 基于人工智能的代码覆盖率统计方法、装置、设备及存储介质 |
CN110221963A (zh) * | 2019-04-29 | 2019-09-10 | 北京三快在线科技有限公司 | 代码覆盖率获取方法及装置 |
CN110245073A (zh) * | 2019-05-21 | 2019-09-17 | 北京字节跳动网络技术有限公司 | 终端代码覆盖率监测方法、系统、介质和电子设备 |
CN110888811A (zh) * | 2019-11-21 | 2020-03-17 | 望海康信(北京)科技股份公司 | 代码覆盖率信息处理方法、装置、电子设备及介质 |
CN110888817A (zh) * | 2019-12-18 | 2020-03-17 | 广州唯品会研究院有限公司 | 代码覆盖率报告的生成方法、装置和可读存储介质 |
CN110928776A (zh) * | 2019-11-15 | 2020-03-27 | 武汉极意网络科技有限公司 | 一种基于lcov实现增量代码覆盖率的检测方法、装置及设备 |
CN110990265A (zh) * | 2019-11-12 | 2020-04-10 | 苏州洞察云信息技术有限公司 | 一种覆盖率确定方法、装置及存储介质 |
CN111008138A (zh) * | 2019-12-06 | 2020-04-14 | 广州品唯软件有限公司 | 代码覆盖率的处理方法、装置和计算机设备 |
CN111026647A (zh) * | 2019-11-21 | 2020-04-17 | 广州品唯软件有限公司 | 代码覆盖率的获取方法、装置、计算机设备和存储介质 |
CN111078563A (zh) * | 2019-12-18 | 2020-04-28 | 上海品顺信息科技有限公司 | 覆盖率数据处理方法、终端设备及计算机可读存储介质 |
CN111078549A (zh) * | 2019-12-06 | 2020-04-28 | 广州品唯软件有限公司 | 代码覆盖率的处理方法、装置和计算机设备 |
CN111124894A (zh) * | 2019-12-06 | 2020-05-08 | 广州品唯软件有限公司 | 代码覆盖率的处理方法、装置和计算机设备 |
CN111221737A (zh) * | 2020-01-09 | 2020-06-02 | 苏州洞察云信息技术有限公司 | 一种覆盖率确定方法、装置及存储介质 |
CN111290943A (zh) * | 2020-01-13 | 2020-06-16 | 北京三快在线科技有限公司 | 代码覆盖率处理方法、装置、服务器及存储介质 |
CN111444087A (zh) * | 2020-03-03 | 2020-07-24 | 北京齐尔布莱特科技有限公司 | 一种覆盖率数据处理方法、装置、计算设备及可读存储介质 |
CN111831549A (zh) * | 2020-06-04 | 2020-10-27 | 深圳木成林科技有限公司 | 增量代码覆盖率确定方法、装置、设备及存储介质 |
CN112035376A (zh) * | 2020-11-05 | 2020-12-04 | 四川科道芯国智能技术股份有限公司 | 一种生成覆盖率报告的方法、装置、设备及存储介质 |
WO2020244445A1 (zh) * | 2019-06-03 | 2020-12-10 | 深圳前海微众银行股份有限公司 | 一种覆盖信息获取方法及装置 |
CN112148590A (zh) * | 2020-08-27 | 2020-12-29 | 浙江大搜车融资租赁有限公司 | 一种代码覆盖率的确定方法、装置及设备 |
CN112181812A (zh) * | 2020-09-16 | 2021-01-05 | 北京三快在线科技有限公司 | 一种版本测试的方法及装置 |
CN112463620A (zh) * | 2020-12-03 | 2021-03-09 | 广州品唯软件有限公司 | 安卓软件集成测试中的覆盖率测试方法、装置 |
CN112732578A (zh) * | 2021-01-11 | 2021-04-30 | 北京字节跳动网络技术有限公司 | 一种代码性能评测方法及装置 |
CN114490424A (zh) * | 2022-02-24 | 2022-05-13 | 北京启明星辰信息安全技术有限公司 | 自动化测试方法及装置 |
CN114706749A (zh) * | 2022-03-03 | 2022-07-05 | 网宿科技股份有限公司 | 代码覆盖率的确定方法、装置、电子设备及存储介质 |
CN117349150A (zh) * | 2023-09-22 | 2024-01-05 | 乾升利信息技术(上海)有限公司 | 一种覆盖率数据处理方法、装置、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105988926A (zh) * | 2015-02-13 | 2016-10-05 | 腾讯科技(深圳)有限公司 | 多版本测试数据的处理方法和装置 |
CN106547698A (zh) * | 2016-11-30 | 2017-03-29 | 网易(杭州)网络有限公司 | 覆盖率数据的处理方法、装置和服务器 |
CN107480066A (zh) * | 2017-08-18 | 2017-12-15 | 网易(杭州)网络有限公司 | 代码覆盖率统计方法、装置、存储介质、处理器和终端 |
-
2018
- 2018-03-21 CN CN201810237218.7A patent/CN108519945A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105988926A (zh) * | 2015-02-13 | 2016-10-05 | 腾讯科技(深圳)有限公司 | 多版本测试数据的处理方法和装置 |
CN106547698A (zh) * | 2016-11-30 | 2017-03-29 | 网易(杭州)网络有限公司 | 覆盖率数据的处理方法、装置和服务器 |
CN107480066A (zh) * | 2017-08-18 | 2017-12-15 | 网易(杭州)网络有限公司 | 代码覆盖率统计方法、装置、存储介质、处理器和终端 |
Cited By (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109388566A (zh) * | 2018-09-27 | 2019-02-26 | 北京城市网邻信息技术有限公司 | 一种代码覆盖率分析方法、装置、设备及存储介质 |
CN109857631A (zh) * | 2018-11-02 | 2019-06-07 | 平安科技(深圳)有限公司 | 基于人工智能的代码覆盖率统计方法、装置、设备及存储介质 |
CN110221963A (zh) * | 2019-04-29 | 2019-09-10 | 北京三快在线科技有限公司 | 代码覆盖率获取方法及装置 |
CN110245073A (zh) * | 2019-05-21 | 2019-09-17 | 北京字节跳动网络技术有限公司 | 终端代码覆盖率监测方法、系统、介质和电子设备 |
WO2020244445A1 (zh) * | 2019-06-03 | 2020-12-10 | 深圳前海微众银行股份有限公司 | 一种覆盖信息获取方法及装置 |
CN110990265B (zh) * | 2019-11-12 | 2023-10-03 | 苏州洞察云信息技术有限公司 | 一种覆盖率确定方法、装置及存储介质 |
CN110990265A (zh) * | 2019-11-12 | 2020-04-10 | 苏州洞察云信息技术有限公司 | 一种覆盖率确定方法、装置及存储介质 |
CN110928776A (zh) * | 2019-11-15 | 2020-03-27 | 武汉极意网络科技有限公司 | 一种基于lcov实现增量代码覆盖率的检测方法、装置及设备 |
CN111026647A (zh) * | 2019-11-21 | 2020-04-17 | 广州品唯软件有限公司 | 代码覆盖率的获取方法、装置、计算机设备和存储介质 |
CN110888811A (zh) * | 2019-11-21 | 2020-03-17 | 望海康信(北京)科技股份公司 | 代码覆盖率信息处理方法、装置、电子设备及介质 |
CN111026647B (zh) * | 2019-11-21 | 2023-06-27 | 广州品唯软件有限公司 | 代码覆盖率的获取方法、装置、计算机设备和存储介质 |
CN110888811B (zh) * | 2019-11-21 | 2023-07-18 | 望海康信(北京)科技股份公司 | 代码覆盖率信息处理方法、装置、电子设备及介质 |
CN111008138A (zh) * | 2019-12-06 | 2020-04-14 | 广州品唯软件有限公司 | 代码覆盖率的处理方法、装置和计算机设备 |
CN111078549B (zh) * | 2019-12-06 | 2023-03-17 | 广州品唯软件有限公司 | 代码覆盖率的处理方法、装置和计算机设备 |
CN111124894A (zh) * | 2019-12-06 | 2020-05-08 | 广州品唯软件有限公司 | 代码覆盖率的处理方法、装置和计算机设备 |
CN111078549A (zh) * | 2019-12-06 | 2020-04-28 | 广州品唯软件有限公司 | 代码覆盖率的处理方法、装置和计算机设备 |
CN111008138B (zh) * | 2019-12-06 | 2023-03-17 | 广州品唯软件有限公司 | 代码覆盖率的处理方法、装置和计算机设备 |
CN110888817B (zh) * | 2019-12-18 | 2023-10-24 | 广州品唯软件有限公司 | 代码覆盖率报告的生成方法、装置和可读存储介质 |
CN110888817A (zh) * | 2019-12-18 | 2020-03-17 | 广州唯品会研究院有限公司 | 代码覆盖率报告的生成方法、装置和可读存储介质 |
CN111078563A (zh) * | 2019-12-18 | 2020-04-28 | 上海品顺信息科技有限公司 | 覆盖率数据处理方法、终端设备及计算机可读存储介质 |
CN111221737A (zh) * | 2020-01-09 | 2020-06-02 | 苏州洞察云信息技术有限公司 | 一种覆盖率确定方法、装置及存储介质 |
CN111290943A (zh) * | 2020-01-13 | 2020-06-16 | 北京三快在线科技有限公司 | 代码覆盖率处理方法、装置、服务器及存储介质 |
CN111444087A (zh) * | 2020-03-03 | 2020-07-24 | 北京齐尔布莱特科技有限公司 | 一种覆盖率数据处理方法、装置、计算设备及可读存储介质 |
CN111444087B (zh) * | 2020-03-03 | 2023-12-01 | 北京齐尔布莱特科技有限公司 | 一种覆盖率数据处理方法、装置、计算设备及可读存储介质 |
CN111831549A (zh) * | 2020-06-04 | 2020-10-27 | 深圳木成林科技有限公司 | 增量代码覆盖率确定方法、装置、设备及存储介质 |
CN112148590A (zh) * | 2020-08-27 | 2020-12-29 | 浙江大搜车融资租赁有限公司 | 一种代码覆盖率的确定方法、装置及设备 |
CN112148590B (zh) * | 2020-08-27 | 2022-11-04 | 浙江大搜车融资租赁有限公司 | 一种代码覆盖率的确定方法、装置及设备 |
CN112181812A (zh) * | 2020-09-16 | 2021-01-05 | 北京三快在线科技有限公司 | 一种版本测试的方法及装置 |
CN112035376A (zh) * | 2020-11-05 | 2020-12-04 | 四川科道芯国智能技术股份有限公司 | 一种生成覆盖率报告的方法、装置、设备及存储介质 |
CN112463620A (zh) * | 2020-12-03 | 2021-03-09 | 广州品唯软件有限公司 | 安卓软件集成测试中的覆盖率测试方法、装置 |
CN112463620B (zh) * | 2020-12-03 | 2024-09-17 | 广州品唯软件有限公司 | 安卓软件集成测试中的覆盖率测试方法、装置 |
CN112732578A (zh) * | 2021-01-11 | 2021-04-30 | 北京字节跳动网络技术有限公司 | 一种代码性能评测方法及装置 |
CN112732578B (zh) * | 2021-01-11 | 2024-01-23 | 北京字节跳动网络技术有限公司 | 一种代码性能评测方法及装置 |
CN114490424A (zh) * | 2022-02-24 | 2022-05-13 | 北京启明星辰信息安全技术有限公司 | 自动化测试方法及装置 |
CN114706749A (zh) * | 2022-03-03 | 2022-07-05 | 网宿科技股份有限公司 | 代码覆盖率的确定方法、装置、电子设备及存储介质 |
CN117349150A (zh) * | 2023-09-22 | 2024-01-05 | 乾升利信息技术(上海)有限公司 | 一种覆盖率数据处理方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108519945A (zh) | 覆盖率测试方法、装置及存储设备 | |
CN105404585B (zh) | 获取代码覆盖率的方法及装置 | |
CN110209568B (zh) | 覆盖率测试方法、装置及存储设备 | |
CN107038112B (zh) | 应用界面的调试方法及装置 | |
CN104850434B (zh) | 多媒体资源下载方法及装置 | |
CN107357725B (zh) | 应用测试方法及装置 | |
CN108512695A (zh) | 监控应用卡顿的方法及装置 | |
CN108536594A (zh) | 页面测试方法、装置及存储设备 | |
CN105320701B (zh) | 功能点测试实现方式的筛选方法、装置及终端 | |
CN108345543A (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN108932429A (zh) | 应用程序的分析方法、终端及存储介质 | |
US20150161390A1 (en) | Fast and accurate identification of message-based api calls in application binaries | |
CN106708734A (zh) | 软件异常检测方法及装置 | |
CN106708676A (zh) | 接口测试方法及装置 | |
CN107622200A (zh) | 应用程序的安全性检测方法及装置 | |
CN111931102A (zh) | 一种构建页面的方法、装置及系统 | |
CN108073495A (zh) | 应用程序崩溃原因的定位方法及装置 | |
CN106649126A (zh) | 一种对应用程序进行测试的方法和装置 | |
CN105847325A (zh) | 应用客户端的调试方法及装置 | |
CN107276602A (zh) | 射频干扰处理方法、装置、存储介质及终端 | |
CN106776301A (zh) | 子元素测试方法及装置 | |
CN115576600A (zh) | 基于代码变更的差异处理方法、装置、终端及存储介质 | |
CN108984374B (zh) | 一种数据库性能的测试方法和系统 | |
CN106708555B (zh) | 一种加载插件的方法和装置 | |
CN106681884B (zh) | 一种系统调用的监控方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180911 |