精华内容
下载资源
问答
  • 在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或 90%。于是乎,测试人员费尽心思设计案例覆盖代码。用代码覆盖率来衡量...

    在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或 90%。于是乎,测试人员费尽心思设计案例覆盖代码。用代码覆盖率来衡量,有利也有有弊。本文我们就代码覆盖率展开讨论,也欢迎同学们踊跃评论。

    首先,让我们先来了解一下所谓的“代码覆盖率”。我找来了所谓的定义:

    代码覆盖率 = 代码的覆盖程度,一种度量方式。

    上面简短精悍的文字非常准确的描述了代码覆盖率的含义。而代码覆盖程度的度量方式是有很多种的,这里介绍一下最常用的几种:

    1. 语句覆盖(StatementCoverage)

    又称行覆盖(LineCoverage),段覆盖(SegmentCoverage),基本块覆盖(BasicBlockCoverage),这是最常用也是最常见的一种覆盖方式,就是度量被测代码中每个可执行语句是否被执行到了。这里说的是“可执行语句”,因此就不会包括像C++的头文件声明,代码注释,空行,等等。非常好理解,只统计能够执行的代码被执行了多少行。需要注意的是,单独一行的花括号{} 也常常被统计进去。语句覆盖常常被人指责为“最弱的覆盖”,它只管覆盖代码中的执行语句,却不考虑各种分支的组合等等。假如你的上司只要求你达到语句覆盖,那么你可以省下很多功夫,但是,换来的确实测试效果的不明显,很难更多地发现代码中的问题。

    这里举一个不能再简单的例子,我们看下面的被测试代码:

    int foo(int a, int b)
    {
       return  a / b;
    }


    假如我们的测试人员编写如下测试案例:

    TeseCase: a = 10, b = 5

     

    测试人员的测试结果会告诉你,他的代码覆盖率达到了100%,并且所有测试案例都通过了。然而遗憾的是,我们的语句覆盖率达到了所谓的100%,但是却没有发现最简单的Bug,比如,当我让b=0时,会抛出一个除零异常。

    正因如此,假如上面只要求测试人员语句覆盖率达到多少的话,测试人员只要钻钻空子,专门针对如何覆盖代码行编写测试案例,就很容易达到主管的要求。当然了,这同时说明了几个问题:

        1.主管只使用语句覆盖率来考核测试人员本身就有问题。

        2.测试人员的目的是为了测好代码,钻如此的空子是缺乏职业道德的。 

        3.是否应该采用更好的考核方式来考核测试人员的工作? 

    为了寻求更好的考核标准,我们必须先了解完代码覆盖率到底还有哪些,如果你的主管只知道语句覆盖,行覆盖,那么你应该主动向他介绍还有更多的覆盖方式。比如:

    2. 判定覆盖(DecisionCoverage)

    又称分支覆盖(BranchCoverage),所有边界覆盖(All-EdgesCoverage),基本路径覆盖(BasicPathCoverage),判定路径覆盖(Decision-Decision-Path)。它度量程序中每一个判定的分支是否都被测试到了。这句话是需要进一步理解的,应该非常容易和下面说到的条件覆盖混淆。因此我们直接介绍第三种覆盖方式,然后和判定覆盖一起来对比,就明白两者是怎么回事了。

    3. 条件覆盖(ConditionCoverage)

    它度量判定中的每个子表达式结果true和false是否被测试到了。为了说明判定覆盖和条件覆盖的区别,我们来举一个例子,假如我们的被测代码如下:

    复制代码

    int foo(int a, int b)
    {
        if (a < 10 || b < 10) // 判定
        {
            return 0; // 分支一
        }
        else
        {
            return 1; // 分支二
        }
    }

    复制代码


    设计判定覆盖案例时,我们只需要考虑判定结果为true和false两种情况,因此,我们设计如下的案例就能达到判定覆盖率100%:

    TestCaes1: a = 5, b = 任意数字  覆盖了分支一
    TestCaes2: a = 15, b = 15          覆盖了分支二

     
    设计条件覆盖案例时,我们需要考虑判定中的每个条件表达式结果,为了覆盖率达到100%,我们设计了如下的案例:

    TestCase1: a = 5, b = 5       true,  true
    TestCase4: a = 15, b = 15   false, false


    通过上面的例子,我们应该很清楚了判定覆盖和条件覆盖的区别。需要特别注意的是:条件覆盖不是将判定中的每个条件表达式的结果进行排列组合,而是只要每个条件表达式的结果true和false测试到了就OK了。因此,我们可以这样推论:完全的条件覆盖并不能保证完全的判定覆盖。比如上面的例子,假如我设计的案例为:

    TestCase1: a = 5, b = 15  true,  false   分支一
    TestCase1: a = 15, b = 5  false, true    分支一

     
    我们看到,虽然我们完整的做到了条件覆盖,但是我们却没有做到完整的判定覆盖,我们只覆盖了分支一。上面的例子也可以看出,这两种覆盖方式看起来似乎都不咋滴。我们接下来看看第四种覆盖方式。

    4. 路径覆盖(PathCoverage)

    又称断言覆盖(PredicateCoverage)。它度量了是否函数的每一个分支都被执行了。 这句话也非常好理解,就是所有可能的分支都执行一遍,有多个分支嵌套时,需要对多个分支进行排列组合,可想而知,测试路径随着分支的数量指数级别增加。比如下面的测试代码中有两个判定分支:

    复制代码

    int foo(int a, int b)
    {
        int nReturn = 0;
        if (a < 10)
        {// 分支一
            nReturn += 1;
        }
        if (b < 10)
        {// 分支二
            nReturn += 10;
        }
        return nReturn;
    }

    复制代码


    对上面的代码,我们分别针对我们前三种覆盖方式来设计测试案例:

    a. 语句覆盖

    TestCase a = 5, b = 5   nReturn = 11

     语句覆盖率100%

     

    b. 判定覆盖

    TestCase1 a = 5,   b = 5     nReturn = 11

    TestCase2 a = 15, b = 15   nReturn = 0

    判定覆盖率100% 

     

    c. 条件覆盖

    TestCase1 a = 5,   b = 15   nReturn = 1

    TestCase2 a = 15, b = 5     nReturn = 10

    条件覆盖率100% 

     

    我们看到,上面三种覆盖率结果看起来都很酷!都达到了100%!主管可能会非常的开心,但是,让我们再去仔细的看看,上面被测代码中,nReturn的结果一共有四种可能的返回值:0,1,10,11,而我们上面的针对每种覆盖率设计的测试案例只覆盖了部分返回值,因此,可以说使用上面任一覆盖方式,虽然覆盖率达到了100%,但是并没有测试完全。接下来我们来看看针对路径覆盖设计出来的测试案例:

    复制代码

    TestCase1 a = 5,    b = 5     nReturn = 0

    TestCase2 a = 15,  b = 5     nReturn = 1

    TestCase3 a = 5,    b = 15   nReturn = 10

     

    TestCase4 a = 15,  b = 15   nReturn = 11

    路径覆盖率100% 

    复制代码


    太棒了!路径覆盖将所有可能的返回值都测试到了。这也正是它被很多人认为是“最强的覆盖”的原因了。

    还有一些其他的覆盖方式,如:循环覆盖(LoopCoverage),它度量是否对循环体执行了零次,一次和多余一次循环。剩下一些其他覆盖方式就不介绍了。

    总结

    通过上面的学习,我们再回头想想,覆盖率数据到底有多大意义。我总结了如下几个观点,欢迎大家讨论:

    a. 覆盖率数据只能代表你测试过哪些代码,不能代表你是否测试好这些代码。(比如上面第一个除零Bug)

    b. 不要过于相信覆盖率数据。

    c. 不要只拿语句覆盖率(行覆盖率)来考核你的测试人员。

    d. 路径覆盖率 > 判定覆盖 > 语句覆盖

    e. 测试人员不能盲目追求代码覆盖率,而应该想办法设计更多更好的案例,哪怕多设计出来的案例对覆盖率一点影响也没有。

    展开全文
  • 覆盖率

    2020-06-21 19:23:45
    一:语句覆盖率:二:判定覆盖率:三:条件覆盖率四.判定-条件覆盖率:五:条件组合覆盖率:六:路径覆盖率:1.什么是单元测试?2.单元测试有什么用?3.什么是驱动和桩?驱动:桩:4.覆盖率都有哪些?5.覆盖率有什么...

    软件测试中的覆盖率:
    
    
    	1.白盒覆盖率
    
    	2.灰盒覆盖率
    
    	3.黑盒覆盖率
    
    	4.面向对象覆盖率
    

    logical:逻辑推理。

    白盒覆盖率:(white-box coverage)

    白盒覆盖率中最常见的是逻辑覆盖率(logical coverage),逻辑覆盖率也称为代码覆盖率(Code Coverage)或结构化覆盖率(Structural Coverage)。

    逻辑覆盖率中最常见的包括六种:
    
    1.语句覆盖率
    
    2.判定覆盖率
    
    3.条件覆盖率
    
    4.判定-条件覆盖率
    
    5.条件组合覆盖率
    
    6.路径覆盖率
    
    
    覆盖率的概念:覆盖率既不是测试方法也不是测试阶段,覆盖率是用来度量测试完整性的一种手段,是测试技术有效性的一个度量。
    
    判断题:覆盖率越高那么软件质量越好。错!
    

    一:语句覆盖率:

    概念:在测试时运行被测程序后,程序中被执行的语句数占语句总数的比率。
    
    
    语句覆盖率=至少被执行一次的语句数量/语句总数。
    
    
    
    补充:
    
    	1.算法:
    
    		算法是程序的灵魂。---------谭浩强
    
    		算法就是程序解决问题的一系列步骤。----------《算法导论》
    
    		整个世界就是算法。--------------辛博伟
    
    
    	2.流程图:流程图也称为输入-输出图。流程图具有简单、直观、无二义性的特点。我们可以认为流程图就是算法的图形化。
    
    
    
    圆角矩形:表示开始和结束
    
    平行四边形:表示输入和输出
    
    菱形:表示判断
    
    箭头:表示指向
    

    if((A>1)&& (B==0))

    X=X/A ;
    if((A==2)|| (X>1))
    X=X+1;

    疑问1:在计算公式中为什么要加上至少被执行一次这句话?(循环,同一个语句循环执行多次只算一次)
    
    
    疑问2:语句覆盖率是不是完美的,也就是说语句覆盖率达到100%,是不是就能发现所有的问题?
    

    逻辑学:证有不证无。

    如何证明疑问2:找一个覆盖率是100% 的用例,向程序中引入错误,如果此时语句覆盖率依然是100%说明没有发现这个错误。由此证明语句覆盖率不完美。把and和or互换相当于引入一个错误,此时语句覆盖率依然是100%,所以:语句覆盖率不是完美的,即使语句覆盖率达到100%也不一定能否发现所有的问题。
    

    二:判定覆盖率:

    语句覆盖率只可能走真或者假不可能两种都覆盖率所以语句覆盖率不完美。
    判定覆盖率概念:在测试时运行被测程序后,所有的判断语句的取真分支和取假分支都被执行的比率。
    
                    因此判定覆盖率也称为分支覆盖率。
    
    
    判定覆盖率=判定结果至少被执行一次的数量/判定结果总数
    判定结果总数=判断语句数*2
    
    判断题:
    
    1.某一个用例的判定覆盖率是50%,另一个用例的判定覆盖率也是50%,那么这两个用例合起来的判定覆盖率就是100%。错!
    
    2.任何一个单个的测试用例,其判定覆盖率一定是50%。错!(嵌套)
    
    3.判定覆盖率达到100%,语句覆盖率一定达到100%。对!
    
    
    判定覆盖率也不是完美的,即使判定覆盖率达到100%也不一定能发现所有的问题。(思路找两个用例判定覆盖率达到了100%,引入错误,再看覆盖率)
    

    三:条件覆盖率

    判定覆盖率不完美主要是因为:完美只考虑到了判断语句的取真和取假,没有考虑判定条件的取真和取假。
    
    条件覆盖率的概念:在测试时运行被测程序后,所有的判断语句中的每个判定条件的可能取值出现的比率。
    
    
    判断语句----------判定条件
    
    
    条件覆盖率=条件操作数至少被执行一次的数量/条件操作数总数
    
    
    条件操作数总数=判定条件数*2
    
    
    在计算条件覆盖率时最好要考虑or不执行的情况。
    
    
    判断题:
    
    1.某一个用例的条件覆盖率是50%,另一个用例的条件覆盖率也是50%,那么这两个用例合起来的条件覆盖率就是100%。错!(重复)
    
    2.任何一个单个的测试用例其条件覆盖率一定是50%。错!(嵌套、or)
    
    3.条件覆盖率达到100%,判定覆盖率一定达到天100%。错! 例如ABX:103  211  312 这三条用例的条件覆盖率是100%,但是判定覆盖率是50%。
    

    条件覆盖率也不是完美的即使条件覆盖率达到100%,也不一定能发现所有的问题。


    四.判定-条件覆盖率:

    概念:所谓的判定-条件覆盖率就是设计足够多的测试用例使得判断语句中每个判定条件的可能取值至少被执行一次同时每个判断语句本身的可能取值至少被执行一次的数量。
    
    判定-条件覆盖率=(条件操作数至少被执行一次的数量+判定结果至少被执行一次的数量)/(条件操作总数+判定结果总数)
    
    
    思路:先算出判定覆盖率再算出条件覆盖率,不要约分,分母相加、分子相加。
    
    
    判定-条件覆盖率也不是完美的,即使判定-条件覆盖率达到100%,也不一定能发现所有的问题。
    

    五:条件组合覆盖率:

    条件覆盖率只考虑到调价的取真盒取假,没有考虑到条件之间的组合。
    
    
    概念:设计足够多的测试用例使得每个判定条件的各种组合出现的比率。
    
    条件组合覆盖率=条件组合至少被执行一次的数量/条件组合的总数
    
    
    
    面试真题:四只蜗牛位于长方形的四个角,蜗牛只能沿着长方形的边走,并且同时出发速度一样。请问蜗牛不碰面的概率多少?
    

    (A>1) AND (B=0)

    A>1 B==0

    A<=1 B!=0

    (A=2) OR (X>1)

    A==2 X>1

    A!=2 X<=1

    条件组合覆盖率也不是完美的,即使条件组合覆盖率达到100%也不一定发现所有的问题。
    

    六:路径覆盖率:

    概念:在测试时首先设计若干个测试用例,然后运行被测程序,覆盖程序中所有可能的路径。
    
    路径覆盖率=至少执行一次的路径/路径总数
    
    路径覆盖率也不是完美的,即使路径覆盖率达到100%也不一定能发现所有的问题。
    

    总结:没有一种覆盖率是完美的,在实际工作中要根据实际情况来选择合适的覆盖率,可以选其中一个或者多个组合起来使用,一般优先选择语句覆盖。

    ScriptCover-1.0.0.2.crx:是谷歌公司开发的一款用于统计JavaScript代码覆盖率的工具,为web提供实时的逐行的代码覆盖率分析。


    真题1:1/6

    真题3: 2 8 3 12 0 21


    课堂思考:

    1.什么是单元测试?

    2.单元测试有什么用?

    3.什么是驱动?什么是桩?

    4.软件覆盖率都有哪些?

    5.覆盖率有什么用?

    6.如何看待覆盖率的高低?

    7.如何进行各种覆盖率的选择?


    1.什么是单元测试?

    1>单元测试是测试的第一个阶段
    2>单元测试是对软件最基本的组成单位所进行的测试。
    3>单元测试主要是基于白盒测试。

    2.单元测试有什么用?

    1>单元测试能够摆脱界面的束缚。

    2>单元测试能够看到软件内部的详细信息。

    3>尽早发现问题减少修复bug的成本。

    3.什么是驱动和桩?

    驱动:

    1. 驱动是用来调用被测函数的函数。

    2. 将测试数据传递给被测函数,最后输出实测结果。

    桩:

    1.桩是用来代替 被测函数 所调用的函数 的函数。
    2.桩一定是正确的。
    3.使用桩主要是为了支持故障隔离。

    4.覆盖率都有哪些?

    	1.白盒覆盖率
    
    	2.灰盒覆盖率
    
    	3.黑盒覆盖率
    
    	4.面向对象覆盖率
    
    		逻辑覆盖率中最常见的包括六种:
    
    		1.语句覆盖率
    		2.判定覆盖率
    		3.条件覆盖率
    		4.判定-条件覆盖率
    		5.条件组合覆盖率
    		6.路径覆盖率
    

    5.覆盖率有什么用?

    1.能够证明软件测试是否完整。
    2.是单元测试停止的标志。

    6.如何看待覆盖率的高低?

    1.覆盖率只是一种度量手段,覆盖率高的软件质量并不一定高。

    2.我们不应该一味的追求高的覆盖率,还需要考虑时间、人力等成本。

    7.如何进行各种覆盖率的选择?

    1.没有一种覆盖率是完美的,我们优先选择语句覆盖。

    2.如果时间、人力等条件允许时,我们可以选择多种覆盖概组合。

    展开全文
  • 逻辑覆盖率

    2017-05-17 16:31:00
    2.条件覆盖率 3.分支覆盖率 4.条件分支覆盖率 5.路径覆盖率 语句定义:非结构性的部分(#include void main等),非条件表达式,有独立作用的以分号结尾的代码行。 优点:不能保证路径完全覆盖,条件表达式也...

    逻辑覆盖率

     

    1.语句覆盖率

    2.条件覆盖率

    3.分支覆盖率

    4.条件分支覆盖率

    5.路径覆盖率

     

    语句定义:非结构性的部分(#include void main等),非条件表达式,有独立作用的以分号结尾的代码行。

    优点:不能保证路径完全覆盖,条件表达式也可能没有完全验证。

     

    条件:被测条件结果数/总条件结果数

    优点:可以测到全部条件结果

    缺点:分支不一定覆盖全

     

    分支定义:逻辑判断后出现的俩种可能的情况

                      被测分支总数/所有分支总数

    优点:可以确保所有分支语句的覆盖

    缺点:条件不一定会被覆盖全,如或条件,第一个不满足就不再判断下一个条件了

     

    条件分支:条件覆盖率+分支覆盖率,分子+分子,分母+分母,不能约分

    优点:可以覆盖所有条件和分支

    缺点:路径不一定全

     

    路径:从开始到结束的所有通路

    优点:可以覆盖所有的业务路径

    缺点:不能覆盖所有判断条件

     

     

    转载于:https://www.cnblogs.com/meteorbai/p/6868213.html

    展开全文
  • SV 覆盖率验证

    2021-01-07 17:11:41
    条件覆盖率(condition coverage):记录各个条件中的逻辑操作数被覆盖的情况。 跳转覆盖率(toggle coverage):记录单bit信号变量的值为0/1跳转情况,如从0到1,或者从1到0的跳转。 分支覆盖率(branch coverage)...

    代码覆盖率

    • 行覆盖率(line coverage):记录程序的各行代码被执行的情况。
    • 条件覆盖率(condition coverage):记录各个条件中的逻辑操作数被覆盖的情况。
    • 跳转覆盖率(toggle coverage):记录单bit信号变量的值为0/1跳转情况,如从0到1,或者从1到0的跳转。
    • 分支覆盖率(branch coverage):又称路径覆盖率(path coverage),指在if,case,for,forever,while等语句中各个分支的执行情况。
    • 状态机覆盖率(FSM coverage):用来记录状态机的各种状态被进入的次数以及状态之间的跳转情况。

    功能覆盖率

    • 面向数据的覆盖率(Data-oriented Coverage)-对已进行的数据组合检查.我们可以通过编写覆盖组coverage groups)、覆盖点coverage points)和交叉覆盖cross coverage)获得面向数据的覆盖率.
    • 面向控制的覆盖率(Control-oriented Coverage)-检查行为序列sequences of behaviors)是否已经发生.通过编写SVA来获得断言覆盖率(assertion coverage).

    覆盖组——covergroup

    	使用**覆盖组结构(covergroup)定义覆盖模型**,覆盖组结构(covergroup construct)是一种**用户自定义**的结构类型,一旦被定义就可以创建多个实例就像类(class)一样,也是`通过new()来创建实例`的。覆盖组可以定义在module、program、interface以及class中。
    

    ​ 一个类可以包含多个covergroup;每个covergroup可以根据需要自行使能或者禁止,每个covergroup可以定义单独的触发采样事件,允许从多个源头收集数据。covergroup必须被例化才可以用来收集数据。

    每一个覆盖组(covergroup)都必须明确一下内容:

    • 一个时钟事件以用来同步对覆盖点的采样;
    • 一组覆盖点(coverage points),也就是需要测试的变量
    • 覆盖点之间的交叉覆盖;
    • 可选的形式参数;
    • 覆盖率选项;
    covergroup cov_grp @(posedge clk);    //用时钟明确了覆盖点的采样时间,上升沿采样覆盖点,也可省略clk,在收集覆盖率时在根据情况注明
      cov_p1: coverpoint a;//定义覆盖点,cov_p1为覆盖点名,a为覆盖点中的变量名,也就是模块中的变量名
    endgroup
     
    cov_grp cov_inst = new();//实例化覆盖组
    

    上述例子用时钟明确了覆盖点的采样时间,上升沿采样覆盖点,也可省略clk,在收集覆盖率时在根据情况注明,通过内建的sample()方法来触发覆盖点的采样,如下示例:

    covergroup cov_grp;
      cov_p1: coverpoint a;//cov_p1为覆盖点名,a为覆盖点中的变量名,也就是模块中的变量名
    endgroup
     
    cov_grp cov_inst = new();
    cov_inst.sample();          //sample函数收集覆盖率
    

    使用事件触发与直接调用sample()相比,好处在于你能够借助已有的事件。

    覆盖点——coverpoint

    • 隐式或自动bin:覆盖点变量,其取值范围内的每一个值都会有一个对应的bin,这种称为自动或隐式的bin。例如,对于一个位宽为nbit的覆盖点变量,若不指定bin个数,2^n个bin将会由系统自动创建,需要注意的是 自动创建bin的最大数目由auto_bin_max内置参数决定,默认值64
    program automatic test(busifc.TB ifc);        //接口例化
       class Transaction;
          rand bit [3:0]  data;
          rand bit [2:0]  port;
       endclass
    
       covergroup Cov;           //定义覆盖组,未添加时钟信号,此时需要使用sample()函数采集覆盖率
          coverpoint  tr.port;     //设置覆盖点
       endgroup
    
       initial begin
          Transaction  tr=new();     //例化数据包
          Cov          ck=new();     //例化覆盖组
          repeat(32) begin
             tr.randomize();
             ifc.cb.port <= tr.port;
             ifc.cb.data <= tr.data;
             ck.sample();            //采集覆盖率
             @ifc.cb;
          end
       end
       
    endprogram   
    

    对于覆盖点tr.port,如果覆盖率达到100%,那么将会有auto[0],auto[1],auto[2] … auto[7]等8个bin被自动创建。其实际功能覆盖率报告如下:

    在这里插入图片描述

    • 显式bins:"bins"关键字被用来显示定义一个变量的bin,用户自定义bin可以增加覆盖的准确度,它属于功能覆盖率的一个衡量单位。在每次采样结束时,生成的数据库中会包含采样后的所有bins,显示其收集到的具体覆盖率值。最终的覆盖率等于采样的bins值除以总的bins值。
    covergroup 覆盖组名 @(posedge clk);//时钟可以没有
      覆盖点名1: coverpoint 变量名1{ bins bin名1 = {覆盖点取值范围}(iff(expression));  //iff结构可以指定采样条件
                                    bins bin名2 = {覆盖点取值范围};
                                    bins bin名3 = {覆盖点取值范围};
                                  .......
                                  }//一般会将bin的数目限制在8或16
                               。。。。。。
    endgroup : 覆盖组名
    
    //iff结构的运用实例如下:
    bit[1:0]  s0;
    covergroup  g4;
      cover1: coverpoint s0 iff(!reset) ;    //当reset=0时,表达式为真开始采样 
    endgroup
    

    注意对coverpoint的bin的声明使用的是{},这是因为bin是声明语句而非程序语句,而且{}后也没有加分号

    针对某一变量,我们关心的可能只是某些区域的值或者跳转点,因此我们可以在显示定义的bins中指定一组数值(如3,5,6)或者跳转序列(如3->5->6)操作符(=>)

    bit[2:0]     v;
    covergroup  sg@(posedge clk);
       coverpoint  v{bins b2=(3 => 4 => 5);   //3 to 5
                     bins b3=(1,5 => 6=>7);   //(1=>6)、(1=>7)、(5=>6)、(5=>7)
                     bins b5=(5[*3]);         //3 consecutive 5's(连续重复,数值5的3次重复连续)
                     bins b6=(3[*3:5]);       //(3=>3=>3)、(3=>3=>3=>3)、(3=>3=>3=>3=>3)
                     bins b7=(4[->3]=>5);     //...=>4...=>4...=>4=>5(跟随重复,4出现3次,可以不连续,但在最后一个4出现后,下一个数值为5)
                     bins b8=(2[=3]=>5);      //...=>2...=>2...=>2...=>5(非连续重复,数值2出现3次)
                     bins anothers=default_sequence;
                     }
    endgroup
    

    wildcard覆盖率

    使用关键字wildcard来创建多个状态或者翻转。

    bit [2:0] port;
    covergroup CoverPort;
    	coverpoint port{
            wildcard bins even = {3'b??0};
            wildcard bins even = {3'b??1};   
        }
    

    忽略的bin:ignore_bins

    非法的bin:illegal_bins

    显示定义bins时,可通过关键字default将未分配到的数值进行分配

    covergroup  Cov;
       coverpoint  tr.data{             //data变量的取值范围为0~15,不设置显示bins时,理论上会有16个bin
                   bins  zero = {0};            //取值:0
                   bins  lo = {[1:3],5};        //取值:1,2,3,5
                   bins  hi[] = {[8:$]};        //取值:8~15,使用动态数组方法时相当于创建了hi[0],hi[1],...,hi[7]一共8个bins
                   bins  misc = default;        //余下的所有值:4,6,7
       }
    

    在这里插入图片描述

    交叉覆盖率——cross

    ​ 交叉覆盖是在覆盖点或变量之间指定的,必须先指定覆盖点,然后通过关键字cross定义覆盖点之间的交叉覆盖

    //通过覆盖点来定义交叉覆盖
    bit [3:0] a, b;
    covergroup cg @(posedge clk);
      c1: coverpoint a;
      c2: coverpoint b;
      c1Xc2: cross c1,c2;    //1. 定义交叉覆盖使用关键字cross,利用**覆盖点名字**定义交叉覆盖
    endgroup : cg
     
    //通过变量名来定义交叉覆盖
    bit [3:0] a, b;
    covergroup cov @(posedge clk);
      aXb : cross a, b;      //2. 定义交叉覆盖使用关键字cross,直接利用**变量名字**定义交叉覆盖
    endgroup
     
    //交叉覆盖的通用定义格式: 
    交叉覆盖名:cross 交叉覆盖点名1,交叉覆盖点名2;
    

    由于上面每个覆盖点都有16个bin,所以它们的交叉覆盖总共有256(16*16)个交叉积(cross product),也就对应256个bin

    bit [3:0] a, b, c;
    covergroup cov @(posedge clk);
      BC  : coverpoint b+c;
      aXb : cross a, BC;
    endgroup
    

    上例的交叉覆盖总共有256个交叉积(cross product),也对应256个bin。

    可通过ignore_bins、binsof 和 intersect 分别指定coverpoint 和值域,这样可以清除很多不关心的cross bin。

    cross kind,port{
        ignore bins hi = binsof(port) intersect{7};
    }
    
    展开全文
  • sv中覆盖率

    2020-07-31 21:19:15
    3 条件覆盖率 (condition coverage) 4 分支覆盖率 (branch coverage) 5 状态机覆盖率 (fsm coverage) VCS中收集为 -cm line | cond | fsm | tgl | branch | assert 二:功能覆盖率 如果是在一个类中定义覆盖组,首先...
  • 软件测试——测试覆盖率

    千次阅读 2018-07-23 18:35:44
    1 测试覆盖率: 1.1 需求覆盖率 1.1.1.1 需求管理工具:ALM,Doors和TestLink 1.2 代码覆盖率 ...1.2.1.3 条件覆盖率:每个条件的可能取值至少取一次 1.2.1.4 价值:找出潜在一楼的测试用例,识别出...
  • 逻辑覆盖率:语句覆盖<条件覆盖<判定覆盖<条件-判定覆盖<组合覆盖<路径覆盖 语句覆盖 基本思想:设计用例,使程序中的每个可执行语句至少执行一次。 每个可执行语句:每个语句,那么下图中执行为:1-...
  • 多约束条件下无线传感器网络中的复合事件屏障覆盖率
  • 测试覆盖率

    2017-03-13 11:25:00
    测试覆盖率 测试覆盖率 覆盖率 测试过程中,对测试对象进行了...又叫结构化覆盖率或代码覆盖率,分为语句覆盖,条件覆盖,路径覆盖,判定覆盖,判定条件覆盖,条件组合覆盖,指令块覆盖,判定路径覆盖等逻辑覆盖:...
  • 一、语句覆盖率 计算方式:被测语句/全部语句 全部语句要求:非分支,非判断 num = int(input("请输入数字:")) #① if num>...三、条件覆盖率 什么是条件:结果为true或false # 请输入用户名和密码...
  • 转一篇,别人写的关于覆盖率的文章,没事常看看琢磨琢磨 ...其中,最常讨论和关心的是”代码覆盖率“,代码覆盖率又分为程序语句和代码行覆盖,分支覆盖和条件覆盖。对于这些概念,我们逐个解释。
  • SV覆盖率

    2020-08-22 18:48:15
    前言:欢迎您,有缘人! 1.基于覆盖率动的验证技术 ...功能覆盖率用于检査设计的应用场景、边界条件、特殊变量或者设计条件是否被完的正确的测试或者确认过 2.覆盖率类型 2.1覆盖率类型:RTL代码覆盖率 衡量验证.
  • 验证方法学覆盖率(一):代码覆盖率

    千次阅读 2020-07-06 18:08:37
    它的作用是检查代码是否冗余,设计要点是否遍历,被检测的对象是RTL代码,而代码覆盖率的检测一般由工具自动生成的,不需要自定义收集条件。代码覆盖率主要包括以下几种: 1.行覆盖率(Line coverage) 行覆盖率度量的...
  • scala 代码覆盖率 Scala最好的代码覆盖率指标是语句覆盖率 。 就那么简单。 它最适合Scala中的典型编程风格。 Scala是一个变色龙,它可以看起来像您想要的任何东西,但是通常更多的语句写在一行上,而条件式“ if ...
  • 覆盖率测试

    2019-08-11 21:41:49
    覆盖率测试分为:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖。 1、语句覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每一个语句至少执行一次,其覆盖标准无法发现...
  • Jacoco覆盖率

    2020-08-06 20:13:44
    条件:如上所述,计算行覆盖率需要debug信息 计算:至少行中的一条指令运行,则该行被覆盖 分类:由于一行代码通常包含多条指令,根据指令的执行情况细分: - 无覆盖率:没有指令覆盖(红色) -
  • 概念: 设计足够多的测试用例,使被测程序中每个判定的所有...条件覆盖率=条件组合至少出现一次的数量/条件组合的总数 eg: 以上为例,案例代码中有判定两个(x>0&&y>0)(magic<0)判定,条件三个...
  • 本文内容基于覆盖率驱动的验证技术(CDV):代码覆盖率:断言覆盖率定义功能覆盖率模型covergroup解释功能覆盖率的采样事件定义覆盖点:bins定义覆盖点:条件覆盖定义覆盖点:状态跳转覆盖定义覆盖点:交叉覆盖生成...
  • 代码覆盖率

    2016-01-26 16:06:46
    通常,代码覆盖率用在如下几个方面 找出程序中没有被测试代码执行到的地方;...语句覆盖(statement coverage),决策覆盖(decision coverage)也叫分支覆盖(branch coverage),条件覆盖(condition coverage
  • 测试覆盖率有什么用?

    千次阅读 2009-08-14 10:29:00
    在上一篇文章里面我们介绍了测试覆盖率的分类,举例揭示了需求覆盖率,语句覆盖率,分支覆盖率很条件覆盖率这些问题,在这篇文章里面,则主要介绍为什么要千方百计来找“测试覆盖率”。(关于上一篇文章,参见测试...
  • 由于它使用模型覆盖率设置,因此这些结果可以用于整个模型或指定的块。 该脚本将在表中象征性地标识哪些模型没有完全覆盖,并在最后统计所有模型的结果。 包括示例 BlockNames 和相应的脚本输出(不包括报告中的...
  • Wy商城 代码覆盖率驱动的测试 (CCDT, Code Coverage Driven Test) Wy商城 代码覆盖率=代码的覆盖程度,一种度量方式 夜盖率是用来度量测试完整性的一个手段 几种常见的覆盖率测试方式 1.语句覆盖( Statement Coverage...
  • 其中,白盒测试的动态分析方法中提到逻辑覆盖率测试有:语句覆盖、分支覆盖/判定覆盖、条件覆盖、条件—判定覆盖和路径覆盖。这里将详细阐述逻辑覆盖率测试。准备知识 软件测试技术基础学习之测试覆盖率 软件测试...
  • 覆盖率是用来度量测试完整性的一个手段,现在有越来越多的测试工具能够支持覆盖率测试,但是它们本身并不包含测试技术,只是测试技术有效性的一个度量。白盒测试中经常用到的覆盖率是逻辑覆盖率覆盖率对于软件测试...
  • 白盒测试时基于程序结构的逻辑驱动测试,白盒覆盖中最常见的是逻辑覆盖(也叫代码覆盖或结构化覆盖),逻辑覆盖包括:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。 1.语句覆盖(Statement...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 857
精华内容 342
关键字:

条件覆盖率