Test Case Prioritization 中,通过测试用例与运行的 Runtime Trace 进行匹配得到相关的测试用例。并利用测试用例优化排序算法对相关的测试用例进行排序,得到优化结果。现在的优化排序算法有多种,这里不对优化排序算法进行讨论。
Coverage Analysis 中,通过对已被相关测试用例覆盖的 Method 数量,及未被测试用例覆盖到的 Method 数量的分析,可以得到基于代码更新的覆盖率报告。测试人员得到这份报告之后,可以找到未被覆盖到的 Method,并对其进行针对性的开发新的测试用例。以完成对新功能的覆盖。
我们可以看到步骤一,二共同服务于测试用例优化选择和覆盖率分析两个模块。有了测试用例的 Runtime Trace 和 Change Report. 我们可以将 Change 结果与 Runtime Trace 进行匹配,找出能覆盖程序更改的测试用例。同样,对于没有被测试用例覆盖到的 Change 部分。由于没有相关测试用例被找出,我们现有的测试用例是不足的,需要针对未被覆盖到的 Change 部分开发新的测试用例。
而覆盖率作为软件测试的一项重要指标,可以根据已经得到覆盖和未被覆盖的 method 进行求解,即已得到覆盖的 change method 数与总的 change method 之比。
结果
基于以上的回归测试解决方案,我们对一个有着 30 个测试用例的程序进行回归测试,得到如下测试用例优化选择分析报表:
Change Analysis Report
总函数 | 变更函数 | 覆盖数 | 未覆盖 | 覆盖率 |
108 | 12 | 10 | 2 | 83.3% |
表 1 优化选择测试用例: 3 (of Total 30)
Case Name | Cover Changed Method | |
TestCase001 | 5 | details |
TestCase005 | 3 | details |
TestCase013 | 2 | details |
分析报告显示这次代码变更共有 12 个函数发生了更改。在 30 个测试用例中有 3 个测试用例与这些更改相关,它们覆盖了这次代码更改 12 个中的 10 个。而其它 27 的测试用例则与这 12 个代码改动毫不相关。
表 2 回归测试结果分析
全部测试用例 | 优化选择 | 函数变更 | 覆盖率分析 | ||
已覆盖 | 未覆盖 | 覆盖率 | |||
30 | 3 | 12 | 10 | 2 | 83.3% |
原文转自:http://www.uml.org.cn/Test/200903313.asp