一种定位目标程序中的错误语句的方法和装置的制造方法

文档序号:8942985阅读:204来源:国知局
一种定位目标程序中的错误语句的方法和装置的制造方法
【技术领域】
[0001] 本发明涉及计算机技术领域,具体涉及一种定位目标程序中的错误语句的方法和 装置。
【背景技术】
[0002] 随着计算机技术的迅速发展,程序调试在软件项目开发过程中的地位日益提高, 而在程序调试过程中,错误定位是代价最昂贵且最耗时的活动之一。现有的错误定位方法 通常是基于覆盖差异统计进行的,根据程序中的语句被正确测试用例和错误测试用例覆盖 的信息,通过使用具有一定特点的统计模型,计算语句的可疑度,进而区分语句包含错误的 可疑度大小。
[0003] 具体地,针对程序中的每一条可执行语句s,收集如下四种覆盖参数:<aef,a ep,anf, anp>。其中,每个参数的第一个下标记表示语句s是(用e表示)否(用η表示)被测试 用例覆盖,第二个下标记表示测试用例的执行结果是通过(用P表示)还是失败(用f表 示),每一个参数表示满足相应条件的测试用例的数目。由于只统计了语句被测试用例覆 盖的次数,其区分语句可疑度的能力也受到了一定程度的限制。以著名的Tarantula技术 为例,Tarantula计算语句可疑度的公式依赖于上述4个覆盖参数。由于在一次测试过程 中,对所有的可执行语句来说,测试用例集中的测试用例的数量是一样的,且正确测试用例 和失败测试用例的数目也是一样的,因此,Tarantula在区分语句可疑度时只依赖于14口 如果两条语句被相同数目的正确测试用例和相同数目的失败测试用例覆盖,即使覆盖 了这两条语句的测试用例之间不完全相同,在Tarantula的计算方案中,这两条语句仍将 拥有相同的可疑度值,也就是说这两条语句将不可被区分,从而加大了调试的开销。

【发明内容】

[0004] 本发明提供了一种定位目标程序中的错误语句的方法和装置,以解决现有的错误 定位方法区分语句可疑度的能力受到限制的缺陷。
[0005] 本发明提供了一种定位目标程序中的错误语句的方法,包括以下步骤:
[0006] 在目标程序上运行多个测试用例,获取各个测试用例的执行结果和覆盖信息;
[0007] 根据各个测试用例的执行结果和覆盖信息,计算各个测试用例的错误诊断能力;
[0008] 根据各个测试用例的覆盖信息和错误诊断能力,计算所述目标程序中的各个语句 的可疑度,并根据各个语句的可疑度定位所述目标程序中的错误语句。
[0009] 可选地,所述根据各个测试用例的执行结果和覆盖信息,计算各个测试用例的错 误诊断能力,具体为:
[0010] 根据各个测试用例的执行结果和覆盖信息,分别计算失败测试用例和正确测试用 例的错误诊断能力。
[0011] 可选地,所述测试用例的覆盖信息包括所述测试用例的语句覆盖信息和数据块覆 盖?目息;
[0012] 根据各个测试用例的执行结果和覆盖信息计算失败测试用例的错误诊断能力,具 体为:
[0013] 根据所述失败测试用例的基本块覆盖信息和语句覆盖信息,分别计算所述失败测 试用例的第一错误诊断因子和第二错误诊断因子,并根据所述第一错误诊断因子和所述第 二错误诊断因子计算所述失败测试用例的错误诊断能力。
[0014] 可选地,根据各个测试用例的执行结果和覆盖信息计算正确测试用例的错误诊断 能力,具体为:
[0015] 计算所述正确测试用例与失败测试用例之间的相似度,并根据所述相似度计算所 述正确测试用例的错误诊断能力。
[0016] 可选地,所述根据各个测试用例的覆盖信息和错误诊断能力,计算所述目标程序 中的各个语句的可疑度,具体为:
[0017] 针对所述目标程序中的各个语句,分别计算执行各个语句的所有失败测试用例的 错误诊断能力之和以及执行各个语句的所有正确测试用例的错误诊断能力之和,并根据所 述所有失败测试用例的错误诊断能力之和所述所有正确测试用例的错误诊断能力之和计 算各个语句的可疑度。
[0018] 本发明还提供了一种定位目标程序中的错误语句的装置,包括以下步骤:
[0019] 获取模块,用于在目标程序上运行多个测试用例,获取各个测试用例的执行结果 和覆盖ig息;
[0020] 第一计算模块,用于根据各个测试用例的执行结果和覆盖信息,计算各个测试用 例的错误诊断能力;
[0021] 第二计算模块,用于根据各个测试用例的覆盖信息和错误诊断能力,计算所述目 标程序中的各个语句的可疑度;
[0022] 定位模块,用于根据各个语句的可疑度定位所述目标程序中的错误语句。
[0023] 可选地,所述第一计算模块,包括:
[0024] 第一计算子模块,用于根据各个测试用例的执行结果和覆盖信息,计算失败测试 用例的错误诊断能力;
[0025] 第二计算子模块,用于根据各个测试用例的执行结果和覆盖信息,计算正确测试 用例的错误诊断能力。
[0026] 可选地,所述测试用例的覆盖信息包括所述测试用例的语句覆盖信息和数据块覆 盖?目息;
[0027] 所述第一计算子模块,具体用于根据所述失败测试用例的基本块覆盖信息和语句 覆盖信息,分别计算所述失败测试用例的第一错误诊断因子和第二错误诊断因子,并根据 所述第一错误诊断因子和所述第二错误诊断因子计算所述失败测试用例的错误诊断能力。
[0028] 可选地,所述第二计算子模块,具体用于计算所述正确测试用例与失败测试用例 之间的相似度,并根据所述相似度计算所述正确测试用例的错误诊断能力。
[0029] 可选地,所述第二计算模块,具体用于针对所述目标程序中的各个语句,分别计算 执行各个语句的所有失败测试用例的错误诊断能力之和以及执行各个语句的所有正确测 试用例的错误诊断能力之和,并根据所述所有失败测试用例的错误诊断能力之和所述所有 正确测试用例的错误诊断能力之和计算各个语句的可疑度。
[0030] 本发明根据测试用例的覆盖信息和执行结果区分不同测试用例的错误诊断能力, 并根据各个测试用例的错误诊断能力计算目标程序中的各个语句的可疑度,进而定位目标 程序中的错误语句,能够实现对错误语句的快速定位,减少程序调试的开销。
【附图说明】
[0031] 图1为本发明实施例中的一种定位目标程序中的错误语句的方法流程图;
[0032] 图2为本发明实施例中的一种定位目标程序中的错误语句的装置结构图。
【具体实施方式】
[0033] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
[0034] 需要说明的是,如果不冲突,本发明实施例以及实施例中的各个特征可以相互结 合,均在本发明的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况 下,可以以不同于此处的顺序执行所示出或描述的步骤。
[0035] 本发明实施例提供了一种定位目标程序中的错误语句的方法,如图1所示,包括 以下步骤:
[0036] 步骤101,在目标程序上运行多个测试用例,获取各个测试用例的执行结果和覆盖 信息。
[0037] 具体地,可以在目标程序上运行测试用例集中的所有测试用例,通过插粧的方法 收集各个测试用例的覆盖信息,并根据各个测试用例的输出分别记录各个测试用例的执行 结果。
[0038] 其中,测试用例集包含多个测试用例,测试用例的覆盖信息包括测试用例的语句 覆盖信息和数据块覆盖信息。
[0039] 本实施例中,目标程序P由m个语句和w个基本块构成,可分别表示为P = (S1, S2,…,sm}和P = Od1, b2,…,bj。在目标程序P上运行的测试用例集是T = It1, t2,… ,tn}。以测试用例集T中的测试用例作为输入执行目标程序P,通过在目标程序中插粧的方 法记录语句和基本块的执行情况,并记录测试用例执行结果是正确还是失败。如果测试用 例的执行结果与预期结果一致,则将测试用例的执行结果标记为正确的;如果与预期结果 不一致,则将测试用例的执行结果标记为错误的。根据执行结果,测试用例集T可以进一步 划分为两个不相交的集合T p和T f,其中,Tp由T中的正确测试用例构成,Tf由T中的失败 测试用例构成。在目标程序P上运行测试集T中的各个测试用例后,可分别收集到如下的 覆盖信息及执行结果:
[0040] (1)
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1