前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从软件测试看芯片验证-白盒测试

从软件测试看芯片验证-白盒测试

作者头像
AsicWonder
发布2023-09-01 20:30:08
2040
发布2023-09-01 20:30:08
举报

White-Box Testing

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

Logic Coverage Testing

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

你可以通过编写一条单独的测试用例来执行到路径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结果)。

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数字芯片实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • White-Box Testing
    • Logic Coverage Testing
    相关产品与服务
    云开发 CloudBase
    云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档