各种覆盖率方法介绍

更新时间:2023-06-13 00:45:12 阅读: 评论:0

kickasstorrents
目    录 写信的英文
1 简介 0
1.1 代码覆盖率分析 0
1.2 结构化测试和功能测试(STRUCTURAL TESTING&FUNCTIONAL TESTING) 1
1.3 假定 1
2 基本的度量 1
捡垃圾作文
2.1 语句覆盖(STATEMENT COVERAGE ) 1
2.2 判定覆盖(DECISION COVERAGE ) 2
2.3 条件覆盖(CONDITION COVERAGE ) 3
2.4 多条件覆盖(MULTIPLE CONDITION COVERAGE ) 3
2.5 分支条件组合覆盖(CONDITION/DECISION COVERAGE ) 4
2.6 修正条件/判定覆盖(MODIFIED CONDITION/DECISION COVERAGE) 4
2.6.1 覆盖率的计算公式: 5
2.7 路径覆盖(PATH COVERAGE ) 5
3 其它度量 6
3.1 函数覆盖(FUNCTION COVERAGE ) 6
3.2 函数出入口覆盖(FUNCTION EXITS COVERAGE) 6
3.3 调用覆盖(CALL COVERAGE ) 6
3.4 线性代码顺序及跳转覆盖(LINEAR CODE SEQUENCE AND JUMP (LCSAJ) COVERAGE ) 7
3.4.1 覆盖率的计算公式: 7
3.5 数据流覆盖(DATA FLOW COVERAGE ) 8
3.6 目标代码分支覆盖(OBJECT CODE BRANCH COVERAGE ) 8
3.7 循环覆盖(LOOP COVERAGE ) 8
3.8 竞争覆盖(RACE COVERAGE) 8
3.9 比较操作符覆盖(RELATIONAL OPERATOR COVERAGE) 8
我的寒假生活作文300字
3.10 弱变化覆盖(WEAK MUTATION COVERAGE) 9
家常小炒菜3.11 表覆盖(TABLE COVERAGE) 9
4 比较各种覆盖 9
4.1 对RELEASE版本的覆盖目标 9
4.2 中间版本的覆盖目标 9
5 总结 10
6 参考 10
7 术语表 11
1 简介
1.1 代码覆盖率分析
这篇文章给出了一个完整的代码覆盖率分析方面的概念。 
代码覆盖率分析是这样一个过程: 
· 找出程序经过一系列测试而没有执行的部分代码 
蒙古包简笔画· 创建一个附加的测试用例来增加覆盖率 
· 决定代码覆盖的定量度量。 
代码覆盖率分析的一个有效方面是: 
· 识别出没有增加覆盖率的无效的测试用例。 
覆盖率分析需要被测试程序的源代码,并且经常需要用一个特殊的命令重新编译它。 
这篇文章讨论你应当考虑你的测试计划中应该如何增加覆盖率分析的细节问题。覆盖率分析有一定的好处和弱点。你应该选择一个测量方法的范围。你应该建立一个覆盖率要达到的最小百分比,来决定你什么时候停止覆盖率分析。覆盖率分析只是许多测试技术的一种,你不能只是依靠它。 
1.2 结构化测试和功能测试(Structural testing&Functional testing)
代码覆盖率分析是一种结构化测试技术 (AKA glass box testing and white box testing). 结构化测试是比较被测试程序的行为和源代码的外观目的。和功能测试相比 (AKA black-box testing), 功能测试是比较被测试程序的行为和确定的需求。结构化测试检查程序的工作,考虑结构中可能存在的逻辑缺陷。功能测试检查被测试程序的完成需求的能力,不考虑它是怎么工作的。 
结构化测试也叫路径测试(path testing), 因为你选择测试用例来通过程序结构的路径。不要和路径覆盖率度量(path coverage)混淆,下面会介绍。 
粗略的看,结构化测试似乎不安全,结构化测试不能发现需求疏忽的错误,但是,需求定
义有时并不存在,而且并不完整。这个现象是实际存在的,当产品开发的时间线就要到的时候,当需求定义很少更新,产品自身代替了需求定义的作用的时候。
1.3 假定
一些基本原理的假定如下所列: 
· Faults ―――和控制流相关的缺陷,你可以发现这些缺陷通过变更控制流[Beizer1990 p.60]。例如,一个程序写为"if (c)" 比"if (!c)"好 。
· 你可以寻找缺陷而不必知道这个缺陷可能引起的后果和所有测试的可靠性。 
· 其它的假定包括可完成需求的定义、没有疏忽的缺陷和没有不可以达到的代码等。 
2 基本的度量
有许多覆盖率度量存在,这里介绍一些基本的度量的益处和弱点。 
2.1 语句覆盖(Statement Coverage )
这个度量报告每一个可执行语句是否被执行。 
重庆小吃街也称为:行覆盖(line coverage), 段覆盖(gment coverage) [Ntafos1988], C1 [Beizer1990 p.75] 和基本块覆盖(basic block coverage)。基本块覆盖当每一个序列的语句是无分支的语句时和语句覆盖相同。 
这个覆盖度量的主要好处是它可以直接应用在目标码上,不需要对源代码进行处理。执行轮廓就完成了这个度量。
这个覆盖度量的主要缺点是对一些控制结构很迟钝。例如,考虑下列的C/C++ 代码: 
int* p = NULL;
祝晓隽
if (condition)
    p = &variable;
*p = 123;
如果当condition 取假的情况下,语句覆盖率显示这四句都覆盖到了,但是代码执行是失败的。这是一个语句覆盖率的严重的缺陷,IF语句是很普通的一种情况。 
语句覆盖不能报告循环是否到达它们的终止条件―――只能显示循环是否被执行了。 
既然do-while 循环通常要至少执行一次,语句覆盖认为它们和无分支语句是一样的。 
语句覆盖率对逻辑运算符反映是迟钝的(|| and &&)。 
语句覆盖不能区分连续的switch 语句。 
测试用例通常和判定有关而不是和语句有关。你可能不必用10个单独的测试用例来测试一个有10个无分支语句的语句,你可能只用一个测试用例就够了;考虑一个IF-el语句,包含一条语句在then子句,99条语句在el子句,当执行两个可能路径的其中之一时,语句覆盖率得到如下的结果: 1  或 99  的覆盖率。基本块覆盖率就忽略了这个问题。 
2.2 判定覆盖(Decision Coverage )
这个度量报告是否BOOL型的表达式取值true 和fal在控制结构中被测试到了(例如if-state
ment和while-statement)。 整个的BOOL型的表达式被认为是取值一个true 和fal,而不考虑是否内部包含了logical-and 或 logical-or 操作符。另外,这个度量包括switch-statement cas, exception handlers, and interrupt handlers的覆盖. 
也被称为:分支覆盖(branch coverage), 所有边界覆盖(all-edges coverage) [Roper1994 p.58], 基本路径覆盖(basis path coverage )[Roper1994 p.48], C2覆盖 [Beizer1990 p.75], 判定到判定路径覆盖(decision-decision-path或DDP testing [Roper1994 p.39]. )"Basis path" 测试就是选择路径来达到所有的判定覆盖. 
这个度量有语句覆盖的简单性,但是没有语句覆盖的问题。 
缺点是这个度量忽略了在BOOL型表达式内部的BOOL取值。例如考虑如下的C/C++/Java 代码: 
if (condition1 && (condition2 || function1()))
    statement1;
el
    statement2;
这个度量可以完全可以不用调用function1. 测试表达是为真时可以取condition1 为true 和condition2 为true,测试表达是为假时可以取condition1 为fal。 
2.3 条件覆盖(Condition Coverage )
条件覆盖报告每一个子表达式的结果的true 或fal 。logical-and 和logical-or 独立起来。条件覆盖独立的度量每一个子表达式.
这个度量和decision coverage 相似,但是对控制流更敏感。 
但是,完全的条件覆盖并不能保证完全的判定覆盖。例如,考虑下列的C++/Java 代码。 
bool f(bool e) { return fal; }
bool a[2] = { fal, fal };
if (f(a && b)) ...
if (a[int(a && b)]) ...
if ((a && b) ? fal : fal) ...
所有三个IF语句不管a和b取值是什么,判定覆盖率只能达到50%。但是条件覆盖率却能达到100%。
2.4 多条件覆盖(Multiple Condition Coverage )
多条件覆盖报告每一个可能的BOOL型子表达式的组合发生了。相对于条件覆盖,即通过logical-and和logical-or把子表达式独立起来相比, 多条件覆盖需要的测试用例是用一个条件的逻辑操作符的真值表来确定的。 
对于C, C++和Java等具有short circuit operators的语言,多条件覆盖的益处是它需要一个彻底的测试。
缺点是它可能是非常冗长乏味的来决定一个需要的测试用例的最小设置,尤其是对于非常复杂的BOOL型表达式。另一个缺点是,这个度量需要的测试用例对于相似的复杂性的条件却需要非常大的变化。例如,考虑如下的C/C++/Java 条件:
要达到完全的多条件覆盖,第一个需要6个测试用例,
而第二个需要11个测试用例。
但是两个条件却有相同的操作数和操作符。 
对于Visual Basic 和Pascal等不具有short circuit operators的语言, 多条件覆盖对于逻辑表达式是非常有效的路径覆盖,具有相同的优缺点。考虑下列的Visual Basic 代码: 
If a And b Then
...
多条件覆盖需要四个测试用例,a 和b分别取值true 和fal. 

本文发布于:2023-06-13 00:45:12,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/941085.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:覆盖   覆盖率   语句   测试   条件   分析   度量   需求
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图