0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

从软件测试白盒测试实例分析

数字芯片实验室 来源:数字芯片实验室 2023-08-20 14:44 次阅读

White-Box Testing

白盒测试是关注测试用例覆盖程序逻辑(源代码)的程度。最终的白盒测试是执行程序中的每个路径。但对于大多数的程序(例如带有循环的程序),完全意义上的全路径覆盖是不现实的。

Logic Coverage Testing

你可能会觉得一个值得追求的目标是至少执行程序中的每一条语句。不幸的是,这是一个很弱的标准。假设下面这个图表示一个要测试的小程序。相应的Java代码片段如下:

59a5e8c0-3f14-11ee-ac96-dac502259ad0.png

59c9e7ac-3f14-11ee-ac96-dac502259ad0.png

你可以通过编写一条单独的测试用例来执行到路径ace。也就是说,在a点设置A=2,B=0和X=3,每个语句将被执行一次。

不幸的是,这个标准相当差。

第一个条件可能是而不是。如果是这样,这个bug将不会被检测到。

第二个条件如果是是X>0,这个bug也不会被检测到。

此外,程序中有一条路径,X没有改变(路径abd)。如果这里存在一个错误,也不会被检测到。

更强的逻辑覆盖标准称为条件覆盖或分支覆盖。这个标准规定,你必须编写足够的测试用例,使每个条件至少有一个true和一个false。以及每个分支方向必须至少遍历一次。分支或条件语句的例子包括switch-case、do-while和if-else语句,以及在某些编程语言(如Fortran)中的多路径GOTO语句。

在上图中,分支覆盖可以用两个测试用例覆盖路径ace和abd,或者覆盖路径acd和abe。如果我们选择后者,那么两个测试用例的输入分别是A=3, B=0, X=3和A=2, B=1, X=1。条件覆盖是比语句覆盖更强的标准,但它仍然很弱。因为,此时我们仍然没有探索到x没有改变的路径(abd)。

如果第二个判断有误(写成X<1而不是X>1),那么这个bug就不会被前面的测试用例(A=2, B=1, X=1)检测到。

有时比分支覆盖更强的标准是条件覆盖。在这种情况下,你需要编写足够的测试用例来确保每个条件至少有一次取得所有可能的结果。上图中有四个条件:A>1, B=0, A=2, 和X>1。因此,需要足够多的测试用例来覆盖以下情况:

在点a处A>1, A<=1, B=0, 和B!=0;

在点b处A=2, A!=2, X>1, 和X<=1。

尽管条件覆盖标准乍一看似乎满足分支覆盖标准,但并不总是如此。例如,两个测试用例 A = 1,B = 0,X = 3 和A = 2,B = 1,X = 1 涵盖了所有条件结果,但只涵盖了四个分支中的两个(它们都涵盖了路径abe,因此不会执行第一个分支的true结果和第二个分支的false结果)。

摆脱这种困境的明显方法是一种称为分支+条件覆盖的标准。它需要足够的测试用例,以便每个分支判断中的每个条件至少有一次取得所有可能的结果。

最后,大家再思考下,现有的仿真验证的代码覆盖率有哪些类型的代码覆盖率,其实是会考虑所有分支里面的所有条件的输入和输出结果的组合的

另外请再思考下,功能覆盖率能够覆盖哪些代码覆盖率无法描述的场景组合呢?

编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 软件测试
    +关注

    关注

    2

    文章

    207

    浏览量

    18381
  • 白盒测试
    +关注

    关注

    1

    文章

    14

    浏览量

    10540
  • 芯片验证
    +关注

    关注

    5

    文章

    32

    浏览量

    47056

原文标题:从软件测试看芯片验证-白盒测试

文章出处:【微信号:数字芯片实验室,微信公众号:数字芯片实验室】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    [3.1.1]--3.1测试方法概述

    软件测试
    jf_75936199
    发布于 :2023年01月22日 20:31:49

    [3.4.1]--3.4其他测试方法

    软件测试
    jf_75936199
    发布于 :2023年01月22日 20:34:37

    [7.3.1]--测试-1

    软件测试
    jf_75936199
    发布于 :2023年01月22日 20:52:53

    [7.3.2]--测试-2_clip001

    软件测试
    jf_75936199
    发布于 :2023年01月22日 20:53:49

    [7.3.2]--测试-2_clip002

    软件测试
    jf_75936199
    发布于 :2023年01月22日 20:54:45

    [7.3.2]--测试-2_clip003

    软件测试
    jf_75936199
    发布于 :2023年01月22日 20:55:42

    [7.3.3]--测试-3_clip001

    软件测试
    jf_75936199
    发布于 :2023年01月22日 21:00:25

    [7.3.3]--测试-3_clip002

    软件测试
    jf_75936199
    发布于 :2023年01月22日 21:01:21

    系统测试、验收测试、黑盒测试测试、单元测试、集成测试的区别

    正确的接受?能否输出正确的结果?  3、是否有数据结构错误或外部信息(例如数据文件)访问错误?  4、性能上是否能够满足要求?  5、是否有初始化或终止性错误?  软件测试是对
    发表于 10-22 12:42

    什么是黑盒测试测试

    软件测试其实就是对程序进行一些操作,来发现程序所存在的缺陷,衡量软件的质量,并对其是否能满足设计要求进行评估的过程。
    发表于 07-22 07:56

    嵌入式软件的覆盖测试该怎么进行?

    软件测试是很广的概念。其贯穿软件生命周期全过程来看,测试可分为模块测试、集成
    发表于 09-18 07:23

    测试有什么优缺点?

    测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。
    发表于 10-23 09:01

    【YOXIOS X3开发板(基于Linux的GUI)试用连载】基于网络的软件测试系统

    项目名称:基于网络的软件测试系统试用计划:目的:开发基于网络的图形界面的
    发表于 07-27 15:02

    软件测试的相关资料推荐

    /软件集成测试。前3个阶段适用于任何软件测试,硬件/软件集成测试阶段是嵌入式
    发表于 02-28 12:54

    基于模块化设计的嵌入式软件测试方法

    分析嵌入式软件的特点,综述传统的软件测试方法;针对嵌入式软件的特点,提出嵌入式软件的四级
    发表于 05-18 13:26 23次下载