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

白盒测试及其测试方法

什么是白盒测试

是针对程序的逻辑结构进行测试,主要适用于单元测试阶段

与黑盒测试不同的是,黑盒测试是根据业务需求设计用例的输入输出,白盒测试是对程序系统的内部逻辑实现设计输入输出。

通常的流程是先静态测试,后动态测试,在动态测试中经常使用基本路径测试法,在重要模块或业务复杂的模块可能会使用多种测试法。

白盒测试的优缺点

优点:代码覆盖率高

缺点:测试开销大、业务功能可能覆盖不全

优化方案:与黑盒测试配合使用,黑盒测试是需要覆盖所有功能点的,白盒测试只对一些重点模块或业务逻辑比较复杂的模块进行白盒测试

白盒测试静态测试

桌面检查

开发人员写完代码后,由其他人进行检查,通常根据开发规范和编码要求进行检查。

代码审查

通常会开启会议,由代码的作者讲述自己代码的逻辑结构,其他参与会议的成员会根据公司的代码规范进行审查

代码走查

开启会议,由会议成员提前设计好一些测试用例,人工的查看代码的走向

代码扫描工具

通过工具自动的检查代码是否符合规范

白盒测试设计方法-逻辑覆盖法

语句覆盖

定义:设计测试用例,使得程序中的每条语句都被执行至少一次

覆盖率 = 覆盖的语句数量 / 语句总数量

局限性:不能准确的判断代码中的逻辑关系错误(如or、and)

判定覆盖

定义:设计测试用例,使得程序中的每个分支都至少执行一次(if的真、假都至少被执行一次)

且满足判定覆盖一定满足语句覆盖

覆盖率 = 每个分支的真假值至少执行一次 / 判定结果的总数

 局限性:不能准确的判断代码中的逻辑关系错误(如or、and)

条件覆盖

定义:设计测试用例,使得判定中每个条件都能取“真”值和取“假”值

覆盖率 = 每个条件真假值至少出现一次 / 条件结果总数

局限性:条件覆盖不能覆盖判定覆盖

判定条件覆盖

定义:相当于判定覆盖+条件覆盖 

满足判定条件覆盖就可以满足:语句覆盖、判定覆盖 和 条件覆盖

覆盖率 = 每个判定的真假值和条件的真假值都至少出现一次 / 判定结果的总数+条件结果的总数

局限性:不能准确判断代码中的逻辑关系错误(如if的or、and)

条件组合覆盖

定义:设计测试用例,使得每个判定中的,各个条件之间的组合结果至少执行一次

满足条件组合覆盖,可以满足:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖

覆盖率 = 条件组合至少出现一次的数量 / 条件组合的总数

局限性:不能保证所有的路径被覆盖到

路径覆盖

定义:设计测试用例,覆盖程序中所有可能的路径

覆盖率 = 至少执行过一次的路径数 / 路径总数

局限性:无法满足条件组合的100%覆盖率、也无法满足判定条件的100%覆盖率;如果代码逻辑较为复杂(如存在循环,存在多层逻辑判断),覆盖路径的的开销会很大

白盒测试设计方法-基本路径测试法

基本路径测试法

定义:在程序控制流程图的基础上,通过分析程序的环路复杂度,导出基本可执行的路径集合,从而设计测试用例

步骤一:根据代码画出程序控制流图

步骤二:计算程序的环路复杂度,下图的复杂度是3+1=4

步骤三:导出可执行路径

环路复杂度 = 导出可执行路径数

可执行路径中需要:满足所有的路径都走过、满足所有节点都走过

步骤四:根据可执行路径设计测试用例

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux高级编程-进程间通信(IPC)
  • 构建大师:深入理解Linux下的Make和Makefile
  • UE5学习笔记20-给游戏添加声音
  • 安装VC++Redist报错0x80070003的解决办法
  • 大连网站建设手机网页页面设计
  • STM32入门教程:SPI通信
  • RabbitMQ 集群与高可用性
  • 每日算法!!
  • 利用Spring Boot实现微服务的API版本管理
  • C语言 面向对象编程
  • Java项目中的分库分表实践指南
  • QNN:基于QNN+example重构之后的yolov8det部署
  • DRF序列化_data传参
  • 一个比 Nginx 还简单的 Web 服务器
  • SoM的理解
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • Fundebug计费标准解释:事件数是如何定义的?
  • Java,console输出实时的转向GUI textbox
  • Promise初体验
  • Protobuf3语言指南
  • SAP云平台里Global Account和Sub Account的关系
  • Selenium实战教程系列(二)---元素定位
  • Sequelize 中文文档 v4 - Getting started - 入门
  • session共享问题解决方案
  • Solarized Scheme
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • uva 10370 Above Average
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 前端之Sass/Scss实战笔记
  • 如何学习JavaEE,项目又该如何做?
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 一个完整Java Web项目背后的密码
  • 译自由幺半群
  • 应用生命周期终极 DevOps 工具包
  • 硬币翻转问题,区间操作
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 数据库巡检项
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • #《AI中文版》V3 第 1 章 概述
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (0)Nginx 功能特性
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (zt)最盛行的警世狂言(爆笑)
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (转)http协议
  • (转)Oracle存储过程编写经验和优化措施
  • *2 echo、printf、mkdir命令的应用
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .net下的富文本编辑器FCKeditor的配置方法