一种测试用例选择方法和装置的制造方法

文档序号:9217116阅读:504来源:国知局
一种测试用例选择方法和装置的制造方法
【技术领域】
[0001] 本发明涉及计算机测试技术,尤指一种测试用例选择方法和装置。
【背景技术】
[0002] 随着计算机技术的发展,计算机程序作为其中一项重要的发展内容,对计算机程 序进行错误定位为测该程序的主要方式。为了产生较好的错误定位效果,目前通常使用的 错误定位技术需要覆盖度很高的测试用例集作为输入,需要收集每个测试用例的覆盖信息 和执行结果,两者缺一不可。
[0003] 然而,在一些程序失效的测试场景下,并没有大量已知执行结果的测试用例可以 用来进行错误定位,例如处于开发过程中的计算机程序。在这种情况下,已知执行结果的测 试用例的数量通常非常少,将这些少量的已知执行结果测试用例用于错误定位时,无法准 确定位出程序的错误语句。在上述场景中场景,测试用例的覆盖信息可以通过插粧的方法 自动收集,但是这些测试用例的执行结果是未知的,需要通过进一步的判断以获取执行结 果;例如可以通过运行所有测试用例来判断执行结果是否正确,即判断所有测试用例的执 行结果是否与预期相符合;再例如,还可以通过构造自动化的测试预言来判断所有测试用 例的执行结果的判定。
[0004] 显然地,现有技术在进行错误定位时,由于需要预先获取所有测试用例的执行结 果,从而导致通过错误定位的效率较低的问题。

【发明内容】

[0005] 为了解决上述技术问题,本发明提供了一种测试用例选择方法和装置,以解决现 有技术在进行错误定位时,由于需要预先获取所有测试用例的执行结果,从而导致通过错 误定位的效率较低的问题。
[0006] 第一方面,本发明提供的一种测试用例选择方法,包括:
[0007] 通过第一测试用例集中每个测试用例运行程序,获取所述第一测试用例集中每个 测试用例对应于程序中每条语句的覆盖信息,其中,所述第一测试用例集包括至少一个失 败测试用例和第二测试用例集;
[0008] 根据所述第一测试用例集中每个测试用例的覆盖信息,将所述第二测试用例集中 的部分所述测试用例添加到第三测试用例集中;
[0009] 通过已添加的第三测试用例集中的每个测试用例定位出所述程序中错误的语句, 以计算出所述程序中每条语句的可疑度。
[0010] 在第一方面的第一种可能的实现方式中,所述第三测试用例集的初始值包括所述 至少一个失败测试用例,所述根据所述第一测试用例集中每个测试用例的覆盖信息,将所 述第二测试用例集中的部分所述测试用例添加到第三测试用例集中之前,还包括:
[0011] 根据所述第一测试用例集中每个测试用例的覆盖信息将所述程序的语句划分为 动态基本块DBB,所述动态DBB中的语句具有相同覆盖信息;
[0012] 根据当前第三测试用例集中每个测试用例的覆盖信息,生成所述动态DBB的当前 最大分组集合,所述当前最大分组集合中的最大分组包括一个或多个所述动态DBB,所述当 前最大分组集合中的每个最大分组被所述当前第三测试用例集中相同的测试用例覆盖;
[0013] 根据所述第一测试用例集中每个测试用例的覆盖信息,将所述第二测试用例集中 的部分所述测试用例添加到第三测试用例集中,包括:
[0014] 从当前第二测试用例集中选择将当前分组集合中的分组划分为第一分组和第二 分组的测试用例,所述已选择的测试用例对所述第一分组和所述第二分组具有不同的覆盖 信息,所述当前分组集合中的分组包括一个或多个所述动态DBB,分组集合的初始值为通过 所述第三测试用例集的初始值生成的最大分组集合;
[0015] 获取所述已选择的测试用例的执行结果,并将所述已选择的测试用例添加到所述 当前第三测试用例集中;
[0016] 当所述当前分组集合中的每个分组均不能被所述当前第二测试用例集中测试用 例划分时,判断所述当前分组集合与通过所述当前第三测试用例集生成的最大分组集合是 否相同;
[0017] 若不同,则将所述当前分组集合中的分组进行合并以形成最大分组,从而根据所 述第一测试用例集中每个测试用例的覆盖信息,继续执行将所述第二测试用例集中的部分 所述测试用例添加到第三测试用例集的操作,其中,所述合并的分组为所述当前分组集合 中被相同数量的正确测试用例和相同数量的失败测试用例覆盖的分组;
[0018] 若相同,则完成所述第三测试用例集的添加操作。
[0019] 根据第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述从当 前第二测试用例集中选择将当前分组集合中的分组划分为第一分组和第二分组的测试用 例,包括:
[0020] 从所述当前第二测试用例集中选择将所述分组均匀的划分为所述第一分组和所 述第二分组的测试用例。
[0021] 根据第一方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中, 从所述当前第二测试用例集中选择的测试用例满足以下条件:
[0022]
,其中,Split(t,gD=min(|gn |,|gi21)
[0023] 其中,S(gi)表示被所述已选择的测试用例t覆盖的分组gi中包含错误语句的程 度,|G〇g|表示根据所述当前第三测试用例集I;形成的分组的数量,sPiit(t,gi)表示所 述已选择的测试用例t将所述分组gi划分为所述第一分组gn和所述第二分组gi2中较小 的一个包含的动态DBB的数量。
[0024] 第二方面,本发明提供的一种测试用例选择装置,包括:
[0025] 获取模块,用于通过第一测试用例集中每个测试用例运行程序,获取所述第一测 试用例集中每个测试用例对应于程序中每条语句的覆盖信息,其中,所述第一测试用例集 包括至少一个失败测试用例和第二测试用例集;
[0026] 添加模块,用于根据所述获取模块获取的第一测试用例集中每个测试用例的覆盖 信息,将所述第二测试用例集中的部分所述测试用例添加到第三测试用例集中;
[0027] 错误定位模块,用于通过所述添加模块添加的第三测试用例集中的每个测试用例 定位出所述程序中错误的语句,以计算出所述程序中每条语句的可疑度。
[0028] 在第二方面的第一种可能的实现方式中,所述第三测试用例集的初始值包括所述 至少一个失败测试用例,所述装置还包括:第一生成模块,用于在所述添加模块根据所述获 取模块获取的第一测试用例集中每个测试用例的覆盖信息,将所述第二测试用例集中的部 分所述测试用例添加到第三测试用例集中之前,根据所述获取模块获取的第一测试用例集 中每个测试用例的覆盖信息将所述程序的语句划分为动态基本块DBB,所述动态DBB中的 语句具有相同覆盖信息;
[0029] 第二生成模块,用于根据当前第三测试用例集中每个测试用例的覆盖信息,生成 所述动态DBB的当前最大分组集合,所述当前最大分组集合中的最大分组包括一个或多个 所述动态DBB,所述当前最大分组集合中的每个最大分组被所述当前第三测试用例集中相 同的测试用例覆盖;
[0030] 则添加模块,包括:选择单元,用于从当前第二测试用例集中选择将当前分组集合 中的分组划分为第一分组和第二分组的测试用例,所述已选择的测试用例对所述第一分组 和所述第二分组具有不同的覆盖信息,所述当前分组集合中的分组包括一个或多个所述动 态DBB,分组集合的初始值为通过所述第三测试用例集的初始值生成的最大分组集合;
[0031] 添加单元,用于获取所述选择单元已选择的测试用例的执行结果,并将所述已选 择的测试用例添加到所述当前第三测试用例集中;
[0032] 判断单元,用于当所述当前分组集合中的每个分组均不能被所述当前第二测试用 例集中测试用例划分时,判断所述当前分组集合与通过所述当前第三测试用例集生成的最 大分组集合是否相同;
[0033] 则所述添加单元,还用于在所述判断单元的判断结果为不同时,将所述当前分组 集合中的分组进行合并以形成最大分组,从而根据所述第一测试用例集中每个测试用例的 覆盖信息,继续执行将所述第二测试用例集中的部分所述测试用例添加到第三测试用例集 的操作,其中,所述合并的分组为所述当前分组集合中被相同数量的正确测试用例和相同 数量的失败测试用例覆盖的分组;或者,
[0034] 所述添加单元,还用于在所述判断单元的判断结果为相同时,完成所述第三测试 用例集的添加操作。
[0035] 根据第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述选择 单元,具体用于从所述当前第二测试用例集中选择将所述分组均匀的划分为所述第一分组 和所述第二分组的测试用例。
[0036] 根据第二方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中, 所述选择单元从所述当前第二测试用例集中选择的测试用例满足以下条件:
[0037]
,其中,Split(t,gD=min(|gn |,|gi21)
[0038] 其中,S(gi)表示被所述已选择的测试用例t覆盖的分组gi中包含错误语句的程 度,|G〇g|表示根据所述当前第三测试用例集I;形成的分组的数量,sPiit(t,gi
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1