【软件测试】

news2024/9/19 20:50:35

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 第四章 单元测试
    • 4.1 软件测试过程概述
    • 4.2 什么是单元测试
      • 4.2.1 单元测试的定义
      • 4.2.2 单元测试的重要性
      • 4.2.3 单元测试原则
    • 4.3 单元测试的目标和任务
      • 4.3.1 单元测试的目标:单元模块被正确编码
      • 4.3.2 单元测试的主要任务
    • 4.4 单元测试环境的建立
    • 4.5 单元测试主要技术
      • 4.5.1 静态测试
      • 4.5.2 动态执行测试
      • 4.5.3 状态转换测试
    • 4.6 单元测试的评估
    • 4.7 单元测试的管理
    • 4.8 单元测试工具
  • 总结
  • 第四章 重点


前言


第四章 单元测试

4.1 软件测试过程概述

在这里插入图片描述

  • 软件测试过程模型—W模型
  • 单元测试—模块/白盒技术
  • 集成测试—模块接口/黑盒+白盒技术
  • 系统测试—满足需求/黑盒
  • 验收测试—突出客户作用/黑盒

4.2 什么是单元测试

4.2.1 单元测试的定义

  • 单元测试是对软件最小可测试元素进行正确性检验的测试工作
  • 验证模块中是否存在差错,是否能正确实现功能,满足性能、接口要求
  • “单元”是软件中最小的、可以单独执行编码的单位
  • 单元选择依据:功能独立、可测、可观测、有明确的可定义的边界或接口
  • 确定单元的最基本原则:高内聚、低耦合
  • 测试对象:重要模块的重要控制路径
  • 每个程序模块可并行的、独立的进行测试工作

4.2.2 单元测试的重要性

  • 时间方面
  • 测试效果方面(①测试基础②深层次问题③关注代码控制流程)
  • 测试成本方面
  • 产品质量方面
  • 编程过程中,每写100行代码会犯150个错误
  • 编程与编译运行结束后,每100行代码中大约残留有1-3个Bug
  • 寻找与修改程序错误的代价占总体开发投资的40%-80%
  • Bug在整个研发流程中被发现的越早,修改的代价就越低

4.2.3 单元测试原则

  • 单元测试越早进行越好
  • 单元测试应该依据《软件详细设计规格说明》进行
  • 对于修改过的代码应该重做单元测试
  • 测试人员应如实记录实际的测试结果
  • 应注意选择好被测软件单元的大小
  • 应该包含正面测试和负面测试
  • 注意使用单元测试工具

4.3 单元测试的目标和任务

4.3.1 单元测试的目标:单元模块被正确编码

  • 数据或信息能否正确的流入和流出单元
  • 在单元工作过程中,其内部数据能否保持其完整性,包括内部数据的形式、内容及相互关系不发生错误,也包括全局变量在单元中的处理和影响
  • 在数据处理的边界处能否正确工作
  • 单元的运行能否做到满足特定的逻辑覆盖
  • 单元中发生错误,其中的出错处理措施是否有效
  • 指针是否被错误引用、内存是否及时释放
  • 有没有安全隐患

4.3.2 单元测试的主要任务

  • 模块接口:检查模块接口是否正确【检查模块单元数据输入和输出是否正确】
    • 模块接收输入的实际参数与形式参数的个数、类型、单位是否一致
    • 调用其他模块的实际参数与被调模块的形参是否一致
    • 全程变量的定义在各模块是否一致
    • 外部输入、输出
    • 文件、缓冲区、错误处理
  • 局部数据结构:检查局部数据结构完整性【检查模块内部内部数据的完整性和正确性】
    • 不正确或不一致的类型说明
    • 变量初始化或默认值有错
    • 不正确的变量名或从来未被使用过
    • 不相容的数据类型
    • 出现上溢或下溢和地址异常
    • 全局数据结构对模块的影响
  • 独立执行路径:
    • 检查每一条独立执行路径的测试。保证每条语句被至少执行一次。【测试独立路径,发现计算、判定和控制流错误】
      • 误解或不正确使用算术优先级
      • 混合类型运算
      • 变量初值错
      • 运算精度不够
      • 算法错误
      • 表达式符号错
    • 针对判定和条件覆盖。
      • 不同数据类型对象之间进行比较
      • 错误的使用逻辑操作和优先级
      • 由于计算机表示的局限性,期望理论上相等而实际上不相等
      • 不正确的判定或不正确的变量
      • 不正常或不存在的循环终止
      • 错误的修改了循环控制变量
  • 错误处理:预见、预设的各种出错处理是否正确有效。【模块中发生错误,系统的出错处理是否有效】
    • 输出的出错信息难以理解
    • 报告的错误与实际不相符
    • 程序定义的出错处理前系统已介入
    • 异常处理不当
    • 未提供足够的定位出错的信息
  • 边界条件:检查临界数据处理的正确性。【采用边界值分析方法,发现在边界发生的错误】
    • 普通合法数据的处理。
    • 普通非法数据的处理。
    • 边界值内合法边界数据的处理。
    • 边界值外非法边界数据的处理

4.4 单元测试环境的建立

PASS

4.5 单元测试主要技术

  • 主要采用白盒测试技术,辅之以黑盒测试技术
  • 单元测试主要技术:
    • 人工静态测试
    • 动态执行测试(白盒+黑盒)
    • 状态转换测试

4.5.1 静态测试

  • 不运行程序,单独检查单元代码并进行代码的评审和检查
  • 外部接口和程序代码的关键部分要进行桌面检查和代码审查
  • 目的:保证代码算法的逻辑正确性、清晰性、规范性、一致性、算法高效性
  • 适用于新开发和重用的代码
  • 通常在代码完成并无错误的通过编译或汇编后,采用自动化工具扫描分析、代码评审等方法
  • 由软件开发人员及开发小组成员共同完成
  • 常用方法:
    • 桌面检查(Desk Checking)
    • 代码走查(Walk Through)
    • 代码审查(Program Inspection)

4.5.2 动态执行测试

  • 动态白盒测试:逻辑覆盖和基本路径测试
  • 测试基本原则:
    • 保证单元中每一个独立路径至少执行一次
    • 保证所有判断的每一分支至少执行一次
    • 保证每一循环在边界条件和一般条件下至少执行一次
    • 验证所有单元内部数据结构的有效性
    • 动态黑盒测试:分为功能测试和非功能测试
    • 除了选择满足所需的覆盖标准外,可采用边界值分析、错误推测等技术

4.5.3 状态转换测试

  • 当单元可能处于不同状态转换时,应根据单元可能进入的状态、这些状态之间的转换、引起转换可能导致的状态等进行测试

4.6 单元测试的评估

  • 通过单元测试的一般准则:
  • 软件单元功能与设计需求一致
  • 软件单元接口与设计需求一致
  • 能够正确处理输入和运行中的错误
  • 在单元测试中发现的错误已经得到修改并且通过了测试
  • 达到了相关的覆盖率的要求
  • 完成软件单元测试报告

4.7 单元测试的管理

  • 单元测试过程
    • 在详细设计阶段完成单元测试计划。
    • 建立单元测试环境,完成测试设计和开发。
    • 执行单元测试用例,并且详细记录测试结果。
    • 评估测试用例是否通过。
    • 提交《单元测试报告》。
  • 单元测试文档
    • 《软件需求规格说明书》、《软件详细设计说明书》  《单元测试计划》
    • 《单元测试计划》、《软件详细设计说明书》 《单元测试用例》
    • 《单元测试用例》文档及《软件需求规格说明书》、《软件详细设计说明书》  《缺陷跟踪报告》/《缺陷检查表》
    • 《单元测试用例》、《缺陷跟踪报告》/《缺陷检查表》 《单元测试检查表》
    • 评估 《单元测试报告》

4.8 单元测试工具

  • 单元测试工具简介
    • 自动化单元测试工具的工作原理是借助于驱动模块与桩模块工作的,运行被测软件单元以检查输入的测试用例是否按软件详细设计规格说明的规定执行相关操作
    • 常见分类:静态分析工具;代码规范审核工具;内存和资源检查工具;测试数据生成工具;测试框架工具;测试结果比较工具;测试度量工具;测试文档生成和管理工具
  • JUnit介绍
    • JUnit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试
    • 它是单元测试框架体系xUnit的一个实例
    • xUnit系列框架,常用的根据语言不同分为JUnit(java),CppUnit(C++),DUnit (Delphi),NUnit(.net),PhpUnit(Php)等

总结

  • 目标:确保模块被正确的编码
  • 依据:详细设计说明书
  • 过程:设计、脚本开发、执行、调试和分析结果
  • 测试方法:白盒+黑盒
  • 评估方法:通过所有测试用例,代码无严重缺陷
  • 执行者:程序开发人员+测试人员

第四章 重点

  • ①掌握单元测试的目标和主要任务
  • ②掌握单元测试环境建立和所采用的主要技术
  • ③熟悉单元测试评估技术及管理过程
  • ④初步认识单元测试自动化工具,熟悉JUnit实现Java程序测试的基本方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/660173.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FreeRTOS:事件标志组

目录 一、事件标志组简介1.1事件位(事件标志)1.2事件组1.3事件标志组和事件位的数据类型 二、创建事件标志组2.1函数 xEventGroupCreate()2.2函数xEventGroupCreateStatic() 三、设置事件位3.1函数 xEventGroupClearBits()3.2函数xEventGroupClearBitsFromISR()3.3函数 xEventG…

Python模块MarkupPy 自定义html报告

简介 MarkupPy是Python模块用于生成HTML和XML格式的字符串。它的主要作用是提供了一种比原生HTML/XML更加易读和易写的编写方式,通过Python代码来生成HTML或XML代码。 使用MarkupPy,可以在Python中使用不同的对象类型和方法,来动态地生成HTML…

做自动化测试老是失败?你真的会做吗?资深测试的总结整理...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 自动化正在不断普…

揭开生成式人工智能的力量:60+医疗保健应用场景

预计生成式AI在医疗保健领域的增长速度将超过任何其他行业。在医疗技术领域,AI可带来更高效流程、个性化客户互动、更大的创新和更高价值。为了帮助领导者理解这些机会,BCG最近研究了医疗技术中生成式AI的60多个应用场景:从产研和软件开发到业…

Android自动化测试,5个必备的测试框架

Appium Appium是一个开源的移动测试工具,支持iOS和Android,它可以用来测试任何类型的移动应用(原生、网络和混合)。作为一个跨平台的工具,你可以在不同的平台上运行相同的测试。为了实现跨平台的功能,Appi…

关于数据库索引的入门简述

一、简介 数据库索引是现代数据库中高效数据检索的一个重要工具。它在优化查询性能和加快数据检索操作方面发挥着重要作用。这里我们深入了解下数据库索引其内部工作原理、优点和局限性。 二、数据库 1、SQL 数据库 为了理解索引,先说一句数据库,数据库…

Jenkins小技巧汇总

设置变量 设置全局环境变量 全局变量除了系统内置的全局环境变量之外,用户也可以设置全局变量。设置路径:【Dashboard】–>【Manage Jenkins】–>【System Configuration 下的 System】–>【Global properties】从描述中我们可以看到&#xf…

Jetson nano 之 ROS入门 - - 深度学习环境配置

文章目录 前言一、Anaconda安装二、Pytorch 与 TensorFlow 环境配置三、TensorRT 推理引擎配置总结 前言 Jetson Nano是一款由NVIDIA推出的小型计算机,其性能优异、功耗低、体积小巧,非常适合用于嵌入式系统和边缘设备的深度学习应用。Jetson Nano搭载了…

【Git原理与使用】-- 基本操作

目录 添加文件 查看objects中的文件 小结 修改文件 版本回退 回退的回退 小结 撤销修改 情况一:对于工作区的代码,还没有 add 情况二:已经 add ,但没有 commit 情况三:已经 add ,并且也 commit …

Cordic IP核使用说明以及避坑记录

Cordic IP核使用说明以及避坑记录 参考文章:(140条消息) Vivado cordic IP核rotate和translate使用详解(附有代码)_cordic ip核 rotate_迎风打盹儿的博客-CSDN博客 (140条消息) VIVADO cordic IP核_卡布奇诺加勺糖的博客-CSDN博客 文章目录 Cordic IP核使用说明以及…

面试题:推排序是一种稳定排序吗?

面试题:推排序是一种稳定排序吗? 在回答该问题前,首先需要了解什么是稳定排序。 稳定性就是指对于两个关键字相等的记录,它们在序列中的相对位置,在排序之前和排序之后没有发生改变。通俗地讲就是有两个关键字相等的…

Node.js---菜鸟教程

文章目录 创建第一个应用创建 Node.js 应用 NPM 使用介绍使用 npm 命令安装模块本地安装使用 package.json模块的操作 回调函数阻塞代码实例非阻塞代码 事件循环事件驱动程序 EventEmitterEventEmitter 类方法实例error 事件继承 EventEmitter Buffer(缓冲区&#x…

Redis-缓存

新增或者更新数据时,创建以后顺便存到redis中去【维护缓存】 获取的时候先从redis缓存中拿数据 如果拿数据的时候为空,则到数据库中拿数据,后再存到redis缓存中去 大量的商品【包括冷门商品】都进行上面的缓存,那么就很耗内存 针对每个数据进行缓存的时候 维护一个过期时间…

MQTT(一)

MQTT(一) 1.背景 学习目标:经过了解,Netty占用服务器资源内存大、远距离传感器在极端条件下数据处理兼容较差(网络条件差,需要反复重连等)。从同行业了解到,现在主流工业传输使用M…

【博学谷学习记录】超强总结,用心分享 | 架构师 zabbix学习总结

文章目录 一、介绍zabbix zabbix专有词汇 二、zabbix zabbix实践修改zabbix zabbix语⾔服务器可视化指标解决zabbix zabbix乱码问题查看监控内容可视化监控agent agent的cpu cpu动态查看模板--监控项⾃定义监控项语法 一、介绍 Zabbix 是由 Alexei Vladishev 开发的⼀种⽹络监…

达梦数据库介绍

文章目录 前言一、达梦数据库的定位二、达梦有哪些工具1、达梦管理工具2、达梦数据迁移工具3、 达梦数据库配置助手4、其它工具 三、Linux下的工具1、数据库初始化工具2、数据库迁移工具3、其它工具 四、其它连接工具总结 前言 近几年由于各种原因,国内开启了一波国…

【Android】-- 如何对APP版本控制/更新?

目录 一、 前提准备 1、获取服务器 2、使用工具操作云服务器 二、Json格式网页 三、创建file_paths.xml及修改AndroidManifest.xml 四、在java代码加入更新检测代码 效果如图: 可以强制更新和非强制更新,和浏览器下载安装包。 一、 前提准备 1、获取…

0001-TIPS-2020-hxp-kernel-rop : ret2user

目的 理解系统调用的过程:从用户态进入内核态,再从内核态返回用户态。细节见文末的参考了解一般性提权方法commit_creds(prepare_kernel_cred (0)); 环境搭建 下载 pwn 2020-kernel-rop wget https://2020.ctf.link/assets/files/kernel-rop-bf9c106…

说精神力量的词,愿力很神奇

说精神力量的词,愿力最神奇! ​愿力,心力,精神,精 气 神,气 ,能量 【能量】是个外来词 趣讲大白话:200天了,布道的愿力推动我 【趣讲信息科技200期】 ******************…

【换根DP】生活在树上

换根DP板子题 D-生活在树上_牛客小白月赛46 (nowcoder.com) 题意: 思路: 看数据范围是1e6且是统计问题,求的是对于每一个点的统计问题,那就逃不出是换根DP了 首先dfs1一次把树形DP求出来,然后再考虑换根 设dp[u]…