说软件测试覆盖率统计的相关事情

上一篇 / 下一篇  2012-04-13 09:03:59 / 个人分类:杂谈

What?51Testing软件测试网8Q!r(w%a*ExB.|'dIW

  先说说什么是代码覆盖率: 它是反映测试用例对被测软件覆盖程度的重要指标,也是衡量测试工作进展情况的重要指标。它是对测试工作进行量化的重要指标之一。51Testing软件测试网3XP Prqy"mr

2zO+]QMDN0  我们平时所说的测试覆盖率分为三大类:51Testing软件测试网'hH7X]j$}M

U5lhL$G0  1、行覆盖率度量被测代码中每个可执行语句是否被执行到51Testing软件测试网 bmR+ut

a @y d$N\D"T051Testing软件测试网 a$L E!n,`v

intfoo(inta,intb)
0T g W AW0{  return  a / b;
1P#X2H j)l]0}

#y'_DB,}051Testing软件测试网/z(Q/k&M#ZvAb

+{g;G"i4Mc0  测试用例

UCQC-}0

L"c$g7w-e awZ.\051Testing软件测试网#yvgs8e4b,_p&rO

TeseCase:  a = 10, b = 5
51Testing软件测试网!X4X Y*N%N

SJuCj0]051Testing软件测试网 W!N h+Dt#M

  2、分支覆盖率:度量程序中每一个判定的分支是否都被测试到

[ CXGqj&J] h0

V#p"h"x7s3\r0  3、条件覆盖率:度量判定中的每个子表达式结果true和false是否被测试到

:R8F_@(c'U.D#o o{0

e3n0uVY[!u$Y v051Testing软件测试网 sFa!Q:N$V/WUS;m

intfoo(inta,intb)
r*O3cd4]5_S|8v.p0{     if(a < 10 || b < 10)// 判定  {        return0;// 分支一   }    else   {       return1;// 分支二    }51Testing软件测试网$Fv sBUS
}

E BkDV(cKZ0

fu-e N S&T051Testing软件测试网TF,g o Pj;K2E(T

  分支覆盖率100%51Testing软件测试网C;Z4\^~@

51Testing软件测试网:nL;VNV3L

o7u1@)B)b'|8F0
TestCaes1: a = 5, b = 任意数字  覆盖了分支一51Testing软件测试网t!KL!K;wG2|
TestCaes2: a = 15, b = 15          覆盖了分支二
51Testing软件测试网 iA ojN \-V6a

51Testing软件测试网"?2a8[%lOc8~#_

51Testing软件测试网.B.Ce!?f#Q

  条件覆盖率100%

)N"U[i4w sx9z051Testing软件测试网r4m7cxq!W+ZAnb

51Testing软件测试网n#E(y3Z \)B

TestCase1: a = 5, b = 5    truetrue
']wEOD3f V} BA0TestCase2: a = 15, b = 15  false,false

\0}tX{_ wM0d k7d0

RN9a3g&P$j051Testing软件测试网DX KM9z S;B

  我想这里,大家可能会问这样的几个问题。100%的行覆盖率能证明代码是正确的吗?51Testing软件测试网 \L)wafwJ

51Testing软件测试网 fL ]? G

  100%的条件覆盖能否代表100%的分支覆盖?51Testing软件测试网vtJ9@-Jye;Q o

51Testing软件测试网Q;}.Y8X5c\W b*s6e7I

  当然,答案非常明显,测试覆盖率仅仅能够告诉我们什么没有被测试,根本就回答不了软件是否经过了有效测试!上面条件覆盖的例子都只覆盖率分支一,对于分支二都没有涉及到。51Testing软件测试网'Q_|h`f\&]6RSA+{

2^\RY0{"f-V!] Dy0  WHY51Testing软件测试网1K aq#y7m2J1|8t&L

51Testing软件测试网UdNtv#c)H+^

  为什么我们要做覆盖率统计?51Testing软件测试网*Gj3C[&Z9h$v.L6c)c

51Testing软件测试网5Tx"Q8gnp[)^S

  既然测试覆盖率不能证明代码是正确的,那么它存在又有什么意义了?有过开发,测试经验的同学都能体会到,覆盖率能够帮助我们发现代码的一些问题,如下:51Testing软件测试网!^ k;jA|%z

51Testing软件测试网OLMg7a!c5} ]&mUW

  1、被测系统中有没有存在代码,没有被当前的测试用例集所覆盖的

7jV3Y-GW8] q051Testing软件测试网w }k$i(v4s

  2、找出冗余的代码,提高开发质量

2Ln%}!W F(@I;_P051Testing软件测试网:AHV.S K9?@9q

  3、可以及时反馈当前系统的测试质量,间接衡量测试的质量。51Testing软件测试网8C&G-g4S2_$Bl#n-n

HOW

J E%f H;m:N/G;CWF0  介绍一个工具:

g&mYn1@IQ?0

*}/VRdL8LE0  1、Cobertura的使用步骤:

;}M F6^e,K mV0

8n2_?m2^S0    a)插桩: 通过修改指定class文件的字节码来插入统计标签,插桩信息会保存在cobertura.ser中51Testing软件测试网}?#Y2RcH6p

51Testing软件测试网|*j zbs{s

    b)部署 :  将插桩完的jar包重新打包,替换掉原来的包51Testing软件测试网'D_+r%xk F

51Testing软件测试网!t:~ pvLA][

    c)执行测试件 : 需确保所调用服务与所部署环境的正确对应51Testing软件测试网e#r$P*a2pW {%S-}c

1s2X'R1f,G0    d)生成报告 : 通过脚本结束服务, 读取cobertura.ser生成报告

2aty%?V?0

a!k8q1_9_ r0  2、需要掌握的插桩命令51Testing软件测试网nfxW/D6n4w-^

*Si6j4B2M*b0    –includeClasses     需要包括的类名

B@*rr3F)\0X }:{S051Testing软件测试网MB&n7lp!uIr

    –excludeClasses    需要排除的类名

,_Maa@ KL0

s[P x1q7@0    –ignoreTrivial         将set方法,get方法,构造方法排除在统计范围之外

9Gm3V1@3ZdZ,l051Testing软件测试网eg&Hr:h7u

  3、覆盖率报告

1Q*hr oq.p051Testing软件测试网pKI$w1w8gId)lf0Z

  生成报告的命令: sh cobertura_war.sh report

2lx] [n,Z|(Ui.N051Testing软件测试网R,}!M2u]S p(m%r

  4、使用工具前,应该知道的事51Testing软件测试网:qbY"t3W%Y:Sh]

T6EeEfX(Q6j:N0    A)你要统计的应用类型: jar包,war包或者是ear包?

Dm V#@[5x1f0

B f$I@)Wh0    B)如果是web应用,那么所用的java容器是jetty还是jboss? 启动目录在哪里?

6_O*t0n Y]ZAD051Testing软件测试网5M;p3?;J/FA)ccK*S

    C)阅读应用的启动脚本,确定它是如何工作的,使用的是哪个包51Testing软件测试网 b6Sa]\(U6@c7M { d

7uI(d c*W8D9o0    D)请确定你需要统计覆盖率的范围

:g'l0l g6BHK$U051Testing软件测试网)Cu1H,LTj

    E)是否需要忽略掉对一些模型的无关代码的统计,例如模型的set,get,构造方法51Testing软件测试网i~;|3C ~5k3Qv c?@Q

51Testing软件测试网7LG`9tR{p3PCi

  当然还有很多其他的工具,不过目前在用的就是Cobertura,相关的工具可以去google去搜搜!51Testing软件测试网8Czo.U5UF


TAG:

 

评分:0

我来说两句

Open Toolbar