【从零开始学习计算机科学】软件测试(二)单元测试 与 集成测试
【从零开始学习计算机科学】软件测试(二)单元测试 与 集成测试
- 单元测试
- 概述
- 单元测试的内容
- 单元测试的优点
- 单元测试的停止准则
- 单元测试的过程与文档管理
- 单元测试的任务
- 集成测试
- 集成测试关注的问题
- 模块分析
- 集成测试与系统测试的区别
- 集成测试与开发的关系
- 集成测试的层次
- 集成测试的原则
- 集成测试重点考虑的内容
- 集成测试策略
- 模块组装方法
- 非渐增式集成。
- 渐增式集成。
- 渐增方式集成测试策略-自顶向下集成
- 自顶向下集成测试的步骤
- 渐增方式集成测试策略-自底向上集成
- 集成测试用例设计
- 为正向集成测试设计用例
- 为逆向集成测试设计用例
- 为满足特殊需求设计用例
- 为覆盖设计用例
- 集成测试流程
- 面向对象的集成测试
- 对象交互的测试方法分类
- 原始类测试
- 汇集类测试
- 协作类测试
- 面向对象集成测试的常用方法
- 分布式对象测试
- 线程
- 分布式对象的概念
- 功能测试
单元测试
概述
单元是指一个最小的单元应该有明确的功能、性能、接口定义而且可以清析地与其他单元区分开。
单元测试(Unite Testing)又称为模块测试,主要来检验软件设计中最小的单位——模块。一般来说模块的内聚程度高,每一个模块只能完成一种功能,因此模块测试的程序规模小,易检查出错误。我们可以通过单元测试进行程序语法检查和程序逻辑检查,验证程序的正确性。单元测试非常重要,因为它影响的范围比较广,主要表现在如果一个单元模块的一个函数或者参数出现问题,会造成后面很多问题的出现,而且如果单元测试做不好,使得集成测试或者后面系统测试工作也做不好。做好单元测试是一个重要而且基础性的工作,主要的测试方法分为人工测试和自动化测试两种方式。
单元测试目的是检查单元模块内部的错误,为软件的评审验收提供依据。单元测试是以程序设计说明书和之前所作的测试数据(正常的和错误的)为指导,测试模块内重要的路径,以检查出错误;检验信息能否正确地流入和流出单元;在单元测试工作过程中,其内部数据能否保持其完整性,包括内部数据的形式、内容及相互关系不发生错误,也包括全局变量在单元中的处理和影响。以及在为限制数据加工而设置的边界处,能否正确工作。单元的运行能否做到满足特定的逻辑覆盖。单元中发生了错误,其中的出错处理措施是否有效等等方面。
单元测试的内容
目标:确保模块被正确地编码。
依据:详细设计说明书、源程序。
过程:包括设计、脚本开发、执行、调试和分析结果。
执行者:开发人员和测试人员。
测试方法:白盒为主,黑盒为辅。
评估:通过所有单元测试用例,代码没有严重缺陷。
单元测试的优点
单元测试是一种验证行为,其为程序中的每一项功能都是测试来验证它的正确性。单元测试是一种设计技术:单元测试使我们把程序设计成易于调用和可测试的设计,是一种设计技术。单元测试是一种编写文档的行为:单元测试是一种文档,它是展示函数或类如何使用的最佳文档。这份文档是可编译、可运行的,并且它保持最新,永远与代码同步。单元测试具有回归性:单元测试避免了代码出现回归,编写完成之后,可以随时随地的快速运行测试。单元测试保证:保证代码质量,保证代码的可维护性,保证代码的可扩展性。
单元测试的停止准则
单元测试停止至少需要满足以下条件:软件单元功能与设计需求一致;软件单元接口与设计需求一致;能够正确处理输入和运行中的错误;在单元测试中发现的错误已经修改并通过了测试;达到了相关的覆盖率的要求;完成软件单元测试报告。
单元测试的过程与文档管理
单元测试过程由以下5个步骤组成:
在详细设计阶段完成单元测试计划;
建立单元测试环境,完成测试设计和开发;
执行单元测试用例,并详细记录测试结果;
判定测试用例是否通过;
提交《单元测试报告》;
单元测试的任务
模块独立执行通路测试:检查每一条独立执行路径的测试。保证每条语句被至少执行一次。主要解决以下问题:误解或用错了算符优先级。混合类型运算。变量初值错。精度不够。表达式符号错等等。
模块局部数据结构测试:检查局部数据结构完整性。主要解决以下问题:不适合或不相容的类型说明。变量无初值。变量初始化或默认值有错。不正确的变量名或从来未被使用过。出现上溢或下溢和地址异常等等。
模块接口测试:检查模块接口是否正确。主要解决以下问题:输入的实际参数与形式参数是否一致,包含个数、属性、量纲;调用其他模块的实际参数与被调模块的形参是否一致,包含个数、属性、量纲;调用预定义函数时所用参数是否一致,包含个数、属性、量纲;全程变量的定义在各模块是否一致;外部输入、输出相关的问题,包含文件、缓冲区、错误处理等等。
模块边界条件测试:检查临界数据处理的正确性。主要解决以下问题:普通合法数据的处理;普通非法数据的处理;边界值内合法边界数据的处理;边界值外非法边界数据的处理等等。
模块的各条错误处理通路测试:预见、预设的各种出错处理是否正确有效。主要解决以下问题:输出的出错信息难以理解;记录的错误与实际不相符;程序定义的出错处理前系统已介入;异常处理不当;未提供足够的定位出错的信息等等。
集成测试
集成就是把多个单元组合起来形成更大的单元。
集成测试也称为组装测试、联合测试、子系统测试、部件测试。其在假定各个软件单元已经通过了单元测试的前提下,检查各个软件单元接口之间的协同工作(参数、全局数据结构、文件、数据库)是否正确。
集成测试通常采用黑盒测试用例设计方法、灰盒测试方法。
相关文章:
【从零开始学习计算机科学】软件测试(二)单元测试 与 集成测试
【从零开始学习计算机科学】软件测试(二)单元测试 与 集成测试 单元测试概述单元测试的内容单元测试的优点单元测试的停止准则单元测试的过程与文档管理单元测试的任务集成测试集成测试关注的问题模块分析集成测试与系统测试的区别集成测试与开发的关系集成测试的层次集成测试…...
数学建模:MATLAB循环神经网络
一、简述 1.循环神经网络 循环神经网络(RNN)是一种用于处理序列数据的神经网络。不同于传统的前馈神经网络,RNN在隐藏层中加入了自反馈连接,使得网络能够对序列中的每个元素执行相同的操作,同时保持一个“记忆”状态…...
EagleTrader为何重申重要数据前后2分钟禁止交易?
3月12日,美国公布了2月份的CPI数据。 美国2月未季调CPI年率录得2.8%,为去年11月来新低,低于市场预期的2.9%。 美国2月季调后CPI月率录得0.2%,为去年10月来新低,预期值为0.3%,前值为0.5%。 数据公布后&#…...
【Spring】声明式事务传播机制
1. 所有传播行为 REQUIRED(默认类型): 如果当前存在事务,则加入该事务;如果没有,则新建一个事务。适用于大多数业务场景。 SUPPORTS: 如果当前存在事务,则加入该事务;…...
个人blog系统 前后端分离 前端js后端go
系统设计: 1.使用语言:前端使用vue,并使用axios向后端发送数据。后端使用的是go的gin框架,并使用grom连接数据库实现数据存储读取。 2.设计结构: 最终展示:仅展示添加模块,其他模块基本相似 前…...
单元测试mock
一、背景 现在有A类,B类,C类,A类依赖B类,依赖C类,如果想要测试A类中的某个方法的业务逻辑。A类依赖其他类,则把其他类给mock,然后A类需要真实对象。这样就可以测试A类中的方法。 举例:Ticket类需要调用Flight类和Pas…...
OpenGL 将屏幕上的二维坐标转换为三维空间中的一个点
本文主要介绍将屏幕上的二维坐标转换为三维空间中的一个点,该点位于 近 平面上(即 Z 坐标为 -1)。 一、步骤概述 屏幕坐标到标准化设备坐标 (NDC): 将屏幕坐标 (x, y) 转换为 NDC 坐标系。NDC 到相机空间: 使用逆投影矩阵将 NDC 坐标转换到相…...
golang接口用法-代码案例
文章目录 Go语言中接口(interface)的含义接口的常见应用场景示例1示例2(Dog 和 Cat)使用场景-多数据库 Go语言中接口(interface)的含义 接口在Go语言中是一种类型,它定义了一组方法的集合。一个…...
ORA-12162: TNS:net service name is incorrectly specified
1.现象 SQL plus 连接实例报错,已确定实例是open状态。 [rootlocalhost ~]# su - oracle [oraclelocalhost ~]$ sqlplus / as sysdbaSQL*Plus: Release 19.0.0.0.0 - Production on Sat Mar 15 10:20:56 2025 Version 19.11.0.0.0Copyright (c) 1982, 2020, Orac…...
基于 Verilog 的时序设计:从理论到实践的深度探索
在数字电路设计领域,时序设计是一个至关重要的环节,它涉及到组合逻辑电路与时序逻辑电路的设计差异、时钟信号的运用以及触发器的工作原理等多个方面。本文将围绕基于 Verilog 的时序设计实验展开,详细阐述实验过程、代码实现以及结果分析,帮助读者深入理解时序设计的核心概…...
GreenKGC: A Lightweight Knowledge Graph Completion Method(论文笔记)
CCF等级:A 发布时间:2023年7月 代码位置 25年3月17日交 目录 一、简介 二、原理 1.整体 2.表示学习 3.特征修剪 4.决策学习 三、实验性能 1.主要结果 2.消融实验 四、结论和未来工作 一、简介 传统知识图谱补全方法中,嵌入维度…...
SSM基础专项复习5——Maven私服搭建(2)
系列文章 1、SSM基础专项复习1——SSM项目整合-CSDN博客 2、SSM基础专项复习2——Spring 框架(1)-CSDN博客 3、SSM基础专项复习3——Spring框架(2)-CSDN博客 4、SSM基础专项复习4——Maven项目管理工具(1ÿ…...
Linux中的epoll简单使用案例
I/O 多路复用允许一个进程或线程同时监控多个网络 sockets 的状态。它通过单个系统调用(select)来检查多个 sockets 是否有数据可读、可写或是否有异常。Linux 提供了多种 I/O 复用技术,包括上面提到的 select、以及 poll、epoll。 创建epol…...
ASP4644四通道降压稳压器的工业高效电源管理方案
ASP4644工业级型号(ASP4644I6B)是一款专为工业场景设计的四通道降压稳压器,支持-40C至85C工作温度。其核心特性包括: 宽输入电压范围:4V–14V,适配工业现场多变的电源环境。 高负载能力:单通道…...
kali破解Pdf/execl/word
一、准备工作 1.工具安装 Kali Linux 内置部分工具,需补充安装以下工具: sudo apt update sudo apt install pdfcrack hashcat john -y git clone https://github.com/magnumripper/JohnTheRipper # 更新版John 2.字典准备 常用字典:Kal…...
宇树科技纯技能要求总结
一、嵌入式开发与硬件设计 核心技能 嵌入式开发: 精通C/C,熟悉STM32、ARM开发熟悉Linux BSP开发及驱动框架(SPI/UART/USB/FLASH/Camera/GPS/LCD)掌握主流平台(英伟达、全志、瑞芯微等) 硬件设计:…...
RabbitMq C++客户端的使用
1.RabbitMq介绍 RabbitMQ 是一款开源的消息队列中间件,基于 AMQP(高级消息队列协议)实现,支持多种编程语言和平台。以下是其核心特点和介绍: 核心特点 多语言支持 提供 Java、Python、C#、Go、JavaScript 等语言的客…...
用通义大模型写爬虫程序,汇总各科成绩
需求:根据各科网址,输入学号、姓名查询成绩。 中间反反复复很多次,本文只记下重点的几次和大模型的沟通历史。 输入界面 查询界面 round0(最初的问题) 请在windows下,使用python的selenium库࿰…...
电商项目Ts版本
文章目录 项目地址一、环境安装1.1 配置作为导入1.2 文件目录 二、路由2.1 publicRoutes 项目地址 教程作者:教程地址: 代码仓库地址: 所用到的框架和插件: dbt airflow一、环境安装 1.1 配置作为导入 vite.config.ts impor…...
HarmonyOS Next中的弹出框使用
HarmonyOS Next弹出框概述及分类 弹出框是一种模态窗口,通常用于在保持当前上下文环境的同时,临时展示用户需关注的信息或待处理的操作。用户需在模态弹出框内完成相关交互任务之后,才能退出模态模式。弹出框可以不与任何组件绑定࿰…...
C++实现的数据结构示例,涵盖链表、数组、树和图
使用C实现的数据结构示例,涵盖链表、数组、树和图的基本操作: 链表(单向链表) #include <iostream> using namespace std;struct Node {int data;Node* next;Node(int val) : data(val), next(nullptr) {} };class Linked…...
FPGA中级项目4——DDS实现
FPGA中级项目4——DDS实现 DDS简介 DDS(直接数字频率合成器,Direct Digital Frequency Synthesis)是一种基于数字信号处理技术的频率合成方法,广泛应用于通信、雷达、仪器仪表等领域。在 FPGA中实现 DDS 具有灵活性高、集成度强、…...
深度学习-149-langchain之如何不使用with_structured_output()从模型中返回结构化数据
文章目录 1 不使用with_structured_output()方法1.1 问题背景1.2 输出解析器1.3 远程deepseek大模型API2 基于提示词2.1 直接使用提示词2.2 少样本提示词3 直接提示和解析模型输出3.1 使用PydanticOutputParser3.1.1 构建解析器3.1.2 构建提示模板3.1.3 调用大模型3.1.4 调用链…...
STM32 DAC详解:从原理到实战输出正弦波
目录 一、DAC基础原理1.1 DAC的作用与特性1.2 DAC功能框图解析 二、DAC配置步骤2.1 硬件配置2.2 初始化结构体详解 三、DAC数据输出与波形生成3.1 数据格式与电压计算3.2 正弦波生成实战3.2.1 生成正弦波数组3.2.2 配置DMA传输3.2.3 定时器触发配置 四、常见问题与优化建议4.1 …...
深度学习框架PyTorch——从入门到精通(5)构建神经网络
构建神经网络 获取训练设备定义类模型层nn.Flattennn.Linearnn.ReLUnn.Sequentialnn.Softmax 模型参数补充说明argmax 神经网络是由一些层或者模块组成的,这些层和模块会对数据进行各种操作。 在 PyTorch 里,torch.nn 这个命名空间提供了你搭建自己神经网…...
基于PyQt5与Open3D的轻量化BIM工具开发指南(下)
基于PyQt5与Open3D的轻量化BIM工具开发指南(下) ——参数化建模、数据导出与性能优化 【跳转】基于PyQt5与Open3D的轻量化BIM工具开发指南(上) 四、详细实现步骤(Part 2) 3. 参数化建模…...
Pytest项目_day01(HTTP接口)
HTTP HTTP是一个协议(服务器传输超文本到浏览器的传送协议),是基于TCP/IP通信协议来传输数据(HTML文件,图片文件,查询结果等)。 访问域名 例如www.baidu.com就是百度的域名,我们想…...
在vue项目中,使用Patch请求,实现根据id修改某张发票的日结状态
目录 前言 一.问题描述 二.后端实现 1.分析 2.检查后端拦截器,看看是否允许接收Patch类型的请求 3.编写Dto 4.编写controller层 5.编写service层 6.mapper层 7.使用apifox,测试后端接口的可用性 三.前端实现 1.封装api(本质是ax…...
Android Zygote的进程机制
目录 ✅ Android Zygote 进程机制详解 🚩 一、Zygote 的作用 ⚙️ 二、Zygote 启动流程 ✅ 1. init 进程启动 Zygote ✅ 2. Zygote 初始化虚拟机与核心类库 ✅ 3. Zygote 监听 Socket ✅ 4. Zygote fork 创建应用进程 🔥 三、Zygote 与应用进程之…...
某快餐店用户市场数据挖掘与可视化
1、必要库的载入 import pandas as pd import matplotlib.pyplot as plt import seaborn as sns2、加载并清洗数据 # 2.1 加载数据 df pd.read_csv(/home/mw/input/survey6263/mcdonalds.csv)# 2.2 数据清洗 # 2.2.1 检查缺失值 print(缺失值情况:) print(df.isn…...
