既然选择远方,便只顾风雨兼程……

测试覆盖率之一——测试覆盖率分类

上一篇 / 下一篇  2008-12-08 23:10:11 / 个人分类:测试覆盖率系列

   关于覆盖率,网络上最常见的两个词应该是“测试覆盖率”(Test Coverage)和”代码覆盖率“(Code Coverage)。今天就来探探这两个东西。51Testing软件测试网-_ f,]*b\t{z.z8s
   在测试里面,一般会将测试覆盖率分为两个部分,即”需求覆盖率“和”代码覆盖率“。可以看到,代码覆盖率其实是测试覆盖率的一部分而已。其中,最常讨论和关心的是”代码覆盖率“,代码覆盖率又分为程序语句和代码行覆盖,分支覆盖条件覆盖。对于这些概念,我们逐个解释。51Testing软件测试网fZl y4jf|2Au2Fd
  需求覆盖率:如果需求已经定义好,这个时侯我们就需要考虑需求覆盖率了。这个时候需要注意的是,这里的需求不仅仅是指功能需求,还要包括性能需求。衡量需求覆盖率的最直观的方式是我们有多少功能点,我们有多少性能点要求,这些将作为分母;我们写了多少测试用例,覆盖了多少模块,多少功能点,我们的性能测试用例考虑了待测程序多少性能点,这些作为分子。51Testing软件测试网.O1G&t,Q^ D
  代码覆盖率:为了更加全面的覆盖,我们可能还需要测试程序的流程,我们可能会考虑到一个函数的数据的输入与输出,甚至是每一行代码的执行情况,代码的每一条逻辑和分支,这个时候我们的测试执行情况就以代码覆盖率来衡量,这也是我们常在单元测试中念叨的覆盖率覆盖率的问题。
*oqz:p*U l v k0  语句覆盖:换个名字叫做代码行覆盖率,这就是监视每行代码是否在用例(当然之所有的)中是否被执行到,准确点说是我们的用例里面大概执行了百分之多少的语句/代码行数。需要注意的是,即使所有的语句都被执行到,也不一定执行到了所有的路径。比如有五条语句:ABCDE,如果我们执行了用例覆盖了ABCDE,另外一个用例这个时候我们覆盖了所有语句,但是可能还存在一个路径(如ABC)没有执行,例如:
C l,a2j2B^hy0public verifyToken(string yourname, string yourtitle)51Testing软件测试网V2[OhW m|F
{51Testing软件测试网 j9CV%k!vP"f$g
A   output(”Hello, my dear friends“);51Testing软件测试网%_K;\9yr O#y
B   if(yourname == "uniquestudiowcd")51Testing软件测试网_e9G [ MU
   {51Testing软件测试网"h\ q\ x.o,Uh}
C      output("Hello, Aaron");
xN g:Y1zr6J/\0   }
2n]/j_:J3t c?2T0D   if(yourtitle == "tester")51Testing软件测试网nd"wF$EW;H9^ nw
   {51Testing软件测试网lsAW"DZ-C
E     output("Hello, my dear tester");51Testing软件测试网*Ej"K.@mu9?
   }51Testing软件测试网o8NW#K]a P
}51Testing软件测试网 LDQJ5d
这个时候我们输入参数”uniquestudiowcd“和”tester“覆盖到了所有的语句,但是我们漏掉了一个路径:即输入参数”uniquestudiowcd“和”coder“。
#S z}&e,i1U}nKv'j0  分支覆盖率:我们也给它换个名字即”路径覆盖率“,尽管并不完全对。在上面的例子中,如果我们仅考虑了第一个用例(即输入参数”uniquestudiowcd“和”tester“),我们的语句覆盖率为100%,带式路径覆盖率可就低了,因为它存在ABD,ABCD,ABCDE,ABDE等等很多路径。51Testing软件测试网5Y]d h:q]5}OC4U
  条件覆盖率:这也就是为什么不能说”分支覆盖“不同于”路径覆盖“的原因所在。如果我们在一个IF语句中加入了判断组合,那就要考虑更多的问题了,因为主要出现在条件语句中,所以我们称之为”条件覆盖“。我们更改上述示例代码:51Testing软件测试网"M$cJH$zi9x
public verifyToken(string yourname, string yourtitle,string gendar)51Testing软件测试网L w%{S tW-] p R(J
{
@Tzt pOJ/Y;`z~0A   output(”Hello, my dear friends“);51Testing软件测试网(i0rKpE
B   if(yourname == "uniquestudiowcd" && gendar == ”man“)
;iF R-NcS0   {51Testing软件测试网$K2C1`y_ I
C      output("Hello, Aaron");51Testing软件测试网-} Gn9\;xtn
   }51Testing软件测试网WjicH1\_
D   if(yourtitle == "tester")51Testing软件测试网]}u SM3R`1yCJo
   {
[!?{/l?K)j0E     output("Hello, my dear tester");
2BG.{s/y(~0   }
r:k.}I)|#vLt0X1f5I0}
*[;M"e/U&f&h1]9Y6k5h0很明显即使我们输入参数”uniquestudiowcd“”tester“,”woman“和”uniquestudiowcd“”tester“”man“,这两个用例的路径走的分支是一样的,但是条件覆盖不一样,实际上两者的”路径“也是不一样的。
~4}D(a%^Gg8T+z4f,k0    上面主要介绍的测试覆盖率的一些基本知识,在关于测试覆盖率的第二篇文章《测试覆盖率之二——测试覆盖率有什么用》中,我将介绍归纳一下测试覆盖率的用处,或者说测试覆盖率的意义。
{$J}2|8B#C*J?0     个人观点,仅供参考~ 如有问题请联系unique.wuchaodong@hotmail.com
qL:Vt*f0

TAG: 语句覆盖 条件覆盖 分支覆盖 路径覆盖 测试职业历程 测试覆盖 代码覆盖 测试覆盖率系列

 

评分:0

我来说两句

Open Toolbar