您现在的位置是:百科 >>正文
黑盒测试和白盒测试的区别和联系
百科17人已围观
简介一个登录框,输入用户名和密码,点击“登录”。你只知道点下去之后,要么进去了,要么报错。至于后台怎么查数据库、怎么比对密码、怎么生成会话令牌——你看不见,也不该看见。这就是黑盒测试者的处境:把软件当成一 ...
一个登录框,黑盒和白盒测和联输入用户名和密码,测试点击“登录”。区别你只知道点下去之后,黑盒和白盒测和联要么进去了,测试要么报错。区别至于后台怎么查数据库、黑盒和白盒测和联怎么比对密码、测试怎么生成会话令牌——你看不见,区别也不该看见。黑盒和白盒测和联这就是测试黑盒测试者的处境:把软件当成一个不透明的盒子,只关心喂进去什么、区别吐出来什么。黑盒和白盒测和联
白盒测试者不一样。测试他们手里有源码,区别能看到那个登录函数里先查了用户表,再用bcrypt比对哈希值,最后写了一个session。他们甚至能在代码里插桩,追踪每一行执行了没有。盒子是透明的,逻辑摊在桌面上。
这两种视角的差异,直接决定了测试用例怎么设计。黑盒测试靠的是需求文档和直觉。比如登录框,我会想:空密码行不行?密码错了三次会不会锁?用户名里塞个单引号会不会把SQL搞崩?这些用例来自对功能的理解和一点点恶意。白盒测试则盯着代码分支:那个if (user != null)的else分支测了吗?catch块里的日志有没有被覆盖?循环边界是i < len还是i <= len?
我做过一个支付回调的模块。黑盒测试时,我模拟第三方发来的成功通知、失败通知、重复通知,看订单状态对不对。跑了一轮,全过。后来用白盒工具扫了一遍覆盖率,发现有一段处理“签名验证失败”的代码从来没被执行过——因为我在黑盒测试里压根没构造过非法签名。这就是黑盒的盲区:你测的是你想到的场景,但代码里藏着你想不到的路径。
反过来,白盒也有它的毛病。你盯着代码看,容易陷进去。比如一个排序函数,白盒测试者会去测空数组、单元素、逆序、重复值。但用户实际用的时候,可能传进来一个从Excel粘贴的、带换行符的字符串。代码里没处理这个,白盒测试也测不出来,因为你脑子里装的是“排序”,不是“用户会怎么糟蹋输入”。
联系在哪?它们不是对立的,是接力的。我习惯先用黑盒把功能跑通,把边界和异常场景过一遍。然后拿覆盖率报告看哪些分支没走到,再针对性地补白盒用例。有时候白盒发现的死角,反过来会提醒我黑盒漏了哪类输入。比如看到代码里有个对负数金额的特殊处理,我才想起来:哦,退款场景没测。
另一个联系是,黑盒测试的用例设计方法,像等价类划分、边界值分析,其实是在没有源码时对代码逻辑的猜测。你猜开发者会在哪里判断边界,就在哪里下刀。白盒测试则是验证你的猜测对不对。两者合起来,才叫“既知道用户怎么用,也知道代码怎么跑”。
工具上也能看出这种互补。Selenium、Postman是黑盒的常客,你操作的是界面和接口。JUnit、JaCoCo、 Istanbul是白盒的伙伴,你操作的是函数和行号。但真正干活的时候,我经常在Postman里发一个请求,然后去IDE里打断点看它怎么走。黑盒触发,白盒观察,混着来。
说白了,黑盒测试是用户视角的模拟,白盒测试是开发者视角的审计。一个管“对不对”,一个管“全不全”。只做黑盒,你可能漏掉代码深处的逻辑炸弹;只做白盒,你可能写出覆盖率100%但用户一用就崩的系统。两个盒子都打开,才踏实。
Tags:
相关文章
苹果app无法验证其完整性怎么办
百科昨天下午,我朋友老张拿着手机来找我,屏幕上弹着一行字——“无法验证App完整性”。他刚下载的网盘工具,点开就这反应,气得直骂街。这问题我见多了,八成是证书过期或者签名被苹果撤了。 说白了,苹果这套验证 ...
【百科】
阅读更多网络维护服务方案范文
百科凌晨两点十七分,某电商平台的订单支付接口突然超时。监控大屏上,红色告警像心电图一样跳动。值班工程师老张的第一反应不是查代码,而是登录路由器查看BGP邻居状态——果然,对端运营商的会话已经重置了三次。这 ...
【百科】
阅读更多某网站在对用户发帖进行审核时
百科凌晨两点十七分,我盯着那行“您的帖子正在审核中”的灰色小字,突然觉得它像一扇关上的门。门后站着谁,在做什么,一概不知。这种等待的滋味,发过帖的人大概都尝过——像把一封手写信投进邮筒,却不知道对方什么 ...
【百科】
阅读更多