UVM在项目中实用的测试方法总结 | 您所在的位置:网站首页 › 测试点分解方法怎么写好一点 › UVM在项目中实用的测试方法总结 |
目录介绍 1 概述... 1 1.1 简介... 1 1.2 目的... 1 1.3 原则... 1 2 实施流程... 1 3 分类... 1 4 实施三步走... 2 5 覆盖类型分析... 2 6 测试方法... 2 7 实例分析... 3 8 常用小技巧... 4 9 个性化思路... 5 1. 概述 1.1 简介 UVM测试从根本上说属于白盒测试,其又类似于结构测试或基于代码的测试。UVM测试是一种测试用例设计方法,我们清楚设计内部的东西以及里面是如何运作的。 1.2 目的 通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试。在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。 1.3 原则 1)一个模块中的所有独立路径至少被测试一次。 2)所有逻辑值均需测试true和false两种情况。(保证所有条件被运行) 3)检査程序的内部数据结构,保证其结构的有效性。 (时序合规) 4)在取值的上、下边界及可操作范围内运行所有循环。(covergroup可观测) 2. 实施流程 1)计划阶段:根据需求说明书,制定测试进度。 2)设计阶段:依据程序设计说明书,按照一定规范化的方法进行模块结构划分和设计测试抽象表。 3)执行阶段:搭建环境,输入测试用例,得到测试结果,对比测试的结果和代码的预期结果,分析错误原因,找到并解决错误。 4)总结阶段:进行覆盖率测试,查看覆盖率是否达到100%,否则增加新用例回溯。 3. 分类 UVM测试的方法总体上分为静态分析方法和动态分析方法两大类。 1)静态分析是一种不通过执行程序而进行测试的技术。静态分析的关键功能是检查代码设计是否和设计描述一致,有无冲突或者歧义。 2)动态分析是当环境在执行之前、之中和之后,对环境结果的分析。它显示了一个环境在运行状态下是正确还是不正确。其中最重要的技术是路径和分支测试。 4. 实施三步走 1)根据代码的功能,手动设计测试用例进行基本功能测试;(即拆解设计文档中模块的基本功能) 2)统计UVM覆盖率,为未覆盖的路径设计测试用例,实现完整的代码覆盖,比较理想的覆盖率是实现100%语句、条件、分支、路径覆盖;(即找出遗漏的测试用例) 3)自动生成大量随机参数的测试用例,捕捉"未处理某些特殊输入"形成的错误。(即将输入参数全部随机化,验证前两步可能存在的缺陷) 5. 覆盖类型分析 从覆盖源程序语句的详尽程度分析,逻辑覆盖标准包括以下不同的覆盖标准:语句覆盖、判定覆盖、条件覆盖、条件判定组合覆盖、多条件覆盖和修正判定条件覆盖。 1)语句覆盖(Statement Coverage):为了暴露程序中的错误,程序中的每条语句至少应该执行一次。选择足够多的测试数据,使被测程序中每条语句至少执行一次。 2)判定覆盖(Decision Coverage)又称为分支覆盖:设计足够的测试用例,使得程序中的每个判定至少都获得一次“真值”或“假值”,或者说使得程序中的每一个取“真”分支和取“假”分支至少经历一次。 3)条件覆盖(Condition Coverage):在设计程序中,一个判定语句是由多个条件组合而成的复合判定,构造一组测试用例,使得每一判定语句中每个逻辑条件的可能值至少满足一次。 (交叉覆盖) 4)多条件覆盖也称为条件组合覆盖:设计足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次。 5)修正条件判定覆盖:要求满足两个条件:首先,每一个程序模块的入口和出口点都要考虑至少要被调用一次,每个程序的判定到所有可能的结果值要至少转换一次;其次,程序的判定被分解为通过逻辑操作符(||、&&)连接的条件,每个条件对于判定的结果值是独立的。 6. 测试方法 在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。包括以下7个步骤: 第一步:根据需求说明书,制定测试进度时间表。 第二步:根据设计说明书画出设计流图 流程图用来描述程序控制结构。可将流程图映射到一个相应的流图,在流图中,每一个圆代表一个或多个语句。一个处理方框序列和一个菱形决测框可被映射为一个结点,流图中的箭头代表控制流。 第三步:拆解模块基础功能点,遍历所有可能的路径,同时注意取值的上下边界与可操作范围内的随机,对于特殊的个别变量(数量较少),需要使用cover_group进行全覆盖;(完成2,3步后可生成初版环境说明书) 第四步:编写抽项表,并与设计人员讨论,完成抽象补充; 第五步:UVM环境搭建与基础tc_demo的拉通; 第六步:用例编写,测试以及代码回溯; 第七步:覆盖率分析,针对未覆盖点新增用例。 从整体来看,前四步会显得更重要,如果前期分解不够彻底,那么环境编写后将会不好改动。 7. 实例分析 针对第6点的测试方法,给出以下需求,实际模拟拆分需求的步骤: 注:节点E的bit0为G路径,bit1为H路径 分析:1)该二叉树一共4条分支;(即路径遍历) 2)每个节点位宽不同,在取值的上、下边界及可操作范围内运行所有循环。(即边界覆盖) 3)假如E节点同时满足H与G,则满足同时覆盖; 总结:上述为基础测试分析,此外还有冲突测试(例:同时满足读写条件),压力测试(例:最大性能测试),异常测试(例:翻转测试,超过位宽测试)等。 8. 常用小技巧 1)UVM环境搭建或者用例编写时,在重要的支路都使用display或则直接断言进行打印,但是要注意打印内容的规范性(英文+用途),会加快调试进度; 2)对于log的打印最好不要写死地址, $test$plusargs和$value$plusargs,可以大大优化测试过程; 3)对于固定的报文格式,使用java的virtual class可以使代码可读性更高,但是注意一点,代码嵌套最好是两层,超过三层就不合适了; 4)对于是否公用缓冲池,灵活使用automatic函数; 5)间接断言可使用于检验不定态,同时可以用于检验波形是否合规,其增加开发成本,在大项目中使用更具性价比; 6)修改状态机时,注意位宽的限制,最好增加打印,这样可以最快查出问题; 7)在打印的时候加入$time,记录打印时间点,方便波形定位; 8)打印数组大小或者内容,能加速调试进度。 9. 个性化思路 1)优化命名结构; 2)慎用宏定义; 3)数据禁止连续三层传递; 4)独立功能切割工作缓冲,互不干扰; 5)cover和断言(最好占据代码的三分之一)可以极大方便验证; 6)代码注释需要占据三分之一。 |
CopyRight 2018-2019 实验室设备网 版权所有 |