没有最好,只有更好!
软件测试技术基础学习笔记之测试覆盖率
上一篇 /
下一篇 2009-01-10 17:19:25
/ 个人分类:测试基础知识
51Testing软件测试网&i'?
T_C2x|,^.G4N
51Testing软件测试网h^
JF!WD$n*nfu W.JB%m0)}T?
^
{ `1gG0【摘要】在测试方法中粗略的介绍了几种测试方法。其中,白盒测试的动态分析方法中提到逻辑覆盖率测试有:语句覆盖、分支覆盖/判定覆盖、条件覆盖、条件—判定覆盖和路径覆盖。这里将详细阐述逻辑覆盖率测试。
VG%yb2\{(Z051Testing软件测试网/g"YE#Z-B+lQ+v
51Testing软件测试网+p;Pmsf*z51Testing软件测试网L%UXOepd
|#S3vV}dM9N;JSI0准备知识:51Testing软件测试网V$_
Cd!e[K _
`jYE:m;_b;~-E0可执行语句:可执行的一项操作;
4M#z(N~h LVC051Testing软件测试网\%N.WCOI真、假分支:Ture、False51Testing软件测试网cCslhk
51Testing软件测试网7a-B/^6VpN T操作数(Opreand)、操作符(Operator):
UVa'z6g/~051Testing软件测试网@rpd2Q6H
C E*r5a操作数:常量(整数、十六进制数、八进制数、实数、字符、字符串)、变量(简单类型、数组类型、记录类型、指针类型、联合等);51Testing软件测试网Z9_oc@@ j
&D#~"f;V0KR+B#r'@0操作符:单一操作符、二进制操作符、条件操作符、赋值操作符等。51Testing软件测试网(Z'l-nKI2q0i7cV+Q
覆盖率
51Testing软件测试网;Lh)@z:^+^[概念:覆盖率是度量测试完整性的一个手段,是测试有效性的一个度量。51Testing软件测试网+w6`H*HC/mN/L
_
51Testing软件测试网pD eMuD
a计算公式:
.|#CP`#om0 O!?G/Ft{0覆盖率=(至少被执行一次的item数)/item总数
tm9C ba1A-d0
%mv'V3o4IW!\,f0目的:评估测试的有效性,找出弱点,有目的的补充用例。51Testing软件测试网6ZP~
L4P Wx]&l
51Testing软件测试网(M#URl(sa缺点:测试成本随着覆盖率的提高而增加。(在一般的测试中有个指标)51Testing软件测试网r{9T[0o(z'qA-\+f!N
z
分类:
从上面的集中逻辑覆盖测试来看,它们相互补充,尽量达到被测试程序的100%,然而我们还是要明确测试是为了尽可能找出程序中的错误。却没有一种十全十美的测试方法来发现所有的错误,这也体现了测试的局限性。51Testing软件测试网q
~pl9^
功能覆盖(Function Coverage)率,属于黑盒测试范畴。
以上所说的覆盖率都是属于结构化覆盖率的范畴,但是在面向对象领域中却遇到挑战。
3m{,_JrT%WU0
面向对象的覆盖率:关于面向对象的一些特性的测试,如:多态性、继承性、封装性等。
2j)[A%R@-AK0class Base{51Testing软件测试网Ya$RVFd2{Q F
public:void foo(){helper();}
dJ(XyE
wn[0void bar(){helper();}51Testing软件测试网(?qV1t(\Z
private:virtual void helper(){...};};51Testing软件测试网 m(ZF @R1ITS/w
class Derived:public Base{
~eZ?&J|0private:virtual void helper(){...}};51Testing软件测试网U
pR6Ma _oQ,F
对于上面那个程序,如果你测试到了Base.foo()和Dervied.bar(),表面上看,你测试到了Base::helper()和Derived::helper()方法,达到了分支和语句,甚至路径覆盖100%。但是Base::foo()和Base::bar()他们跟Base::helper之间的接口还没有覆盖到,所以必须加强测试。51Testing软件测试网]-^6eVV5E
在面向对象中,上下文是设计比较多的,上下文覆盖是一种收集被测试软件如何执行数据的方法。可以应用于多态、继承和封装的特性,也可以扩展到多线程应用。
pw7j
d}T-Y0
- 继承上下文覆盖(Inheritance Context Coverage):上下文内执行到的判定分支数据量占程序内判定的总数的百分比。
- 基类的方法在其上下文空间中的执行是完全独立于基继承类的上下文空间;继承类的方法在其上下文空间中的执行也独立于其基类的上下文空间。
- 继承上下文判定覆盖率=(累加每个上下文内执行到的判定分支数)/(上下文数+上下文内的判定分支总数)
- 基于状态的上下文覆盖(State-Base Context Coverage)
- 基于状态的类:考虑有状态依赖行为的类。
- 有边界的栈:“空状态”、“半空状态”、“满状态”,“空状态”使用pop()方法就抛出异常,“满状态”使用push()方法也会抛出异常。
- 入口点覆盖(Entry-Point Coverage)/接口点覆盖(Interface Coverage):如上面的有边界栈的类,只测试接口的话,是无法测试边界值的时候会不会抛出异常。
- 白盒覆盖:如判定覆盖覆盖的接口不对应于公共接口的特性。而特定的处理是覆盖不了的。
- 基于上下文状态转移图:描述状态及其迁移路线的图。
- 基于状态的上下文覆盖:对应于被测类对象的潜在状态。
- 基于状态的上下文入口点覆盖率=(累加每个状态内执行到的方法数)/(状态数*类内方法总数)
- 已定义用户上下文覆盖(User-Defined Context Coverage)
- 基于线程的上下文覆盖:应用到维护每个线程的独立的覆盖率。
其他覆盖率(着重了解)
I:}8?G
O)~qV0- 函数覆盖:函数覆盖率=(至少被执行到一次的函数数量)/(系统中函数的总数)
- 指令块覆盖(Inheruction Blocks Coverage):指令快覆盖率=(至少被执行到一次的指令块数量)/(系统中指令块总数) 其中:指令块表示函数内部一系列语句。
- 判定路径覆盖(Decision-to-Decision Paths Coverage):DDP覆盖率=(至少被执行到一次的判定路径数量)/(系统中判定路径总数) 其中:判定路径指的是从函数入口或一个判定的开始到下一个判定的开始。
- 更改条件判定覆盖(Modified Condition/Decision Coverage):为多条件测试的情况提供方便,通过分析条件判定的覆盖来增加尽量少的测试用例。
- 分支条件组合覆盖(Branch Condition Combination Coverage):分支条件组合覆盖率=(被评价到的分支条件组合数)/(分支条件组合总数) 重在组合分支条件覆盖使用的用例
- 过程到过程路径覆盖(Procedure-to-Procedure Path Coverage):针对系统级,或子系统级的。PPP覆盖率=(至少被执行到一次的PPP数量)/(系统总PPP数量)
- Z路径覆盖
- ESTCA覆盖
- LCSAJ覆盖
- ……
如何使用覆盖率
基本原则
衡量覆盖率的标准
- 51Testing软件测试网.BU1A9QKt Mp#t
可自动化性
5E6f6x\JK0 Qz3QA~)|0yN&h0可获得性51Testing软件测试网.S!`O"h P)A7S
- 51Testing软件测试网 CpTw%t
可理解性51Testing软件测试网^ uc`WRe&u2tM
)GMum%B6giD0可维护性
#?'L!oY0M0- 51Testing软件测试网\5Eau.M
完整性51Testing软件测试网{ R)G!Z|}{l
使用最少测试用例来达到覆盖
用N-S图来表示结构化程序中的基本控制结构:顺序型——串行操作、选择型——分支操作、重复型——循环操作。
4m0F&`m6^ LB0
XO*m0g V!T/zwa0其中:A,B,C,D,S均表示要执行的操作,P是可取真假值的谓词,Y表示真值,N表示假值。这些图形可以相互嵌套使用。51Testing软件测试网,P[H%nx6p
对于这些图的测试用例数:直接数执行的操作数,顺序的相乘,选择的相加。
gz@8e)@0
相关阅读:
- vbscript错误代码大全(抄) (redfox229, 2008-7-24)
- 学习vbscript(转) (redfox229, 2008-7-24)
- cmm (redfox229, 2008-8-04)
- 测试 (拉丁心情, 2008-12-01)
- 软件测试技术基础学习笔记之测试基础 (gdou_wzy, 2008-12-27)
- 软件测试常用术语 (applejuzi, 2008-12-28)
- 软件测试技术基础学习笔记之测试过程 (gdou_wzy, 2008-12-28)
- 软件测试技术基础学习笔记之软件质量 (gdou_wzy, 2008-12-30)
- 弱弱的问:为什么需要测试用例 (applejuzi, 2009-1-03)
- 软件测试技术基础学习笔记之测试方法 (gdou_wzy, 2009-1-06)
收藏
举报
TAG:
测试基础知识