当前位置: 首页 > news >正文

黑盒测试和白盒测试

黑盒测试和白盒测试

一.概念

黑盒测试和白盒测试是软件测试中两种最基础、最核心的测试方法,它们从不同的视角出发,关注系统的不同层面。


1.区分:

  • 黑盒测试不关心内部代码结构,只关注输入输出是否符合预期
  • 白盒测试关注内部逻辑结构,需要看懂代码,测试路径、分支、条件等是否被正确执行

2.黑盒测试(Black-box Testing)

项目内容
视角用户视角
是否需要代码不需要
关注重点功能是否正确、界面是否友好、性能是否达标
常用方法等价类划分、边界值分析、因果图、决策表、错误推测
优点不依赖代码实现,适合需求验证,测试人员无需编程能力
缺点无法发现隐藏的逻辑错误,覆盖率低

举例:测试一个登录功能,输入用户名和密码,看是否能成功登录,不会去看代码怎么验证密码。


3.白盒测试(White-box Testing)

项目内容
视角开发者视角
是否需要代码需要
关注重点代码逻辑、分支覆盖、循环、路径、条件判断等
常用方法语句覆盖、分支覆盖、路径覆盖、条件覆盖、MC/DC
优点能发现深层逻辑错误,覆盖率高
缺点需要编程能力,测试成本高,无法发现缺失的功能

举例:检查一个排序函数,是否对所有边界情况(空数组、重复元素、负数)都处理正确,甚至要看是否每条语句都执行过。


4.总结:

黑盒测试看“功能对不对”,白盒测试看“代码有没有错”。


5.拓展:灰盒测试(Gray-box Testing)

结合两者优点,部分了解内部结构,比如通过数据库日志、接口文档等辅助测试,常用于集成测试阶段。


二.具体测试方法

1.速查表

类型方法一句话记忆典型输出物
黑盒等价类划分把无限输入切成有限“代表”等价类表
黑盒边界值分析Bug 爱躲在边界上边界值表
黑盒判定表(决策表)多条件组合别漏项判定表
黑盒因果图 + 转换把“条件”画成图再转判定表因果图 + 判定表
黑盒状态迁移点按钮会跳状态,测跳错没状态图 + 迁移表
黑盒错误推测靠经验猜“最常出错”风险清单
白盒语句覆盖每一行代码都跑到覆盖报告 ≥ 90%
白盒分支覆盖每个 if/else 都取真取假覆盖报告 100%
白盒条件覆盖每个布尔子表达式都真/假条件覆盖表
白盒路径覆盖所有独立路径跑一次路径树
白盒MC/DC民航/医疗安全底线MC/DC 矩阵

2.黑盒六大具体方法

1.1 等价类划分(Equivalence Partitioning)

步骤:
① 找输入域 → ② 分有效/无效类 → ③ 每类抽 1 个代表 → ④ 写用例
模板:

输入项有效等价类无效等价类代表值期望结果
年龄0–120<0, >120, 小数,字母-1, 130, 1.5, abc报错
示例:注册表单年龄字段,用 3 个用例即可覆盖 4 个无效类。

1.2 边界值分析(Boundary Value Analysis)

步骤:
① 找边界 → ② 取“上点、离点、内点” → ③ 每点 1 条用例
模板:

边界上点离点内点
1–1001, 1000, 10150
示例:转账金额 1–100 万,必测 0.99、1、100、100.01 四条。

1.3 判定表(Decision Table)

步骤:
① 列出所有条件桩 → ② 列出动作桩 → ③ 穷举组合 → ④ 合并相似列
模板:

条件R1R2
会员?YYN
满100?YN
动作免运费减10无优惠
示例:电商下单优惠规则,10 条规则 64 列,合并后剩 8 列,写 8 条用例即可。

1.4 因果图 + 转换

步骤:
① 需求→因果图(结点=条件/结果,边=与或非) → ② 按图转判定表 → ③ 生成用例
工具:draw.io 画因果图,Excel 转表。
示例:文件上传成功=格式正确∧大小<10M∧登录,画 3 条件 1 结果,转表后 8 列。

1.5 状态迁移(State Transition)

步骤:
① 画状态图(圆=状态,箭=事件) → ② 列迁移表 → ③ 每条迁移 1 用例
模板:

当前状态事件新状态期望
登录页正确密码首页进入首页
登录页3 次错误锁定页账号锁定
示例:ATM 机“空闲→插卡→输入密码→主菜单→取款→退卡→空闲” 全路径 7 条用例。

1.6 错误推测(Error Guessing)

步骤:
① 脑暴/历史缺陷库 → ② 列风险清单 → ③ 每条风险 1 用例
清单示例:

  • SQL 注入:输入 'or 1=1–
  • 越权:把 URL 中 id=1001 改 1002
  • 并发:5 个线程同时减库存
    经验:维护“Top 10 错误”checklist,每次回归跑一遍。

3.白盒五大具体方法

(以下均用一段 Java 示例讲解,再给出度量公式)

代码示例:

public int foo(int a, int b){
1    int x=0;
2    if (a>0 && b<10)
3        x=a+b;
4    else
5        x=a-b;
6    return x;
}

1.1 语句覆盖(Statement Coverage)

目标:第 1–6 行全部执行一次。
用例:

  • TC1: a=5,b=5 → 路径 1-2-3-6 (覆盖 3 行)
  • TC2: a=0,b=11 → 路径 1-2-4-5-6 (覆盖剩余行)
    度量:已执行语句 / 总语句 = 6/6 = 100%。

1.2 分支覆盖(Branch/Decision Coverage)

目标:每个 if 出口(True/False)至少一次。
用例同上已满足:

  • True 分支:TC1
  • False 分支:TC2
    度量:2/2 = 100%。

1.3 条件覆盖(Condition Coverage)

目标:每个布尔子表达式取真/假。
子条件:A=a>0,B=b<10
用例:

  • TC1: a=5,b=5 → A=T, B=T
  • TC2: a=0,b=11 → A=F, B=F
    仍缺 A=T/B=F 和 A=F/B=T,需再补 2 条:
  • TC3: a=5,b=11 → A=T,B=F
  • TC4: a=0,b=5 → A=F,B=T
    度量:4/4 = 100%。

1.4 路径覆盖(Path Coverage)

目标:所有独立路径。
路径数:2(因单 if),用例 TC1+TC2 已 100%。
若出现嵌套 if,路径呈 2^n 增长,需用 McCabe 基路径法剪枝。

1.5 MC/DC(Modified Condition/Decision Coverage)

民航 DO-178C 要求:
① 每个条件都曾独立影响决策结果;
② 分支覆盖 100%。
上例:

用例a>0b<10决策说明
TC1TTT基准
TC3TFFb 变化导致决策变
TC4FTFa 变化导致决策变
3 条即可满足 MC/DC,比全条件覆盖更精简。

4.落地工具推荐

  • 黑盒:Xmind(画因果图/状态图)、Excel 模板、禅道/ TestLink 管理用例
  • 白盒:
    – Java: JaCoCo(语句/分支/条件/MC/DC 报告)
    – C/C++: gcov + lcov
    – Python: coverage.py + pytest-cov
    – IDE 插件:IntelliJ Coverage、VS Code Coverage Gutters
http://www.dtcms.com/a/410735.html

相关文章:

  • iree 上运行qwen2.5 05b运行效率
  • dw手机网站怎么做软文推广代理平台
  • qq刷赞网站推广软件广告机 东莞网站建设
  • 佛山网站建设原创网站底部版权信息
  • Unity / C# 开发常见问题总结(闭包、协程、事件、GC 等易踩坑)
  • C# 集合框架完全指南:从IEnumerable到ObservableCollection的深度解析
  • 用户研究:用户研究和数据分析的根本联系与区别
  • 网站关键词优化培训jeecg 3.7 网站开发
  • 右键菜单增强工具,自定义系统功能
  • 图像分类入门:从数据到模型的深度学习核心知识解析
  • 攻防世界-Web-PHP2
  • Windows系统Web UI自动化测试学习系列3--浏览器驱动下载使用
  • 00-为什么要系统学习正则表达式?
  • 湖北网站建设检修金融股票类app网站开发
  • C++ 序列容器深度解析:vector、deque 与 list
  • 提供企业网站建设上海公司注册一网通办
  • 高效的技术支持提升用户体验
  • 满山红网站建设做家装的网站有什么
  • 建设部网站社保联网小程序注册平台
  • Mysql中GROUP_CONCAT分组聚合函数的使用以及示例
  • 2025无人机林业行业场景解决方案
  • 化肥网站模板青岛建设集团 招聘信息网站
  • 【在Ubuntu 24.04.2 LTS上安装Qt 6.9.2】
  • 家居企业网站建设渠道百度如何推广广告
  • 《MLB美职棒》运动员体质特征·棒球1号位
  • AI 应用和工业软件
  • 网站备案空壳网站制作找
  • 洛谷 P3388:【模板】割点(割顶)← Tarjan 算法
  • DeepSeek“问道”-第二章:问算法 —— 阴与阳如何在我内部舞蹈?
  • 重学JS-009 --- JavaScript算法与数据结构(九)Javascript 方法