测试覆盖率

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

其它覆盖率
继承对覆盖率度量的影响
•测试用例A1测试了base::foo() 和base::helper()之间的接口
{ ... helper(); ... { .. .helper(); ... { ... }
class Base { public: void foo() void bar() private: virtual void helper() }; class Derived : public Base { private: virtual void helper() }; void test_driver() { Base base; Derived derived; base.foo(); derived.bar(); }
(A=2)OR(X>1)
T e
X=X+1
被测程序段流程图
CASE1、CASE2、CASE3能达到100%条件覆盖
逻辑覆盖率
条件覆盖率
a F
(A>1)AND(B=0)
T c
X=X/A
测试用例 A B X CASE1 CASE2
所走路 径
覆盖条件 F1,T2,F3,T4 T1,F2,T3,F4
b
1 0 3 abe 2 1 1 abe
F b
(A>1)AND(B=0)
T c
X=X/A
T e
X=Xபைடு நூலகம்1
被测程序段流程图
逻辑覆盖率
条件覆盖率
a F b
(A>1)AND(B=0)
T c
X=X/A
测试用例 CASE1 CASE2 CASE3
A B X 所走路径 覆盖条件 2 0 3 1 0 1 2 1 1 ace abd abe T1,T2,T3,T4 F1,T2,F3,F4 d T1,F2,T3,F4 F
其它覆盖率
面向对象的覆盖率
结构化覆盖率用来度量测试的完整性已经被大家所接受。但 是这个技术在面向对象领域却遇到了挑战。由于传统的结构 化度量没有考虑面向对象的一些特性,如多态、继承和封装 等。 •继承上下文覆盖(Inheritance Context Coverage),该覆盖率用 于度量在系统中的多态调用被测试得多好。 •基于状态的上下文覆盖(State-Based Context Coverage),该 覆盖用于改进对带有状态依赖行为的类的测试。 考虑面向对象的覆盖率都需要在结构化逻辑覆盖的基础上结 合面向对象的一些特点。
X=X+1 (A>1)AND(B=0)
T c
X=X/A
b
(A=2)OR(X>1)
被测程序段流程图
逻辑覆盖率
路径覆盖率
a F b
(A>1)AND(B=0)
•路径能否全面覆盖在软件测试 中是个重要问题,如果程序中 的每一条路径都得到考验,才 能说程序受到了全面检验。 •即使对于路径数很有限的程序 已经做到了路径覆盖,让然不 能保证被测程序的正确性。 A=2 or X>1写错为A=2 and X>=1 •每种覆盖率度量的时候都有其 局限性,因此要把各种覆盖率 组合起来对测试进行度量。
F b
(A>1)AND(B=0)
T c
X=X/A
F d
(A=2)OR(X>1)
T e
X=X+1
被测程序段流程图
逻辑覆盖率
分支覆盖率
即使判定覆盖率达到100%也会有缺陷发现不了,所以覆盖率只是我们度 量的手段。
a F b
(A>1)AND(B=0)
T c
X=X/A
…… if((A>1)&&(B==0)) X=X/A; A=2 B=0 case1 X=3
软件测试概论之测试覆盖率
学习目标
•掌握各种测试覆盖率的含义 •能计算各种测试覆盖率 •理解覆盖率在白盒测试中所起的作用
课程内容
•覆盖率概念 •逻辑覆盖率 •其它覆盖率
覆盖率概念
覆盖率概念
覆盖率是用来度量测试完整性的一个手段。覆盖率是测试技 术有效性的一个度量。 覆盖率=(至少被执行一次的item数)/ item的总数 •覆盖率大体可以分为两大类:逻辑覆盖和功能覆盖。 白盒 黑盒 •测试用例设计不能一味追求覆盖率,因为测试成本随覆盖率 的增加而增加
设计测试用例,使代码的语句覆盖率达到100% Case1:a=2,b=0,x=3 Case2:a=1,b=0,x=3
逻辑覆盖率
语句覆盖率
即使语句覆盖率达到100%也会有缺陷发现不了,所以覆盖率只是我们度 量的手段。
a F b
(A>1)AND(B=0)
T c
X=X/A
…… if((A>1)&&(B==0)) X=X/A; A=2 B=0 case1 X=3 case1仍然能通过
F d
(A=2)OR(X>1)
T e
X=X+1
if((A==2)&&(X>1)) X=X+1; ……
被测程序段流程图
逻辑覆盖率
分支覆盖率
分支覆盖(Branch Coverage)也叫判定覆盖(Decision Coverage),它的含义是,在测试时运行被测程序后,程序 中所有判断语句的取真分支和取假分支被执行到的比率: 判定覆盖率=(判定结果被评价的次数)/(判定结果的总数) 需要搞清判定(或分支)和判定结果之间的关系;判定结果 是判定的具体取值,为真或者为假。
•测试用例A2测试了base::bar() 和derived::helper()之间的接口 •还需要测试base::foo()和 derived::helper()之间的接口, 以及base::bar()和base::helper() 之间的接口 •需要补充测试用例: base.bar(); derived.foo();
逻辑覆盖率
分支覆盖率
在测试时,首先设计若干个测试用例,然后运行被测程序,使得程序中 每个判断的取真分支和取假分支至少经历一次,即判断的真假值均曾被 满足。
a
A=2 B=0……………………CASE1:路径ace X=3 A=1 B=0……………………CASE2:路径abd X=1 CASE1 CASE2能达到100%分支覆盖率
逻辑覆盖率
路径覆盖率
路径覆盖率要达到100%:有几条路 径就要设计几个用例
在测试时,首先设计若干个测试用例,然后运行被测程序, 要求覆盖程序中所有可能的路径 a
F 测试用例 CASE1 CASE2 CASE3 CASE4 ABX 203 101 211 301 覆盖路径 ace abd abe acd d F T e
(A=2)OR(X>1)
F b
(A>1)AND(B=0)
T c
X=X/A
T e
X=X+1
逻辑覆盖率
分支—条件覆盖率
覆盖条件 a T1,T2,T3,T4 b T1,F2,T3,F4 F1,T2,F3,T4 d F1,F2,F3,F4 F
(A>1)AND(B=0)
测试 用例
A B X 覆盖 所走 组合 路径 ①⑤ ace abd abe abd
逻辑覆盖率
分支—条件覆盖率
在测试时,首先设计若干个测试用例,然后运行被测程序,使得判断中 每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至 少出现一次
a 组合编号 条件取值 ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ A>1,B=0 A>1,B≠0 A≤1,B=0 A≤1,B≠0 A=2,X>1 A=2,X≤1 A≠2,X>1 A≠2,X≤1 标记 T1,T2 T1,F2 F1,T2 F1,F2 T3,T4 T3,T4 F3,T4 F3,T4 被测程序段流程图 d F
A=1 B=0 case2 X=1case1、case2
F d
(A=2)OR(X>1)
T e
X=X+1
if((A==2)||(X<1)) X=X+1; ……
仍然能通过
被测程序段流程图
逻辑覆盖率
条件覆盖率
条件覆盖(Condition Coverage)的含义是,在测试时运行被测 程序后,所有判断语句中的每个条件的可能取值(真值和假 值)出现过的比率: 条件覆盖率=(条件操作数值至少被评价一次的数量)/ (条件操作数值的总数) 需要搞清条件和条件操作数之间的关系:条件操作数是条件 的具体取值,取真或者取假。
逻辑覆盖率
语句覆盖率
在测试时,首先设计若干个测试用例,然后运行被测程序, 是程序中的每个可执行语句至少执行一次 A=2 a B=0……………………CASE1 F (A>1)AND(B=0) T b c X=3 X=X/A A=2 B=1……………………CASE2 X=3 F T (A=2)OR(X>1) CASE1能达到100%语句覆盖 d e X=X+1 CASE2不能达到100%语句覆盖, 只有75%或者50%
T c
X=X/A
ABX CASE1:2 0 3 CASE2:1 0 1 CASE3:2 1 1
F d
(A=2)OR(X>1)
T e
X=X+1
CASE4:3 0 1
被测程序段流程图
逻辑覆盖率
覆盖率计算举例
a F b
(A>1)AND(B=0)
•执行测试用例(A=3,B=0,X=1), 分别计算这种情况下的语句覆盖率 (75%或者50%)、判断覆盖率 (50%)、条件覆盖率(50%)、判 断—条件覆盖率(50%)、路径覆 盖率(25%) •执行测试用例(A=2,B=0,X=3)、 (A=1,B=0,X=1),分别计算这 种情况下的语句覆盖率(100%)、 判断覆盖率(100%)、条件覆盖率 (87.5%)、判断—条件覆盖率 (91.67%)、路径覆盖率(50%)
F d 1、CASE1 CASE2也能达到100%条件覆 盖 2、覆盖了条件的测试用例不一定覆盖了 分支,分支覆盖率50%
(A=2)OR(X>1)
T e
X=X+1
被测程序段流程图
逻辑覆盖率
分支—条件覆盖率
分支条件覆盖(Branch Condition Coverage)也叫判定条件覆盖 (Decision Condition Coverage),它的含义是,在测试时运行 被测程序后,所有判断语句中每个条件的所有可能值(为真 为假)和每个判断本身的判定结果(为真为假)出现的比率: 分支条件覆盖率=(条件操作数值或判定结果至少被评价一 次的数量)/(条件操作数值总数+判定结果总数) 分支条件覆盖率实际上就是分支覆盖率和条件覆盖率的组合。
T c
X=X/A
F d
(A=2)OR(X>1)
T e
X=X+1
被测程序段流程图
其它覆盖率
功能覆盖率
•功能覆盖率(Function Coverage)是属于黑盒测试范畴 •功能覆盖率中最常见的是需求覆盖,其含义是通过设计一定 的测试用例,要求每个需求点都被测试到 需求覆盖=(被验证到的需求数量)/(总的需求数量) •一个需求只有进行了充分的测试才能被认为覆盖到 •功能测试覆盖方面的自动化工具比较少
{ ... }
//Test Case A1 //Tset Case A2
其它覆盖率
继承上下文覆盖
继承上下文覆盖提供了一个可替代 的度量定义,它考虑在每个类的上 下文内获得的覆盖率级别。继承上 下文定义把基类上下文内例行程序 的执行作为独立于继承类上下文内 例行程序的执行。同样,它们在考 虑继承上下文内例行程序的执行也 独立于基类上下文内例行程序的执 行。为了获得100%继承上下文覆盖, 代码必须在每个适当的上下文内被 完全执行。
逻辑覆盖率
条件覆盖率
在测试时,首先设计若干个测试用例,然后运行被测程序,要使每个判 断中每个条件的可能取值至少满足一次。
a 条件 A>1 B=0 A=2 X>1 取值 取真 取假 取真 取假 取真 取假 取真 取假 标记 T1 F1 T2 F2 T3 F3 T4 F4 d F
(A=2)OR(X>1)
CASE1 2 0 3 CASE2 2 1 1 CASE3 1 0 3 CASE4 1 1 1
T c
X=X/A
②⑥
③⑦
F
(A=2)OR(X>1)
T e
X=X+1
④⑧
1、以上四个测试用例覆盖了100%条件、分支 2、从路径角度看仅覆盖了3条路径,漏掉了路径acd
被测程序段流程图
逻辑覆盖率
路径覆盖率
路径覆盖(Path Coverage)的含义是,在测试运行时运行被 测程序后,程序中所有可能的路径被执行过的比率: 路径覆盖率=(至少被执行到一次的路径数)/(总的路径数)
逻辑覆盖率
逻辑覆盖主要类型
•语句覆盖 •判定覆盖 •条件覆盖 •判定—条件覆盖 •路径覆盖
逻辑覆盖率
语句覆盖率
一种说法是所有语句; 一种说法是去掉分支语句(如:if-else、 switch-case、do-while、for); 还有一种说法是有效语句(声明语句不算)
语句覆盖(Statement Coverage)的含义是,在测试运行被测 程序后,程序中被执行到的可执行语句的比率: 语句覆盖率=(至少被执行一次的语句数量)/(可执行的 语句总数) 根据对语句的理解,有两种计算结果: 语句包含所有语句 语句不包括分支语句
相关文档
最新文档