CN113051181A - 确定增量测试覆盖信息的方法、装置、设备和存储介质 - Google Patents
确定增量测试覆盖信息的方法、装置、设备和存储介质 Download PDFInfo
- Publication number
- CN113051181A CN113051181A CN202110486293.9A CN202110486293A CN113051181A CN 113051181 A CN113051181 A CN 113051181A CN 202110486293 A CN202110486293 A CN 202110486293A CN 113051181 A CN113051181 A CN 113051181A
- Authority
- CN
- China
- Prior art keywords
- code
- file
- information
- incremental
- version file
- 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
Images
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
-
- 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/368—Test management for test version control, e.g. updating test cases to a new software version
-
- 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/3692—Test management for test results analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Computer Security & Cryptography (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供了一种确定增量测试覆盖信息的方法、装置、设备和存储介质,该方法包括:确定目标代码版本文件相对原代码版本文件的增量代码信息;获得代码编辑编译器测试目标代码版本文件所得到的至少一个测试结果文件,至少一个测试结果文件为采用设定协议格式的文件;调用并运行文件解析程序,并通过文件解析程序从至少一个测试结果文件中解析出全量测试覆盖信息,文件解析程序为用于解析设定协议格式的文件的解析程序;通过文件解析程序依据增量代码信息以及全量测试覆盖信息,确定出目标代码版本文件中增量测试覆盖信息。本申请的方案可以获得软件版本文件中增量代码的测试覆盖信息。
Description
技术领域
本申请涉及测试技术领域,尤其涉及一种确定增量测试覆盖信息的方法、装置、设备和存储介质。
背景技术
为了保证开发出的软件的软件质量,需要对软件进行单元测试。而为了对测试情况进行评估,就需要软件测试的代码测试覆盖信息。
代码测试覆盖信息是评估代码测试好坏的一项重要依据。如,代码测试覆盖信息可以为代码测试覆盖率,表示软件的源代码被测试的比例或者程度由于软件版本会不断更新,而对于更新后的软件版本的测试,人们可能会更为关注新增代码的测试覆盖信息。因此,如何能够获得软件版本中新增代码的测试覆盖信息是本领域技术人员需要解决的技术问题。
发明内容
有鉴于此,本申请提供了一种确定增量测试覆盖信息的方法、装置、设备和存储介质,以实现获得软件版本文件中增量代码的测试覆盖信息。
为实现上述目的,本申请提供了如下技术方案:
一方面,本申请提供了一种确定增量测试覆盖信息的方法,包括:
确定待测试的目标代码版本文件以及原代码版本文件,所述目标代码版本文件为对所述原代码版本文件进行代码更新后得到的;
确定所述目标代码版本文件相对所述原代码版本文件的增量代码信息,所述增量代码信息包括:至少一条增量代码的信息;
获得代码编辑编译器测试所述目标代码版本文件所得到的至少一个测试结果文件,所述至少一个测试结果文件为采用设定协议格式的文件;
调用并运行文件解析程序,并通过所述文件解析程序解析出所述至少一个测试结果文件中包含的全量测试覆盖信息,所述全量测试覆盖信息包括所述目标代码版本文件中被测试的至少一条已测试代码的信息,所述文件解析程序为用于解析所述设定协议格式的文件的解析程序;
通过所述文件解析程序依据所述至少一条增量代码的信息以及所述全量测试覆盖信息中所述至少一条已测试代码的信息,确定出所述目标代码版本文件中增量代码的测试覆盖信息。
在一种可能的实现方式中,所述代码编辑编译器中集成有编译器,所述编译器中包括用于解析所述设定协议格式的文件的原始解析程序;
所述文件解析程序为通过在所述原始解析程序中增设增量覆盖子程序得到的程序;
所述通过所述文件解析程序依据所述至少一条增量代码的信息以及所述全量测试覆盖信息中所述至少一条已测试代码的信息,确定出所述目标代码版本文件中增量代码的测试覆盖信息,包括:
通过所述增量覆盖子程序依据所述至少一条增量代码的信息以及所述全量测试覆盖信息中所述至少一条已测试代码的信息,确定出所述目标代码版本文件中增量代码的测试覆盖信息。
在又一种可能的实现方式中,所述确定所述目标代码版本文件相对所述原代码版本文件的增量代码信息,包括:
调用比较程序比对所述目标代码版本文件与所述原代码版本文件,得到所述比较程序输出的代码变更信息,所述代码变更信息包括所述目标代码版本文件相对所述原代码版本文件存在差异的至少一条差异代码的信息;
从所述至少一条差异代码的信息中提取出属于增量代码的增量代码信息。
在又一种可能的实现方式中,所述确定待测试的目标代码版本文件以及原代码版本文件,包括:
获得待测试的目标代码版本文件的第一文件标识以及原代码版本文件的第二文件标识,以确定待测试的目标代码版本文件以及原代码版本文件;
所述调用比较程序比对所述目标代码版本文件与所述原代码版本文件,包括:
调用并运行增量分析程序,所述增量分析程序配置有配置文件,所述配置文件中配置有代码路径信息,所述代码路径信息用于指示各代码版本文件的统一存储路径;
通过所述增量分析程序调用所述比较程序,并将所述第一文件标识、第二文件标识和所述代码路径信息,均作为输入参数传输给所述比较程序,以使得所述比较程序基于所述代码路径信息,获得并比对所述第一文件标识对应的目标代码版本文件与所述第二文件标识对应的原代码版本文件,得到所述代码变更信息;
所述从所述至少一条差异代码的信息中提取出属于增量代码的增量代码信息,包括:
通过所述增量分析程序从所述至少一条差异代码的信息中提取出属于增量代码的增量代码信息。
又一方面,本申请还提供了一种确定增量测试覆盖信息的装置,包括:
文件确定装置,用于确定待测试的目标代码版本文件以及原代码版本文件,所述目标代码版本文件为对所述原代码版本文件进行代码更新后得到的;
增量代码确定单元,用于确定所述目标代码版本文件相对所述原代码版本文件的增量代码信息,所述增量代码信息包括:至少一条增量代码的信息;
测试结果获得单元,用于获得代码编辑编译器测试所述目标代码版本文件所得到的至少一个测试结果文件,所述至少一个测试结果文件为采用设定协议格式的文件;
全量覆盖确定单元,用于调用并运行文件解析程序,并通过所述文件解析程序解析出所述至少一个测试结果文件中包含的全量测试覆盖信息,所述全量测试覆盖信息包括所述目标代码版本文件中被测试的至少一条已测试代码的信息,所述文件解析程序为用于解析所述设定协议格式的文件的解析程序;
增量覆盖确定单元,用于通过所述文件解析程序依据所述至少一条增量代码的信息以及所述全量测试覆盖信息中所述至少一条已测试代码的信息,确定出所述目标代码版本文件中增量代码的测试覆盖信息。
又一方面,本申请还提供了一种计算机设备,包括存储器和处理器;
其中,所述存储器用于存储程序;
所述处理器用于执行所述程序,所述程序被执行时,具体用于实现如上任一项所述的确定增量测试覆盖信息的方法。
又一方面,本申请还提供了一种存储介质,用于存储程序,所述程序被执行时,用于实现如上任一项所述的确定增量测试覆盖信息的方法。
由以上内容可知,基于代码编辑编译器能够测试目标代码版本文件并能够输出包含全量测试覆盖信息的至少一个测试结果文件这一特性,本申请可以获得代码编辑编译器测试目标代码版本文件得到的至少一个测试结果文件。由于至少一个测试结果文件的文件格式为代码编辑编译器中设定协议格式,因此,通过调用并运行预置的支持解析该种设定协议格式文件的文件解析程序,便可以从该至少一个测试结果文件中解析出该目标代码版本文件的全量测试覆盖信息。在此基础上,确定出目标代码版本文件相对原代码版本文件的至少一条增量代码的信息,便可以结合至少一条增量代码的信息以及全量测试覆盖信息中被测试的各条代码的信息,确定出增量代码的测试覆盖信息,从而实现了利用代码编辑编译器测试得到的全量测试覆盖信息,较为便捷的确定出增量代码的测试覆盖信息。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1示出了本申请所适用的一种系统架构示意图;
图2示出了本申请实施例提供的确定增量测试覆盖信息的方法的一种流程示意图;
图3示出了本申请实施例提供的确定增量测试覆盖信息的方法的又一种流程示意图;
图4示出了本申请实施例提供的增量分析程序确定增量代码信息的一种原理示意图;
图5示出了本申请提供的确定增量测试覆盖信息的方法的一种实现原理框架示意图;
图6示出了本申请实施例提供的确定增量测试覆盖信息的方法应用于一具体应用场景的流程示意图;
图7示出了本申请实施例提供的文件解析程序在一具体应用场景中的功能模块组成示意图;
图8示出了本申请实施例提供的确定增量测试覆盖信息的装置的一种组成结构示意图;
图9示出了本申请实施例提供的计算机设备的一种组成结构示意图。
具体实施方式
本申请的方案适用于任意需要确定软件版本中增量代码被测试覆盖的测试覆盖信息的计算机设备或者多台计算机设备组成平台。
为了便于理解,下面先对本申请的方案所适用的系统组成架构进行说明。
在本申请中,确定增量测试覆盖信息的系统可以包括至少一台计算机设备,该至少一台计算机设备中运行有代码编辑编译器以及本申请中用于确定增量测试覆盖信息的主控程序,该主控程序可以为一个插件程序,还可以是独立程序,对此不加限制。
其中,该代码编辑编译器可以对软件版本文件进行单元测试,并得到单元测试相关的测试结果,如测试结果中至少包括软件版本文件中代码的全量测试覆盖信息,全量测试覆盖信息包括软件版本文件中被测试执行的各条代码的信息,如,文件代码在该软件版本文件中所属的具体文件的文件名以及行号等。
在本申请中,代码编辑编译器和增量确定程序可以运行于同一计算机设备或者平台,也可以是运行于不同计算机设备或者平台。
下面以一种情况为例说明,如图1所示,其示出了本申请的方案所适用的系统的一种组成结构示意图。
在图1所示的系统中包括至少一台计算机设备101组成的测试平台102。
该测试平台运行有代码编辑编译器和主控程序。
如,代码编辑编译器可以运行在测试平台的部分或者全部计算机设备中;
而主控程序可以运行在测试平台的某一台或者至少部分计算机设备中。
在一种可选方式中,本申请的测试平台还可以包括至少一台存储设备(图1中未示出),存储设备可以存储代码编辑编译器以及主控程序运行所产生的数据,如,存储设备可以存储代码编辑编译器对软件版本文件进行单元测试所得到的测试结果信息等,还可以存储主控程序确定增量覆盖信息过程中所产生的中间数据等。
该存储设备还可以用于存储测试平台所涉及到的各个软件版本的软件版本文件,软件版本文件包括至少一个代码文件,每个代码文件包括至少一条(或者说至少一行)代码。
本申请中存储设备存储各种数据的具体方式可以有多种可能。
如,在一种可能的实现方式中,该至少一台存储设备可以采用区块链形式来存储设备。
其中,区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层。
区块链底层平台可以包括用户管理、基础服务、智能合约以及运营监控等处理模块。其中,用户管理模块负责所有区块链参与者的身份信息管理,包括维护公私钥生成(账户管理)、密钥管理以及用户真实身份和区块链地址对应关系维护(权限管理)等,并且在授权的情况下,监管和审计某些真实身份的交易情况,提供风险控制的规则配置(风控审计);基础服务模块部署在所有区块链节点设备上,用来验证业务请求的有效性,并对有效请求完成共识后记录到存储上,对于一个新的业务请求,基础服务先对接口适配解析和鉴权处理(接口适配),然后通过共识算法将业务信息加密(共识管理),在加密之后完整一致的传输至共享账本上(网络通信),并进行记录存储;智能合约模块负责合约的注册发行以及合约触发和合约执行,开发人员可以通过某种编程语言定义合约逻辑,发布到区块链上(合约注册),根据合约条款的逻辑,调用密钥或者其它的事件触发执行,完成合约逻辑,同时还提供对合约升级注销的功能;运营监控模块主要负责产品发布过程中的部署、配置的修改、合约设置、云适配以及产品运行中的实时状态的可视化输出,例如:告警、监控网络情况、监控节点设备健康状态等。
可以理解的是,图1中代码编辑编译器和主控程序运行于同一测试平台为例说明,如果代码编辑编译器和主控程序运行不同平台,但是这两个平台之间可以通信也同样适用于本实施例。
下面结合流程图对本申请中确定增量测试覆盖信息的方法进行介绍。
如图2所示,其示出了本申请一种确定增量测试覆盖信息的方法的一种流程示意图,本实施例的方法可以应用于一台计算机设备或者多台计算机设备组成的测试平台。
本实施例的方法可以包括:
S201,确定待测试的目标代码版本文件以及原代码版本文件。
其中,目标代码版本文件为对原代码版本文件进行代码更新后得到的代码版本文件。其中,此处仅仅是为了便于区分,将需要进行单元测试的软件版本文件称为目标代码版本文件,而将目标代码版本文件之前的代码版本称为原代码版本文件。
其中,目标代码版本文件可以包括多行代码。在实际应用中,目标代码版本文件可以包括至少一个代码文件(也可以称为子代码文件),而每个代码文件中又分别包括一条或者多条(或者称为行)代码。类似的,原版本文件可以包括至少一个代码文件,且每个代码文件可以包括至少一条(或者称为行)代码。
在一种可能的情况中,测试平台可以获得用户输入的增量测试指令,该增量测试指令可以指示有待测试的目标代码版本文件以及该目标代码版本对应的原代码版本文件。
当然,在实际应用中,还可以是预先配置增量测试任务,该增量测试任务中配置有待测试的目标代码版本文件的信息以及原代码版本文件的信息。
S202,确定目标代码版本文件相对原代码版本文件的增量代码信息。
可以理解的是,由于目标代码版本文件为原代码版本文件经过版本更新后得到的代码文件,因此,目标代码版本文件会相对原代码版本文件存在代码更改以及新增,在本申请仅仅关注目标代码版本文件相对原代码版本文件新增的增量代码。
其中,增量代码信息包括:至少一条增量代码的信息。
如,增量代码的信息可以包括用于标识增量代码的标识信息。由于每条代码可以通过其所在的代码文件和行号进行标识,因此,增量代码的标识信息可以包括增量代码所属的代码文件的文件名和增量代码的行号。
在本申请中,确定两个代码版本文件之间的增量代码的相关信息的方式可以有多种,对此不加限制。
S203,获得代码编辑编译器测试目标代码版本文件所得到的至少一个测试结果文件。
在本申请中,代码编辑编译器至少能够对代码版本文件进行测试并输出测试得到的至少一个测试结果文件。在本申请中,代码编辑编译器测试目标代码版本文件是指对目标代码版本文件进行单元测试。
在代码编辑编译器对目标代码版本文件进行单元测试的过程中,涉及到对目标代码版本文件的编译以及执行相关的测试用例等,对此不加限制。
在本申请中,代码编辑编译器输出的至少一个测试结果文件中包含有全量测试覆盖信息。但是,由于代码编辑编译器一般都支持自身对应的设定协议格式的文件,使得该至少一个测试结果文件为采用设定协议格式的文件。
在一种可选方式中,在该步骤S203之前,还可以向代码编辑编译器发送测试命令,该测试命令用于指示该代码编辑编译器测试该目标代码版本文件,如,该测试命令可以指示有待测试的该目标代码版本文件的标识。相应的,代码编辑编译器响应该测试命令可以从基于目标代码版本文件的标识从代码目录中查询该目标代码版本文件的存储路径,依据该存储路径获得目标代码版本文件,并对目标代码版本文件进行单元测试,以得到测试结果文件。
可以理解的是,在一种实现方式中,为了使得代码编辑编译器输出测试得到的测试结果文件,可以在代码编辑编译器提供的配置界面中预先配置用于指示输出测试结果文件的选项。
如,仍以代码编辑编译器为Xcode为例说明,Xcode具有统一的用户界面设计,编码、测试、调试都在一个简单的窗口内完成。如果在Xcode的界面中对用于指示输出测试结果文件的选项“gather coverage for”进行了勾选,则在利用Xcode代码编辑编译器对代码文件进行单元测试之后,则会代码编辑编译器会输出测试得到的测试结果文件。
在又一种实现方式中,还可以是通过测试命令来指示代码编辑编译器输出测试结果文件。相应的,向代码编辑编译器发送测试命令还可以用于指示该代码编辑编译器输出该目标代码版本文件的测试结果文件。
S204,调用并运行文件解析程序,并通过文件解析程序解析出该至少一个测试结果文件中包含的全量测试覆盖信息。
其中,该全量测试覆盖信息包括目标代码版本文件中被测试的至少一条已测试代码的信息。为了便于区分,将目标代码版本文件中被测试到的代码称为已测试代码。基于全量测试覆盖信息可以确定目标代码版本文件中哪些代码被测试到,而哪些代码没有被测试到。
如,全量测试覆盖信息可以包括目标代码版本文件中被测试到的至少一条已测试代码的标识信息,如已测试代码所在的代码文件的文件名和已测试代码的行号等。
其中,文件解析程序为用于解析设定协议格式的文件的解析程序。
如,该文件解析程序为本申请的主控程序中预置的,且支持设定协议格式文件解析的程序。可以理解的是,由于至少一个测试结果文件为采用代码编辑编译器中设定协议格式的文件,因此,无法直接从测试结果文件中获得全量测试覆盖信息。为了能够获得全量测试覆盖信息,本申请中预置有文件解析程序,而该文件解析程序支持该种设定协议格式的文件的解析,基于此,通过调用并运行该文件解析程序可以从至少一个测试结果文件中解析出全量测试覆盖信息。
如,代码编辑编译器为非开源的代码编辑编译器,但是由于代码编辑编译器一般集成有开源的编译器,而开源的编译器会存在对代码编辑编译器输出的文件进行解析以及处理的解析程序,因此,可以基于该解析程序,生成具备该解析程序功能的文件解析程序,使得文件解析程序具备解析代码编辑编译器得到的测试结果文件。
S205,通过文件解析程序依据至少一条增量代码的信息以及所述全量测试覆盖信息中至少一条已测试代码的信息,确定出目标代码版本文件中增量代码的测试覆盖信息。
在本申请中,文件解析程序不仅可以解析出至少一个测试结果文件中包含的全量覆盖信息,还可以结合目标代码版本文件中已知的至少一条增量代码的信息,确定出该目标代码版本文件中增量代码的测试覆盖信息。
其中,增量代码的测试覆盖信息可以表征目标代码版本文件中的至少一条增量代码中被测试的情况。如,测试覆盖信息可以是该目标代码版本文件中至少一条增量代码中被测试的比例,即增量测试覆盖率。又如,增量代码的测试覆盖信息可以包括被测试到的增量代码所在的代码文件的文件名以及该增量代码的行号等。
如,在一种可能的实现方式中,确定出的增量代码的信息可以包括增量代码所属的代码文件的文件名以及该增量代码的行号。相应的,已测试代码的信息包括:已测试代码所属的代码文件的文件名和该已测试代码的行号。
在此基础上,该文件解析程序可以基于增量代码信息中各条增量代码所属代码文件的文件名和各条增量代码的行号,以及全量测试覆盖信息中各条已测试代码所属的代码文件的文件名和各条已测试代码的行号,分别确定各代码文件中增量代码的总数和被测试覆盖的增量代码的数量。然后,文件解析程序基于各代码文件中增量代码的总数以及被测试的增量代码的数量,确定增量代码的测试覆盖率(也称为增量测试覆盖率)。
举例说明,全量测试覆盖信息中记录的已测试代码包括:文件1中行号为1至20和行号为25到30的已测试代码,以及,文件2中行号为50至80的已测试代码。那么假设增量代码信息包括文件1中行号为18到行号21的增量代码,以及文件2中行号为50和51的已测试代码。
对比全量测试覆盖信息和增量代码信息可知,文件1中行号18到行号20的增量代码被测试到,且文件2中行号为50的代码被测试到,由此可知,被测试到的增量代码有2个,而增量代码的总数为6个,因此,增量测试覆盖率为2/6=33.33%。
在一种可能的实现方式中,为了使得文件解析程序能够更为准确和可靠的解析出至少一个测试结果文件中的全量覆盖信息,同时可以减少开发文件解析程序的复杂度,在代码编辑编译器中集成有编译器的情况下,如果该编译器中包括用于解析该设定协议格式的文件的原始解析程序,本申请可以在该原始解析程序的基础上进一步开发得到该文件解析程序。
在本申请中通过对原始解析程序进一步开发,使得得到的文件解析程序在具备该原始解析程序相应功能的基础上,还具备确定增量代码的测试覆盖信息。具体的,本申请可以在该原始解析程序中增设增量覆盖子程序,从而使得文件解析程序包括增量覆盖子程序。
相应的,在文件解析程序确定出全量覆盖信息之后,可以通过该增量覆盖子程序基于该全量覆盖信息以及已确定的增量代码信息,确定出该目标代码版本文件中增量代码的测试覆盖信息。其中,确定增量代码的测试覆盖信息可以参见前面相关介绍,在此不再赘述。
举例说明,如代码编辑编译器可以为Xcode,该Xcode中集成有llvm编译器,llvm是应用很广泛的一种开源编译器。Xcode在对代码文件进行单元测试之后,可以得到测试结果文件。而llvm编译器中具有原始解析程序llvm-cov,而llvm-cov能够解析测试结果文件,得到代码文件中被测试的全量覆盖信息。基于此,本申请可以在llvm-cov基础上进一步开发,在llvm-cov原有功能的基础上增加分析增量测试覆盖信息的分析代码,并将改进后的llvm-cov确定为文件解析程序。
在此基础上,基于改进后的llvm-cov可以对Xcode对目标代码版本文件单元测试后的测试结果文件进行解析,得到全量测试覆盖信息,并进一步结合全量测试覆盖信息和输入的增量代码信息,确定出增量测试覆盖信息。
由以上内容可知,本申请基于代码编辑编译器能够测试目标代码版本文件并能够输出包含全量测试覆盖信息的至少一个测试结果文件这一特性,在获得代码编辑编译器测试目标代码版本文件得到的至少一个测试结果文件之后,通过调用并运行预置文件解析程序可以解析设定协议格式的至少一个测试结果文件,并从该至少一个测试结果文件中获得该目标代码版本文件的全量测试覆盖信息。
在此基础上,确定出目标代码版本文件相对原代码版本文件的至少一条增量代码的信息,便可以结合该至少一条增量代码的信息以及全量测试覆盖信息中被测试的各条代码的信息,确定出增量代码的测试覆盖信息,从而实现了利用代码编辑编译器测试得到的全量测试覆盖信息,较为便捷的确定出增量代码的测试覆盖信息。
同时,本申请在利用代码编辑编译器能够对代码文件进行测试之后,通过预置的文件解析程序直接对代码编辑编译器测试得到的测试结果文件进行解析,便可以获得全量测试覆盖信息,无需再依赖代码编辑编译器对应的第三方库来生成特定文件,并在特定文件基础上进行非改动代码的剔除操作等,从而大大降低了确定增量代码测试覆盖信息的复杂度。
可以理解的是,确定目标代码版本文件与原版本代码文件之间的增量代码信息的实现方式可以有多种,为了便于理解,下面以一种可能的实现方式进行说明。
在一种可能的实现方式中,可以调用比较程序比对目标代码版本文件与原代码版本文件,得到该比较程序输出的代码变更信息。
如,该比较程序可以为代码管理工具中的比较程序,代码管理工具为用于管理不同版本的代码版本文件的程序,该代码管理工具可以运行于测试平台。例如,通过调用代码管理工具中的比较命令(diff命令)可以执行对目标代码版本文件与原代码版本文件的比较。
其中,代码变更信息包括目标代码版本文件相对原代码版本文件存在差异的至少一条差异代码的信息。如,差异代码的标识信息,例如差异代码所在代码文件的文件名以及差异代码的行号。
可以理解的是,差异代码可以是相对原代码版本文件存在新增或者修改等的代码,因此,差异代码除了包括增量代码之后,还可能包括其他变更的代码。相应的,还需要从该至少一条差异代码的信息中提取出属于增量代码的增量代码信息。
在一种可选方式中,本申请主控程序中还可以包括增量分析程序,通过该增量分析程序可以调用该比较程序。
下面以通过增量分析程序来确定增量代码信息的情况为例,对本申请确定增量测试覆盖信息的方法进行介绍。
如图3所示,其示出了本申请确定增量测试覆盖信息的方法的又一种流程示意图,本实施例的方法可以应用于测试平台,如,在测试平台中运行有主控程序,通过该主控程序可以实现确定增量测试覆盖信息的方法。
本实施例的方法可以包括:
S301,获得待测试的目标代码版本文件的第一文件标识以及目标代码版本文件对应的原代码版本文件的第二文件标识。
如,获得用户输入的增量测试指令,该增量测试指令可以指示有该目标代码版本文件的第一文件标识,以及目标代码版本文件的原代码文本文件的第二文件标识。
其中,目标代码版本文件的第一文件标识可以为文件名或者文件存储路径等能够唯一标识该目标代码版本文件的信息,类似的,第二文件标识可以为文件名或者文件存储路径等等。
相应的,依据该第一文件标识和第二文件标识可以分别确定待测试的目标代码版本文件和该原代码版本文件。
S302,调用并运行增量分析程序。
其中,该增量分析程序配置有配置文件,该配置文件中配置有代码路径信息,代码路径信息包括各代码版本文件的统一路径信息,通过该统一路径信息可以定位到存储所有代码版本文件的代码存储库。
S303,通过增量分析程序调用代码管理工具的比较程序,并将第一文件标识、第二文件标识和代码路径信息,均作为输入参数传输给该比较程序,以获得比较程序得到的代码变更信息。
该代码变更信息包括目标代码版本文件相对原代码版本文件存在差异的至少一条差异代码的信息。
其中,该代码管理工具为代码管理工具为用于管理不同版本的代码版本文件的程序。在该代码管理工具中包括用于比较不同代码版本之间差异的比较程序。需要说明的是,本实施例是以比较程序为代码管理工具中的比较程序为例说明。
在一种可能的实现方式中,增量分析程序配置的配置文件中还可以配置可供调用的代码管理工具的信息,通过该配置文件中配置的代码管理工具的信息可以确定该增量分析程序所需调用的是哪种代码管理工具以及调用地址等等。相应的,基于配置文件中代码管理工具的信息,可以调用配置文件中指示的代码管理工具对应的比较命令(diff命令)实现比较程序的调用。
如,代码管理工具可以分为SVN(subversion)和Git等,其中,SVN是一种集中式的代码管理工具,而Git是一种分布式的代码管理工具。相应的,增量分析程序的配置文件中可以配置使用SVN或者GIt代码管理工具的信息。
可以理解的是,代码管理工具中的比较程序基于代码路径信息,获得并比对第一文件标识对应的目标代码版本文件与所述第二文件标识对应的源版本文件,得到代码变更信息。如,基于代码路径信息所指示的存储路径,获取该第一文件标识和第二文件标识所指示的代码版本文件,然后对这两个代码版本文件进行比较操作。
S304,通过增量分析程序从该至少一条差异代码的信息中提取出属于增量代码的增量代码信息,并将增量代码信息存储到配置的输出路径对应的存储空间。
如,增量分析程序可以根据差异代码的信息,确定出标识属于新增代码的各条代码的信息,从而得到增量代码信息。
可以理解的是,将确定出的增量代码信息存储到配置的输出路径对应的存储空间为一种可选方式,其目的是为了便于后续文件解析程序可以直接从该输出路径对应的存储空间获取该增量代码信息。
在本申请中,该输出路径同样可以配置到该增量分析程序的配置文件中。
为了便于理解可以参见图4。图4示出了增量分析程序确定增量代码信息的一种原理示意图。
由图4可以看出,增量分析程序配置有配置文件,该配置文件中记录有代码路径信息(也可以称为工程根目录)、代码管理工具的信息,以及,文件的输出路径。
其中,代码路径信息可以包括涉及被测试的软件版本所属工程的路径,基于该代码路径信息可以查询到被测试的目标代码软件版本和原代码版本文件。
代码管理工具的信息中可以配置该增量分析程序支持的代码管理工具的信息,如,代码管理工具可以配置为GIt或者SVN,在图4中以配置的代码管理工具为Git为例,所以SVN对应分支为虚线。可以理解的是,通过配置文件可以灵活配置所需使用的代码管理工具,从而可以灵活切换所需使用的代码管理工具。
输出路径就是指需要增量代码信息所需输出到的地址路径。
在图4中主函数表示增量分析程序,主函数可以在测试平台中主控程序向其发送了目标代码版本文件和原代码版本文件的标识之后,调用Git工具中的diff命令,并将目标代码版本文件的标识和原代码版本文件的标识以及代码路径信息作为diff命令的输入参数。相应的,可以通过执行diff命令获得目标代码版本文件相对原代码版本文件的差异代码对应的代码文件的文件名和行号。相应的,在从差异代码的信息中提取出增量代码对应的文件名和行号之后,可以将各个增量代码的信息拼装为一个文件,从而按照配置文件中的该输出路径输出该文件。
在一种可选方式中,为了便于阅读和提高通用性,本申请还可以通过增量分析程序将增量代码信息转换为符合指定编辑语言对应的数据存储格式,并存储到该输出路径对应的存储空间。指定编辑语言也可以称为指定编程语言,如,该指定编辑语言对应的数据存储格式可以为JSON(JavaScript Object Notation,JS对象简谱)格式,JSON是一种轻量级的数据交换格式。
S305,向代码编辑编译器发送测试命令。
其中,测试命令用于指示有待测试的该目标代码版本文件的第一文件标识。
该代码编辑编译器响应于该测试命令,可以基于第一文件标识获得目标代码版本文件,然后测试该目标代码版本文件并输出目标代码版本文件的至少一个测试结果文件。
可以理解的是,以上步骤S302到S304与步骤S305的顺序并不限于图3所示,在实际应用中,可以在执行步骤S302到S304的同时,执行步骤S305,也可以是先执行步骤S305再执行步骤S302到S304。
S306,获得代码编辑编译器测试目标代码版本文件所得到的至少一个测试结果文件的文件存储地址。
在本实施例是以测试平台获得该至少一个测试结果文件的文件存储地址为例说明。
S307,调用并运行文件解析程序,并向该文件解析程序发送增量覆盖分析命令。
该增量覆盖分析命令可以携带有该至少一个测试结果文件的文件存储地址和该增量代码信息的输出路径。
可以理解的是,本实施例以向文件解析程序发送携带以上输出路径和文件存储地址的增量覆盖命令为例说明,但是可以理解的是,通过其他方式向文件解析程序传输该增量代码信息的输出路径以及该至少一个测试结果文件的文件存储地址也同样适用于本实施例。
如图5所示,其示出了本申请实施例确定增量代码的测试覆盖信息的一种实现原理框图。
由图5可以看出,增量分析程序确定出的增量代码信息以及代码编辑编译器测试目标代码版本文件得到的至少一个测试结果文件会被输入给文件解析程序。
文件解析程序基于增量代码信息和该至少一个测试结果文件会确定出目标代码版本文件的增量测试覆盖信息。
S308,通过文件解析程序依据至少一个测试结果文件的文件存储地址获得该至少一个测试结果文件,从该至少一个测试结果文件中解析出全量测试覆盖信息。
S309,通过文件解析程序从增量代码信息的输出路径对应的存储空间获得增量代码信息,并基于增量代码信息和全量测试覆盖信息,确定目标代码版本文件中增量代码的测试覆盖信息。
以上步骤S308和S309可以参见前面实施例的相关介绍,在此不再赘述。
在一种可选方式中,为了便于文件解析程序更为便捷的处理增量代码信息,该文件解析程序还可以自定义有数据的结构体形式。在此基础上,在文件解析程序获得增量代码信息之后,还可以通过文件解析程序将增量代码信息转换为该文件解析程序设定的结构体形式的数据。
如,在增量代码信息为符合指定编辑语言对应的数据存储格式的情况下,将增量代码信息由符合指定编辑语言对应的数据存储格式转换为设定的结构体形式的数据。
例如,文件解析程序中转换出的增量代码信息可以包括如下表1中两类结构体形式的数据。
表1
字段 | 类型 | 用途 |
fileName | std::string | 变更文件名 |
diffLineNumbers | std::vector<int> | 差异代码行数组 |
其中,“fileName”表示增量代码的文件名;“diffLineNumbers”表示增量代码的行号。“string”表示数据类型为字符串类型;“vector<int>”表示定义一个容器,容器内的值为整数类型(即int类型)。
类似的,增量代码的测试覆盖信息同样可以是采用设定的结构体形式表示的数据。例如增量代码的测试覆盖信息所涉及到的数据可以采用如下表2中提到的几类结构体形式的数据。
表2
字段 | 类型 | 用途 |
fileName | std::string | 变更文件名 |
diffLineCount | int | 变更文件行数 |
excecuteDiffLineCount | int | 变更行执行行数 |
diffCodeCoverage | std::string | 变更代码覆盖率 |
其中,fileName为被测试覆盖到的增量代码对应的文件名,其数据类型为字符串类型string;“diffLineCount”表示增量代码的总行数,其数据类型为整数型(int);“excecuteDiffLineCount”表示被测试覆盖到的增量代码的行数,其数据类型为整数型;“diffCodeCoverage”表示增量代码的测试覆盖率,其数据类型为字符串类型。
可以理解的是,在本申请以上任意一个实施例中,文件解析程序确定出增量代码的测试覆盖信息之后,还可以输出增量代码的测试覆盖信息,以供用户查看。
为了便于理解本申请的方案,下面代码编辑编译器为Xcode工具为例说明,相应的,本申请可以基于Xcode对目标代码版本文件的测试结果文件来确定目标代码版本文件相对原代码版本文件的增量代码的测试覆盖信息。
如图6所示,其示出了本申请确定增量测试覆盖信息的方法在一种应用场景的一种流程交互示意图,本实施例应用于测试平台,测试平台中运行有用于确定增量测试覆盖信息的主控程序,以及至少用于对代码版本文件进行单元测试的Xcode工具。
本实施例的方法可以包括:
S601,主控程序获得待测试的目标代码版本文件的第一标识以及原代码版本文件的第二标识。
如,主控程序可以提供交互界面,来获得用户输入的第一标识和第二标识;或者是,用户通过命令形式向主控程序输入该第一标识和第二标识。
S602,主控程序调用并运行该主控程序内设置的增量分析程序,并向增量分析程序发送该目标代码版本文件的第一标识和原代码版本文件的第二标识。
该增量分析程序(DiffCodeCoverage)可以为向主控程序中设置的,用于对代码版本文件做增量合并且生成指定格式(如JSON格式)文件的工具(也可以称为程序)。如,考虑到可维护性和可扩展性,该增量分析程序可以为采用JS(JavaScript)编写的程序。
同时,可以为该增量分析程序配置有配置文件,如,可以设置该增量分析程序使用Git或者SVN获得差异代码的信息等,还可以设置输出路径等等,具体可以如图4及前面相关介绍,在此不再赘述。
S603,增量分析程序基于配置文件中配置的代码管理工具的信息,调用代码管理工具中的diff命令,并向diff命令指向的diff程序传输第一标识、第二标识以及配置文件中的代码路径信息,以通过执行diff程序确定目标代码版本文件相对原代码版本文件存在的差异代码信息。
Diff程序基于第一标识、第二标识以及配置文件中的代码路径信息可以获得目标代码版本文件和原代码版本文件,并比对这两个文件,确定出差异代码信息。
该差异代码信息可以包括目标代码版本文件与原代码版本文件存在差异的至少一条差异代码对应的文件名和行号。
S604,增量分析程序从差异代码信息中提取出增量代码信息,将提取到的增量代码信息拼装为JSON格式的文件,并基于配置文件中配置的输出路径存储该JSON格式的文件。
其中,该JSON格式的文件中包括至少一条增量代码对应的文件名和行号。
S605,主控程序向Xcode工具发送测试命令,该测试命令指示有该目标代码版本文件的第一标识。
S606,Xcode工具响应于测试命令,基于目标代码版本文件的第一标识执行对目标代码版本文件的单元测试,得到至少一个测试结果文件并存储到设定的文件存储路径对应的文件存储空间。
如,Xcode工具基于该第一标识信息可以从测试平台存储的代码文件中获得该目标代码版本文件并执行单元测试。
其中,Xcode工具输出的测试结果文件可以包括:Coverage.profdata文件与.app的文件。
其中,该设定文件路径可以为通过测试命令指示的,也可以是预先配置的,因此,主控程序可以获得该文件存储路径。
S607,主控程序在确认Xcode工具完成单元测试之后,调用主控程序中的文件解析程序,并向文件解析程序发送增量覆盖分析命令。
其中,该增量覆盖分析命令指示有该至少一个测试结果文件的文件存储路径以及该包含有增量代码信息的JSON文件的输出路径。
可以理解的是,由于Xcode工具中集成有开源的llvm,llvm为开源的编译器,而llvm中包含有llvm-cov程序,llvm-cov程序可以解析出Xcode工具中输出的测试结果文件中的代码测试覆盖信息(即本申请中的全量测试覆盖信息),因此,本申请的文件解析程序可以是在该llvm-cov程序上进一步开发得到的,经过进一步开发的llvm-cov程序不仅具备确定全量测试覆盖信息的功能,还可以确定增量代码覆盖信息。
相应的,本申请可以在主控程序中配置经过进一步开发更改后的llvm-cov程序。
举例说明,如表3,其示出了进一步开发更改后的llvm-cov程序(即文件解析程序)所包含的程序或者接口的种类。
表3
名称 | 用途 | 是否已有 |
capi | 测试c接口 | 是 |
export | 从profdata数据转化为json格式 | 是 |
gcov | 使用gcov形式工作 | 是 |
report | 所有文件的覆盖率信息 | 是 |
show | 可视化查看所有文件覆盖情况 | 是 |
diffCov | 查看差异代码覆盖率 | 否(扩展能力) |
其中,开源的llvm-cov程序中支持表3中前5种功能的调用,而本申请更改后的llvm-cov程序中新增了增量覆盖子程序diffCov,通过diffCov可以分析出增量代码的测试覆盖信息。
S608,文件解析程序基于JSON文件的输出路径获得JSON文件,并将JSON文件转换为设定结构体形式的增量代码信息。
其中,设定结构体形式可以参见前面表1所示,在此不再赘述。
S609,文件解析程序依据文件存储路径获得至少一个测试结果文件,并解析出该至少一个测试结果文件中包含的全量测试覆盖信息。
如,由于开源的llvm-cov程序具备确定全量测试覆盖信息,因此,本申请的文件解析程序实际上是复用了llvm-cov程序中该部分功能得到全量测试覆盖信息。
例如,如图7所示,其示出了文件解析程序的组成架构示意图。更改后的llvm-cov程序可以包括同样包括:输出(export)、报表或者报告(report)以及显示show三个原命令,CodeCoverageTool内部使用run函数做参数解析分发器。在分发器解析器确定出需要调用这三个原命令之后,通过调用代码覆盖工具CodeCoverageTool::load()方法加载测试结果文件,如Coverage.profdata和.add的文件,并最终得到全量测试覆盖信息。
对于更改后的llvm-cov程序确定全量测试覆盖信息的过程与开源的llvm-cov程序确定全量测试覆盖信息的过程相似,在此不再赘述。
S610,文件解析程序通过增量覆盖子程序基于全量测试覆盖信息和增量代码信息,确定出目标代码版本文件中增量代码的测试覆盖率并输出。
该步骤S610可以参见前面的相关介绍,在此不再赘述。
由图6可以看出,主控程序中的文件解析程序可以是对开源的更改后的llvm-cov程序做较少改动,相对整个Xcode或者llvm,llvm-cov程序更为轻量化,从而使得主控程序能够实现更为灵活接入,也更为轻量化。
对应本申请提供的确定增量测试覆盖信息的方法,本申请还提供了一种确定增量测试覆盖信息的装置。
如图8所示,其示出了本申请一种确定增量测试覆盖信息的装置的一种组成架构示意图,该装置可以包括:
文件确定装置801,用于确定待测试的目标代码版本文件以及原代码版本文件,该目标代码版本文件为对该原代码版本文件进行代码更新后得到的;
增量代码确定单元802,用于确定该目标代码版本文件相对该原代码版本文件的增量代码信息,该增量代码信息包括:至少一条增量代码的信息;
测试结果获得单元803,用于获得代码编辑编译器测试该目标代码版本文件所得到的至少一个测试结果文件,该至少一个测试结果文件为采用设定协议格式的文件;
全量覆盖确定单元804,用于调用并运行文件解析程序,并通过该文件解析程序解析出该测试结果文件中包含的全量测试覆盖信息,该全量测试覆盖信息包括该目标代码版本文件中被测试的至少一条已测试代码的信息,该文件解析程序为用于解析该设定协议格式的文件的解析程序;
增量覆盖确定单元805,用于通过该文件解析程序依据该至少一条增量代码的信息以及该全量测试覆盖信息中至少一条已测试代码的信息,确定出该目标代码版本文件中增量代码的测试覆盖信息。
在一种可能的实现方式中,该测试结果获得单元中的代码编辑编译器中集成有编译器,该编译器中包括用于解析该设定协议格式的文件的原始解析程序;
该全量覆盖确定单元调用的文件解析程序为通过在该原始解析程序中增设增量覆盖子程序得到的程序;
该增量覆盖确定单元具体为,用于通过该增量覆盖子程序依据该至少一条增量代码的信息以及该至少一条已测试代码的信息,确定出该目标代码版本文件中增量代码的测试覆盖信息。
在又一种可能的实现方式中,该装置还包括:
测试指示单元,用于在测试结果获得单元获得代码编辑编译器测试该目标代码版本文件所得到的至少一个测试结果文件之前,向该代码编辑编译器发送测试命令,该测试命令用于指示该代码编辑编译器测试该目标代码版本文件并输出该目标代码版本文件的测试结果文件。
在又一种可能的实现方式中,增量代码确定单元,包括:
文件比较单元,用于调用比较程序比对该目标代码版本文件与该原代码版本文件,得到该比较程序输出的代码变更信息,该代码变更信息包括该目标代码版本文件相对该原代码版本文件存在差异的至少一条差异代码的信息;
增量提取单元,用于从该至少一条差异代码的信息中提取出属于增量代码的增量代码信息。
在一种可选方式中,文件确定装置具体为,用于获得待测试的目标代码版本文件的第一文件标识以及原代码版本文件的第二文件标识,以确定待测试的目标代码版本文件以及原代码版本文件;
文件比较单元,包括:
分析程序调用单元,用于调用并运行增量分析程序,该增量分析程序配置有配置文件,该配置文件中配置有代码路径信息,代码路径信息用于指示有各代码版本文件的统一存储路径;
比较程序执行单元,用于通过该增量分析程序调用比较程序,并将该第一文件标识、第二文件标识和该代码路径信息,均作为输入参数传输给该比较程序,以使得该比较程序基于该代码路径信息,获得并比对该第一文件标识对应的目标代码版本文件与该第二文件标识对应的原代码版本文件,得到该代码变更信息;
增量提取单元,具体为用于通过该增量分析程序从该至少一条差异代码的信息中提取出属于增量代码的增量代码信息。
在一种可选方式中,分析程序调用单元调用的增量分析程序配置的配置文件中还配置有增量代码信息的输出路径;
该装置还包括:
信息存储单元,用于增量提取单元提取出增量代码信息之后,通过该增量分析程序将该增量代码信息转换为符合指定编辑语言对应的数据存储格式,并存储到该输出路径对应的存储空间;
信息获取单元,用于在增量覆盖确定单元确定增量代码的测试覆盖信息之前,向该文件解析程序传输该增量代码信息对应的该输出路径,通过该文件解析程序从该输出路径对应的存储空间获得该增量代码信息;
格式转换单元,用于通过该文件解析程序将该增量代码信息由该符合指定编辑语言对应的数据存储格式,转换为该文件解析程序设定的结构体形式的数据。
在又一种可能的实现方式中,该目标代码版本文件包括至少一个代码文件,每个代码文件包括至少一条代码;
该增量代码的信息包括:增量代码所属的代码文件的文件名以及该增量代码的行号;
该已测试代码的信息包括:已测试代码所属的代码文件的文件名以及该已测试代码的行号;
该增量覆盖确定单元包括:
数量确定单元,用于基于该增量代码信息中各条增量代码所属代码文件的文件名和各条增量代码的行号,以及全量测试覆盖信息中各条已测试代码所属的代码文件的文件名和各条已测试代码的行号,通过该文件解析程序分别确定各代码文件中增量代码的总数和被测试覆盖的增量代码的数量;
覆盖率确定单元,用于基于各代码文件中增量代码的总数以及被测试的增量代码的数量,通过该文件解析程序确定增量代码的测试覆盖率。
又一方面,本申请还提供了一种计算机设备,该计算机设备可以为测试平台中的计算机设备。如图9,其示出了本申请提供的计算机设备的一种组成架构示意图。在图9中,该计算机设备900可以包括:处理器901和存储器902。
可选的,该计算机设备还可以包括:通信接口903、输入单元904和显示器905和通信总线906。
其中,处理器901、存储器902、通信接口903、输入单元904和显示器905均通过通信总线906完成相互间的通信。
在本申请实施例中,该处理器901,可以为中央处理器,特定应用集成电路等。
该处理器可以调用存储器902中存储的程序,具体的,处理器可以执行以上实施例中确定增量测试覆盖信息的方法。
存储器902中用于存放一个或者一个以上程序,程序可以包括程序代码,所述程序代码包括计算机操作指令,在本申请实施例中,该存储器中至少存储有用于实现以上任意一个实施例中确定增量测试覆盖信息的方法的程序。
在一种可能的实现方式中,该存储器902可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、以上所提到的程序等;存储数据区可存储根据计算机设备的使用过程中所创建的数据。
该通信接口903可以为通信模块的接口。
本申请还可以包括输入单元904,该输入单元可以包括触摸感应单元、键盘等等。
该显示器905包括显示面板,如触摸显示面板等。
当然,图9所示的计算机设备结构并不构成对本申请实施例中计算机设备的限定,在实际应用中计算机设备可以包括比图9所示的更多或更少的部件,或者组合某些部件。
另一方面,本申请还提供了一种存储介质,该存储介质中存储有计算机可执行指令,所述计算机可执行指令被处理器加载并执行时,实现如上任意一个实施例中的确定增量测试覆盖信息的方法。
本申请还提出了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述确定增量测试覆盖信息的方法方面或确定增量测试覆盖信息的装置方面的各种可选实现方式中所提供方法,具体实现过程可以参照上述相应实施例的描述,不做赘述。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。同时,本说明书中各实施例中记载的特征可以相互替换或者组合,使本领域专业技术人员能够实现或使用本申请。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
以上仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种确定增量测试覆盖信息的方法,其特征在于,包括:
确定待测试的目标代码版本文件以及原代码版本文件,所述目标代码版本文件为对所述原代码版本文件进行代码更新后得到的;
确定所述目标代码版本文件相对所述原代码版本文件的增量代码信息,所述增量代码信息包括:至少一条增量代码的信息;
获得代码编辑编译器测试所述目标代码版本文件所得到的至少一个测试结果文件,所述至少一个测试结果文件为采用设定协议格式的文件;
调用并运行文件解析程序,并通过所述文件解析程序解析出所述至少一个测试结果文件中包含的全量测试覆盖信息,所述全量测试覆盖信息包括所述目标代码版本文件中被测试的至少一条已测试代码的信息,所述文件解析程序为用于解析所述设定协议格式的文件的解析程序;
通过所述文件解析程序依据所述至少一条增量代码的信息以及所述全量测试覆盖信息中所述至少一条已测试代码的信息,确定出所述目标代码版本文件中增量代码的测试覆盖信息。
2.根据权利要求1所述的方法,其特征在于,所述代码编辑编译器中集成有编译器,所述编译器中包括用于解析所述设定协议格式的文件的原始解析程序;
所述文件解析程序为通过在所述原始解析程序中增设增量覆盖子程序得到的程序;
所述通过所述文件解析程序依据所述至少一条增量代码的信息以及所述全量测试覆盖信息中所述至少一条已测试代码的信息,确定出所述目标代码版本文件中增量代码的测试覆盖信息,包括:
通过所述增量覆盖子程序依据所述至少一条增量代码的信息以及所述全量测试覆盖信息中所述至少一条已测试代码的信息,确定出所述目标代码版本文件中增量代码的测试覆盖信息。
3.根据权利要求1或2所述的方法,其特征在于,在所述获得代码编辑编译器测试所述目标代码版本文件所得到的至少一个测试结果文件之前,还包括:
向所述代码编辑编译器发送测试命令,所述测试命令用于指示所述代码编辑编译器测试所述目标代码版本文件并输出所述目标代码版本文件的测试结果文件。
4.根据权利要求1所述的方法,其特征在于,所述确定所述目标代码版本文件相对所述原代码版本文件的增量代码信息,包括:
调用比较程序比对所述目标代码版本文件与所述原代码版本文件,得到所述比较程序输出的代码变更信息,所述代码变更信息包括所述目标代码版本文件相对所述原代码版本文件存在差异的至少一条差异代码的信息;
从所述至少一条差异代码的信息中提取出属于增量代码的增量代码信息。
5.根据权利要求4所述的方法,其特征在于,所述确定待测试的目标代码版本文件以及原代码版本文件,包括:
获得待测试的目标代码版本文件的第一文件标识以及原代码版本文件的第二文件标识,以确定待测试的目标代码版本文件以及原代码版本文件;
所述调用比较程序比对所述目标代码版本文件与所述原代码版本文件,包括:
调用并运行增量分析程序,所述增量分析程序配置有配置文件,所述配置文件中配置有代码路径信息,所述代码路径信息用于指示各代码版本文件的统一存储路径;
通过所述增量分析程序调用所述比较程序,并将所述第一文件标识、第二文件标识和所述代码路径信息,均作为输入参数传输给所述比较程序,以使得所述比较程序基于所述代码路径信息,获得并比对所述第一文件标识对应的目标代码版本文件与所述第二文件标识对应的原代码版本文件,得到所述代码变更信息;
所述从所述至少一条差异代码的信息中提取出属于增量代码的增量代码信息,包括:
通过所述增量分析程序从所述至少一条差异代码的信息中提取出属于增量代码的增量代码信息。
6.根据权利要求5所述的方法,其特征在于,所述增量分析程序配置的配置文件中还配置有增量代码信息的输出路径;
在所述通过所述增量分析程序从所述至少一条差异代码的信息中提取出属于增量代码的增量代码信息之后,还包括:
通过所述增量分析程序将所述增量代码信息转换为符合指定编辑语言对应的数据存储格式,并存储到所述输出路径对应的存储空间;
在所述通过所述文件解析程序依据所述至少一条增量代码的信息以及所述全量测试覆盖信息中所述至少一条已测试代码的信息,确定出所述目标代码版本文件中增量代码的测试覆盖信息之前,还包括:
向所述文件解析程序传输所述增量代码信息对应的所述输出路径,通过所述文件解析程序从所述输出路径对应的存储空间获得所述增量代码信息;
通过所述文件解析程序将所述增量代码信息由所述符合指定编辑语言对应的数据存储格式,转换为所述文件解析程序设定的结构体形式的数据。
7.根据权利要求1所述的方法,其特征在于,所述目标代码版本文件包括至少一个代码文件,每个代码文件包括至少一条代码;
所述增量代码的信息包括:增量代码所属的代码文件的文件名以及所述增量代码的行号;
所述已测试代码的信息包括:已测试代码所属的代码文件的文件名以及所述已测试代码的行号;
所述通过所述文件解析程序依据所述至少一条增量代码的信息以及所述全量测试覆盖信息中所述至少一条已测试代码的信息,确定出所述目标代码版本文件中增量代码的测试覆盖信息,包括:
基于所述增量代码信息中各条增量代码所属代码文件的文件名和各条增量代码的行号,以及全量测试覆盖信息中各条已测试代码所属的代码文件的文件名和各条已测试代码的行号,通过所述文件解析程序分别确定各代码文件中增量代码的总数和被测试覆盖的增量代码的数量;
基于各代码文件中增量代码的总数以及被测试的增量代码的数量,通过所述文件解析程序确定增量代码的测试覆盖率。
8.一种确定增量测试覆盖信息的装置,其特征在于,包括:
文件确定装置,用于确定待测试的目标代码版本文件以及原代码版本文件,所述目标代码版本文件为对所述原代码版本文件进行代码更新后得到的;
增量代码确定单元,用于确定所述目标代码版本文件相对所述原代码版本文件的增量代码信息,所述增量代码信息包括:至少一条增量代码的信息;
测试结果获得单元,用于获得代码编辑编译器测试所述目标代码版本文件所得到的至少一个测试结果文件,所述至少一个测试结果文件为采用设定协议格式的文件;
全量覆盖确定单元,用于调用并运行文件解析程序,并通过所述文件解析程序解析出所述至少一个测试结果文件中包含的全量测试覆盖信息,所述全量测试覆盖信息包括所述目标代码版本文件中被测试的至少一条已测试代码的信息,所述文件解析程序为用于解析所述设定协议格式的文件的解析程序;
增量覆盖确定单元,用于通过所述文件解析程序依据所述至少一条增量代码的信息以及所述全量测试覆盖信息中所述至少一条已测试代码的信息,确定出所述目标代码版本文件中增量代码的测试覆盖信息。
9.一种计算机设备,其特征在于,包括存储器和处理器;
其中,所述存储器用于存储程序;
所述处理器用于执行所述程序,所述程序被执行时,具体用于实现如权利要求1至7任意一项所述的确定增量测试覆盖信息的方法。
10.一种存储介质,其特征在于,用于存储程序,所述程序被执行时,用于实现如权利要求1至7任意一项所述的确定增量测试覆盖信息的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110486293.9A CN113051181A (zh) | 2021-04-30 | 2021-04-30 | 确定增量测试覆盖信息的方法、装置、设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110486293.9A CN113051181A (zh) | 2021-04-30 | 2021-04-30 | 确定增量测试覆盖信息的方法、装置、设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113051181A true CN113051181A (zh) | 2021-06-29 |
Family
ID=76518130
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110486293.9A Pending CN113051181A (zh) | 2021-04-30 | 2021-04-30 | 确定增量测试覆盖信息的方法、装置、设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113051181A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114090430A (zh) * | 2021-11-09 | 2022-02-25 | 北京完美赤金科技有限公司 | 一种覆盖测试方法、系统、存储介质及计算设备 |
CN116610383A (zh) * | 2023-05-25 | 2023-08-18 | 成都融见软件科技有限公司 | 一种部分加载目标文件的方法 |
CN116820602A (zh) * | 2023-05-25 | 2023-09-29 | 成都融见软件科技有限公司 | 一种数据库部分加载系统 |
-
2021
- 2021-04-30 CN CN202110486293.9A patent/CN113051181A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114090430A (zh) * | 2021-11-09 | 2022-02-25 | 北京完美赤金科技有限公司 | 一种覆盖测试方法、系统、存储介质及计算设备 |
CN116610383A (zh) * | 2023-05-25 | 2023-08-18 | 成都融见软件科技有限公司 | 一种部分加载目标文件的方法 |
CN116820602A (zh) * | 2023-05-25 | 2023-09-29 | 成都融见软件科技有限公司 | 一种数据库部分加载系统 |
CN116610383B (zh) * | 2023-05-25 | 2024-02-20 | 成都融见软件科技有限公司 | 一种部分加载目标文件的方法 |
CN116820602B (zh) * | 2023-05-25 | 2024-04-26 | 成都融见软件科技有限公司 | 一种数据库部分加载系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113051181A (zh) | 确定增量测试覆盖信息的方法、装置、设备和存储介质 | |
CN107992409B (zh) | 测试用例生成方法、装置、计算机设备和存储介质 | |
CN110795078B (zh) | 基于ios系统下的app工程运作系统的架构方法 | |
US11106458B2 (en) | System and method for distributed ledger-based software supply chain management | |
CN109254905B (zh) | 基于工作流的分布式并行自动化测试系统 | |
US9411575B2 (en) | Systems and methods for quality assurance automation | |
CN112433944A (zh) | 业务测试方法、装置、计算机设备和存储介质 | |
CN111880921A (zh) | 基于规则引擎的作业处理方法、装置和计算机设备 | |
CN104598619A (zh) | 一种基于约束求解器的服务组合验证方法 | |
US11327720B2 (en) | Automated generation of software bindings | |
Mairiza et al. | Towards a Catalogue of Conflicts Among Non-functional Requirements. | |
CN111930621A (zh) | Dns自动化性能测试方法、装置、设备及可读存储介质 | |
CN105119771A (zh) | 电力通信系统的测试方法及系统 | |
CN110162310B (zh) | 插件接口测试方法及装置、计算机设备及存储介质 | |
KR101843092B1 (ko) | 복수의 보험상품 시스템에 대하여 그 시스템들의 정확성을 순차적으로 검증하는 방법 | |
CN113077185B (zh) | 工作量评估方法、装置、计算机设备和存储介质 | |
CN117667643A (zh) | 测试用例集的演化方法、装置、计算设备集群及存储介质 | |
CN114625621A (zh) | 性能测试方法、装置、计算机设备和存储介质 | |
EP4359914A1 (en) | Software update management for vehicles | |
CN114218073A (zh) | 一种接口测试方法、装置、服务器及介质 | |
Habibi et al. | Generating test as a web service (TaaWS) through a method-based attribute grammar | |
US10453019B1 (en) | Business activity resource modeling system and method | |
Knop et al. | Balancing Variability and Costs in Software Product Lines: An Experience Report in Safety-Critical Systems | |
Ruiz et al. | Secure engineering and modelling of a metering devices system | |
Anabalon et al. | Test reduction for easing web service integration |
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 |