以前上软件测试课时,看到老师演示的一个统计C语言的测试覆盖率的工具,当时就想不知道.NET下是否有同样的工具。碰巧昨天就发现了clover.net,它能帮你分析那些代码已经经过了测试。 覆盖分析是对需求的实现程度或对程序的执行程度的分析。 覆盖分析包括两部分,即基于需求的覆盖分析和基于结构的覆盖分析。基于需求的覆盖分析是分析测试用例对软件需求的覆盖程度,以证实所选的测试用例满足指定的需求覆盖准则。基于结构的覆盖分析是分析测试用例对被测程序的覆盖程度,以证实所选的测试用例满足指定的结构覆盖准则。 语句覆盖是最起码的结构覆盖要求。语句覆盖要求设计足够多的测试用例,使得程序中每条语句至少被执行一次。 一个程序模块的测试独立路径数等于该模块的McCabe 圈复杂度。 考虑上图所示流程图,要使其达到语句覆盖,只需选取: A=2,B=0,X=3。 但是这个测试还不彻底,如果AND误写成了OR,上面的语句覆盖测试就发现不了。 判定覆盖又称为分支覆盖,它要求设计足够多的测试用例,使得程序中每个判定至少有一次为真值,有一次为假值,即:程序中的每个分支至少执行一次。 判定覆盖测试用例 测试用例 A B X 路径 1 3 0 1 acd 2 2 1 3 abe 对上图来说,设计两组测试输入就可以通过路径ace和abd或路径acd和abe达到判定覆盖。 判定覆盖也不完全,例如上面两个测试用例未能检查沿着路径abd执行时,值是否保持不变。 条件覆盖要求设计足够多的测试用例,使得判定中的每个条件获得各种可能的结果,即每个条件至少有一次为真值,有一次为假值。 条件覆盖测试用例 测试用例 A B X 路径 1 1 0 3 abd 2 2 1 1 abd 对上图来说,要达到条件覆盖,需要足够多的测试用例,使得在A点有A>1,A≤1,B=0,B≠0,在B点有A=2,A≠2,X>1,X≤1。 条件覆盖也不完全,由上例可以看出,条件覆盖并不能保证判定覆盖。 设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个判定本身所有可能结果也至少出现一次。 判定/条件覆盖测试用例 1 2 0 4 ace 2 1 1 1 abd 判定/条件覆盖准则满足判定覆盖准则和条件覆盖准则。判定/条件覆盖准则的缺点是未考虑条件的组合情况。 要求设计足够多的测试用例,使得每个判定中条件结果的所有可能组合至少出现一次。 多重条件覆盖测试用例 1 2 0 4 ace 2 2 1 1 abd 3 1 0 2 abd 4 1 1 1 abd 多重条件覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。 更改的判定/条件覆盖要求设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个判定本身的所有可能结果也至少出现一次。并且每个条件都显示能单独影响判定结果。 if(A and B)...,测试用例1和3说明条件A独立地影响测试结果,测试用例1和2说明条件B独立地影响测试结果,所以测试用例1,2,3是必须的。 测试用例 A B Result 1 T T T 2 T F F 3 F T F 4 F F F 判断每个条件是否能单独影响判定结果的方法是:在固定其它条件值的同时变化要检查的条件。 更改的判定/条件覆盖继承了多重条件覆盖的优点,同时只是线性地增加了测试用例的数量。 if(a>0 && b<0 && c == 1)..., 测试用例 A B C Result 1 T T T T 2 F T T F 3 T F T F 4 T T F F if(a>0 || b<0 || c == 1)..., 测试用例 A B C Result 1 F F F F 2 T F F T 3 F T F T 4 F F T T 程序插装技术(打点) 模拟运行 |