获得代码覆盖率的方法及装置的制作方法

文档序号:6602235阅读:185来源:国知局
专利名称:获得代码覆盖率的方法及装置的制作方法
技术领域
本发明涉及计算机及嵌入式领域,特别是涉及获得代码覆盖率的方法及装置。
背景技术
确定代码达到的覆盖率(或称覆盖程度)是测试过程中不可缺少的一步。代码覆盖率的度量是软件质量度量中非常重要的一个指标,因为它可以揭示哪些代码/代码块从没有执行过,这通常是“死代码”或者“不完备测试”的指示信号。在大规模集成电路测试中,获得代码覆盖率也是一个重要的测试步骤。在测试过程中,针对各个测试对象分别进行代码覆盖测试,以及分别得到代码覆盖测试结果;然后将至少两个测试对象的代码覆盖测试结果进行合并,再根据合并后的代码覆盖测试结果获得最终的代码覆盖率。但是,如果测试对象的层级不同,例如测试对象A是模块级测试对象,测试对象B 是系统级测试对象,而测试对象A和测试对象B中有相同的代码,但这相同的代码在测试对象A中被测试到,在测试对象B中未被测试到,则此时获得的测试对象B的代码覆盖率未将该相同的代码计算在内,导致获得的代码覆盖率不准确。或者,测试对象A和测试对象B是同一层级的测试对象,测试对象A和测试对象B 的程序代码不完全相同,但可能有相同的代码,这相同的代码在测试对象A中被测试到,在测试对象B中未被测试到,则此时获得的测试对象B的代码覆盖率未将该相同的代码计算在内,导致获得的代码覆盖率不准确。综上,现有技术中在特殊情况下无法获得最终的代码覆盖率,导致测试结果的准确度较低。

发明内容
本发明提供一种获得代码覆盖率的方法及装置,用于提高获得的代码覆盖率的准确度。一种获得代码覆盖率的方法,包括以下步骤分别对至少两个测试对象进行代码覆盖测试,并标记测试到的代码的代码标识;将该至少两个测试对象中的一选定的测试对象的未标记的代码标识与其他测试对象的已标记的代码标识进行比对;当有已标记的代码标识与未标记的代码标识比对一致时,标记该未标记的代码标识;根据代码标识的标记,获得所述选定的测试对象的代码覆盖率。一种用于获得代码覆盖率的装置,包括测试模块,用于分别对至少两个测试对象进行代码覆盖测试;标记模块,用于标记测试到的代码的代码标识;匹配模块,用于将该至少两个测试对象中的一选定的测试对象的未标记的代码标
4识与其他测试对象的已标记的代码标识进行比对;所述标记模块在有已标记的代码标识与未标记的代码标识比对一致时,标记该未标记的代码标识;统计模块,用于根据代码标识的标记,获得所述选定的测试对象的代码覆盖率。本发明实施例预先为代码设置代码标识,将至少两个测试对象中一选定的测试对象的未标记的代码标识与其他测试对象的已标记(相当于已测试)的代码标识进行比对; 在有比对一致的代码标识时,标记比对一致的代码标识中的未标记的代码标识。其实,该未标记的代码标识对应的代码已在其他测试对象中被测到,因此标记比对一致的代码标识中的未标记的代码标识。现有技术不能够发现某一测试对象中未测到的代码已在其他测试对象中被测到,而本发明实施例能够发现,所以相对于现有技术获得的测试对象的代码覆盖率更准确。


图1为本发明实施例中获得代码覆盖率的主要方法流程图;图2为本发明实施例中获得不同层级的测试对象的代码覆盖率的方法流程图;图3为本发明实施例中第二测试对象的覆盖率报告文件的结构示意图;图4为本发明实施例中虚拟的三层树状结构的示意图;图5为本发明实施例中获得总代码覆盖率的方法流程图;图6为本发明实施例中装置的主要结构图;图7为本发明实施例中装置的详细结构图。
具体实施例方式本发明实施例预先为代码设置代码标识,在至少两个测试对象中选定一测试对象,将该选定的测试对象的未标记的代码标识与其他测试对象的已标记(相当于已测试) 的代码标识进行比对;在有比对一致的代码标识时,标记比对一致的代码标识中的未标记的代码标识。其实,该未标记的代码标识对应的代码已在其他测试对象中被测到,因此标记比对一致的代码标识中的未标记的代码标识。现有技术不能够发现某一测试对象中未测到的代码已在其他测试对象中被测到,而本发明实施例能够发现,所以相对于现有技术获得的测试对象的代码覆盖率更准确。参见图1,本实施例中获得代码覆盖率的主要方法流程如下步骤101 分别对至少两个测试对象进行代码覆盖测试,并标记测试到的代码的代码标识。该至少两个测试对象包括第一测试对象及第二测试对象。本实施例中以一个代码标识表示一行代码为例进行说明。步骤102 将该至少两个测试对象中的一选定的测试对象的未标记的代码标识与其他测试对象的已标记的代码标识进行比对。在本实施例中,将第二测试对象的未标记的代码标识与第一测试对象的已标记的代码标识进行比对。步骤103 当有已标记的代码标识与未标记的代码标识比对一致时,标记该未标记的代码标识。在第一测试对象的已标记的代码标识与第二测试对象的未标记的代码标识无比对一致的代码标识时,可结束流程,或者继续代码覆盖测试或继续将第一测试对象的
5已标记的代码标识与其它测试对象的代码标识进行比对。步骤104 根据代码标识的标记,获得所述选定的测试对象的代码覆盖率。可以理解地,在步骤102中,还可以将第一测试对象的未标记的代码标识与第二测试对象的已标记的代码标识进行比对,以找出实际上在第二测试对象中已被测试而在第一测试对象中未被测试的代码。进一步地,标记该代码的代码标识,并依据新的代码标识的标记统计各测试对象的代码覆盖率。可以理解地,当该至少两个测试对象还包括一第三测试对象或更多测试对象时, 将该第三测试对象或更多测试对象中的未标记的代码标识与第一测试对象或/和第二测试对象的已标记的代码标识进行比对,以此可以找出实际上在第一测试对象或/和第二测试对象中已被测试到而在该第三测试对象或更多测试对象中未被测试的代码。将该代码的代码标识进行标记,依据新的代码标识的标记,即可以统计该第三测试对象或更多测试对象的代码覆盖率。本实施例是对代码标识的比对,如果两段代码的代码标识相同,代码内容不完全相同,也可以进行比对。即本实施例的同一个代码标识既可以表示相同的代码内容,也可以表示内容不完全相同的代码。现有技术是代码内容完全相同的两段代码才能比对,所以在两段代码的作用相同但形式不完全相同时,现有技术无法进行比对,而本实施例可以,因此相对于现有技术能够获得较准确的代码覆盖率。本实施例中每个测试对象都有一个覆盖率报告文件,该覆盖率报告文件包括了测试对象对应的最高层级的信息,以及测试到的代码的代码标识的标记和未测试到的代码的代码标识的信息等信息。本实施例中,层级包括系统级、单元级和模块级。如果两个测试对象的覆盖率报告文件中,代码标识全都相同,但测试对象对应的最高层级不同,仍然无法将两个测试对象对应的代码标识进行比对。因此,本实施例对覆盖率报告文件中的层级关系进行改进。参见图2,本实施例中获得不同层级的至少两个测试对象的代码覆盖率的方法流程如下步骤201 分别对至少两个测试对象进行代码覆盖测试,并获得相应的覆盖率报告文件。步骤202 针对每一个测试对象,在带有层级关系的覆盖率报告文件中标记测试到的代码的代码标识。可以每测试一行代码,在覆盖率报告文件中标记一次;或者对测试对象的测试结束后,统一在覆盖率报告文件中标记。步骤203 确定该至少两个测试对象分别对应的最高层级。步骤204 判断该至少两个测试对象对应的最高层级是否相同,若不同,则继续步骤205,否则继续步骤206。步骤205 将至少两个测试对象的覆盖率报告文件修改到相同的最高层级。举例来说,如需将该至少两个测试对象中的第一测试对象和第二测试对象的覆盖率报告文件修改到相同的最高层级时,可以修改第一测试对象的最高层级,或者修改第二测试对象的最高层级,也可以两个测试对象的最高层级都修改。步骤206 将至少两个测试对象中的一选定的测试对象的未标记的代码标识与该至少两个测试对象中的其他测试对象的已标记的代码标识进行比对。还可以将该选定的测试对象的已标记的代码标识与该至少两个测试对象中的其他测试对象的未标记的代码标识进行比对。可以每测试一个测试对象后,便将该测试对象的未标记的代码标识与之前测试过的测试对象的已标记的代码标识进行比对,其中第一个被测试的测试对象除外。或者, 所有的测试对象均测试完毕后,再对该至少两个测试对象的代码标识进行两两比对。步骤207 在有比对一致的代码标识时,标记比对一致的代码标识中的未标记的代码标识。在无比对一致的代码标识时,可结束流程,或者继续代码覆盖测试或继续对其它测试对象的代码标识进行比对。步骤208 根据代码标识的标记,分别获得该至少两个测试对象的代码覆盖率。在步骤205中提到,需要将至少两个测试对象中的覆盖率报告文件修改到相同的最高层级,下面通过举例方式来详细说明。例如,第一测试对象是模块级的测试对象,第二测试对象是系统级的测试对象。第一测试对象的覆盖率报告文件形如1. 1. 1 (本实施例中χ. χ. χ表示模块级,1. 1. 1表示测试对象标识)行1. 1 (代码标识)-标记(已测试)行1. 2 (代码标识)-未标记(未测试)第二测试对象的覆盖率报告文件形如2 (本实施例中χ表示系统级,2表示测试对象标识)行2. 1 (代码标识)-标记(已测试)2. 1 (本实施例中χ. χ表示单元级,2. 1表示测试对象中子对象标识)行2. 2 (代码标识)-标记(已测试)2. 1. 1行1. 1 (代码标识)-未标记(未测试)由于无法将第一测试对象的最高层级(模块级)与第二测试对象的最高层级(系统级)进行比较,所以现有技术无法将两个测试对象的覆盖率报告文件进行比对,也就无法发现第二测试对象的行1. 1已被测试。为解决该问题,本实施例将第一测试对象的覆盖率报告文件修改为系统级结构。即,在第一测试对象的覆盖率报告文件中增加虚拟的系统级和模块级,使其与第二测试对象的覆盖率报告文件的层级一致。修改后的第一测试对象的覆盖率报告文件形如*(表示填充符)(空)氺· *(空)1. 1. 1行1. 1 (代码标识)-标记(已测试)行1. 2 (代码标识)-未标记(未测试)这样,便满足了同一层级进行比对的要求,可将“*”下的内容与“2”下的内容进行比对,将“*.*”下的内容与“2. 1”下的内容进行比对,以及将“1. 1. 1”下的内容与“2. 1. 1” 下的内容进行比对。还可以有另一种实现方式,将第二测试对象的覆盖率报告文件修改为模块级结构。即,将第二测试对象的覆盖率报告文件中系统级和单元级的内容都虚拟为模块级,使其与第一测试对象的覆盖率报告文件的层级一致。修改后的第二测试对象的覆盖率报告文件形如*·*·*(表示填充符)行2. 1 (代码标识)-标记(已测试)*.*.*(表示填充符)行2. 2 (代码标识)-标记(已测试)2. 1. 1行1. 1 (代码标识)-未标记(未测试)这样,便满足了同一层级进行比对的要求,可将第一测试对象中的“行1. 1和行 1. 2”分别与第二测试对象中的“行2. 1、行2. 2和行1. 1”进行比对。在实际测试中,可能不仅需要获得各测试对象的代码覆盖率,还需要获得所有测试对象的总代码覆盖率。为了统计所有测试对象的总代码覆盖率,就需要每一测试对象的覆盖率报告文件进行合并处理。当各测试对象的最高层级不同的时候,其对应的覆盖率报告文件不能合并处理,这时就需要对覆盖率报告文件进行修改,使各覆盖率报告文件的具有一致的最高层级。为了便于修改覆盖率报告文件,以及便于进行代码标识的比对,本实施例也可以采用树形结构构造覆盖率报告文件的层级关系,其中一个测试对象对应一个最高层级,以及一个覆盖率报告文件的树形结构包括对应最高层级的一个节点和该节点至最低层级的所有子节点。整个设计树的最顶层节点就是设计中的最顶层模块,每个节点的父节点就是包含该节点例化的模块,而每个节点的子节点就是该节点对应模块内的例化模块。每个节点要包含的信息包括1)指向父节点的指针;幻指向子节点数组的指针;幻本节点包括子节点的总代码行数;4)本节点包括子节点的当前已经覆盖的行数力)本节点当前没有被覆盖的具体行号,其中,本实施例中被覆盖即为被测试到。以第一测试对象为模块级为例,第一测试对象的覆盖率报告文件的结构就是一个节点,没有父节点也没有子节点。以第二测试对象为系统级为例,第二测试对象的覆盖率报告文件的结构参见图3所示。在比对前,将第一测试对象的覆盖率报告文件的单一节点结构构造成虚拟的三层树状结构,参见图4所示。然后在比对时,将至少两个测试对象中第一测试对象的一个层级节点的已标记的代码标识与第二测试对象的同一个层级节点的未标记的代码标识进行比对。参见图5,下面通过一个实施例来详细介绍获得总代码覆盖率的方法,包括如下的流程步骤501 分别对至少两个测试对象进行代码覆盖测试,并获得相应的覆盖率报告文件。步骤502 针对每个测试对象,在带有层级关系的覆盖率报告文件中标记测试到的代码的代码标识。步骤503 确定该至少两个测试对象各自对应的最高层级。步骤504 判断该至少两个测试对象对应的最高层级是否相同,若不同,则继续步骤505,否则继续步骤506。
步骤505 将最高层级较低的测试对象的覆盖率报告文件进行处理,使其与最高层级最高的测试对象具有相同的最高层级。例如,最高层级是系统级,则不是系统级的覆盖率报告文件都需要处理。步骤506 将至少两个测试对象中的一选定的测试对象的未标记的代码标识与其他测试对象的已标记的代码标识进行比对。还可以将该选定的测试对象的已标记的代码标识与该至少两个测试对象中的其他测试对象的未标记的代码标识进行比对。也可以对每一个测试对象的未标记的代码标识与其他测试对象的已标记的代码标识都进行比对。步骤507 在有比对一致的代码标识时,标记比对一致的代码标识中的第未标记的代码标识。在无比对一致的代码标识时,可结束流程,或者继续代码覆盖测试或继续对其它测试对象的代码标识进行比对。步骤508 统计所有测试对象的未标记的代码标识和已标记的代码标识的总数。步骤509 根据合并后的数据获得该至少两个测试对象的总代码覆盖率。通过以上描述了解了获得代码覆盖率的实现过程,该过程可由装置实现,下面对该装置的内部结构和功能进行介绍。参见图6,本实施例中用于获得代码覆盖率的装置包括测试模块601、标记模块 602、匹配模块603和统计模块604。测试模块601用于分别对至少两个测试对象进行代码覆盖测试。标记模块602用于标记测试到的代码的代码标识。标记模块602在带有层级关系的覆盖率报告文件中标记测试到的代码的代码标识。匹配模块603用于将至少两个测试对象中一选定的测试对象的未标记的代码标识与其他测试对象的已标记的代码标识进行比对,以及其他测试对象之间代码标识的比对。所述标记模块602在有比对一致的代码标识时,标记比对一致的代码标识中的未标记的代码标识。统计模块604用于根据代码标识的标记,获得各测试对象的代码覆盖率。所述装置还包括构造模块605,参见图7所示。构造模块605用于采用树形结构构造覆盖率报告文件的层级关系,其中一个测试对象对应一个最高层级,以及一个测试对象包括对应最高层级的一个节点和该节点至最低层级的所有子节点。构造模块605还用于确定各测试对象对应的最高层级,在该选定的测试对象和其他测试对象的最高层级不同时,将该选定的测试对象和其他测试对象的覆盖率报告文件修改到一个最高层级。匹配模块603将至少两个测试对象中该选定的测试对象的一个层级节点的未标记的代码标识与其他测试对象的同一个层级节点的已标记的代码标识进行比对。统计模块604,还用于根据代码标识的标记,统计至少两个测试对象的未标记的代码标识和已标记的代码标识的总数,获得该至少两个测试对象的总代码覆盖率。用于实现本发明实施例的软件可以存储于软盘、硬盘、光盘和闪存等存储介质。本发明实施例预先为代码设置代码标识,将至少两个测试对象中一测试对象的未标记的代码标识与其他测试对象的已标记(相当于已测试)的代码标识进行比对;在有比对一致的代码标识时,标记比对一致的代码标识中的未标记的代码标识。其实,该未标记的代码标识对应的代码已在其他测试对象中被测到,因此标记比对一致的代码标识中的未标记的代码标识。现有技术不能够发现某一测试对象中未测到的代码已在其他测试对象中被测到,而本发明实施例能够发现,所以相对于现有技术获得的测试对象的代码覆盖率更准确。并且,当某一测试对象与其他测试对象的最高层级不同时,对该测试对象和/或其他测试对象的层级关系进行改进,以便进行代码标识的比对,进而提高获得的代码覆盖率的准确度。此外,本发明实施例在对该至少两个测试对象中的每一个测试对象的代码覆盖率报告文件根据比对后的代码标识的标记进行修改后,再对这些代码覆盖率报告文件进行合并统计,以获得更为准确的该至少两个测试对象的总代码覆盖率。 显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
1.一种获得代码覆盖率的方法,其特征在于,包括以下步骤分别对至少两个测试对象进行代码覆盖测试,并标记测试到的代码的代码标识;将该至少两个测试对象中的一选定的测试对象的未标记的代码标识与其他测试对象的已标记的代码标识进行比对;当有已标记的代码标识与未标记的代码标识比对一致时,标记该未标记的代码标识;根据代码标识的标记,获得所述选定的测试对象的代码覆盖率。
2.如权利要求1所述的方法,其特征在于,标记测试到的代码的代码标识的步骤包括 在带有层级关系的覆盖率报告文件中标记测试到的代码的代码标识。
3.如权利要求2所述的方法,其特征在于,该覆盖率报告文件采用树形结构构造层级关系,其中一个覆盖率报告文件对应一个最高层级,以及一个覆盖率报告文件包括对应最高层级的一个节点和该节点至最低层级的所有子节点。
4.如权利要求3所述的方法,其特征在于,将该选定的测试对象的未标记的代码标识与其他测试对象的已标记的代码标识进行比对的步骤包括将该选定的测试对象的一个层级节点的未标记的代码标识与所述其他测试对象的同一个层级节点的已标记的代码标识进行比对。
5.如权利要求1或4所述的方法,其特征在于,还包括步骤在将该选定的测试对象的未标记的代码标识与其他测试对象的已标记的代码标识进行比对之前,确定该至少两个测试对象分别对应的最高层级,在该至少两个测试对象分别对应的最高层级不同时,将至少两个测试对象的覆盖率报告文件修改到相同的最高层级。
6.如权利要求1所述的方法,其特征在于,还包括步骤统计该至少两个测试对象的未标记的代码标识和已标记的代码标识的总数,获得该至少两个测试对象的总代码覆盖率。
7.一种用于获得代码覆盖率的装置,其特征在于,包括测试模块,用于分别对至少两个测试对象进行代码覆盖测试;标记模块,用于标记测试到的代码的代码标识;匹配模块,用于将该至少两个测试对象中的一选定的测试对象的未标记的代码标识与其他测试对象的已标记的代码标识进行比对;所述标记模块在有已标记的代码标识与未标记的代码标识比对一致时,标记该未标记的代码标识;统计模块,用于根据代码标识的标记,获得所述选定的测试对象的代码覆盖率。
8.如权利要求7所述的装置,其特征在于,标记模块在带有层级关系的覆盖率报告文件中标记测试到的代码的代码标识。
9.如权利要求8所述的装置,其特征在于,还包括构造模块,用于采用树形结构构造覆盖率报告文件的层级关系,其中一个覆盖率报告文件对应一个最高层级,以及一个覆盖率报告文件包括对应最高层级的一个节点和该节点至最低层级的所有子节点。
10.如权利要求9所述的装置,其特征在于,匹配模块将至少两个测试对象中的一选定的测试对象的一个层级节点的未标记的代码标识与所述其他测试对象的同一个层级节点的已标记的代码标识进行比对。
11.如权利要求7或10所述的装置,其特征在于,还包括构造模块,用于确定至少两个测试对象分别对应的最高层级,在该至少两个测试对象分别对应的最高层级不同时,将至少两个测试对象的覆盖率报告文件修改到相同的最高层级。
12.如权利要求7所述的装置,其特征在于,所述统计模块还用于统计该至少两个测试对象的未标记的代码标识和已标记的代码标识的总数,获得该至少两个测试对象的总代码覆盖率。
全文摘要
本发明公开了一种获得代码覆盖率的方法,用于获得的代码覆盖率的准确度。所述方法包括分别对至少两个测试对象进行代码覆盖测试,并标记测试到的代码的代码标识;将该至少两个测试对象中的一测试对象的未标记的代码标识与其他测试对象的已标记的代码标识进行比对;当有已标记的代码标识与未标记的代码标识比对一致时,标记该未标记的代码标识;根据代码标识的标记,获得所述一测试对象的代码覆盖率。本发明还公开了用于实现所述方法的装置。
文档编号G06F11/36GK102236600SQ201010170650
公开日2011年11月9日 申请日期2010年5月6日 优先权日2010年5月6日
发明者李树杰 申请人:无锡中星微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1