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

文档序号:8942985阅读:来源:国知局
语句覆盖信息:可表示成nXm维矩阵,记为MS,其中,矩阵的每一个元素Clj表 示语句 S]在测试用例t 1运行过程中是否被覆盖。如果被覆盖,其值为1,否则为0。
[0041] (2)基本块覆盖信息:可表示成nXw维矩阵,记为MB,其中,矩阵的每一个元素Zlj 表示基本块b,在测试用例t 1运行过程中是否被覆盖。如果被覆盖,其值为1,否则为0。
[0042] (3)执行结果:可表示成η维向量R =〈1^,r2,…,rn>,其中,!Ti (1〈 = i〈 = η)表 示测试用例h的执行结果,如果执行结果为正确的,则r i等于1,否则为0。
[0043] 步骤102,根据各个测试用例的执行结果和覆盖信息,计算各个测试用例的错误诊 断能力。
[0044] 具体地,可以根据各个测试用例的执行结果和覆盖信息,分别计算失败测试用例 和正确测试用例的错误诊断能力,进而得出目标程序中的语句被各个测试用例执行时对执 行结果的影响。
[0045] 其中,失败测试用例是指在目标程序上的执行结果为错误的测试用例,一般而言, 被失败测试用例执行过的语句都有可能包含错误的代码,并且错误的代码一定存在于这些 语句当中。从失败测试用例的执行轨迹看,不同的测试用例覆盖的语句数量可能是不相同, 因而对不同的失败测试用例而言,被列为可疑语句的数量也不尽相同,这说明受到覆盖语 句数量多少的影响,失败测试用例将展现出不同的错误诊断能力。另一方面,在测试用例集 当中,相对正确测试用例,失败测试用例的数量往往是十分有限且较少的,因此,与语句被 正确测试用例覆盖的可能性相比,语句被失败测试用例覆盖的可能性更小。综上所述,由于 失败执行信息较少,在区分诊断能力时更应该重视失败测试用例对参与执行的语句的可疑 度贡献。
[0046] 本实施例中,可以根据失败测试用例的基本块覆盖信息和语句覆盖信息,分别计 算失败测试用例的第一错误诊断因子和第二错误诊断因子,并根据第一错误诊断因子和第 二错误诊断因子计算失败测试用例的错误诊断能力。
[0047] 其中,第一错误诊断因子衡量了测试用例关于基本块覆盖信息的错误诊断能力, 其取值与测试用例覆盖的基本块数量成反比。也就是说,测试用例在执行过程中覆盖的基 本块数目越少,该测试用例的诊断能力将越强。反之,则越弱。当一个失败测试用例在程 序执行过程中只覆盖了一个基本块的时候,第一错误诊断因子的取值将达到最大,此时只 有一个基本块被列为可疑语句范围,该测试用例的诊断能力将达到最大,被执行的语句对 该失败测试用例执行结果的贡献也达到最大值,其与错误的代码关联将被增强。当一个失 败测试用例在程序执行过程中覆盖了全部的基本块时,第一错误诊断因子的取值将达到最 小,目标程序中所有的基本块都将被列为可疑语句范围,该测试用例的诊断能力将达到最 小。
[0048] 具体地,可以采用以下公式计算第一错误诊断因子:
[0049]
[0050] 其中,TCai)为失败测试用例h的第一错误诊断因子,失败测试用例t 1是失败测 试用例集Tf中的一个元素,<z u,zl2, zl3,…,zlw>为&对目标程序P中所有基本块的覆盖特 征。
[0051] 另外,可以采用以下公式计算第二错误诊断因子:
[0052]
,其中 Cij#〇
[0053] 其中,TSai, S])为失败测试用例&对语句s ,的第二错误诊断因子,s ,为目标程 序P中的语句,arf为覆盖s ,的失败测试用例的数量,T f为失败测试用例集合,c u表示语句 s]在测试用例11运行过程中是否被覆盖,如果被覆盖,其值为1,否则为0。
[0054] 综上所述,失败测试用例的错误诊断能力受到其覆盖基本块的数量和覆盖某个语 句时该语句被失败测试用例覆盖情况的影响,可采用以下公式计算得到:
[0055] FKt1, S j) = TCU1) XTSU1, S j)
[0056] 其中,FWai, S])为失败测试用例h对语句s ,的错误诊断能力,s ,为目标程序P中 的语句,Tca1)为失败测试用例^的第一错误诊断因子,Tsa1, s])为失败测试用例^对 语句~的第二错误诊断因子。
[0057] 由于TC和TS总是大于等于1,因而决定了失败测试用例对语句的错误诊断能力 也总是大于等于1。在计算语句包含错误的程度时,执行了该语句的失败测试用例数量越 多且失败测试用例覆盖的基本块越少时,失败测试用例对该语句表现出越强的错误诊断能 力。换句话说,该语句包含错误的可疑度将越大。
[0058] 进一步地,本实施例中,可以计算正确测试用例与失败测试用例之间的相似度,并 根据该相似度计算正确测试用例的错误诊断能力,正确测试用例是指在目标程序上的执行 结果为正确的测试用例。
[0059] 具体地,可以采用以下公式计算正确测试用例与失败测试用例之间的相似度:
[0060]
[0061] 其中,Simai, S])表示正确测试用例^与失败测试用例、,之间的相似度,Iiai)表 示正确测试用例h对应的语句覆盖向量中不为零的元素的数量,n(t ,)表示失败测试用例 tj对应的语句覆盖向量中不为零的元素的数量,t ifl t {c iu|ciu# 0 Λ C _ju乒0, 1〈 = u〈 =η}表示被失败测试用例\和正确测试用例t 同覆盖的语句数量与失败测试用例t ,和 正确测试用例h分别覆盖的语句数量之间的比率。被失败测试用例t ,和正确测试用例t i 共同覆盖的语句越多,Simai, S])值越大,说明失败测试用例t,和正确测试用例t i在执行 轨迹上越相似性。当失败测试用例t,和正确测试用例t i的执行轨迹相同时,Sim(t y S])值 达到最大值1。
[0062] 如果正确测试用例与失败测试用例的相似性越大,则共同覆盖的相同语句越多, 由于失败测试用例必定覆盖了错误的语句,该正确测试用例在执行过程中也可能覆盖了错 误的语句,该正确测试用例执行过的语句是正确语句的可信度将被降低。考虑上述情况,使 用如下的公式来计算正确测试用例h的诊断能力:
[0063]
[0064] 其中,PWai, S])为正确测试用例h对语句s ,的错误诊断能力,s ,为目标程序P中 的语句,Simai, S])表示正确测试用例^与失败测试用例t ,之间的相似度,T f为失败测试 用例集合,Cl]表示语句s ,在测试用例t 1运行过程中是否被覆盖,如果被覆盖,其值为1,否 则为0。
[0065] 步骤103,根据各个测试用例的覆盖信息和错误诊断能力,计算目标程序中的各个 语句的可疑度,并根据各个语句的可疑度定位目标程序中的错误语句。
[0066] 具体地,可以针对目标程序中的各个语句,分别计算执行各个语句的所有失败测 试用例的错误诊断能力之和以及执行各个语句的所有正确测试用例的错误诊断能力之和, 并根据所有失败测试用例的错误诊断能力之和所有正确测试用例的错误诊断能力之和计 算各个语句的可疑度,根据可疑度对目标程序中的各个语句进行排序,从而确定目标程序 中的错误语句。
[0067] 本实施例根据语句在测试用例集上的覆盖信息和每个测试用例的诊断能力来计 算语句的可疑度。测试用例的诊断能力越强,参与测试用例执行的语句对执行结果的影响 越大。因此,可以采用以下公式计算执行目标程序中的语句的所有失败测试用例的错误诊 断能力之和:
[0068]
[0069] 其中,Nrf(S)表示执行了语句S的所有失败测试用例的诊断能力之和,FWa iJ)表 示失败测试用例h对语句s的错误诊断能力,T f为失败测试用例集合。
[0070] 此外,可以采用以下公式计算执行目标程序中的语句的所有正确测试用例的错误 诊断能力之和:
[0071]
[0072] 其中,Nep(s)表示执行了语句S的所有正确测试用例的诊断能力之和,PWa i, s)为 正确测试用例h对语句s的错误诊断能力,T p为正确测试用例集合。
[0073] 进一步地,可采用以下公式计算语句的可疑度:
[0074]
[0075] 其中,H(S)为语句s的可疑度,Nrf(S)表示执行了语句s的所有失败测试用例的 诊断能力之和,凡 p(s)表示执行了语句s的所有正确测试用例的诊断能力之和。
[0076] 在计算每条语句的可疑度后,可以按照语句可疑度大小从高到低对语句进行排 序。
[0077] 例如,测试用例集合包括正确测试用例t2、t4、&和t 7
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1