掌桥专利:专业的专利平台
掌桥专利
首页

一种代码覆盖率分析方法、装置、设备和介质

文献发布时间:2023-06-19 13:45:04


一种代码覆盖率分析方法、装置、设备和介质

技术领域

本发明涉及代码测试技术领域,尤其涉及一种代码覆盖率分析方法、装置、设备和介质。

背景技术

覆盖测试是描述源代码被测试的比例和程度,所得比例称为代码覆盖率。覆盖测试技术方法有语句覆盖、分支覆盖、条件覆盖、判定覆盖和路径覆盖等。为了确定出代码覆盖率,现有技术中首先是基于源代码生成测试程序,然后采用测试程序在源代码的函数入口和程序分支等特征点处进行插装,编译执行源代码,在执行过程中,测试程序将代表覆盖率数据的执行数据记录下来,根据记录的执行数据生成源代码的覆盖测试报告。

图1为现有技术提供的一种进行代码覆盖率分析的系统的结构示意图,如图1所示,该系统中包括自动化管理系统设备、自动化测试设备、网络设备、网络设备版本服务器、覆盖率服务器和电子设备。其中电子设备中运行有开源工具(Gcov),Gcov是一款流行的代码覆盖率度量工具,可以统计哪些代码被执行以及每行代码的执行频率、用例覆盖的代码数等。

首先是根据网络设备的不同中央处理器(Central Processing Unit,CPU)的大小端,采用对应的编译器根据源代码以及在源代码的特征点处插装的测试程序,编译出能够产生出覆盖率数据的版本,即覆盖率版本,并将覆盖率版本发送到网络设备版本服务器。

自动化管理系统设备通过项目管理和用例管理模块向自动化测试设备下发执行测试用例表;自动化测试设备接收到测试用例表,根据测试用例表配置加载基础库和测试用例,然后从网络设备版本服务器基于超文本传输协议(Hyper Text Transfer Protocol,HTTP)获取到覆盖率版本,并按加载顺序执行对应的测试用例。

网络设备通过用户接口(Command Line Interface,CLI)接收用户通过自动化测试设备发送的测试用例的升级、测试配置、发送数据报文、接收统计等操作,然后网络设备对接收到的操作进行响应反馈,在测试用例快结束时,将产生的覆盖率文件基于文件传输协议(File Transfer Protocol,Ftp)发送到覆盖率服务器。

电子设备从覆盖率服务器中获取到覆盖率文件,从网络设备版本服务器中获取覆盖率版本中的插装文件,并根据覆盖率文件和插装文件,采用Gcov生成源代码的覆盖测试报告。

综上,随着嵌入式网络设备的发展,嵌入式网络设备的规模和复杂度越来越大,为了实现对嵌入式网络设备的覆盖测试,电子设备采用Gcov生成目标覆盖测试报告时,具体是根据不同CPU的大小端,采用不同大小端对应的编译器与Gcov匹配,由于不同大小端对应的编译器之间相互不兼容,每次只能有一种编译器与Gcov匹配,因此需要单线程地针对每个Gcov数据文件,根据该Gcov数据文件中包含的代码、以及覆盖率文件和插装文件,从覆盖率文件中确定出每一行代码对应的子覆盖率文件,从插装文件中确定每一行代码对应的子插装文件,从而确定该Gcov数据文件中的代码对应的目标子覆盖率文件和目标子插装文件,并采用编译器读取目标子覆盖率文件和目标子插装文件的内容并生成该Gcov数据文件的子覆盖测试报告,确定出该Gcov数据文件的子覆盖测试报告后,再根据下一个Gcov数据文件生成对应的子覆盖测试报告,根据每个Gcov数据文件对应的子覆盖测试报告从而得到源代码的目标覆盖测试报告。

其中电子设备采用Gcov时依赖源代码描述文件、程序基本块流程图文件和Gcov数据文件,源代码描述文件、程序基本块流程图文件和Gcov数据文件之间的关系是:根据源代码描述文件中的代码行信息可以找到程序基本块流程图文件中对应的基本块(basedblock),然后根据基本块可以找到Gcov数据文件中对应的源代码的部分代码。

由于现有技术中是单线程地生成每个Gcov数据文件的子覆盖测试报告,并且还需要编译器与Gcov匹配才能实现生成覆盖测试报告,因此现有技术中生成源代码的目标覆盖测试报告的效率低下,占用资源多。

发明内容

本发明提供了一种代码覆盖率分析方法、装置、设备和介质,用以解决现有技术中生成源代码的目标覆盖测试报告的效率低下和占用资源高的问题。

本发明提供了一种代码覆盖率分析方法,所述方法包括:

获取网络设备版本服务器采集的插装文件以及覆盖率服务器采集的覆盖率文件,其中所述覆盖率文件的内容对应标识信息;

根据预先保存的源代码的每个子代码集合,从所述插装文件中确定对应包含每个子代码集合中代码的每个目标子插装文件,从所述覆盖率文件中确定对应包含每个子代码集合中代码的每个目标子覆盖率文件;

根据所述每个目标子覆盖率文件的内容对应的目标标识信息、以及预先保存的标识信息与读取顺序的对应关系,确定所述每个目标子覆盖率文件中内容的目标读取顺序,采用数据解析引擎基于所述目标读取顺序,并行读取所述每个目标子覆盖率文件中的内容,根据所述每个目标子插装文件的内容、和读取出的所述每个目标子覆盖率文件的内容,同步进行编译得到每个子覆盖测试报告,组合得到所述源代码的目标覆盖测试报告,其中所述目标读取顺序包括从存储目标子覆盖率文件内容的内存的低地址到高地址的读取顺序、和/或从高地址到低地址的读取顺序。

进一步地,所述方法还包括:

根据确定的测试用例与目标程序的覆盖率的对应关系,针对每个目标程序,确定该目标程序的每个测试用例的覆盖率,若每个测试用例的覆盖率均小于预设覆盖率阈值,则确定该目标程序未覆盖完成,通过用户接口对该目标程序进行补充覆盖。

进一步地,所述方法还包括:

根据确定的测试用例与目标程序的覆盖率的对应关系,确定每个测试用例覆盖的所述目标程序的目标代码;

根据每个测试用例覆盖的所述目标代码,确定所述目标代码被其余的任一测试用例全部覆盖的目标测试用例,将所述目标测试用例确定为冗余测试用例。

进一步地,所述方法还包括:

根据确定的测试用例与目标程序的覆盖率的对应关系,确定所述测试用例测试的所述目标程序的目标覆盖率;

根据所述目标覆盖率、以及覆盖率范围与用例质量指标的对应关系,确定所述测试用例的目标用例质量指标。

进一步地,所述测试用例与目标程序的覆盖率的对应关系的确定过程包括:

获取日志服务器采集的测试用例日志数据、所述网络设备版本服务器采集的程序的可执行链路格式ELF的符号表数据,其中所述符号表数据包括库和所述插装文件中的代码文件;

根据所述测试用例日志数据中的测试用例和进行测试的程序,进行数据关联分析得到第一分析结果,所述第一分析结果包括所述测试用例与目标程序的对应关系;

根据所述代码文件和所述库,进行数据关联分析得到第二分析结果,所述第二分析结果包括所述目标程序分别与目标库、所述目标库中目标第一库函数和所述代码文件的对应关系、以及所述目标库与所述代码文件的对应关系;

根据所述目标覆盖测试报告、所述插装文件的函数和所述代码文件,进行数据关联分析得到第三分析结果,所述第三分析结果包括所述代码文件与所述函数的包含关系、所述函数的覆盖率和代码迭代后变更的函数;

根据所述代码文件包含的所述函数和所述函数的覆盖率,确定所述代码文件的覆盖率,根据所述代码文件的覆盖率、所述目标程序与所述代码文件的对应关系,确定所述目标程序的覆盖率;

根据所述测试用例与所述目标程序的对应关系、所述目标程序的覆盖率,确定所述测试用例与所述目标程序的覆盖率的对应关系。

进一步地,所述根据所述测试用例日志数据中的测试用例和进行测试的程序,进行数据关联分析确得到第一分析结果包括:

根据所述测试用例日志数据中测试用例调用的第一用户接口,确定所述程序中包含所述第一用户接口的目标程序,确定所述测试用例与所述目标程序存在对应关系。

进一步地,所述根据所述代码文件和所述库,进行数据关联分析得到第二分析结果包括:

根据所述符号表数据中所述目标程序调用的第一库函数、以及所述库中包含的第二库函数,确定所述目标程序调用的与所述第一库函数相同的目标第一库函数以及所述目标第一库函数所在的目标库,并确定所述目标程序与所述目标库中目标第一库函数存在对应关系、所述目标程序与所述目标库存在对应关系;

根据所述目标程序和所述符号表数据中的所述代码文件,确定所述目标程序与所述代码文件存在对应关系;

根据所述目标程序与所述目标库的对应关系、所述目标程序与所述代码文件的对应关系,确定所述目标库与所述代码文件存在对应关系。

进一步地,所述根据所述目标覆盖测试报告和所述插装文件的函数和所述代码文件,进行数据关联分析得到第三分析结果包括:

根据所述插装文件中的函数和所述代码文件,确定所述代码文件与所述函数存在包含关系,其中所述函数包括程序函数和库函数;

根据所述目标覆盖测试报告和所述函数,确定所述函数中被覆盖的每个目标函数、所述每个目标函数的第一数量以及所述每个目标函数的每一函数行被覆盖的次数;根据所述每个目标函数的第一数量以及所述函数的第二数量,确定所述第一数量和所述第二数量的比值,确定所述函数的覆盖率包括所述每个目标函数的每一函数行被覆盖的次数、以及所述第一数量与所述第二数量的比值;

根据迭代前的所述代码文件包含的函数、迭代后的所述代码文件包含的函数,确定代码迭代后变更的函数。

进一步地,所述方法还包括:

根据所述函数的覆盖率和代码迭代后变更的函数,确定代码迭代后变更的函数的覆盖率;

根据所述测试用例与所述目标程序的对应关系、所述目标程序与所述代码文件的对应关系,确定所述测试用例与所述代码文件存在对应关系;

根据所述代码文件包含的所述函数、代码迭代后变更的函数的覆盖率,确定所述代码文件包含的代码迭代后变更的函数的覆盖率;

根据所述测试用例与所述代码文件的对应关系、所述代码文件包含的代码迭代后变更的函数的覆盖率,确定所述测试用例与代码迭代后变更的函数的覆盖率的对应关系。

进一步地,所述方法还包括:

根据迭代后的代码文件和迭代前的代码文件,确定迭代后的代码文件的第一代码行数和迭代前的代码文件的第二代码行数;

若所述第一代码行数较所述第二代码行数多,确定迭代后的代码文件补充测试用例。

进一步地,所述方法还包括:

根据所述第二分析结果中的所述目标程序与所述代码文件的对应关系、所述第三分析结果中的所述代码文件与所述函数的包含关系,确定所述目标程序的每个目标函数;

根据所述目标程序的每个目标函数、以及所述目标程序与所述目标库中目标第一库函数的对应关系,确定所述目标程序的每个目标函数调用的目标库中目标第一库函数;

根据所述程序的每个目标函数调用的所述目标库中目标第一库函数、以及所述函数的覆盖率,确定所述程序的每个目标函数调用的所述目标库中目标第一库函数的覆盖率。

进一步地,所述方法还包括:

根据所述第三分析结果中的所述代码文件与所述函数的包含关系和所述函数的覆盖率,确定所述代码文件的覆盖率;

根据所述代码文件的覆盖率、以及覆盖率范围与代码质量指标的对应关系,确定所述代码文件的目标代码质量指标。

相应地,本发明提供了一种代码覆盖率分析装置,所述装置包括:

获取模块,用于获取网络设备版本服务器采集的插装文件以及覆盖率服务器采集的覆盖率文件,其中所述覆盖率文件的内容对应标识信息;

确定模块,用于根据预先保存的源代码的每个子代码集合,从所述插装文件中确定对应包含每个子代码集合中代码的每个目标子插装文件,从所述覆盖率文件中确定对应包含每个子代码集合中代码的每个目标子覆盖率文件;

编译模块,用于根据所述每个目标子覆盖率文件的内容对应的目标标识信息、以及预先保存的标识信息与读取顺序的对应关系,确定所述每个目标子覆盖率文件中内容的目标读取顺序,采用数据解析引擎基于所述目标读取顺序,并行读取所述每个目标子覆盖率文件中的内容,根据所述每个目标子插装文件的内容、和读取出的所述每个目标子覆盖率文件的内容,同步进行编译得到每个子覆盖测试报告,组合得到所述源代码的目标覆盖测试报告,其中所述目标读取顺序包括从存储目标子覆盖率文件内容的内存的低地址到高地址的读取顺序、和/或从高地址到低地址的读取顺序。

进一步地,所述装置还包括:

数据应用模块,用于根据确定的测试用例与目标程序的覆盖率的对应关系,针对每个目标程序,确定该目标程序的每个测试用例的覆盖率,若每个测试用例的覆盖率均小于预设覆盖率阈值,则确定该目标程序未覆盖完成,通过用户接口对该目标程序进行补充覆盖。

进一步地,所述装置还包括:

数据应用模块,用于根据确定的测试用例与目标程序的覆盖率的对应关系,确定每个测试用例覆盖的所述目标程序的目标代码;根据每个测试用例覆盖的所述目标代码,确定所述目标代码被其余的任一测试用例全部覆盖的目标测试用例,将所述目标测试用例确定为冗余测试用例。

进一步地,所述装置还包括:

数据应用模块,用于根据确定的测试用例与目标程序的覆盖率的对应关系,确定所述测试用例测试的所述目标程序的目标覆盖率;根据所述目标覆盖率、以及覆盖率范围与用例质量指标的对应关系,确定所述测试用例的目标用例质量指标。

进一步地,所述装置还包括:

数据关联分析模块,用于所述测试用例与目标程序的覆盖率的对应关系的确定过程包括:获取日志服务器采集的测试用例日志数据、所述网络设备版本服务器采集的程序的可执行链路格式ELF的符号表数据,其中所述符号表数据包括库和所述插装文件中的代码文件;根据所述测试用例日志数据中的测试用例和进行测试的程序,进行数据关联分析得到第一分析结果,所述第一分析结果包括所述测试用例与目标程序的对应关系;根据所述代码文件和所述库,进行数据关联分析得到第二分析结果,所述第二分析结果包括所述目标程序分别与目标库、所述目标库中目标第一库函数和所述代码文件的对应关系、以及所述目标库与所述代码文件的对应关系;根据所述目标覆盖测试报告、所述插装文件的函数和所述代码文件,进行数据关联分析得到第三分析结果,所述第三分析结果包括所述代码文件与所述函数的包含关系、所述函数的覆盖率和代码迭代后变更的函数;根据所述代码文件包含的所述函数和所述函数的覆盖率,确定所述代码文件的覆盖率,根据所述代码文件的覆盖率、所述目标程序与所述代码文件的对应关系,确定所述目标程序的覆盖率;根据所述测试用例与所述目标程序的对应关系、所述目标程序的覆盖率,确定所述测试用例与所述目标程序的覆盖率的对应关系。

进一步地,所述数据关联分析模块,具体用于根据所述测试用例日志数据中测试用例调用的第一用户接口,确定所述程序中包含所述第一用户接口的目标程序,确定所述测试用例与所述目标程序存在对应关系。

进一步地,所述数据关联分析模块,具体用于根据所述符号表数据中所述目标程序调用的第一库函数、以及所述库中包含的第二库函数,确定所述目标程序调用的与所述第一库函数相同的目标第一库函数以及所述目标第一库函数所在的目标库,并确定所述目标程序与所述目标库中目标第一库函数存在对应关系、所述目标程序与所述目标库存在对应关系;根据所述目标程序和所述符号表数据中的所述代码文件,确定所述目标程序与所述代码文件存在对应关系;根据所述目标程序与所述目标库的对应关系、所述目标程序与所述代码文件的对应关系,确定所述目标库与所述代码文件存在对应关系。

进一步地,所述数据关联分析模块,具体用于根据所述插装文件中的函数和所述代码文件,确定所述代码文件与所述函数存在包含关系,其中所述函数包括程序函数和库函数;根据所述目标覆盖测试报告和所述函数,确定所述函数中被覆盖的每个目标函数、所述每个目标函数的第一数量以及所述每个目标函数的每一函数行被覆盖的次数;根据所述每个目标函数的第一数量以及所述函数的第二数量,确定所述第一数量和所述第二数量的比值,确定所述函数的覆盖率包括所述每个目标函数的每一函数行被覆盖的次数、以及所述第一数量与所述第二数量的比值;根据迭代前的所述代码文件包含的函数、迭代后的所述代码文件包含的函数,确定代码迭代后变更的函数。

进一步地,所述数据关联分析模块,还用于根据所述函数的覆盖率和代码迭代后变更的函数,确定代码迭代后变更的函数的覆盖率;根据所述测试用例与所述目标程序的对应关系、所述目标程序与所述代码文件的对应关系,确定所述测试用例与所述代码文件存在对应关系;根据所述代码文件包含的所述函数、代码迭代后变更的函数的覆盖率,确定所述代码文件包含的代码迭代后变更的函数的覆盖率;根据所述测试用例与所述代码文件的对应关系、所述代码文件包含的代码迭代后变更的函数的覆盖率,确定所述测试用例与代码迭代后变更的函数的覆盖率的对应关系。

进一步地,所述数据应用模块,还用于根据迭代后的代码文件和迭代前的代码文件,确定迭代后的代码文件的第一代码行数和迭代前的代码文件的第二代码行数;若所述第一代码行数较所述第二代码行数多,确定迭代后的代码文件补充测试用例。

进一步地,所述数据应用模块,还用于根据所述第二分析结果中的所述目标程序与所述代码文件的对应关系、所述第三分析结果中的所述代码文件与所述函数的包含关系,确定所述目标程序的每个目标函数;根据所述目标程序的每个目标函数、以及所述目标程序与所述目标库中目标第一库函数的对应关系,确定所述目标程序的每个目标函数调用的目标库中目标第一库函数;根据所述程序的每个目标函数调用的所述目标库中目标第一库函数、以及所述函数的覆盖率,确定所述程序的每个目标函数调用的所述目标库中目标第一库函数的覆盖率。

进一步地,所述数据应用模块,还用于根据所述第三分析结果中的所述代码文件与所述函数的包含关系和所述函数的覆盖率,确定所述代码文件的覆盖率;根据所述代码文件的覆盖率、以及覆盖率范围与代码质量指标的对应关系,确定所述代码文件的目标代码质量指标。

相应地,本发明提供了一种电子设备,所述电子设备包括处理器和存储器,所述存储器用于存储程序指令,所述处理器用于执行存储器中存储的计算机程序时实现上述代码覆盖率分析方法中任一所述方法的步骤。

相应地,本发明提供了一种计算机可读存储介质,其存储有计算机程序,所述计算机程序被处理器执行时实现上述代码覆盖率分析方法中任一所述方法的步骤。

本发明提供了一种代码覆盖率分析方法、装置、设备和介质,由于该方法中对包含每个子代码集合中代码的目标子覆盖率文件,在不同的目标子覆盖率文件对应不同的标识信息时,不需要使用相互不兼容的编译器,而是根据不同的标识信息对应的目标子覆盖率文件内容的不同读取顺序,采用数据解析引擎基于每个目标子覆盖率文件的目标读取顺序,并行读取每个目标子覆盖率文件中的内容,并根据预先确定的每个子代码集合对应的目标子插装文件的内容、和读取的目标子覆盖率文件的内容,同步进行编译得到对应的子覆盖测试报告,组合得到源代码的目标覆盖测试报告,从而减少了得到覆盖测试报告所需的时间并提高了效率,并且不需要使用多个编译器,降低了资源消耗。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为现有技术提供的一种进行代码覆盖率分析的系统的结构示意图;

图2为本发明实施例提供的一种代码覆盖率分析方法的过程示意图;

图3为本发明实施例提供的一种进行代码覆盖率分析的系统的结构示意图;

图4为本发明实施例提供的一种代码覆盖率分析装置的结构示意图;

图5为本发明实施例提供的另一种代码覆盖率分析装置的结构示意图;

图6为本发明实施例提供的一种电子设备结构示意图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

为了提高生成源代码的目标覆盖测试报告的效率,降低资源消耗,本发明实施例提供了一种代码覆盖率分析方法、装置、设备和介质。

实施例1:

图2为本发明实施例提供的一种代码覆盖率分析方法的过程示意图,该过程包括以下步骤:

S201:获取网络设备版本服务器采集的插装文件以及覆盖率服务器采集的覆盖率文件,其中所述覆盖率文件的内容对应标识信息。

本发明实施例提供的一种代码覆盖率分析方法应用于电子设备,其中该电子设备可以是主机、平板电脑、智能手机等智能终端设备、也可以是服务器、服务器集群,其中服务器可以是本地服务器、也可以是云端服务器。

在本发明实施例中,网络设备版本服务器采集插装文件(Gcno)的过程为现有技术,插装文件中包含基本块信息、以及代码行与基本块的映射关系,该插装文件是在基于源代码的特征点处插装测试程序后生成的。如图1所示,网络设备版本服务基于HTTP从自动化测试设备采集插装文件。

覆盖率服务器采集有覆盖率文件(Gcda)的过程为现有技术,其中该覆盖率文件中包含代码执行的次数等信息、以及覆盖率的信息。如图1所示,该覆盖率服务器基于Ftp从网络设备处采集有覆盖率文件。

为了便于后续的覆盖率文件中内容的读取,该覆盖率文件的内容对应标识信息,其中该标识信息用于表示覆盖率文件的内容的存储模式,该存储模式包括大端存储模式和小端存储模式。该大端存储模式是指数据的高字节保存在内存的低地址中,数据的低字节保存在内存的高地址中;该小端存储模式是指数据的高字节保存在内存的高地址中,数据的低字节保存在内存的低地址中。

为了生成源代码的目标覆盖测试报告,电子设备获取网络设备版本服务器采集的插装文件和覆盖率服务器采集的覆盖率文件,并根据插装文件和覆盖率文件,生成源代码的目标覆盖测试报告。

S202:根据预先保存的源代码的每个子代码集合,从所述插装文件中确定对应包含每个子代码集合中代码的每个目标子插装文件,从所述覆盖率文件中确定对应包含每个子代码集合中代码的每个目标子覆盖率文件。

为了生成源代码的目标覆盖测试报告,在本发明实施例中,针对预先保存的源代码的每个子代码集合,其中子代码集合是指Gcov数据文件中包含的代码集合,从插装文件中确定出该子代码集合中代码对应的目标子插装文件,从覆盖率文件中确定出该子代码集合中代码对应的目标子覆盖率文件,从而确定出每个子代码集合对应的每个目标子插装文件和每个目标子覆盖率文件。

S203:根据所述每个目标子覆盖率文件的内容对应的目标标识信息、以及预先保存的标识信息与读取顺序的对应关系,确定所述每个目标子覆盖率文件中内容的目标读取顺序,采用数据解析引擎基于所述目标读取顺序,并行读取所述每个目标子覆盖率文件中的内容,根据所述每个目标子插装文件的内容、和读取出的所述每个目标子覆盖率文件的内容,同步进行编译得到每个子覆盖测试报告,组合得到所述源代码的目标覆盖测试报告,其中所述目标读取顺序包括从存储目标子覆盖率文件内容的内存的低地址到高地址的读取顺序、和/或从高地址到低地址的读取顺序。

在确定出每个子代码集合对应的每个目标子插装文件和每个目标子覆盖率文件后,由于每个目标子覆盖率文件中内容的存储模式不同,为了便于读取每个目标子覆盖率文件的内容,在本发明实施例中,还预先保存有目标子覆盖率文件的内容对应的标识信息与读取顺序的对应关系。例如,标识大端存储模式的标识信息对应的是从内存的低地址到高地址的读取顺序,标识小端存储模式的标识信息对应的是从内存的高地址到低地址的读取顺序。

针对每个目标子覆盖率文件的内容对应的目标标识信息,根据预先保存的标识信息与读取顺序的对应关系,确定出该目标标识信息对应的目标读取顺序,从而确定出每个目标子覆盖率文件的目标读取顺序。

基于每个目标子覆盖率文件的目标读取顺序,采用数据解析引擎并行读取每个目标子覆盖率文件中的内容,根据读取到的每个目标子覆盖率文件中的内容以及读取到的每个目标子插装文件的内容,同步进行编译得到每个子代码集合对应的子覆盖测试报告。根据生成的每个子代码集合对应的子覆盖测试报告,组合得到源代码的目标覆盖测试报告。其中,根据插装文件的内容和覆盖率文件的内容生成覆盖测试报告的方法属于现有技术,本发明实施例在此不做赘述。

由于本发明实施例中对包含每个子代码集合中代码的目标子覆盖率文件,在不同的目标子覆盖率文件对应不同的标识信息时,不需要使用相互不兼容的编译器,而是根据不同的标识信息对应的目标子覆盖率文件内容的不同读取顺序,采用数据解析引擎基于每个目标子覆盖率文件的目标读取顺序,并行读取每个目标子覆盖率文件中的内容,并根据预先确定的每个子代码集合对应的目标子插装文件的内容、和读取的目标子覆盖率文件的内容,同步进行编译得到对应的子覆盖测试报告,组合得到源代码的目标覆盖测试报告,从而减少了得到覆盖测试报告所需的时间并提高了效率,并且不需要使用多个编译器,降低了资源消耗。

实施例2:

为了确定出测试用例与目标程序的覆盖率的对应关系,在上述实施例的基础上,在本发明实施例中,所述测试用例与目标程序的覆盖率的对应关系的确定过程包括:

获取日志服务器采集的测试用例日志数据、所述网络设备版本服务器采集的程序的可执行链路格式(Executable and Linking Format,ELF)的符号表数据,其中所述符号表数据包括库和所述插装文件中的代码文件;

根据所述测试用例日志数据中的测试用例和进行测试的程序,进行数据关联分析得到第一分析结果,所述第一分析结果包括所述测试用例与目标程序的对应关系;

根据所述代码文件和所述库,进行数据关联分析得到第二分析结果,所述第二分析结果包括所述目标程序分别与目标库、所述目标库中目标第一库函数和所述代码文件的对应关系、以及所述目标库与所述代码文件的对应关系;

根据所述目标覆盖测试报告、所述插装文件的函数和所述代码文件,进行数据关联分析得到第三分析结果,所述第三分析结果包括所述代码文件与所述函数的包含关系、所述函数的覆盖率和代码迭代后变更的函数;

根据所述代码文件包含的所述函数和所述函数的覆盖率,确定所述代码文件的覆盖率,根据所述代码文件的覆盖率、所述目标程序与所述代码文件的对应关系,确定所述目标程序的覆盖率;

根据所述测试用例与所述目标程序的对应关系、所述目标程序的覆盖率,确定所述测试用例与所述目标程序的覆盖率的对应关系。

为了确定出测试用例与目标程序的覆盖率的对应关系,在本发明实施例中,还获取日志服务器采集的测试用例日志数据,其中该测试用例日志数据中包含进行测试用的测试用例、以及采用测试用例测试的程序。获取网络设备版本服务器采集的程序的可执行链路格式的符号表数据,其中该符号表数据中包含库和插装文件中的代码文件。

图3为本发明实施例提供的一种进行代码覆盖率分析的系统的结构示意图,如图3所示,在该系统中还包括有日志服务器,该日志服务器基于Ftp从自动化采集设备采集到测试用例日志数据,网络设备版本服务基于HTTP从自动化测试设备采集插装文件和程序的可执行链路格式的符号表数据,覆盖率服务器基于Ftp从网络设备处采集有覆盖率文件。电子设备获取日志服务器采集的测试用例日志数据,获取网络设备版本服务器采集的插装文件、程序的可执行链路格式的符号表数据,获取覆盖率服务器采集的覆盖率文件。

该电子设备在获取到测试用例日志数据后,根据测试用例日志数据中的测试用例以及进行测试的程序,进行数据关联分析,得到包含测试用例与目标程序的对应关系的第一分析结果。

作为一种可能的实施方式,该电子设备通过文本采集的方式获取到测试用例日志数据中的测试用例以及进行测试的程序,将采集的数据输入到该电子设备自身的测试数据分析器,从而确定出测试用例与目标程序的对应关系的第一分析结果,其中第一分析结果包括测试用例与目标程序的对应关系。

具体为了确定出第一分析结果,在本发明实施例中,所述根据所述测试用例日志数据中的测试用例和进行测试的程序,进行数据关联分析确得到第一分析结果包括:

根据所述测试用例日志数据中测试用例调用的第一用户接口,确定所述程序中包含所述第一用户接口的目标程序,确定所述测试用例与所述目标程序存在对应关系。

在本发明实施例中,由于测试用例在测试程序时,是通过用户接口(Command LineInterface,CLI)实现该测试用例测试对应的目标程序,因此,首先根据测试用例日志数据,确定出测试用例调用的第一用户接口,并确定出程序中包含该第一用户接口的目标程序,从而确定出测试用例与目标程序存在对应关系。其中每个用户接口存在对应的标识信息,标识信息可以是用户接口的编号,还可以是用户接口的名称等。

在获取到可执行链路格式的符号表数据后,根据代码文件和库,进行数据关联分析确定出第二分析结果。

作为一种可能的实施方式,通过ELF采集的方式获取到程序的执行链路格式的符号表数据,并将采集到的数据输入到该电子设备的ELF数据分析器,进行数据关联分析确定出第二分析结果,其中第二分析结果包括目标程序与目标库的对应关系、目标程序与目标库中目标第一库函数的对应关系、目标程序与代码文件的对应关系、目标库与代码文件的对应关系。

具体的,为了确定出第二分析结果,在本发明实施例中,所述根据所述代码文件和所述库,进行数据关联分析得到第二分析结果包括:

根据所述符号表数据中所述目标程序调用的第一库函数、以及所述库中包含的第二库函数,确定所述目标程序调用的与所述第一库函数相同的目标第一库函数以及所述目标第一库函数所在的目标库,并确定所述目标程序与所述目标库中目标第一库函数存在对应关系、所述目标程序与所述目标库存在对应关系;

根据所述目标程序的所述符号表数据中所述代码文件,确定所述目标程序与所述代码文件存在对应关系;

根据所述目标程序与所述目标库的对应关系、所述目标程序与所述代码文件的对应关系,确定所述目标库与所述代码文件存在对应关系。

在获取到符号表数据后,确定出符号表数据中目标程序调用的第一库函数,根据该符号表数据中包含的库,确定出库中包含的第二库函数,根据目标程序调用的第一库函数、以及库中包含的第二库函数,确定出库中包含的第二库函数中与第一库函数相同的目标第一库函数,从而确定目标程序与目标第一库函数存在对应关系。

根据确定出的目标第一库函数,可以确定出目标第一库函数所在的目标库,由于目标第一库函数是由目标程序调用的,因此也可以确定出目标程序与目标库存在对应关系。

针对每个目标程序的符号表数据,确定该目标程序的符号表数据中包含的插装文件中的代码文件,从而可以确定出该目标程序与代码文件存在对应关系;根据目标程序与目标库的对应关系、以及目标程序与代码文件的对应关系,从而确定出目标库与代码文件也存在对应关系。

根据获取到的插装文件,确定出插装文件中包含的代码文件和函数,对目标覆盖测试报告、代码文件和函数进行数据关联分析,得到第三分析结果。

作为一种可能的实施方式,该电子设备通过Gcov采集的方式获取到源代码的目标覆盖测试报告和插装文件,将目标覆盖测试报告和插装文件输入到该电子设备本身的Gcov数据分析器中,进行数据关联分析确定出第三分析结果,其中第三分析结果包括代码文件与函数的包含关系、函数的覆盖率以及代码迭代后变更的函数。

具体的,为了确定出第三分析结果,在本发明实施例中,所述根据所述目标覆盖测试报告和所述插装文件的函数和代码文件,进行数据关联分析得到第三分析结果包括:

根据所述插装文件中的函数和所述代码文件,确定所述代码文件与所述函数存在包含关系,其中所述函数包括程序函数和库函数;

根据所述目标覆盖测试报告和所述函数,确定所述函数中被覆盖的每个目标函数、所述每个目标函数的第一数量以及所述每个目标函数的每一函数行被覆盖的次数;根据所述每个目标函数的第一数量以及所述函数的第二数量,确定所述第一数量和所述第二数量的比值,确定所述函数的覆盖率包括所述每个目标函数的每一函数行被覆盖的次数、以及所述第一数量与所述第二数量的比值;

根据迭代前的所述代码文件包含的函数、迭代后的所述代码文件包含的函数,确定代码迭代后变更的函数。

根据插装文件中的函数和代码文件,代码文件与函数属于同一个插装文件,因此确定代码文件包含每个函数,代码文件与函数存在包含关系。其中函数包括程序函数和库函数,库函数一般是指在编译器提供的可在源程序中调用的函数,程序函数是指在程序中由程序调用的函数。

为了确定函数的覆盖率,在本发明实施例中,根据目标覆盖测试报告,确定目标覆盖测试报告和代码文件中包含的函数,确定目标覆盖测试报告中与代码文件中包含的函数相同的每个目标函数为被覆盖的函数,并确定出每个目标函数的第一数量。根据代码文件中包含的函数的第二数量,确定第一数量与第二数量的比值。

根据目标覆盖测试报告,可以确定出每个目标函数的每一函数行被覆盖的次数,将每个目标函数的每一函数行被覆盖的次数、以及第一数量与第二数量的比值确定为函数的覆盖率。

为了确定代码迭代后变更的函数,在本发明实施例中,根据迭代前的代码文件包含的函数、以及迭代后的代码文件包含的函数,从迭代后的代码文件包含的函数中去除迭代前的代码文件包含的函数,剩余的函数即为代码迭代后变更的函数。

在确定出代码文件中包含的函数的覆盖率后,根据代码文件中的每个函数的覆盖率,综合确定出代码文件的覆盖率。具体的,可以是将每个函数的覆盖率的和值确定为代码文件的覆盖率,也可以是将每个函数的覆盖率的平均值确定为代码文件的覆盖率。

根据代码文件的覆盖率、以及目标程序与代码文件的对应关系,确定目标程序对应的代码文件的覆盖率,由于在该对应关系中,目标程序可能是对应一个代码文件,也可能是对应多个代码文件,因此在确定出目标程序对应代码文件的覆盖率后,若目标程序对应一个代码文件,可以将该代码文件的覆盖率确定为目标程序的覆盖率,若目标程序对应多个代码文件时,则根据多个代码文件的覆盖率,确定目标程序的覆盖率。

根据目标程序的覆盖率,以及第一分析结果中测试用例与目标程序的对应关系,确定测试用例对应的目标程序的覆盖率,根据每个测试用例对应的目标程序的覆盖率,确定出测试用例与目标程序的覆盖率的对应关系。

实施例3:

为了确定出未覆盖完成的目标程序并进行补充覆盖,在上述各实施例的基础上,在本发明实施例中,所述方法还包括:

根据确定的测试用例与目标程序的覆盖率的对应关系,针对每个目标程序,确定该目标程序的每个测试用例的覆盖率,若每个测试用例的覆盖率均小于预设覆盖率阈值,则确定该目标程序未覆盖完成,通过用户接口对该目标程序进行补充覆盖。

根据确定的测试用例与目标程序的覆盖率的对应关系,针对每个目标程序,确定该目标程序的每个测试用例的覆盖率,为了确定目标程序是否覆盖完成,本发明实施例存在预设覆盖率阈值,将每个测试用例的覆盖率与预设覆盖率阈值进行比较,若确定任一测试用例的覆盖率不小于预设覆盖率阈值,则确定该目标程序覆盖完成,若确定每个测试用例的覆盖率阈值均小于预设覆盖率阈值,则确定该目标程序未覆盖完成。

在确定该目标程序未覆盖完成时,确定该目标程序调用的用户接口,并通过用户接口对该目标程序进行补充覆盖。作为一种可能的实施方式,通过该目标程序调用的用户接口,输入新的测试用例对该目标程序进行补充覆盖。

实施例4:

为了确定出冗余测试用例,在上述各实施例的基础上,在本发明实施例中,所述方法还包括:

根据确定的测试用例与目标程序的覆盖率的对应关系,确定每个测试用例覆盖的所述目标程序的目标代码;

根据每个测试用例覆盖的所述目标代码,确定所述目标代码被其余的任一测试用例全部覆盖的目标测试用例,将所述目标测试用例确定为冗余测试用例。

为了确定出冗余测试用例,在本发明实施例中,根据确定出的测试用例与目标程序的覆盖率的对应关系,针对同一目标程序对应的多个测试用例,确定每个测试用例覆盖的该目标程序的目标代码。

针对每个测试用例覆盖的目标代码,判断该测试用例覆盖的目标代码是否被其他测试用例全部覆盖,若确定该测试用例覆盖的目标代码被其他测试用例全部覆盖,则确定该测试用例为冗余测试用例,若确定该测试用例覆盖的目标代码未被其他测试用例全部覆盖,包括该测试用例覆盖的目标代码与其他测试用例覆盖的目标代码全部不同、以及该测试用例覆盖的目标代码与其他测试用例覆盖的目标代码部分相同两种情况时,确定该测试用例不是冗余测试用例。

实施例5:

为了确定测试用例的用例质量指标,在上述各实施例的基础上,在本发明实施例中,所述方法还包括:

根据确定的测试用例与目标程序的覆盖率的对应关系,确定所述测试用例测试的所述目标程序的目标覆盖率;

根据所述目标覆盖率、以及覆盖率范围与用例质量指标的对应关系,确定所述测试用例的目标用例质量指标。

根据确定的测试用例与目标程序的覆盖率的对应关系,为了确定测试用例的用例质量指标,首先针对测试用例测试的目标程序,在该对应关系中确定出测试用例测试的目标程序的目标覆盖率。

在本发明实施例中预先保存有覆盖率范围与用例质量指标的对应关系,其中覆盖率范围中包括的覆盖率数值越小时,覆盖率范围对应的用例质量指标表示的用例质量越差,覆盖率范围中包括的覆盖率数值越大时,覆盖率范围对应的用例质量指标表示的用例质量越好。

根据测试用例测试的目标程序的目标覆盖率,确定目标覆盖率在对应关系中的每个覆盖率范围所处的目标覆盖率范围,并将目标覆盖率范围对应的用例质量指标确定为目标覆盖率的目标用例质量指标。

实施例6:

为了确定测试用例与代码迭代后变更的函数的覆盖率的对应关系,在上述各实施例的基础上,在本发明实施例中,所述方法还包括:

根据所述函数的覆盖率和代码迭代后变更的函数,确定代码迭代后变更的函数的覆盖率;

根据所述测试用例与所述目标程序的对应关系、所述目标程序与所述代码文件的对应关系,确定所述测试用例与所述代码文件存在对应关系;

根据所述代码文件包含的所述函数、代码迭代后变更的函数的覆盖率,确定所述代码文件包含的代码迭代后变更的函数的覆盖率;

根据所述测试用例与所述代码文件的对应关系、所述代码文件包含的代码迭代后变更的函数的覆盖率,确定所述测试用例与代码迭代后变更的函数的覆盖率的对应关系。

根据确定的函数的覆盖率、以及代码迭代后变更的函数,由于函数的覆盖率中包括代码迭代前的函数的覆盖率和代码迭代后的函数的覆盖率,因此可以从函数的覆盖率中确定出代码迭代后变更的函数的覆盖率。

根据代码文件包含的函数、以及确定的代码迭代后变更的函数的覆盖率,确定属于代码文件的代码迭代后变更的函数,并进一步确定出代码文件包含的代码迭代后变更的函数的覆盖率。

根据测试用例与目标程序的对应关系、目标程序与代码文件的对应关系,可以确定出对应同一目标程序的测试用例与代码文件存在对应关系,因此确定出测试用例与代码文件的对应关系。根据确定出的测试用例与代码文件的对应关系、代码文件包含的代码迭代后变更的函数的覆盖率,确定测试用例与代码文件包含的代码迭代变更的函数的覆盖率的对应关系。

作为另一种可能的实施方式,在确定出代码文件包含的代码迭代后变更的函数的覆盖率后,还可以根据目标程序与代码文件的对应关系,确定出目标程序与代码文件包含的代码迭代后变更的函数的覆盖率的对应关系。根据第一分析结果中的测试用例与目标程序的对应关系、以及目标程序与代码文件包含的代码迭代后变更的函数的覆盖率的对应关系,确定出测试用例与代码文件包含的代码迭代后变更的函数的覆盖率的对应关系。

实施例7:

为了确定代码迭代后是否需要补充新用例,在上述各实施例的基础上,在本发明实施例中,所述方法还包括:

根据迭代后的代码文件和迭代前的代码文件,确定迭代后的代码文件的第一代码行数和迭代前的代码文件的第二代码行数;

若所述第一代码行数较所述第二代码行数多,确定迭代后的代码文件补充测试用例。

根据迭代后的代码文件和迭代前的代码文件,确定迭代后的代码文件包含的代码的第一代码行数、以及迭代前的代码文件包含的代码的第二代码行数,若第一代码行数较第二代码行数多,则确定迭代后的代码文件需补充测试用例;若第一代码行数较第二代码行数少,则确定迭代后的代码文件不用补充测试用例。

实施例8:

为了实现程序与库交互链路覆盖率分析,在上述各实施例的基础上,在本发明实施例中,所述方法还包括:

根据所述第二分析结果中的所述目标程序与所述代码文件的对应关系、所述第三分析结果中的所述代码文件与所述函数的包含关系,确定所述目标程序的每个目标函数;

根据所述目标程序的每个目标函数、以及所述目标程序与所述目标库中目标第一库函数的对应关系,确定所述目标程序的每个目标函数调用的目标库中目标第一库函数;

根据所述程序的每个目标函数调用的所述目标库中目标第一库函数、以及所述函数的覆盖率,确定所述程序的每个目标函数调用的所述目标库中目标第一库函数的覆盖率。

为了实现程序与库交互链路覆盖率分析,在本发明实施例中,根据第二分析结果中目标程序与代码文件的对应关系、第三分析结果中的代码文件与函数的包含关系,确定目标程序对应的代码文件包含的每个函数,对应的代码文件包含的每个函数即为目标程序的每个目标函数。

根据目标程序的每个目标函数、第二分析结果中目标程序与目标库中目标第一库函数的对应关系,可以是确定目标程序调用目标库中目标第一库函数时的接口,确定具有该接口的目标程序的目标函数,从而确定出目标程序的每个目标函数调用的目标库中目标第一库函数。

根据目标程序的每个目标函数调用的目标库中目标第一库函数、以及函数的覆盖率,确定出函数的覆盖率中目标第一库函数的覆盖率,从而确定出程序的每个目标函数调用的目标库中目标第一库函数的覆盖率。

实施例9:

为了确定代码文件的目标代码质量指标,在上述各实施例的基础上,在本发明实施例中,所述方法还包括:

根据所述第三分析结果中的所述代码文件与所述函数的包含关系和所述函数的覆盖率,确定所述代码文件的覆盖率;

根据所述代码文件的覆盖率、以及覆盖率范围与代码质量指标的对应关系,确定所述代码文件的目标代码质量指标。

根据第三分析结果中的代码文件和函数的包含关系和函数的覆盖率,确定代码文件包含的每个函数的覆盖率,根据代码文件包含的每个函数的覆盖率,从而确定代码文件的覆盖率。具体的,可以是将代码文件包含的每个函数的覆盖率的平均值确定为代码文件的覆盖率,也可以是将代码文件的每个函数的覆盖率的和值确定为代码文件的覆盖率。

为了确定代码文件的代码质量指标,在本发明实施例中,预先保存有覆盖率范围与代码质量指标的对应关系,根据代码文件的覆盖率,确定在对应关系中代码文件的覆盖率所处的目标覆盖率范围,该目标覆盖率范围对应的代码质量指标即为代码文件的目标代码质量指标。

实施例10:

图4为本发明实施例提供的一种代码覆盖率分析装置的结构示意图,在上述各实施例的基础上,本发明实施例还提供一种代码覆盖率分析装置,所述装置包括:

获取模块401,用于获取网络设备版本服务器采集的插装文件以及覆盖率服务器采集的覆盖率文件,其中所述覆盖率文件的内容对应标识信息;

确定模块402,用于根据预先保存的源代码的每个子代码集合,从所述插装文件中确定对应包含每个子代码集合中代码的每个目标子插装文件,从所述覆盖率文件中确定对应包含每个子代码集合中代码的每个目标子覆盖率文件;

编译模块403,用于根据所述每个目标子覆盖率文件的内容对应的目标标识信息、以及预先保存的标识信息与读取顺序的对应关系,确定所述每个目标子覆盖率文件中内容的目标读取顺序,采用数据解析引擎基于所述目标读取顺序,并行读取所述每个目标子覆盖率文件中的内容,根据所述每个目标子插装文件的内容、和读取出的所述每个目标子覆盖率文件的内容,同步进行编译得到每个子覆盖测试报告,组合得到所述源代码的目标覆盖测试报告,其中所述目标读取顺序包括从存储目标子覆盖率文件内容的内存的低地址到高地址的读取顺序、和/或从高地址到低地址的读取顺序。

进一步地,所述装置还包括:

数据应用模块,用于根据确定的测试用例与目标程序的覆盖率的对应关系,针对每个目标程序,确定该目标程序的每个测试用例的覆盖率,若每个测试用例的覆盖率均小于预设覆盖率阈值,则确定该目标程序未覆盖完成,通过用户接口对该目标程序进行补充覆盖。

进一步地,所述装置还包括:

数据应用模块,用于根据确定的测试用例与目标程序的覆盖率的对应关系,确定每个测试用例覆盖的所述目标程序的目标代码;根据每个测试用例覆盖的所述目标代码,确定所述目标代码被其余的任一测试用例全部覆盖的目标测试用例,将所述目标测试用例确定为冗余测试用例。

进一步地,所述装置还包括:

数据应用模块,用于根据确定的测试用例与目标程序的覆盖率的对应关系,确定所述测试用例测试的所述目标程序的目标覆盖率;根据所述目标覆盖率、以及覆盖率范围与用例质量指标的对应关系,确定所述测试用例的目标用例质量指标。

进一步地,所述装置还包括:

数据关联分析模块,用于所述测试用例与目标程序的覆盖率的对应关系的确定过程包括:获取日志服务器采集的测试用例日志数据、所述网络设备版本服务器采集的程序的可执行链路格式ELF的符号表数据,其中所述符号表数据包括库和所述插装文件中的代码文件;根据所述测试用例日志数据中的测试用例和进行测试的程序,进行数据关联分析得到第一分析结果,所述第一分析结果包括所述测试用例与目标程序的对应关系;根据所述代码文件和所述库,进行数据关联分析得到第二分析结果,所述第二分析结果包括所述目标程序分别与目标库、所述目标库中目标第一库函数和所述代码文件的对应关系、以及所述目标库与所述代码文件的对应关系;根据所述目标覆盖测试报告、所述插装文件的函数和所述代码文件,进行数据关联分析得到第三分析结果,所述第三分析结果包括所述代码文件与所述函数的包含关系、所述函数的覆盖率和代码迭代后变更的函数;根据所述代码文件包含的所述函数和所述函数的覆盖率,确定所述代码文件的覆盖率,根据所述代码文件的覆盖率、所述目标程序与所述代码文件的对应关系,确定所述目标程序的覆盖率;根据所述测试用例与所述目标程序的对应关系、所述目标程序的覆盖率,确定所述测试用例与所述目标程序的覆盖率的对应关系。

进一步地,所述数据关联分析模块,具体用于根据所述测试用例日志数据中测试用例调用的第一用户接口,确定所述程序中包含所述第一用户接口的目标程序,确定所述测试用例与所述目标程序存在对应关系。

进一步地,所述数据关联分析模块,具体用于根据所述符号表数据中所述目标程序调用的第一库函数、以及所述库中包含的第二库函数,确定所述目标程序调用的与所述第一库函数相同的目标第一库函数以及所述目标第一库函数所在的目标库,并确定所述目标程序与所述目标库中目标第一库函数存在对应关系、所述目标程序与所述目标库存在对应关系;根据所述目标程序和所述符号表数据中的所述代码文件,确定所述目标程序与所述代码文件存在对应关系;根据所述目标程序与所述目标库的对应关系、所述目标程序与所述代码文件的对应关系,确定所述目标库与所述代码文件存在对应关系。

进一步地,所述数据关联分析模块,具体用于根据所述插装文件中的函数和所述代码文件,确定所述代码文件与所述函数存在包含关系,其中所述函数包括程序函数和库函数;根据所述目标覆盖测试报告和所述函数,确定所述函数中被覆盖的每个目标函数、所述每个目标函数的第一数量以及所述每个目标函数的每一函数行被覆盖的次数;根据所述每个目标函数的第一数量以及所述函数的第二数量,确定所述第一数量和所述第二数量的比值,确定所述函数的覆盖率包括所述每个目标函数的每一函数行被覆盖的次数、以及所述第一数量与所述第二数量的比值;根据迭代前的所述代码文件包含的函数、迭代后的所述代码文件包含的函数,确定代码迭代后变更的函数。

进一步地,所述数据关联分析模块,还用于根据所述函数的覆盖率和代码迭代后变更的函数,确定代码迭代后变更的函数的覆盖率;根据所述测试用例与所述目标程序的对应关系、所述目标程序与所述代码文件的对应关系,确定所述测试用例与所述代码文件存在对应关系;根据所述代码文件包含的所述函数、代码迭代后变更的函数的覆盖率,确定所述代码文件包含的代码迭代后变更的函数的覆盖率;根据所述测试用例与所述代码文件的对应关系、所述代码文件包含的代码迭代后变更的函数的覆盖率,确定所述测试用例与代码迭代后变更的函数的覆盖率的对应关系。

进一步地,所述数据应用模块,还用于根据迭代后的代码文件和迭代前的代码文件,确定迭代后的代码文件的第一代码行数和迭代前的代码文件的第二代码行数;若所述第一代码行数较所述第二代码行数多,确定迭代后的代码文件补充测试用例。

进一步地,所述数据应用模块,还用于根据所述第二分析结果中的所述目标程序与所述代码文件的对应关系、所述第三分析结果中的所述代码文件与所述函数的包含关系,确定所述目标程序的每个目标函数;根据所述目标程序的每个目标函数、以及所述目标程序与所述目标库中目标第一库函数的对应关系,确定所述目标程序的每个目标函数调用的目标库中目标第一库函数;根据所述程序的每个目标函数调用的所述目标库中目标第一库函数、以及所述函数的覆盖率,确定所述程序的每个目标函数调用的所述目标库中目标第一库函数的覆盖率。

进一步地,所述数据应用模块,还用于根据所述第三分析结果中的所述代码文件与所述函数的包含关系和所述函数的覆盖率,确定所述代码文件的覆盖率;根据所述代码文件的覆盖率、以及覆盖率范围与代码质量指标的对应关系,确定所述代码文件的目标代码质量指标。

下面通过一个具体的实施例对本发明的一种代码覆盖率分析装置进行说明,图5为本发明实施例提供的另一种代码覆盖率分析装置的结构示意图,如图5所示,该代码覆盖率分析装置包括数据采集模块501、数据关联分析模块502和数据应用模块503。

数据采集模块501,用于通过文本采集获取日志服务器采集的测试用例日志数据,将采集到的数据输入到测试数据分析器,进行数据关联分析得到测试用例与目标程序的对应关系。

通过ELF采集获取网络设备版本服务器采集的程序的可执行链路格式ELF的符号表数据,将采集到的数据输入到ELF数据分析器,进行数据关联分析得到目标程序与目标库的对应关系、目标程序与目标第一库函数的对应关系、目标程序与代码文件的对应关系、目标库与代码文件的对应关系。

通过Gcov采集获取网络设备版本服务器采集的插装文件和覆盖率服务器采集的覆盖率文件,将采集到的数据输入到Gcov数据分析器,进行数据关联分析得到代码文件与函数的包含关系、函数的覆盖率、代码迭代后变更的函数。

数据关联分析模块502,用于根据测试用例与目标程序的对应关系、以及目标程序与目标库的对应关系,确定测试用例与目标程序/目标库的对应关系;

根据目标程序与目标库的对应关系、目标程序与目标第一库函数的对应关系、目标库与代码文件的对应关系、目标程序与代码文件的对应关系、代码文件与函数的包含关系、函数的覆盖率,确定目标程序的覆盖率以及目标第一库函数的覆盖率。

根据目标程序与目标库的对应关系、目标程序与目标第一库函数的对应关系、目标程序/目标库与代码文件的对应关系、代码文件与函数的包含关系、函数的覆盖率和代码迭代后变更的函数,确定目标程序与代码文件包含的代码迭代后变更的函数的覆盖率。

根据测试用例与目标程序/目标库的对应关系、以及目标程序的覆盖率和目标第一库函数的覆盖率,确定测试用例与目标程序/目标第一库函数的覆盖率的对应关系,根据测试用例与目标程序的对应关系、目标程序与代码文件包含的代码迭代后变更的函数的覆盖率的对应关系,确定测试用例与代码迭代后变更的函数的覆盖率的对应关系。

数据应用模块503,用于根据数据关联分析的结果进行数据应用,首先第一种应用是确定未覆盖的目标程序,第二种应用是确定冗余测试用例,第三种应用是确定测试用例的用例质量指标和代码文件的目标代码质量指标,第四种应用是确定代码迭代后是否需要补充新用例,第五种应用是实现程序与库交互链路覆盖率分析。

具体的,在进行第一种应用确定未覆盖完成的目标程序时,根据确定的测试用例与目标程序的覆盖率的对应关系,确定未覆盖完成的目标程序,并对未覆盖完成的目标程序进行补充覆盖;具体针对每个目标程序,确定该目标程序的每个测试用例的覆盖率,若每个测试用例的覆盖率均小于预设覆盖率阈值,则确定该目标程序未覆盖完成,通过用户接口对该目标程序进行补充覆盖。

在进行第二种应用确定冗余测试用例时,根据确定的测试用例与目标程序的覆盖率的对应关系,确定冗余测试用例,具体确定每个测试用例覆盖的目标程序的目标代码;根据每个测试用例覆盖的目标代码,确定目标代码被其余的任一测试用例全部覆盖的目标测试用例,将目标测试用例确定为冗余测试用例。

在进行第三种应用确定测试用例的用例质量指标和代码文件的目标代码质量指标时,根据确定的测试用例与目标程序的覆盖率的对应关系,确定测试用例的用例质量指标,具体确定测试用例测试的目标程序的目标覆盖率;根据目标覆盖率、以及覆盖率范围与用例质量指标的对应关系,确定测试用例的目标用例质量指标。根据代码文件和函数的包含关系、以及函数的覆盖率,确定代码文件的覆盖率,根据代码文件的覆盖率以及覆盖率范围与代码质量指标的对应关系,确定代码文件的目标代码质量指标。

在进行第四种应用确定代码迭代后是否需要补充新用例时,根据迭代后的代码文件和迭代前的代码文件,确定迭代后的代码文件的第一代码行数和迭代前的代码文件的第二代码行数,若第一代码行数较第二代码行数多,确定迭代后的代码文件需补充测试用例。

在进行第五种应用实现程序与库交互链路覆盖率分析时,根据第二分析结果中的目标程序与代码文件的对应关系、第三分析结果中的代码文件与函数的包含关系,确定目标程序的每个函数;根据目标程序的每个函数、以及目标程序与目标库中目标第一库函数的对应关系,确定目标程序的每个函数调用的目标库中目标第一库函数;根据程序的每个函数调用的目标库中目标第一库函数、以及函数的覆盖率,确定程序的每个函数调用的目标库中目标第一库函数的覆盖率。

实施例11:

图6为本发明实施例提供的一种电子设备结构示意图,在上述各实施例的基础上,本发明实施例中还提供了一种电子设备,包括处理器601、通信接口602、存储器603和通信总线604,其中,处理器601,通信接口602,存储器603通过通信总线604完成相互间的通信;

所述存储器603中存储有计算机程序,当所述程序被所述处理器601执行时,使得所述处理器601执行如下步骤:

获取网络设备版本服务器采集的插装文件以及覆盖率服务器采集的覆盖率文件,其中所述覆盖率文件的内容对应标识信息;

根据预先保存的源代码的每个子代码集合,从所述插装文件中确定对应包含每个子代码集合中代码的每个目标子插装文件,从所述覆盖率文件中确定对应包含每个子代码集合中代码的每个目标子覆盖率文件;

根据所述每个目标子覆盖率文件的内容对应的目标标识信息、以及预先保存的标识信息与读取顺序的对应关系,确定所述每个目标子覆盖率文件中内容的目标读取顺序,采用数据解析引擎基于所述目标读取顺序,并行读取所述每个目标子覆盖率文件中的内容,根据所述每个目标子插装文件的内容、和读取出的所述每个目标子覆盖率文件的内容,同步进行编译得到每个子覆盖测试报告,组合得到所述源代码的目标覆盖测试报告,其中所述目标读取顺序包括从存储目标子覆盖率文件内容的内存的低地址到高地址的读取顺序、和/或从高地址到低地址的读取顺序。

上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

通信接口602用于上述电子设备与其他设备之间的通信。

存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选地,存储器还可以是至少一个位于远离前述处理器的存储装置。

上述处理器可以是通用处理器,包括中央处理器、网络处理器(NetworkProcessor,NP)等;还可以是数字指令处理器(Digital Signal Processing,DSP)、专用集成电路、现场可编程门陈列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。

实施例13:

在上述各实施例的基础上,本发明实施例还提供了一种计算机可读存储介质,其存储有计算机程序,所述计算机程序被处理器执行如下步骤:

获取网络设备版本服务器采集的插装文件以及覆盖率服务器采集的覆盖率文件,其中所述覆盖率文件的内容对应标识信息;

根据预先保存的源代码的每个子代码集合,从所述插装文件中确定对应包含每个子代码集合中代码的每个目标子插装文件,从所述覆盖率文件中确定对应包含每个子代码集合中代码的每个目标子覆盖率文件;

根据所述每个目标子覆盖率文件的内容对应的目标标识信息、以及预先保存的标识信息与读取顺序的对应关系,确定所述每个目标子覆盖率文件中内容的目标读取顺序,采用数据解析引擎基于所述目标读取顺序,并行读取所述每个目标子覆盖率文件中的内容,根据所述每个目标子插装文件的内容、和读取出的所述每个目标子覆盖率文件的内容,同步进行编译得到每个子覆盖测试报告,组合得到所述源代码的目标覆盖测试报告,其中所述目标读取顺序包括从存储目标子覆盖率文件内容的内存的低地址到高地址的读取顺序、和/或从高地址到低地址的读取顺序。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

技术分类

06120113792924