精华内容
下载资源
问答
  • 信息被覆盖了的意思
    千次阅读
    2021-09-13 11:07:45

    一、概念

    覆盖率:用来度量测试完整性的一个手段,大体可划分为逻辑覆盖功能覆盖

    覆盖率 = (至少被执行一次的 item 数)/ item 的总数
    

    二、常用的逻辑覆盖

    覆盖率中最常见的是逻辑覆盖率(Logic Coverage),也叫代码覆盖率 (Code Coverage)或结构化覆盖率(Structural Coverage)

    逻辑覆盖属于白盒测试的范畴。常用逻辑覆盖包括:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、路径覆盖等。

    1. 语句覆盖

    测试用例在被测程序在运行时,保证每个可执行语句至少执行一次

    语句覆盖(Statement Coverage)是逻辑覆盖中最简单的覆盖,容易理解,易于维护,比较适合自动化

    语句覆盖率 = (至少被执行一次的语句数量)/ (可执行的语句总数)
    

    举个栗子:

    if CONDITION 
    	DO_SOMETHING 
    ANOTHER_STATEMENT
    

    只要 CONDITION = TRUE 就可以实现语句覆盖。

    2. 判定覆盖

    判定覆盖(Decision Coverage)也叫分支覆盖(Branch Coverage), 测试用例在被测程序运行时,保证程序中每个判断至少取一次 TRUEFALSE 判断
    覆盖率 = (判定结果至少被评价一次的数量)/ (判定结果的总数)

    if A AND B 
    	DO_SOMETHING 
    else
    	DO_SOMETHING_ELSE
    

    判定覆盖的case:

    case1: A = TRUE, B = TRUE 
    case2: A = TRUE, B = FALSE
    

    优点:针对代码,容易理解,可实现 100% 判定覆盖,测试数据易于维护。
    缺点:判定复合条件——代码错误的根源时,可能仅执行特定组合分支被测试 ,完整性高于语句覆盖,低于条件覆盖。

    3. 条件覆盖

    条件覆盖(Condition Coverage)也叫分支覆盖(Branch Coverage) 测试用例在被测程序运行时,保证程序中每个判断中每个条件至少取一次 TRUEFALSE 条件

    覆盖率 = (条件操作数值至少被执行一次的数量)/ (条件操作数值的总数)
    

    举个栗子

    if A > 1 AND B = 0 
    	X = X / A 
    if A = 2 OR X > 1
    	X = X + 1
    

    所有可能的情况:

    条件判断A > 1B = 0A = 2X > 1
    取真A > 1B = 0A = 2X > 1
    取假A <= 1B != 0A != 2X <= 1

    条件覆盖的case:

    case1: A = 2, B = 0, X = 0 	TT
    case2: A = 0, B = 1, X = 2	FT
    

    优点:容易从设计或代码中被确认,有助于自动化,易于理解和维护,比分支覆盖强
    缺点:设计的用例可能不能满足判定覆盖的要求 4. 判定条件覆盖

    4. 判定条件覆盖

    判定条件覆盖(Dicision Condition Coverage),又叫分支条件覆盖(Branch Condition Coverage,B-C Coverage)
    测试用例在被测程序运行时,保证程序中每个判断中每个条件至少取一次 TRUEFALSE ,且么诶个判断本身也至少取一次 TRUEFALSE 判定条件

    覆盖率 = (条件操作数值 或 判定结果 至少被执行一次的数量)/ (条件操作数值的总数 + 判定结果总数) 
    

    eg:

    if A > 1 AND B = 0 
    	X = X / A 
    if A = 2 OR X > 1
    	X = X + 1
    

    所有可能的情况

    判定case
    A > 1 AND B = 01. A > 1 AND B = 0
    A > 1 AND B = 02. A > 1 AND B != 0
    A > 1 AND B = 03. A <= 1 AND B = 0
    A > 1 AND B = 04. A <= 1 AND B != 0
    A = 2 OR X > 11. A = 2 OR X > 1
    A = 2 OR X > 12. A = 2 OR X <= 1
    A = 2 OR X > 13. A != 2 OR X > 1
    A = 2 OR X > 14. A != 2 OR X <= 1

    判定覆盖的case

    case1: A = 2, B = 0, X = 2 TTTT TT
    case2: A = 2, B = 1, X = 0 TFTF FT
    case3: A = 0, B = 0, X = 2 FTFT FT 
    case4: A = 0, B = 1, X = 0 FFFF FF
    

    5. 路径覆盖

    路径覆盖(Path Coverage) 测试用例在被测程序运行时,保证覆盖程序中所有可能的路径

    路径覆盖率 = (至少一次被执行的路径数)/ (总路径数) 
    

    路径覆盖比判定条件覆盖更强,但路径覆盖不能包含判定条件覆盖。
    判定覆盖的case

    case1(TT): A = 2, B = 0, X = 2 
    case2(FT): A = 2, B = 1, X = 0 
    case3(TF): A = 3, B = 0, X = 0 
    case4(FF): A = 3, B = 1, X = 0
    

    实际代码中,一个较为复杂的程序包含的路径数也是相当庞大的,要完全达到路径覆盖是不可行的,实现自动化路径覆盖也是困难的。

    6. 小结

    1. 即使达到 100% 结构化覆盖率,还是无法保证程序的正确性
    2. 测试的目的并不是证明程序的正确性,而是要尽可能找出程序中的错误
    3. 目前,没有十全十美的测试方法,能够发现所有的错误
    4. 软件测试是有局限性的

    三、功能覆盖率

    功能覆盖(Function Coverage)属于黑盒测试的范畴,其中最常见的是需求覆盖。

     需求覆盖率 = (被验证的需求数量)/ (总的需求数量) 
    

    接口覆盖「入口覆盖」:设计可以测试系统每个接口的用例,属于黑盒测试。

    四、面向对象的覆盖率

    面向对象:多态性、继承性、封装性

    1. 继承上下文覆盖

    继承上下文覆盖(Inheritance Context Coverage):不是单个度量,是一种传统结构化覆盖的扩展,以考虑方法被继承时的额外接口。

    • 基类方法在其上下文空间中的执行完全能独立与其继承类的上下文空间
    • 继承类方法在其上下文空间中的执行也独立于其基类的上下文空间
    继承上下文判定覆盖率 = (累加每个上下文执行到的判定分支数)/ (上下文数 * 上下文内的判定分支总数)
    

    2. 基于状态的上下文覆盖

    基于状态的上下文覆盖(State-based Context Coverage):用于改进对带有状态依赖行为的类的测试
    面向对象的系统中存在许多类,将其描述为状态机。这些类的对象可以存在于众多不同状态中的一种,而且每个类的行为在每个可能的状态中其性 质是不同的 —— 类的行为依赖与状态

    2.1 基于状态的类

    eg:有边界的栈 pop() —— 空状态、部分满状态、满状态

    2.2 入口点覆盖

    黑盒测试角度,接口覆盖(Interface Coverage),或者入口点覆盖(Entry-Point Coverage)

    2.3 白盒测试

    影响覆盖率的因素 :

    • 代码中存在不对应于公共接口特性的判定。eg:错误处理代码 or 保护性代码程序
    • 无法确定那些代码被丢失。eg:pop() 方法空状态检查

    2.4 基于状态转移图

    在不了解类内部细节的基础上,基于类当前状态及类行为的变化,绘制 UML 状态迁移图
    测试用例设计目标:执行每个可能状态的每种方法

    2.5 基于状态的上下文覆盖

    对应于被测类对象的潜在状态,把一个状态上下文内的一个例行程序的执行认为是独立于另一个状态内的相同例行程序的执行。
    例行程序必须在每 个适当的上线文(状态)内被执行

     基于状态的上下文入口点覆盖率 = (累加每个状态内执行到的方法数)/ (状态数 * 类内方法总数) 
    

    3. 基于线程的上下文覆盖

    基于线程的上下文覆盖(User-Defined Context Coverage):允许将上下文覆盖方法应用于传统结构化覆盖率无法使用的地方,以维护每个线程独 立的覆盖率信息

    五、其它覆盖率

    1. 函数覆盖

    函数覆盖是针对系统或一个子系统的。 在测试中有哪些函数被测试,其被测试到的频率有多大,这些函数在系统所有函数中占的比例有多大

    函数覆盖率 = (至少被执行一次的函数数量)/ (系统中函数的总数)
    

    函数覆盖,基于代码,属于白盒测试。易于自动化,也易于理解

    2. 指令块覆盖

    指令块覆盖(Instruction Blocks Coverage)是语句覆盖的一个变体
    指令块表示函数内部的一系列语句,在这一系列语句中不存在控制语句

    指令块覆盖率 = (至少被执行一次的指令块数量)/ (系统中指令块的总数)
    

    3. 判定路径覆盖

    判定路径覆盖(Decision-to-Decision Paths Coverage, DDP Coverage)是判定覆盖的一个变体
    判定指一个序列语句,其起始位置是函数入口或一个判定(eg:if,while,switch等)的开始,结束位置是下一个判定的开始。

    DDP覆盖率 = (至少被执行一次的判定路径数量)/ (系统中判定路径的总数)
    

    4. 更改条件判定覆盖

    更改条件覆盖(Modified Condition/Decision Coverage, MC/MD Coverage)是判定条件覆盖的一个变体,主要用于多条件测试的情况。

    • 被测试程序模块的每个入口点和出口点都必须至少被执行一次,且每个程序判断的结果至少被覆盖一次
    • 通过逻辑分解操作,程序的判定被分解为基本的布尔条件表达式,每个条件独立地作用于判定的结果,覆盖所有条件的可能结果

    eg:

    X and (Y or Z)
    

    所有可能的情况

    XYZX and (Y or Z)
    Test1TTTT
    Test2TTFT
    Test3TFTT
    Test4TFFF
    Test5FTTF
    Test6FTFF
    Test7FFTF
    Test8FFFF

    可以组合的case:

    Test2,Test6,Test4,Test3
    

    5. 分支条件组合覆盖

    分支条件组合覆盖(Branch Condition Combination Coverage),比判定条件覆盖更强的覆盖
    测试用例在被测程序运行时,保证每个分支中各操作数值的组织都遍历一次

    分支条件组合覆盖率 = (至少被执行一次的分支条件组合)/ (系统中分支条件组合的总数)
    
    XYX or Y判定条件覆盖分支条件组合覆盖
    Test1TTT
    Test2TFT
    Test3FTT
    Test4FFF

    6. 过程到过程路径覆盖

    过程到过程路径覆盖(Procedure-to-Procedure Path Coverage, PPP Coverage),针对系统或子系统级,用于集成测试 一个PPP对应的是两个函数之前的一个调用关系

    PPP覆盖率 = (至少被执行一次的PPP数量)/ (系统中PPP的总数)
    

    7. Z路径覆盖

    Z路径覆盖是路径覆盖的一个变体(白盒测试),用于解决程序中存在多个判断和多个循环的问题
    程序中存在多个判断和多个循环时,简化循环机制(限制循环次数),以极大程度减少路径的数量,使得覆盖有限的路径成为可能

    8. ESTCA 覆盖

    错误敏感测试用例分析规则(Error Sensitive Test Cases Analysis,ESTCA),程序中的谓词最容易出错的部分【边界测试】

    • 对于 A rel B(rel 可以使 <, = 和 >)型的分支谓词,选择 A 与 B,使得 A < B, A = B, A > B的情况分别出现一次 「检查 rel 的错误」
    • 对于 A rel C(rel 可以使 <, = 和 >,A是变量,C是常量)型的分支谓词:「检查 “差一”之类的错误」
      • 当 rel 为 < 时,取值 A = C - M(M 是距 C 最小的容许正数,若 A 和 C 均为整型,M = 1);
        • 当 rel 为 > 时,取值 A = C + M
    • 对外部输入变量赋值,使其在每一测试用例中均有不同的值与符号,并于同一组测试用例中其他变量的值与符号不一致「检查程序语句中 的错误」

    六、使用覆盖率基本原则

    • 覆盖率不是目的,只是一种手段
    • 不能针对所有覆盖率指标进行测试,也不能只考虑一种覆盖率指标
    • 如果需要付出极大的成员,不要追求绝对 100% 的覆盖率。涉及到生命安全的系统除外
    • 使用最少测试用例来达到覆盖
    更多相关内容
  • R语言入门——包的函数被覆盖

    千次阅读 2021-01-09 12:14:17
    总结 大家在使用包的过程中切记要注意载入包的提时信息,如果遇到函数冲突可以使用::运算符进行调用。最后希望可以帮助大家学习R语言。水平有限发现错误还望及时评论区指正,您的意见和批评是我不断前进的动力。

    引言

    R语言之所以强大并且受很多数据分析人员的青睐。原因很明显一个就是开源免费精神,一个就是众多优秀的功能包。但是由于很多包的作者不是同一个作者。所以在开发自己包的时候,不同包中不同功能的函数可能就会出现命名重复的问题。本文以dplyr为例为大家提供一个解决办法。

    正文

    问题

    > library(dplyr)
    载入程辑包:‘dplyr’
    The following objects are masked from ‘package:stats’:
        filter, lag
    The following objects are masked from ‘package:base’:
        intersect, setdiff, setequal, union
    

    分析:上面使用library(dplyr)命令导入包的时候有两条提时命令:是在提时我们该包覆盖了stats中的filter, lag函数以及base中的intersect, setdiff, setequal, union函数。那么我们怎么分清我们使用的函数是我们需要的那个呢,下面给出解决办法。

    方案

    要解决包的内置函数覆盖的问题,只需要使用::运算符即可。下面给出例子。

    > dplyr::filter
    function (.data, ..., .preserve = FALSE) 
    {
        UseMethod("filter")
    }
    <bytecode: 0x0000000012316ac8>
    <environment: namespace:dplyr>
    > stats::filter
    function (x, filter, method = c("convolution", "recursive"), 
        sides = 2L, circular = FALSE, init = NULL) 
    {
        method <- match.arg(method)
        x <- as.ts(x)
        storage.mode(x) <- "double"
        xtsp <- tsp(x)
        n <- as.integer(NROW(x))
        if (is.na(n)) 
            stop(gettextf("invalid value of %s", "NROW(x)"), 
                domain = NA)
        nser <- NCOL(x)
        filter <- as.double(filter)
        nfilt <- as.integer(length(filter))
        if (is.na(nfilt)) 
            stop(gettextf("invalid value of %s", "length(filter)"), 
                domain = NA)
        if (anyNA(filter)) 
            stop("missing values in 'filter'")
        if (method == "convolution") {
            if (nfilt > n) 
                stop("'filter' is longer than time series")
            sides <- as.integer(sides)
            if (is.na(sides) || (sides != 1L && sides != 2L)) 
                stop("argument 'sides' must be 1 or 2")
            circular <- as.logical(circular)
            if (is.na(circular)) 
                stop("'circular' must be logical and not NA")
            if (is.matrix(x)) {
                y <- matrix(NA, n, nser)
                for (i in seq_len(nser)) y[, i] <- .Call(C_cfilter, 
                    x[, i], filter, sides, circular)
            }
            else y <- .Call(C_cfilter, x, filter, sides, circular)
        }
        else {
            if (missing(init)) {
                init <- matrix(0, nfilt, nser)
            }
            else {
                ni <- NROW(init)
                if (ni != nfilt) 
                    stop("length of 'init' must equal length of 'filter'")
                if (NCOL(init) != 1L && NCOL(init) != nser) {
                    stop(sprintf(ngettext(nser, "'init' must have %d column", 
                      "'init' must have 1 or %d columns", domain = "R-stats"), 
                      nser), domain = NA)
                }
                if (!is.matrix(init)) 
                    dim(init) <- c(nfilt, nser)
            }
            ind <- seq_len(nfilt)
            if (is.matrix(x)) {
                y <- matrix(NA, n, nser)
                for (i in seq_len(nser)) y[, i] <- .Call(C_rfilter, 
                    x[, i], filter, c(rev(init[, i]), double(n)))[-ind]
            }
            else y <- .Call(C_rfilter, x, filter, c(rev(init[, 1L]), 
                double(n)))[-ind]
        }
        tsp(y) <- xtsp
        class(y) <- if (nser > 1L) 
            c("mts", "ts")
        else "ts"
        y
    }
    <bytecode: 0x0000000012476308>
    <environment: namespace:stats>
    > 
    > 
    > dplyr::intersect
    function (x, y, ...) 
    UseMethod("intersect")
    <bytecode: 0x00000000124dc000>
    <environment: namespace:dplyr>
    > base::intersect
    function (x, y) 
    {
        y <- as.vector(y)
        unique(y[match(as.vector(x), y, 0L)])
    }
    <bytecode: 0x0000000012487718>
    <environment: namespace:base>
    
    dplyr::filter
    stats::filter
    dplyr::intersect
    base::intersect
    

    如上所示我们分别用dplyr::filterstats::filter来调用包dplyrstats包中的filter函数。

    总结

    大家在使用包的过程中切记要注意载入包的提时信息,如果遇到函数冲突可以使用::运算符进行调用。最后希望可以帮助大家学习R语言。水平有限发现错误还望及时评论区指正,您的意见和批评是我不断前进的动力。

    展开全文
  • 五分钟告诉你什么是MySQL的覆盖索引

    千次阅读 2021-08-12 22:31:19
    文章目录五分钟告诉你什么是MySQL的覆盖索引覆盖索引总结参考 五分钟告诉你什么是MySQL的覆盖索引 前面我们已经对MySQL索引底层原理多少有一定的了解了,还不是很了解的小伙伴可以看我之前的博文:《不会吧不会吧,...

    五分钟告诉你什么是MySQL的覆盖索引

    前面我们已经对MySQL索引底层原理多少有一定的了解了,还不是很了解的小伙伴可以看我之前的博文:《不会吧不会吧,难道还有人不了解MySQL索引底层原理?》《MySQL底层为什么要选用B+树作为索引的数据结构呢?》

    其实在之前的博文中也提到了覆盖索引啦,然后今天就单独把这个拿出来讲一讲这个MySQL的性能优化: 覆盖索引。

    覆盖索引

    覆盖索引:SQL只需要通过索引就可以返回查询所需要的数据,而不必通过二级索引查到主键之后再去查询数据。

    首先要了解覆盖索引之前,你必须要了解什么是聚簇索引和非聚簇索引,对这个不了解的小伙伴可以看我之前的博文,还有一个必须要了解的就是回表,覆盖索引其实就是跟到底需不需要回表有直接的关系的。

    什么是回表呢? 通俗的讲就是,如果索引的列在 select 所需获得的列中 或者根据一次索引查询就能获得记录就不需要回表,如果 select 所需获得列中有大量的非索引列,索引就需要到表中找到相应的列的信息,这就叫回表。只有非聚簇索引是需要回表的,所以如果你懂得非聚簇索引的存储的结构,你自然就知道为啥需要回表了。

    注意:不是所有类型的索引都可以成为覆盖索引。覆盖索引必须要存储索引的列,而哈希索引、空间索引和全文索引等都不存储索引列的值,所以MySQL只能使用B-Tree索引做覆盖索引

    我这里举一个例子你就可以很快明白了。

    create table t1
    (
        a int primary key ,
        b int,
        c int,
        d int,
        e varchar(20)
    )engine=InnoDB;
    
    insert into t1 value (4, 3, 1, 1, 'd');
    insert into t1 value (1, 1, 1, 1, 'a');
    insert into t1 value (8, 8, 8, 8, 'h');
    insert into t1 value (2, 2, 2, 2, 'b');
    insert into t1 value (5, 2, 3, 5, 'e');
    insert into t1 value (3, 3, 2, 2, 'c');
    insert into t1 value (7, 4, 5, 5, 'g');
    insert into t1 value (6, 6, 4, 4, 'f');
    
    create index idx_t1_bcd on t1(b,c,d); -- 创建复合索引
    

    接下来我们来看这些SQL,看看哪些SQL满足了覆盖索引。

    explain select * from t1 where b = 1; -- 回表
    explain select e from t1 where b = 1; -- 回表
    explain select b from t1 where b = 1; -- 不用回表 Using index  覆盖索引
    explain select b,c from t1 where b = 1; -- 不用回表 Using index  覆盖索引
    explain select b,d from t1 where b = 1; -- 不用回表 Using index  覆盖索引
    explain select b,c,d from t1 where b = 1; -- 不用回表 Using index  覆盖索引
    explain select a,b,c,d from t1 where b = 1; -- 不用回表 Using index  覆盖索引
    

    其实上面已经给出答案了。

    我们通过执行计划就可以知道是不是满足了覆盖索引的条件了。

    在这里插入图片描述

    如果Extra使用了Using index,就说明了他是满足了覆盖索引了,这个就是覆盖索引的标志了。

    而下面这种很明显就是不满足索引覆盖了。

    在这里插入图片描述

    因为我们建立的是复合索引,所以就是非聚簇索引,非聚簇索引的叶子节点上会存放键的值,也就是我们的(b,c,d) 这三个字段,还会存放主键a字段用于回表操作。

    所以只要查询的列是你建立的索引字段再加上主键字段,都是满足索引覆盖的,这个时候我们在非聚簇索引的叶子节点就能给够获取到这些数据,不需要回表操作。

    总结

    如果要使用覆盖索引,一定要注意SELECT 列表值取出需要的列(并且这些列是有索引的),不可以是SELECT *,但有的人说可以全部列都加索引,但如果将所有字段一起做索引会导致索引文件过大,查询性能下降,不能为了利用覆盖索引而这么做。

    参考

    回表与覆盖索引,索引下推

    mysql高效索引之覆盖索引

    什么叫做覆盖索引?

    展开全文
  • VCS在统计代码覆盖率的过程中,需要在编译和仿真命令上添加对应的开关命令,生成.vdb文件记录覆盖率情况,再使用dve打开该文件进行查看覆盖率。

    1. 牛客算是一个Verilog宝藏刷题网站了,网站提供在线仿真环境,不用自己找题(点击直达),<刷题记录>专栏,持续打卡中…

    虚拟机:VMware -14.0.0.24051
    环 境:ubuntu 18.04.1
    脚 本:makefile(点击直达原来的脚本没有代码覆盖率查看功能,新添加了这个功能



    一、脚本内容

    #LAB_DIR = /home/cyl/target/personal/sync_fifo
    #LAB_DIR = /home/cyl/target/personal/async_fifo
    #LAB_DIR = /home/cyl/target/personal/uart
    #LAB_DIR = /home/cyl/target/personal/spi
    #LAB_DIR = /home/cyl/target/personal/apb
    #LAB_DIR = /home/cyl/target/personal/ahb2apb
    
    DFILES = $(LAB_DIR)/*.v 
    
    # code coverage command
    CM = -cm line+cond+fsm+branch+tgl
    CM_NAME = -cm_name simv
    CM_DIR = -cm_dir ./covdir.vdb
    
    
    
    all :clean elab rung
    all1:clean elab run cov verdi
    all2:clean elab run verdi
    
    elab:
    	vcs -full64 -LDFLAGS -Wl,-no-as-needed -debug_acc+all -timescale=1ns/1ns \
    	-fsdb -sverilog -l comp.log  \
    	${DFILES} \
    	${CM} \
    	${CM_NAME} \
    	${CM_DIR} 
    
    
    run:
    	./simv -l run.log \
    	${DFILES} \
    	${CM} \
    	${CM_NAME} \
    	${CM_DIR} 
    
    
    
    rung:
    	./simv -gui -l run.log \
    	${DFILES} \
    	${CM} \
    	${CM_NAME} \
    	${CM_DIR} 
    
    
    verdi:
    	verdi ${DFILES} \
    	-ssf ./*.fsdb &
    
    cov:
    	dve -full64 -covdir *.vdb &
    
    clean:
    	rm -rf  AN.DB \
    	rm -rf  DVEfiles \
    	rm -rf  csrc \
    	rm -rf  simv.* \
    	rm -rf  *simv \
    	rm -rf  inter.vpd \
    	rm -rf  ucli.key \
    	rm -rf  *.log \
    	rm -rf  verdiLog \
    	rm -rf  novas* \
    	rm -rf  *.fsdb \
    	rm -rf  *.vdb
    

    二、讲解

    VCS在统计代码覆盖率的过程中,需要在编译和仿真命令上添加对应的开关命令,生成.vdb文件记录覆盖率情况,再使用dve打开该文件进行查看覆盖率。

    (1)代码覆盖率选项

    # code coverage command
    CM = -cm line+cond+fsm+branch+tgl
    CM_NAME = -cm_name simv
    CM_DIR = -cm_dir ./covdir.vdb
    
    1. -cm < coveragetype > :打开对应类型覆盖率,例如 -cm cond+tgl+lin+fsm+path为统计所有覆盖率。
    2. -cm_name:统计覆盖率文件名字。
    3. -cm_dir:指定生成.vdb文件目录。
    4. -cm_log+filename.log:记录仿真过程中log信息。
    5. -cm_nocasedef: 在统计case语句的条件覆盖率时,不考虑default条件未达到的情况。
    6. -cm_hier xxx.cfg:通过.cfg文件选择要查看覆盖率的模块或文件。

    (2)查看方法

    就上面的脚本而言,在make all查看波形之后,再make cov即可查看。或者直接make all1,用verdi查看波形,用DVE查看代码覆盖率。绿色是覆盖到的,红色是没有覆盖到的。总之是编译仿真完成之后,make cov就能查看。

    在这里插入图片描述

    方法二,通过文本格式查看

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述


    ✍✍☛ 题库入口
      经过一段时间的沉淀,发现入行IC行业,自己的底子还是很差,写的文章质量参差不齐,也没能解答大家的疑问。决定还是要实打实从基础学起,由浅入深。因此决定通过补充/完善基础知识的同时,通过题库刷题不断提高自己的设计水平,题库推荐给大家(点击直达),<题库记录>栏目不定期更新,欢迎前来讨论。



    作者:xlinxdu
    版权:本文是作者原创,版权归作者所有。
    转载:未经作者允许,禁止转载,转载必须保留此段声明,必须在文章中给出原文连接。

    展开全文
  • 代码覆盖率简介

    千次阅读 2020-12-12 16:36:57
    为了查看白盒测试过程中,哪些代码测试(哪些代码没有测试),在执行代码的时候进行跟踪。通过跟踪,我们可以知道代码的覆盖率详情。为此,本文实现了一个Coverage class 来记录代码执行过程中的覆盖率。本文在...
  • 【测试】什么是代码覆盖

    千次阅读 2022-03-31 15:17:12
    文章目录前言覆盖率定义Go覆盖率统计方法一:直接运行go test 命令统计覆盖率1.1 创建main_test.go 文件1.2 执行go test 命令1.3 执行测试用例1.4 生成代码覆盖率文件1.5 查看覆盖率报告方法二:编译、执行插桩二...
  • 什么叫做覆盖索引?

    千次阅读 2021-05-19 09:03:06
    在了解覆盖索引之前我们先大概了解一下什么是聚集索引(主键索引)和辅助索引(二级索引) 聚集索引(主键索引): 聚集索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的即为整张表的记录数据。 聚集...
  • 如何计算增量测试覆盖

    千次阅读 2021-07-27 05:18:08
    或者说增量覆盖率更有实际意义,测试用例要随源码一并提交,实时保证源码的质量,而不是代码先行,测试用例后补,这有些应付的意思。对于存量代码覆盖率主流的测试工具(框架)都是默认支持的,配置reporter相关参数,...
  • 索引覆盖可以带来很多的好处: 辅助索引不包含行数据的所有信息,故其大小远小于聚簇索引,因此可以减少大量的IO操作。 索引覆盖只需要扫描一次索引树,不需要回表扫描聚簇索引树,所以性能比回表查询要高。 索引中...
  • 植被覆盖度是指植被(包括叶、茎、枝)在地面的垂直投影面积占统计区面积的百分比。常用的计算方法有:经验模型法、植被指数法、像元分解模型法、FCK模型法、决策树分类法和神经网络法。本文利用像元二分模型计算...
  • 覆盖率— SV,SystemVerilog

    千次阅读 2021-06-16 14:43:41
    覆盖选项单个实例的覆盖覆盖组注释次数限定覆盖率目标覆盖率权重6. covergroup常用的方法 1. 覆盖率的类型 覆盖率是衡量设计验证完备性的一个通用词语 1.代码覆盖率 衡量设计实现的情况,工具自动帮你执
  • 覆盖率选项,覆盖率分析

    千次阅读 2020-12-12 21:15:37
    一个covergroup可能会多个地方例化使用,默认情况下sv会将所有的实例的覆盖率合并到一起计算。如果需要单独列出每个covergroup实例的覆盖率,需要以下设置覆盖率选项。 covergroup cov; coverpoint tr.length; ...
  • Linux cp 复制文件强制覆盖的用法

    千次阅读 2021-11-24 10:52:11
    Linux 中 cp -rf 源文件或目录 目标文件或目录,即使加了-f 也是不能强行覆盖的,这时怎么回事的呢?一两个文件很少量的还好说,就输几个yes 进行覆盖,但是要是n多文件怎么办,手动输入也太麻烦了,主要有以下几种...
  • 最大覆盖选址问题建模与求解

    万次阅读 多人点赞 2021-11-09 23:31:08
    建立容量、服务半径约束的最大覆盖选址问题模型,并设计禁忌搜索算法,使用python编程求解。
  • 转一篇,别人写的关于覆盖率的文章,没事常看看琢磨琢磨 测试覆盖率之一——测试覆盖率分类(转) 关于覆盖率,网络上最常见的两个词应该是“测试覆盖率”(Test Coverage)和”代码覆盖率“(Code Coverage)。...
  • 变量覆盖(超详细!)

    千次阅读 2020-09-14 16:03:46
    这些斜杠的的意思就是,让后面的变量失去意义。那么写的是什么就是什么。 extract函数就是把数组中的变量,覆盖掉原来的变量, 这里我们可以理解为本来变量a应该输出Original,但是因为extract函数,所以把原来的a给...
  • 最近测试的同学反馈一个问题,他在测试完项目以后查看覆盖率的结果,发现有个逻辑明明已经覆盖了,但是覆盖率的报告里面显示的却是没有覆盖。 以下就是源码的内容,并且现场演示了接口返回库存不足的逻辑。 看到这...
  • git 覆盖本地修改When you learn to code, sooner or later you'll also learn about Version Control Systems. And while there are many competing tools in this space, one of them is the de facto standard ...
  • 覆盖网络(Overlay Network)

    千次阅读 2018-09-30 16:03:36
    Scalable Resilient Overlay Networks Using Destination-Guided Detouring把位置信息作为决策辅助,而位置信息来源于各个节点所计算出的到标志节点的RTT值,并不依赖于GPS或者IP层拓扑,基本的理念和Improving the ...
  • java覆盖toString()方法的意义

    千次阅读 2020-09-19 10:06:11
    首先,在Java中有一个上帝Object类,是所有类的父类,神一样的存在。以此对神所拥有的方法我们都必须很重视...一般这个字符串的信息量,作用不是很大,我们通常覆盖toString方法为了代表该对象的描述性字符串信息。 /**
  • 企业微信后台模板导入覆盖机制

    千次阅读 2020-03-04 11:00:51
    场景描述:企业微信中已经有一些用户了,现在要批量导入一些用户(可能存在重复)。 先在企业微信后台通讯录管理中,下载用于...2、账号一样,手机号不一样的情况下,手机号不会被覆盖,其他信息被覆盖(比如邮箱...
  • 5G来了,室内该如何覆盖

    万次阅读 2018-09-27 21:28:04
    5G来了,室内该如何覆盖?一、室内网络部署面临的挑战1、 5G 高频导致室内深度覆盖不足2、 传统室分网络难以轻量化演进3、 海量有源头端带来运维挑战4、 有源系统对能耗管理提出更高要求5、 小结二、5G室内数字化...
  • git pull直接覆盖

    千次阅读 2021-05-07 10:19:02
    这样本地的所有修改就都暂时存储起来 。是用git stash list可以看到保存的信息: git stash暂存修改 其中stash@{0}就是刚才保存的标记。 2、pull内容 暂存了本地修改之后,就可以pull了。 $ git pull 3、还原暂存...
  • 直接操作 DOM 的代码通常认为难以测试,因为操作 DOM 就要使用浏览器环境的 DOM Api,而 Jest 是运行在 Node 环境中的。 例如: // 操作 DOM 的函数 function renderHtml() { const div = document.createElement...
  • mysql覆盖索引详解——like模糊全匹配中使用索引

    千次阅读 热门讨论 2019-05-06 16:40:48
    如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引’。即只需扫描索引而无须回表。 只扫描索引而无需回表的优点: 1.索引条目通常远小于数据行大小,只需要读取索引,则mysql会极大地减少数据访问...
  • java 代码覆盖

    万次阅读 2016-12-13 14:43:41
    分类类的覆盖率:类覆盖描熟了项目中多少类已测试套件访问。 方法覆盖率:方法覆盖率是访问的方法的百分比。 语句覆盖率:语句覆盖率追踪单条源代码语句的调用。 语句块覆盖率:语句快覆盖
  • 土地覆盖/土地利用简介及数据集

    千次阅读 2021-08-23 10:00:22
    土地覆盖:地球表面当前所具有的自然和人为影响所形成的覆盖物,是地球表面的自然状态,如森林、草场、农田、土壤、冰川、湖泊、沼泽湿地及道路等。 土地利用:是人类在生产活动中为达到一定的经济效益、社会效益和...
  • Cov:是coverage的缩写,意思是代码覆盖率。 第二栏指令覆盖率和第三栏分支覆盖率,都是进度条的显示形式,红色未覆盖绿色已覆盖,后面跟着覆盖率百分比。 从Total那一栏可以看出,总共有65条指令,9条未执行,因此...
  • 土地利用/土地覆盖(LUCC)——知识汇总

    万次阅读 多人点赞 2020-02-27 15:58:40
    其中遥感手段公认为目前最先进的获取土地利用信息的手段,它具有实时、客观、覆盖面广等优点。 4.各个省与土地利用相关的文献整理汇总 直辖市 上海市: 1994-2006年上海市土地利用时空变化特征及驱动力...
  • Jacoco代码覆盖率报告详解

    万次阅读 2019-08-12 17:05:45
    指令覆盖率表明了在所有的指令中,哪些执行过以及哪些没有执行。这项指数完全独立于源码格式并且在任何情况下有效,不需要类文件的调试信息。 2. Branches Jacoco对所有的if和switch指令计算了分支覆盖率。这项...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 178,372
精华内容 71,348
热门标签
关键字:

信息被覆盖了的意思