单元测试等价于白箱测试吗?

发表于:2015-4-29 11:29

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:顺其自然EVO    来源:51Testing软件测试网采编

  单元测试=白箱测试?这是很多人的想法.一听到白箱测试,就认为他就是单元测试.或者认为单元测试时,就是要用白箱测试的方法来进行.
  事情是这样吗?让我们继续看下去:
  当我们要测试这个程序时
  Stackpush(Stacks,intkey)
  你会怎么测试呢?你可能会考虑以下几种状况
  (1)空的stack,第一次push
  (2)不是空的stack,然后push东西
  (3)stack是满的,push个东西看会不会有问题
  (4)不是空的stack,然后push一个字符
  (5)不是空的stack,然后push一个指标
  你所做的大多是根据程序思考逻辑,或者是根据输入的值域来做参考,来建立测试个案.
  这些方式其实都是黑箱测试(用到了usecasetesting和EquivalenceClassTesting等方法,可自行去网络上找详细介绍),也就是不管程序内部如何被实作.只根据行为和输入值域来开立测试.
  那真正的白箱测试会是怎么进行呢?
  基本上,可以测试的状况有无限多种.而白箱测试是要根据程序内容来决定要怎样挑最小可测试的集合.
  那程序内有甚么东西,可以让我们来做挑选的判断呢?一般常见的是根据程控逻辑.例如:是否经过所有的叙述(statement);是否经过程序所有分支等等.
  如果以经过所有的叙述为例,对于下面的程序
01:Stackpush(Stacks,intkey)
02:{
03:if(isFull(s)){
04:printf("Stackisfull!!");
05:}else{
06:s.top=s.top+1;
07:s.element[s.top]=key;
08:printf("Successpush%dintheStack",key);
09:}
10:returns;
11:}
  你会找出这组路径,来当作最小需要测试的集合,然后对它建立其相对应的测试个案
  path1:01-02-03-05-06-07-08-09-10-11
  testcase1:
  push(s,3)
  path2:01-02-03-04-10-11
  testcase2:
  push(s,3)(repeat10times,如果stack大小是10的话)
  push(s,3)
  (当然你可以只用testcase2,因为它涵盖了testcase1的状况)
  一般人通常不会先分析执行路径,再找测试个案.大多是根据一些准则,找出测试个案就开始测试了.所以一般单元测试是用黑箱测试方式在进行,而非白箱测试.
  那为何大家会有错觉单元测试=白箱测试呢?
  那是因为在进行白箱测试时,对于一个大的系统要找出可执行路径,会是一件很复杂的事情.但是对于每个单元时,这件事情变得比较容易,比较有可能不藉由工具的辅助,就能自己进行.也就是说在单元测试时,比较容易进行白箱测试.可是不知怎么传的,很多人就把这两个视为同义.
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号