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

测试理论知识四:大型软件的测试技巧——单元测试

1. 模块测试/单元测试

模块测试也被称为单元测试,本文章称单元测试为主。

对于小的程序测试,我们可以在一定时间内完成,如果面对的是大型程序,等程序开发完成之后我们再进行测试,那会大大降低我们的效率。

单元测试是对程序中的单个子程序、子程序或过程进行测试的过程,也就是说,一开始并不是对整个程序进行测试,而是先将注意力集中在对构成程序的较小模块的测试上面。

2. 单元测试的测试用例设计

单元测试总体上是面向白盒测试。

所以我们在编写单元测试的用例时,所使用的测试策略需要偏向于白盒的测试策略。

白盒测试策略如下:

语句覆盖、判断覆盖、条件覆盖、判定/条件覆盖、多重条件覆盖。

语句覆盖:语句覆盖是指测试用例可以被测试的目标程序的每行代码都执行。

判断覆盖:测试用例编写应覆盖代码中的判断条件,包括成立与不成立。

条件覆盖:测试用例编写应覆盖代码中的条件,包括判断与循环条件的成立与不成立的情况。

判定/条件覆盖:判断覆盖与条件覆盖的综合情况。

多重条件覆盖:测试用例编写应覆盖代码中的多重条件判断,包括多重循环与判断嵌套等情况。

3. 增量测试

如同我们开头时问的问题,软件是否先独立的进行每个模块的测试,然后组合成一个完成的程序,还是组装成一个完整的程序后一次性测试?

针对以上两个问题,我们提出了增量测试和非增量测试。

非增量测试:每个单元进行独立的测试,测试完成之后组装起来。

增量测试:每个单元进行测试,测试后的每个单元进行组装,类似于盖高楼大厦。

3.1 增量测试与非增量测试的区别

  1. 非增量测试所需的工作量要多一些。

  2. 如果使用了增量测试,可以较早的发现模块中与不匹配接口、不正确假设相关的编程错误。

  3. 如果使用了增量测试,调试会进行的容易一些。

  4. 增量测试会将测试进行的更彻底。

  5. 非增量测试所占用的机器时间显得少一些。

  6. 模块测试阶段开始时,如果使用的是非增量测试,就会有更多的机会进行并行操作。

3.2 自顶向下测试与自底向上测试

自顶向下的测试是从程序的顶部或初始模块开始,当一个模块的要开始测试时,需要确保调用它的模块已经被测试了。

优点

  1. 如果主要的缺陷发生在程序的顶层将非常有利。

  2. 一旦引入I/O功能,提交测试用例会更容易

  3. 早期的程序框架可以进行演示,并可激发积极性

缺点:

  1. 必须开发桩模块

  2. 桩模块要比最初表现的更复杂

  3. 在引入I/O功能之前,向桩模块中引入测试用例比较困难

  4. 创建测试环境可能很难,甚至无法实现

  5. 观察测试输出很困难

  6. 使人误解设计和测试可以交迭进行

  7. 会导致特定模块测试的完成延后

自底向上测试开始于程序中的终端模块,当一个模块要开始测试时,需要确保他调用的模块都被测试完成。

优点

  1. 如果主要的缺陷发生在程序的底层将非常有利

  2. 测试环境比较容易建立

  3. 观察测试输出比较容易

缺点:

  1. 必须开发驱动模块。

  2. 直到最后一个模块添加进去,程序才形成一个整体。

相关文章:

  • DotNet Core 在Centos上使用环境变量运行 urls 参数
  • 《每天一分钟学习C语言·七》指针、字节对齐等
  • 只更新软件,座椅为何能获得加热功能?——一文读懂OTA
  • npm的使用技巧
  • UE5 Landscape 制作GIS卫星图地形
  • docker的应用和定义
  • [CVPR 2023:3D Gaussian Splatting:实时的神经场渲染]
  • RTP/RTCP/RTSP/SIP/SDP/RTMP对比
  • 10 Vue3中v-html指令的用法
  • 【Matlab in VSCode】在VSCode中编辑MATLAB文件
  • Win7如何修改MAC地址
  • 油猴脚本教程案例【键盘监听】-编写 ChatGPT 快捷键优化
  • 【原理图PCB专题】原理图图纸锁定/解锁与PCB文件加密方式
  • C语言操作符详解+运算符优先级表格
  • 云原生系列2-CICD持续集成部署-GitLab和Jenkins
  • Docker 笔记(2):Dockerfile
  • JS变量作用域
  • React Native移动开发实战-3-实现页面间的数据传递
  • React-Native - 收藏集 - 掘金
  • storm drpc实例
  • Vue 2.3、2.4 知识点小结
  • XForms - 更强大的Form
  • 经典排序算法及其 Java 实现
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 免费小说阅读小程序
  • 前端学习笔记之观察者模式
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 使用putty远程连接linux
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 王永庆:技术创新改变教育未来
  • 微信小程序开发问题汇总
  • 用Visual Studio开发以太坊智能合约
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • $$$$GB2312-80区位编码表$$$$
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (阿里云万网)-域名注册购买实名流程
  • (八十八)VFL语言初步 - 实现布局
  • (二)fiber的基本认识
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (三)Honghu Cloud云架构一定时调度平台
  • (已解决)什么是vue导航守卫
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)c++ std::pair 与 std::make
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [CareerCup][Google Interview] 实现一个具有get_min的Queue
  • [CF703D]Mishka and Interesting sum/[BZOJ5476]位运算
  • [CISCN2019 华北赛区 Day1 Web5]CyberPunk --不会编程的崽