各种覆盖率方法介绍

合集下载

各种覆盖率方法介绍

各种覆盖率方法介绍

各种覆盖率方法介绍(3)3 其它度量这里介绍一些其它的基本的很少使用的度量的益处和弱点。

3.1 函数覆盖(Function Coverage )这个度量报告是否你调用了每个函数或过程。

对于初步的测试来保证至少在所有的软件没有总的不足非常有用。

大多数覆盖率工具都支持。

3.2 函数出入口覆盖(Function Exits Coverage)报告对函数的入口、出口和终止指令.覆盖情况统计。

据我所知,TestRT支持此覆盖。

3.3 调用覆盖(Call Coverage )这个度量报告是否你执行每个函数调用。

前提是缺陷一般发生在模块的接口处。

也称呼为调用对覆盖(call pair coverage)。

据我所知,TestRT支持此覆盖。

3.4 线性代码顺序及跳转覆盖(Linear Code Sequence and Jump (LCSAJ) Coverage )这个是路径覆盖(path coverage )的一个变更。

考虑到在源代码中只有子路径可以被容易的替,不需要一个流程图。

一个LCSAJ 是一系列源代码线执行的序列。

优点是这个度量比判定覆盖测试的更彻底,而且避免了路径覆盖的指数级的难度。

缺点是它不能避免不可实行的路径。

据我所知,LDRA TestBed支持此覆盖。

3.4.1 覆盖率的计算公式:如下图所示:一个LCSAJ是由以下四个特征的数量决定的。

A Start Point:可以是程序的开始或任何控制流跳转的目标的线。

A Linear Code Sequence:通过可以系列处理的控制流的代码体。

可以由几个连续的基本块组成。

An End Point:The first line encountered from which a jump is made which has been reached from the start point by the unbroken linear sequence of code.A Target Point:The point to which the End Points" control flow jump is made. This will be the Start Point of the next LCSAJ. Therefore, since the start point of the linear code sequence is a line which is the target of another jump, these fragments are also called jump-to-jump paths.这个例子的计算此LCSAJ覆盖的分母就是11。

覆盖率测试方法

覆盖率测试方法

覆盖率测试方法覆盖率测试方法是软件测试中常用的一种测试方法,用于评估测试用例对被测系统的覆盖程度。

覆盖率测试方法可以帮助测试人员确定测试用例是否全面覆盖了系统的功能、逻辑和代码等方面,从而提高软件的质量和稳定性。

覆盖率测试方法主要分为三种:语句覆盖、分支覆盖和路径覆盖。

语句覆盖是指测试用例能够覆盖被测系统中的每一条语句;分支覆盖是指测试用例能够覆盖被测系统中的每一个分支;路径覆盖是指测试用例能够覆盖被测系统中的每一条可能的路径。

这三种覆盖率测试方法可以互相补充,提高测试用例的质量和覆盖程度。

在进行覆盖率测试之前,首先需要明确被测系统的需求和功能,根据需求和功能编写测试用例。

测试用例应该尽可能地覆盖所有的功能和逻辑,以确保系统在各种情况下都能够正常工作。

测试用例应该包括正常情况下的输入和输出,以及各种异常情况下的处理方式。

测试用例还应该尽可能地覆盖各种边界情况,以测试系统的稳定性和健壮性。

在进行覆盖率测试时,可以使用各种测试工具来辅助测试。

常用的测试工具包括代码覆盖工具、静态分析工具和自动化测试工具等。

代码覆盖工具可以帮助测试人员分析测试用例对被测系统的覆盖程度,找出未被覆盖的代码部分;静态分析工具可以帮助测试人员分析代码的质量和稳定性,找出潜在的问题和错误;自动化测试工具可以帮助测试人员快速执行测试用例,提高测试效率和覆盖程度。

覆盖率测试方法的好处是可以帮助测试人员发现被测系统中的问题和错误,提高软件的质量和可靠性。

覆盖率测试方法可以帮助测试人员确定测试用例的质量和覆盖程度,从而提高测试的效果和效率。

覆盖率测试方法还可以帮助测试人员评估测试用例的全面性和可行性,优化测试用例的编写和执行。

然而,覆盖率测试方法也存在一些限制和局限性。

首先,覆盖率测试方法只能评估测试用例对被测系统的覆盖程度,不能保证测试用例能够发现所有的问题和错误。

其次,覆盖率测试方法无法评估测试用例的质量和有效性,只能提供一种相对的指标。

代码测试覆盖率:评估代码测试覆盖率的方法和工具推荐

代码测试覆盖率:评估代码测试覆盖率的方法和工具推荐

代码测试覆盖率:评估代码测试覆盖率的方法和工具推荐代码测试覆盖率是指在进行软件测试时,已经被运行的测试用例(或测试集)占总测试用例(或测试集)的比例。

它用于衡量测试用例对于被测代码的执行程度,从而判断测试的质量和完整性。

下面将介绍几种常用的评估代码测试覆盖率的方法和工具,并分析它们的优缺点。

1.语句覆盖(Statement Coverage):语句覆盖是最常见的测试覆盖率指标之一。

它衡量测试中执行的语句数量与总语句数量的比例。

测试用例需要尽量覆盖到所有的代码语句,以此评估测试的覆盖率。

常见的工具有:- JaCoCo:功能强大的Java代码覆盖率检测工具,支持语句、分支、行、类和方法覆盖率的检测。

它可以嵌入到构建工具(如Maven 和Gradle)中,方便自动化执行。

- Istanbul:用于JavaScript的代码覆盖率工具,支持语句、分支、行和函数覆盖率的检测。

它可以集成到测试框架中(如Mocha和Jasmine),方便在测试执行期间捕获覆盖率信息。

2.判定覆盖(Branch Coverage):判定覆盖是对条件分支进行测试的方法,即每个条件判断语句都至少被执行一次。

它可以衡量程序的分支执行情况,验证每个条件的正确性。

常见的工具有:- Cobertura:一个流行的Java代码覆盖率工具,支持判定覆盖的检测。

它可以生成报告,显示每个条件分支的测试覆盖情况。

- PHPUnit:一个用于PHP的测试框架,可以集成Code Coverage 扩展库,支持判定覆盖的检测。

它可以生成覆盖率报告,并指出那些条件分支没有被测试到。

3.函数级覆盖(Function Coverage):函数级覆盖是对函数被调用的测试,即每个函数都至少被执行一次。

它可以衡量测试对于不同函数功能的覆盖情况。

常见的工具有:- PHPUnit:前述PHP测试框架,可以通过生成函数覆盖率报告来评估函数级覆盖。

- gcov:一个在GCC编译器中常用的测试覆盖工具,可以用来评估C和C++代码的函数级覆盖。

代码覆盖率评估方法与工具比较

代码覆盖率评估方法与工具比较

代码覆盖率评估方法与工具比较代码覆盖率评估是软件开发中常用的一种质量评估方法,其目的是测量测试中涉及到的代码量,以此来评估测试的完备性和质量。

在软件开发过程中,不同的代码覆盖率评估方法和工具会有不同的优点和适用场景。

本文将比较几种常见的代码覆盖率评估方法和工具,帮助读者更好地选择适合自己项目的方法和工具。

一、行覆盖率(Line Coverage)评估方法与工具行覆盖率评估方法是最基本、最常见的代码覆盖率评估方法之一。

该方法评估的是测试用例是否覆盖了被执行的代码行数。

行覆盖率评估工具包括JaCoCo、Emma等。

这些工具能够生成代码的行覆盖率报告,方便开发人员了解测试用例对代码行的覆盖情况。

行覆盖率评估方法的优点是简单易用,能够对代码执行的覆盖情况进行全面评估。

然而,该方法只关注代码行数的覆盖情况,对于分支、条件、循环等结构的覆盖评估较为薄弱。

因此,在处理复杂的代码逻辑时,行覆盖率评估方法可能无法满足需求。

二、分支覆盖率(Branch Coverage)评估方法与工具分支覆盖率评估方法是一种对代码覆盖率进行更加详细评估的方法。

该方法评估的是测试用例是否覆盖了代码中所有的分支。

分支覆盖率评估工具包括JaCoCo、Emma等。

这些工具能够生成代码的分支覆盖率报告,方便开发人员了解测试用例对代码分支的覆盖情况。

分支覆盖率评估方法的优点是能够对代码中所有的分支进行评估,对于复杂的控制流程能够提供详尽的测试覆盖。

然而,分支覆盖率评估方法是一种较为复杂的评估方法,需要编写更多的测试用例来覆盖不同的分支情况。

这可能会增加测试的工作量和时间成本。

三、条件覆盖率(Condition Coverage)评估方法与工具条件覆盖率评估方法是一种对代码中条件语句覆盖情况进行评估的方法。

该方法评估的是测试用例是否覆盖了代码中所有的条件,并能够满足不同条件的组合情况。

条件覆盖率评估工具包括JaCoCo、Emma等。

这些工具能够生成代码的条件覆盖率报告,方便开发人员了解测试用例对代码条件的覆盖情况。

软件测试中的覆盖率分析方法

软件测试中的覆盖率分析方法

软件测试中的覆盖率分析方法在软件测试中,覆盖率分析是一项重要的任务,它帮助测试人员评估测试用例对于软件的覆盖程度。

通过分析不同类型的覆盖率指标,测试人员可以确定测试用例是否足够全面,并且可以找出可能存在的漏洞和错误。

本文将介绍软件测试中常用的覆盖率分析方法,并探讨它们的优缺点。

最常见的覆盖率分析方法之一是语句覆盖率(Statement Coverage)。

该方法是通过跟踪测试用例执行过程中经过的代码行数来评估覆盖情况。

它可以告诉测试人员哪些代码已经被执行,哪些代码还没有被执行到。

语句覆盖率的优点是简单易懂,可以提供对代码覆盖情况的直观理解。

然而,它的缺点是不能检测到一些潜在的问题,比如条件分支的覆盖情况以及循环的覆盖情况。

为了解决语句覆盖率的不足,分支覆盖率(Branch Coverage)方法应运而生。

分支覆盖率是通过跟踪测试用例执行过程中经过的条件分支数来评估覆盖情况。

它可以告诉测试人员测试用例是否涵盖了不同的条件分支,从而更全面地检测潜在的错误。

路径覆盖率(Path Coverage)是一种更加精细的覆盖率分析方法。

它通过跟踪测试用例执行过程中经过的所有可能路径来评估覆盖情况。

路径覆盖率要求测试用例必须按照所有可能的路径执行,因此能够发现更多的潜在问题。

然而,路径覆盖率方法的缺点是测试用例的数量很大,并且很难找到所有可能的路径。

因此,在实际应用中,通常会采用基于代码分析的方法,例如控制流图和数据流分析,来生成测试用例集合,以提高路径覆盖率的效率。

基本块覆盖率(Basic Block Coverage)是另一种常用的覆盖率分析方法。

基本块是指一段不包含分支的连续代码片段。

基本块覆盖率通过跟踪测试用例执行过程中经过的基本块数来评估覆盖情况。

这种方法相对于语句覆盖率和分支覆盖率来说更加细粒度,能够提供更详细的代码覆盖情况。

然而,基本块覆盖率同样无法检测循环的覆盖情况,其局限性也需要被考虑。

条件覆盖率(Condition Coverage)是一种结合了语句覆盖率和分支覆盖率的方法。

各种覆盖率方法介绍

各种覆盖率方法介绍

各种覆盖率方法介绍覆盖率是软件测试质量的一个重要指标,用来衡量测试过程中对代码的覆盖程度。

在软件测试中,覆盖率方法可以帮助测试人员确定哪些代码行、函数、分支等被执行了,以便评估测试用例的效果,从而提高测试的完备性和准确性。

下面将介绍几种常见的覆盖率方法。

1. 语句覆盖(Statement Coverage):语句覆盖是最基本的覆盖率方法,它要求测试用例至少执行一次每个可执行语句。

语句覆盖可以简单地通过记录代码中每个语句的执行情况来实现,并且容易计算和测量。

2. 判定覆盖(Decision Coverage):判定覆盖要求测试用例至少执行一次每个判定,即每个条件语句的性质值为真和为假的两种情况都需要覆盖到。

判定覆盖可以帮助发现判定条件中可能出现的错误和逻辑矛盾。

3. 条件覆盖(Condition Coverage):条件覆盖是对判定覆盖的扩展,它要求测试用例至少执行涉及每个判定的各个条件的真值和假值的组合。

条件覆盖可以进一步提高测试用例的有效性,发现隐藏的错误。

4. 路径覆盖(Path Coverage):路径覆盖要求测试用例覆盖代码中的所有可能路径。

路径是从方法的入口到出口的一个序列,路径覆盖要求每条可能的路径都至少执行一次。

路径覆盖可以发现循环、递归以及条件约束等结构中的潜在问题。

5. 基本块覆盖(Basic Block Coverage):基本块覆盖要求测试用例至少执行每个基本块(不可分割的连续语句块)一次。

基本块覆盖可以简化路径覆盖的计算和实现。

6. 功能覆盖(Function Coverage):功能覆盖要求测试用例覆盖所有测试对象的功能。

功能覆盖可以用于测试不同的功能模块,例如测试不同的API或函数。

7. 分支覆盖(Branch Coverage):分支覆盖要求测试用例至少覆盖每个分支语句的真值和假值两种情况。

分支覆盖可以发现分支结构中可能存在的错误和逻辑问题。

8. 调用覆盖(Call Coverage):调用覆盖要求测试用例覆盖系统中的所有调用点。

软件测试报告测试用例设计与测试用例覆盖率分析

软件测试报告测试用例设计与测试用例覆盖率分析

软件测试报告测试用例设计与测试用例覆盖率分析软件测试报告:测试用例设计与测试用例覆盖率分析1. 引言软件测试是确保软件质量的关键环节之一。

测试用例的设计和测试用例覆盖率的分析是软件测试过程中必不可少的步骤。

本文将深入探讨测试用例的设计原则和方法,并介绍测试用例覆盖率的分析方法及其重要性。

2. 测试用例设计原则在进行测试用例设计之前,我们首先需要了解一些基本原则:2.1 易理解性:测试用例应该具有清晰的目标和步骤,使得测试人员能够迅速理解并执行测试。

2.2 全面性:测试用例应该能够覆盖软件的所有功能和情况,包括正常情况、异常情况以及边界情况。

2.3 独立性:测试用例之间应该相互独立,不受其他用例的影响,这样可以准确地定位和修复问题。

2.4 可重复性:测试用例应该是可重复执行的,即使在多次执行之后,结果应该一致。

3. 测试用例设计方法为了保证测试用例的质量和效果,我们可以采用以下几种常见的测试用例设计方法:3.1 等价类划分法:将输入域划分为若干等价类,每个等价类选择一组代表性的测试数据进行测试,提高测试效率。

3.2 边界值分析法:在等价类的基础上,选取边界值进行测试,因为边界值通常是引发错误的关键点。

3.3 正交试验法:根据软件的功能特性和参数,通过正交表生成一组测试用例,涵盖不同的组合情况,提高测试的覆盖率。

3.4 路径覆盖法:根据软件的逻辑结构,设计一组测试用例,覆盖程序中的所有可能路径,以发现隐藏的错误。

4. 测试用例覆盖率分析方法测试用例的覆盖率分析是评估测试效果的重要手段。

以下是几种常用的覆盖率分析方法:4.1 语句覆盖率:评估测试用例执行过程中是否覆盖了被测软件的每个语句。

4.2 判定覆盖率:评估测试用例执行过程中是否覆盖了所有可能的判定结果。

4.3 条件覆盖率:评估测试用例执行过程中是否覆盖了所有可能的条件组合。

4.4 路径覆盖率:评估测试用例执行过程中是否覆盖了程序中的每一条路径。

如何评估自动化测试的覆盖率

如何评估自动化测试的覆盖率

如何评估自动化测试的覆盖率自动化测试是软件开发过程中的重要环节,可以提高测试效率和准确性。

然而,仅仅进行自动化测试是不够的,还需要评估测试的覆盖率,以确保测试能够覆盖软件的各个功能和场景。

本文将介绍如何评估自动化测试的覆盖率,并提供一些方法和工具供参考。

一、什么是自动化测试的覆盖率自动化测试的覆盖率是指在测试过程中,测试用例能够覆盖到软件的哪些部分。

这些部分可以是代码、功能、接口、模块、业务流程等。

通过评估测试的覆盖率,可以知道测试是否全面、准确地覆盖到了软件的各个部分,从而提高测试的质量和可靠性。

二、为什么要评估自动化测试的覆盖率评估自动化测试的覆盖率有以下几个重要的原因:1.提高测试可靠性:通过评估覆盖率可以发现测试中可能存在的遗漏和不足,及时进行补充和修复,提高测试的可靠性。

2.减少测试成本:评估覆盖率可以帮助确定测试的重点和优先级,避免资源的浪费和重复测试,从而减少测试成本。

3.提高测试效率:评估覆盖率可以帮助快速定位未被覆盖到的部分,并有针对性地增加相应的测试用例,提高测试效率。

4.满足质量要求:评估覆盖率可以确保测试满足质量要求,符合业务需求和用户期望。

三、评估自动化测试的覆盖率需要综合考虑多方面的因素,涉及到测试用例设计、覆盖度计算和统计分析等方面。

下面介绍几种常用的方法和工具供参考:1.测试用例设计方法精心设计测试用例是评估覆盖率的前提,可以采用以下方法来设计测试用例:(1)边界值分析法:测试边界情况,包括最小值、最大值、超出范围、等于边界等情况。

(2)等价类划分法:将输入条件划分为若干个等价类,从每个等价类中选取一个测试用例进行测试。

(3)场景测试法:从用户真实使用场景出发,设计测试用例,模拟用户的操作流程。

2.覆盖度计算方法评估自动化测试的覆盖率需要计算覆盖度,常用的覆盖度计算方法有以下几种:(1)语句覆盖:计算被测试代码中执行过的语句占总语句数的比例。

(2)分支覆盖:计算被测试代码中所有分支语句执行的情况,包括真分支和假分支。

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

目录1 简介01.1 代码覆盖率分析01.2 结构化测试和功能测试(STRUCTURAL TESTING&FUNCTIONAL TESTING)11.3 假定12 基本的度量12.1 语句覆盖(STATEMENT COVERAGE )12.2 判定覆盖(DECISION COVERAGE )22.3 条件覆盖(CONDITION COVERAGE )32.4 多条件覆盖(MULTIPLE CONDITION COVERAGE )32.5 分支条件组合覆盖(CONDITION/DECISION COVERAGE )42.6 修正条件/判定覆盖(MODIFIED CONDITION/DECISION COVERAGE)42.6.1 覆盖率的计算公式:52.7 路径覆盖(PATH COVERAGE )53 其它度量63.1 函数覆盖(FUNCTION COVERAGE )63.2 函数出入口覆盖(FUNCTION EXITS COVERAGE)63.3 调用覆盖(CALL COVERAGE )63.4 线性代码顺序及跳转覆盖(LINEAR CODE SEQUENCE AND JUMP (LCSAJ) COVERAGE )73.4.1 覆盖率的计算公式:73.5 数据流覆盖(DATA FLOW COVERAGE )83.6 目标代码分支覆盖(OBJECT CODE BRANCH COVERAGE )83.7 循环覆盖(LOOP COVERAGE )83.8 竞争覆盖(RACE COVERAGE)83.9 比较操作符覆盖(RELATIONAL OPERATOR COVERAGE)83.10 弱变化覆盖(WEAK MUTATION COVERAGE)93.11 表覆盖(TABLE COVERAGE)94 比较各种覆盖94.1 对RELEASE版本的覆盖目标94.2 中间版本的覆盖目标95 总结106 参考107 术语表111 简介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), 段覆盖(segment 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-else语句,包含一条语句在then子句,99条语句在else子句,当执行两个可能路径的其中之一时,语句覆盖率得到如下的结果: 1 或99 的覆盖率。

基本块覆盖率就忽略了这个问题。

2.2 判定覆盖(Decision Coverage )这个度量报告是否BOOL型的表达式取值true 和false在控制结构中被测试到了(例如if-statement和while-statement)。

整个的BOOL型的表达式被认为是取值一个true 和false,而不考虑是否内部包含了logical-and 或logical-or 操作符。

另外,这个度量包括switch-statement cases, 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;elsestatement2;这个度量可以完全可以不用调用function1. 测试表达是为真时可以取condition1 为true 和condition2 为true,测试表达是为假时可以取condition1 为false。

2.3 条件覆盖(Condition Coverage )条件覆盖报告每一个子表达式的结果的true 或false 。

logical-and 和logical-or 独立起来。

条件覆盖独立的度量每一个子表达式.这个度量和decision coverage 相似,但是对控制流更敏感。

但是,完全的条件覆盖并不能保证完全的判定覆盖。

例如,考虑下列的C++/Java 代码。

bool f(bool e) { return false; }bool a[2] = { false, false };if (f(a && b)) ...if (a[int(a && b)]) ...if ((a && b) ? false : false) ...所有三个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 和false.2.5 分支条件组合覆盖(Condition/Decision Coverage )分支条件组合覆盖是条件覆盖(condition coverage)和分支覆盖(decision coverage)的一个混血。

它有两者的简单性但是没有两者的缺点。

2.6 修正条件/判定覆盖(Modified Condition/Decision Coverage)也被称为MC/DC 和MCDC.这个度量需要足够的测试用例来确定每个条件能够影响到包含的判定[Chilenski1994]的结果。

相关文档
最新文档