白盒测试中的六种覆盖方法,测试发布

测试文章内容,包含一些测试语句,因为不包含足够的词语,所以必须输入足够的语句,才能正常的入库处理。

白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。白盒测试并不是简单的按照代码设计用例,而是需要根据不同的测试需求,结合不同的测试对象,使用适合的方法进行测试。


白盒测试用例设计的一个很重要的评估标准就是对代码的覆盖度白盒测试中常见的覆盖方法有六种:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖。下面我们就分别看看这几种不同的覆盖吧

语法

一、语句覆盖(Statement Coverage)

  1. 主要特点:语句覆盖是最起码的结构覆盖要求,语句覆盖需要选择足够的测试用例,使我们设计出来的测试用例要保证程序中的每一个语句至少被执行一次
  2. 优点:可以很直观地从源代码得到测试用例,无须细分每条判定表达式。
  3. 缺点:由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件和可能到达的隐 式逻辑分支,是无法测试的。
  4. 举例
public int foo(int a,int b)
{
      return a/b;
}

这是一个求两数之商的函数。如果我们设计如下的测试用例:
TestCase: a =2, b =1
此时,该函数的代码覆盖率达到了100%,并且设计的case可以顺利通过测试。但是显然该函数有一个很明显的bug:当 b=0 时,会抛出异常。

CREATE TRIGGER :(触发器名称) --触发器必须有名字,最多64个字符,可能后面会附有分隔符。它和MySQL中其他对象的明明方式基本相像。
BEFORE|ARIER   :--触发器有执行的时间设置:可设置为事件发生前后
INSERT|UPDATE|DELETE --同样也能设置触发的事件:它们可以在执行insert,uodate,或deleet的过程中触发。
ON             :(表名称)--触发器是属于某一个表的:挡在这个表上执行插入、更新或删除操作的时候就导致触发器的激活,我们不能给同一张表的同一个时间安排两个触发器。
FOR EACH ROW   :--触发器执行间隔 : FOR EACH ROW 子句通知触发器 每隔一行执行一次动作,而不是对整个表执行一次。

二、判定覆盖(Decision Coverage)

  1. 主要特点:判定覆盖又称为分支覆盖,它要求选择足够的测试用例,使得运行这些测试用例时,每个判定的所有可能结果至少出现一次
  2. 优点:判定覆盖比语句覆盖要多几乎一倍的测试路径,当然也就具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。
  3. 缺点:往往大部分的判定语句是由多个逻辑条件组合而成(如,判定语句中包含AND、OR、CASE),若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。
  4. 举例
![](https://upload-images.jianshu.io/upload_images/2298827-34f2268901fe3fb7.png)
X    Y   路径
90  90  OAE
50  50  OBDE
90  70  OBCE

(触发器SQL语句)--触发器包含索要触发的SQL语句:这里的语句可以是任何合法的语句,也包含符合语句,但是这里的语句收的限制和函数的一样。

三、条件覆盖(Condition Coverage)

  1. 主要特点:要求所设计的测试用例能使每个判定中的每一个条件都获得可能的取值,即每个条件至少有一次真值、有一次假值。
  2. 优点:显然条件覆盖比判定覆盖,增加了对符合判定情况的测试,增加了测试路径。条件覆盖使得判定中的每一个条件都取到了不同的结果,这一点判定覆盖则无法保证。
  3. 缺点:要达到条件覆盖,需要足够多的测试用例,但条件覆盖并不能保证判定覆盖。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。
  4. 举例
X    Y   路径
90  70  OBC
40        OBD

--你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是ROOT用户了,那么久足够了。这跟SQL的标准有所不同。

参考文献:

谈谈白盒测试中的几种覆盖方法

实例
创建表tab1

DROP TABLE IF EXISTE tab1;
CREATE TABLE tab1(tab1_id vachar(11));

创建表tab2

DROP TABLE IF EXISTE tab2;
CREATE TABLE tab1(tab2_id vachar(11));

创建触发器:trigger_tab1 --insert

DROP TRIGGER IF EXISTS trigger_tab1;
CREATE TRIGGER trigger_tab1;
AFTER INSERT ON tab1
FOR EACH ROW
        insert into tab2(tab2_id) values(new.tab1_id);
END;

测试一下

INSERT INTO tab1(tab1_id) values("001");

查看结果

SELECT * FROM tab1;
SELECT * FROM tab2;

查询出来两个表都是有相同的数据“001”就成功啦~!

创建触发器trigger_tab1 --delete

DROP TRIGGER IF EXISTS trigger_tab1;
CREATE TRIGGER trigger_tab1;
AFTER DELETE ON tab1
FOR EACH ROW
BEGIN
          delete from tab2 where tab2_id=old.tab1_id;
END;

测试一下

DELETE FROM tab1 WHERE tab1_id='001';

查看结果

SELECT * FROM tab1;
SELECT * FROM tab2;

两条表里都没数据~成功!
注意:使用别名old和new的区别
作用:能够引用与触发程序相关的表中的列。
用法:old是在操作之前,比如更新或删除之前,引用已有行中的一列。
new是在操作之后,引用将要插入的新行的1列或已有行的1列。
比如你用到更新就是:用用update前的列就用old,后的就用new

图片 1

5882b2b7d0a20cf4ac8505b070094b36acaf994c.jpg

有没有对你起到帮助呢!不懂的可以咨询:WX:nxy18336033555 QQ:1264512198 加的时候备注一下哦!~

本文由葡京赌王网发布于书法,转载请注明出处:白盒测试中的六种覆盖方法,测试发布

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。