收藏 分享(赏)

10-测试覆盖率专题.ppt

上传人:cjc2202537 文档编号:653606 上传时间:2018-04-17 格式:PPT 页数:61 大小:2.45MB
下载 相关 举报
10-测试覆盖率专题.ppt_第1页
第1页 / 共61页
10-测试覆盖率专题.ppt_第2页
第2页 / 共61页
10-测试覆盖率专题.ppt_第3页
第3页 / 共61页
10-测试覆盖率专题.ppt_第4页
第4页 / 共61页
10-测试覆盖率专题.ppt_第5页
第5页 / 共61页
点击查看更多>>
资源描述

1、,2011-2012,天津城市建设学院电子与信息工程系唐国峰,软件测试技术与质量保证,测试覆盖率,5.1 覆盖率概念5.2 逻辑覆盖率5.3 功能覆盖率5.4 如何使用覆盖率,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5.1 覆盖率概念 覆盖率是用来度量测试完整性的一个手段。覆盖率的种类有很多,我们经常接触到的覆盖率大体上可以划分为两大类:逻辑覆盖和功能覆盖。现在越来越多的测试工具都能够支持覆盖率测试,这在很大程度上方便了测试工作者的工作,便于统计覆盖率。 但是,度量本身并不包含测试技术,因此种类繁多的覆盖率只是测试技术有效性的一个度量。,5 测试覆盖率,2012年3月1日

2、 天津城市建设学院电子与信息工程系 唐国峰,第五节 测试覆盖率,5.2 逻辑覆盖率 覆盖率中最常见也是最常使用的就是逻辑覆盖率(Logical Coverage),它也在别的书中被称之为代码覆盖率(Code Coverage)或结构化覆盖率(Structural Coverage)。逻辑覆盖属于白盒测试的范畴。经常见到的有: 语句覆盖(Statement Coverage) 判定覆盖(Decision Coverage) 条件覆盖(Condition Coverage) 判定条件覆盖(Decision Condition Coverage) 路径覆盖(Path Coverage) 函数覆盖(F

3、unction Coverage),2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5 测试覆盖率,第五节 测试覆盖率,5.2 常见的逻辑覆盖率 覆盖率中最常见也是最常使用的就是逻辑覆盖率(Logical Coverage),它也在别的书中被称之为代码覆盖率(Code Coverage)或结构化覆盖率(Structural Coverage)。逻辑覆盖属于白盒测试的范畴。经常见到的有: 指令块覆盖(Instruction Blocks Coverage,IB Coverage) 判定路径覆盖率(Decision-to-Decision Paths Coverage,DDP Cov

4、erage) 更改条件判定覆盖(Modified Conditions/Decisions Coverage,MC/DC Coverage) 分支条件组合覆盖(Branch Condition Combination Coverage) Z路径覆盖(Z Path Coverage),2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5 测试覆盖率,第五节 测试覆盖率,5.2.1 语句覆盖 语句覆盖(Statement Coverage)的含义是:在测试时,首先设计若干个测试用例,然后运行被测程序,使程序中的每个可执行语句至少执行一次。语句覆盖率的公式:语句覆盖率=(至少被执行一次的

5、语句数量)/(可执行的语句数量),2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5 测试覆盖率,第五节 测试覆盖率,5.2.1 语句覆盖 语句覆盖是逻辑覆盖中最简单的覆盖。从度量的角度看,必须始终跟踪执行语句的情况,然后同所有可执行的语句进行比较。语句覆盖是比较适合自动化测试的,也是比较容易理解的。同时对不完整的语句覆盖进行分析也较为容易,几乎对所有代码达到100%的语句覆盖率是现实的。 但是,语句覆盖不是测试完整性方面的一个好的度量。,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5 测试覆盖率,第五节 测试覆盖率,5.2.1 语句覆盖例1A:1. if CO

6、NDITION then2. DO_SOMETHING;3. end if;4. ANOTHER_STATEMENT; 我们可以看到,要达到完全的语句覆盖,只需要一个测试用例就可以了,即本例中应用CONDITION为真。,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5 测试覆盖率,第五节 测试覆盖率,5.2.1 语句覆盖但是,这个测试用例将无法区别例1A和下面的例子。例1B1. null;2. DO_SOMETHING;3. null;4. ANOTHER_STATEMENT;,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5 测试覆盖率,第五节 测试覆盖率,

7、5.2.2 判定覆盖 判定覆盖(Decision Coverage)也叫做分支覆盖(Branch Coverage)。其含义是:在测试的时候设计若干个测试用例,运行被测程序,使得程序中的每个判断至少被取真值和假值一次,即真分支和假分支一次。 判定覆盖率的公式如下: 判定覆盖率=(判定结果被评价的次数)/(判定结果的总数),2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5 测试覆盖率,第五节 测试覆盖率,5.2.2 判定覆盖例2A1.if CONDITION then2. DO_SOMETHING;3.else4. DO_SOMETHING_ELSE;5.end if;TEST

8、CONDITION 1 True 2 False,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5 测试覆盖率,第五节 测试覆盖率,5.2.2 判定覆盖从这个例子我们可以发现:1、判定覆盖同样满足语句覆盖,但是并不是所有的判定条件都如此简单,判定条件还存在于case语句和循环语句中。2、判定覆盖也是直接针对代码的,这也就使得判定覆盖理解起来也比较容易,经统计,对实际的代码调查发现,没有不可实现的判定结果,所以要达到100%的判定覆盖率是可能的。3、类似于语句覆盖,设计用于判定覆盖的测试用例数据也是易于维护的。,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5 测

9、试覆盖率,第五节 测试覆盖率,5.2.2 判定覆盖从这个例子我们可以发现:1、判定覆盖同样满足语句覆盖,但是并不是所有的判定条件都如此简单,判定条件还存在于case语句和循环语句中。2、判定覆盖也是直接针对代码的,这也就使得判定覆盖理解起来也比较容易,经统计,对实际的代码调查发现,没有不可实现的判定结果,所以要达到100%的判定覆盖率是可能的。3、类似于语句覆盖,设计用于判定覆盖的测试用例数据也是易于维护的。 但是,判定覆盖的缺点也是比较明显的,当复杂的条件也用于控制分支时,判定覆盖就显得不足了,比如下例中使用两个测试用例就可以达到判定覆盖,但是却无法进行完整的测试。,2012年3月1日 天津

10、城市建设学院电子与信息工程系 唐国峰,5 测试覆盖率,第五节 测试覆盖率,5.2.2 判定覆盖例2B1.if A and B then2. DO_SOMETHING;3.else4. DO_SOMETHING_ELSE;5.end if;TEST A B1 True True2 False True,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5 测试覆盖率,第五节 测试覆盖率,5.2.2 判定覆盖例2B1.if A and B then2. DO_SOMETHING;3.else4. DO_SOMETHING_ELSE;5.end if;TEST A BUntested T

11、rue False False False,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5 测试覆盖率,第五节 测试覆盖率,5.2.2 判定覆盖例2B1.if A and B then2. DO_SOMETHING;3.else4. DO_SOMETHING_ELSE;5.end if;TEST A BUntested True False False False,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5 测试覆盖率,第五节 测试覆盖率,5.2.2 判定覆盖 可见,对于复合条件,两个或多个条件项的组合可能会导致一个特定的分支被执行,判定覆盖会在其一个组

12、合中被测试到。因此,判定覆盖的完整性虽然比语句覆盖强,但是却不如后面的条件覆盖。同时,复合条件是代码错误的一个常见根源。,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5 测试覆盖率,第五节 测试覆盖率,5.2.3 条件覆盖 条件覆盖(Condition Coverage)的含义是:设计若干个测试用例,执行测试程序后,要使每个判断中的每个条件的可能取值至少满足一次。 条件覆盖率的公式如下: 条件覆盖率=(条件操作数值至少被评价一次的数量)/(条件操作数值的总数),2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5 测试覆盖率,第五节 测试覆盖率,5.2.3 条件覆

13、盖条件覆盖的优点:1、条件操作数很容易从设计或代码中被确认,这有助于自动化的实施。2、易于理解和维护。3、由于考虑到了每个判定条件的真与假,因此条件覆盖比分支覆盖强。,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5 测试覆盖率,第五节 测试覆盖率,5.2.3 条件覆盖例3A1. IF (A1) AND (B=0) THEN X=X+A;2. IF (A=2) OR (X1) THEN X=X+1;分析:对于第一个判断,应该考虑到:A1处,取真值,记为T1A1处,取假值,即A1,记为F1B=0处,取真值,记为T2B=0处,取假值,即B0,记为F2,2012年3月1日 天津城市建

14、设学院电子与信息工程系 唐国峰,5 测试覆盖率,第五节 测试覆盖率,5.2.3 条件覆盖例3A1. IF (A1) AND (B=0) THEN X=X+A;2. IF (A=2) OR (X1) THEN X=X+1;分析:对于第二个判断,应该考虑到:A=2处,取真值,记为T3A=2处,取假值,即A2,记为F3X1处,取真值,记为T4X1处,取假值,即X1,记为F4,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5 测试覆盖率,第五节 测试覆盖率,5.2.3 条件覆盖例3A1. IF (A1) AND (B=0) THEN X=X+A;2. IF (A=2) OR (X1)

15、THEN X=X+1;对例3A使用下面三个测试用例就可以达到条件覆盖的目标,即,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5 测试覆盖率,第五节 测试覆盖率,5.2.3 条件覆盖例3A1. IF (A1) AND (B=0) THEN X=X+A;2. IF (A=2) OR (X1) THEN X=X+1; 对于此例,我们可以想一下其判定覆盖也是可以被满足的。但是是不是满足了条件覆盖就一定满足了判定覆盖的要求呢,答案是否定的,不一定被满足。如下面表3-2中的测试用例:,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5 测试覆盖率,第五节 测试覆盖率,5.2

16、.3 条件覆盖例3A1. IF (A1) AND (B=0) THEN X=X+A;2. IF (A=2) OR (X1) THEN X=X+1; 显然这组测试用例是可以满足条件覆盖的要求的,但是它不能满足判定覆盖的要求。鉴于此,我们需要一个比条件覆盖更强的覆盖。,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5 测试覆盖率,第五节 测试覆盖率,5.2.3 条件覆盖例3A1. IF (A1) AND (B=0) THEN X=X+A;IF (A=2) OR (X1) THEN X=X+1; 这里,同学们可能会有一个疑问,这是两个选择结构,为什么不把它们分开处理,而要放到一起呢?

17、 答:在有些实际情况中,比如处理帐票,需要连续输出信息的时候,可能会根据一系列的选择来抛出一堆信息,这些信息是连续输出在表格中的,表格在显示的时候会有分行的要求,这样就需要对各个信息的长度进行累加运算,继而输出。所以在这些场合,必须将这些选择结构放到一起进行处理。,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5 测试覆盖率,第五节 测试覆盖率,5.2.3 条件覆盖例3A1. IF (A1) AND (B=0) THEN X=X+A;IF (A=2) OR (X1) THEN X=X+1; 这里,同学们可能还会问,那是不是要从程序的开始一直到最后的选择结构都要放到一起处理呢?答

18、:不是。测试从单元测试开始,要把问题分解到单元测试的模块,即代码块中的最小模块。对于不能分解的最小模块中的选择结构也要使气情况而定,具体情况需要详细理解详细设计书。根据问题来进行测试的安排。,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5 测试覆盖率,第五节 测试覆盖率,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5.2.4 判定条件覆盖 判定条件覆盖(Decision Condition Coverage)又叫做分支条件覆盖(Branch Condition Coverage,B-C Coverage)。其含义是,设计足够多的测试用例,使得判断中每个条件的

19、所有可能值(真值、假值)至少出现一次,且每个判断本身的判定结果(真值、假值)也至少出现一次。判定条件覆盖率的公式如下:判定条件覆盖率=(条件操作数值或判定结果至少被评价一次的数量)/(条件操作数值总数+判定结果总数),5 测试覆盖率,第五节 测试覆盖率,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5.2.4 判定条件覆盖判定条件覆盖的优点:1、有助于自动化的实施。2、易于理解和维护。3、比判定覆盖和条件覆盖强。,5 测试覆盖率,第五节 测试覆盖率,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5.2.4 判定条件覆盖对于例3A1. IF (A1) AND (B

20、=0) THEN X=X+A;2. IF (A=2) OR (X1) THEN X=X+1;分析两个判定中4个条件的组合情况如下: A1,B=0, 记为T1 ,T2 A1,B0, 记为T1 ,F2 A1,B=0, 记为F1 ,T2 A1,B0, 记为F1 ,F2 A=2,X1, 记为T3 ,T4 A=2,X1, 记为T3 ,F4 A2,X1, 记为F3 ,T4 A2,X1, 记为F3 ,F4,5 测试覆盖率,第五节 测试覆盖率,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5.2.4 判定条件覆盖对于例3A1. IF (A1) AND (B=0) THEN X=X+A;IF (

21、A=2) OR (X1) THEN X=X+1;由此,表3-3中的一组测试用例可以满足判定条件覆盖。,5 测试覆盖率,第五节 测试覆盖率,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5.2.4 判定条件覆盖对于例3A1. IF (A1) AND (B=0) THEN X=X+A;IF (A=2) OR (X1) THEN X=X+1;仔细分析后,我们发现,虽然满足了满足判定条件覆盖,但是表3-3中的测试用例只能覆盖路径ace、abe、abd,而未能覆盖路径acd。可见判定条件覆盖还不是完整的覆盖。无法满足对程序的完整测试。,5 测试覆盖率,第五节 测试覆盖率,2012年3月1

22、日 天津城市建设学院电子与信息工程系 唐国峰,5.2.5 路径覆盖 路径覆盖(Path Coverage)的含义是:涉及足够多的测试用例,要求覆盖程序中所有可能的路径。路径覆盖率的公式如下:路径覆盖率=(至少被执行到一次的路径数)/(总的路径数),5 测试覆盖率,第五节 测试覆盖率,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5.2.5 路径覆盖同样,对于例3A,如果要满足路径覆盖的要求可以使用表3-4列出的一组用例。1. IF (A1) AND (B=0) THEN X=X+A;IF (A=2) OR (X1) THEN X=X+1;,5 测试覆盖率,第五节 测试覆盖率,2

23、012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5.2.5 路径覆盖 路经覆盖的目标是在程序中寻找完全的路径数。然而,在实际的代码中,要找到全部的路径是相当复杂的,所以,对于复杂的代码而言,要完全达到路径覆盖可以说是不可能的。路径覆盖对于自动化测试的实施也是非常困难的。,5 测试覆盖率,第五节 测试覆盖率,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5.2.5 路径覆盖 同时,虽然路径覆盖比判定条件覆盖更强,但是它并不能包含判定条件覆盖。比如下面的情况:例4A:1.if A and B then2. DO_SOMETHING;3.else4. DO_SOMETHI

24、NG_ELSE;5.end if; 此例中,只用两个用例就可以达到路径覆盖:(True,True)、(True,False), 但是显然没有达到条件覆盖。,5 测试覆盖率,第五节 测试覆盖率,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,第五节 测试覆盖率,5.2.6 函数覆盖 函数覆盖是针对系统或一个子系统而测试的。它是表示在系统中有哪些函数被测试到了,其被测试到的概率有多大,这些函数在系统中占的比例有多大等。函数覆盖率是一个比较容易实施自动化的度量,同时和其他逻辑覆盖率一样其也很容易理解。函数覆盖率的公式如下:函数覆盖率=(至少被执行一次的函数数量)/(系统中函数的总数)*

25、 由于函数覆盖率也是基于代码的,因此可以把它归入到百盒测试的范畴内。,5 测试覆盖率,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,第五节 测试覆盖率,5.2.7 指令块覆盖 指令块覆盖(Instruction Blocks Coverage,IB Coverage)是语句覆盖的一个变体。唯一的区别是计算方式不同。指令块表示函数内部的一系列语句,在这一系列语句中不存在控制语句。其计算公式如下:指令块覆盖率=(至少被执行的一次的指令块数量)/(系统中指令块总数),5 测试覆盖率,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5.2.7 指令块覆盖 上图为指令块示意

26、图,图中是有4个指令块,15条语句的控制流图。假定在一次测试过程中,在第一个控制点出走了3条指令的分支,在第二个控制点处走了空指令分支,那么其指令块覆盖率为(2/4)*100%=50%,其语句覆盖率是(5+3)/15*100%=53.33%。,5 测试覆盖率,第五节 测试覆盖率,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,5.2.8 判定路径覆盖率 判定路径覆盖率(Decision-to-Decision Paths Coverage,DDP Coverage)是判定覆盖的一个变体。这里的判定是指一个序列语句,其起始位置是函数入口或一个判定(如if、while、swith等)

27、的开始,结束位置是下一个判定的开始。其示意图如右图所示:,5 测试覆盖率,第五节 测试覆盖率,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,第五节 测试覆盖率,5.2.8 判定路径覆盖率通过计算哪些路径走过,那些没有走过,我们就可以计算覆盖率了。判定路径覆盖率的计算公式为:DDP覆盖率=(至少被执行到一次的判定路径数量)/(系统中判定路径总数),5 测试覆盖率,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,第五节 测试覆盖率,5.2.9 更改条件判定覆盖 更改条件判定覆盖(Modified Conditions/Decisions Coverage,MC/DC

28、Coverage)是判定条件覆盖的一个变体。它主要是为了多条件测试提供了方便。通过分析条件判定的覆盖来增加测试用例,防止了测试呈指数上升的趋势。该测试需要满足以下要求: 要求1:被测程序模块的每个入口点和出口点都必须被走一次。并且每一个程序判定的结果至少被覆盖一次。 要求2:通过分解逻辑操作,程序的判定被分解为基本的布尔条件表达式,每个条件独立的作用于判定的结果,覆盖所有条件的可能结果。,5 测试覆盖率,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,第五节 测试覆盖率,5.2.9 更改条件判定覆盖在此例中,如果执行Test1(覆盖DDP A和DDP C)和Test3(覆盖DDP

29、 A和DDP B),即满足了要求1,并且达到了DDP覆盖率为100%,但是表达式Y的值F没有考虑到。这说明需要增加测试。显而易见,Test1是必须的,因为该用例是唯一使判定结果为True的用例,同样,Test3也是必须的,因为该用例使唯一一个可以通过修改X的值改变判定结果的。同样,Test2也是必须的,X的F值被考虑到了。所以只需要三个用例就可以满足要求1和要求2了,Test4没有必要,不再考虑。(这是实际工作中经常用到的),5 测试覆盖率,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,第五节 测试覆盖率,5.2.10 分支条件组合覆盖 分支条件组合覆盖(Branch Cond

30、ition Combination Coverage)是一种比判定条件覆盖更强的覆盖,其含义是,设计一定的测试用例,使每个分支中的各操作数值的结合都遍历一次。分支条件组合覆盖率的计算公式如下:分支条件组合覆盖率=(被评价到的分支条件组合数)/(分支条件组合总数),5 测试覆盖率,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,第五节 测试覆盖率,5.2.10 分支条件组合覆盖例4:1.if A and B then2. DO_SOMETHING;3.end if; 其中,A和B是操作数,应用判定条件覆盖的概念,我们可以设计出表3-5给出的一组测试用例,以满足判定条件覆盖率的要求。,5 测试覆盖率,2012年3月1日 天津城市建设学院电子与信息工程系 唐国峰,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 教育学

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报