按软件开发阶段的角度划分:单元测试、集成测试、系统测试、验收测试

1.单元测试(Unit Testing)

单元测试,又称模块测试。对软件的组成单位进行测试,其目的是检验软件基本组成单位的正确性。测试的对象是软件里测试的最小单位:模块。

测试阶段:编码后或者编码前(TDD:测试驱动开发)

测试对象:最小模块

测试人员:白盒测试工程师或开发人员

测试依据:代码和注释+详细文档

测试方法:白盒测试

测试内容:模块接口测试、局部数据结构测试、独立执行路径测试、错误处理路径测试、边界条件测试

补充说明:

(1)学习测试依据时,我们可以对比软件测试的“V”模型结合记忆

(2)白盒测试不是单元测试,单元测试是白盒测试

(3)测试驱动开发(TDD):测试人员先编写测试用例,开发人员根据测试用例写程序

 

单元测试的目的

单元测试的目的在于发现各模块内部可能存在的各种错误,主要是基于白盒测试。(也就是说,在单元测试过程中,用的最多的是白盒测试方法,也可能会有灰盒或者黑盒。单元测试和白盒测试是不同的划分,不存在包含关系)。

在单元测试阶段对应的文档是详细设计文档(LLD);对应的代码就是单元代码,因此单元测试的目的主要有3点:

1、验证代码是与设计相符合的;

2、发现设计和需求中存在的错误;

3、发现在编码过程中引入的错误。

单元测试的特点

1. 程序单元是应用的最小可测试部件,通常基于类或者类的方法进行测试。

2. 程序单元和其他单元是相互独立的。

3. 单元测试的执行速度很快

4. 单元测试发现的问题相对容易定位。

5. 单元测试通常由开发人员来完成。

6. 通过了解代码的实现逻辑进行测试,通常称之为白盒测试。

单元测试过程

测试四部曲:

1. 初始化数据
2. 执行要测试的业务

3. 验证测试的数据

4. 清理数据

单元测试策略

1、孤立的单元测试策略(Isolation Unit Testing)

方法:不考虑每个模块与其它模块之间的关系,为每个模块设计桩模块和驱动模块,每个模块进行独立的单元测试。

优点:这个方法比较简单,最容易操作,可以达到很高的结构覆盖率,可以并行开展,该方法是纯粹的单元测试。

缺点:桩函数和驱动函数工作量很大,效率低。

2、自顶向下的单元测试策略(Top Down Unit Testing)

方法:先对最顶层的单元进行测试,把顶层所调用的单元做成桩模块,其次对第二层进行测试,使用上面已经测试过的单元做驱动模块,以此类推,直到测试完所有模块。

优点:可以节省驱动函数的开发工作,效率高。

缺点:随着被测单元一个一个被加入,测试过程将变得越来越复杂,并且开发和维护的成本将增加。

3、自底向上的单元测试策略(Bottom Up Unit Testing)

方法:先对最底层的模块进行单元测试,将模拟调用该模块的模块设置为驱动模块,然后再对上面一层做单元测试,用下面已经测试好的模块做桩模块,以此类推,直到测试完所有模块。

优点:可以节省桩函数的开发工作量,测试效率较高。

缺点:不是纯粹的单元测试,底层函数的测试质量对上层函数的测试将产生很大影响。

单元测试工具

JavaScript单元测试工具 JsTestDriver和Venus和Buster.JS

C单元测试工具 greatest

C++单元测试工具 QTRunner和ECUT

单元测试维护工具 Unitils

Qt单元测试工具 QTestlib

存储过程单元测试工具 SQLUnit

数据库单元测试工具 DbUnit

NoSQL的单元测试工具 NoSQLUnit

单元测试框架

 Arquillian、The Grinder、

JUnit 和TestNG是一个 Java 语言的单元测试框架;

 AndroidJUnit4 是Android的单元测试框架;

C++ 单元测试框架 cipra

Python单元测试框架 PyUnit、unittest、pytest

Python 模拟测试框架 CaptureMock

gtest是一个跨平台的(Liunx、Mac OS X、Windows、Cygwin、Windows CE and Symbian)C++单元测试框架,由google公司发布。

2.集成测试(Integration Testing)

集成测试也称联合测试(联调)、组装测试:将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。集成主要目的是检查软件单位之间的接口是否正确。

测试阶段:一般是单元测试之后

测试对象:模块间的接口

测试人员:白盒测试工程师或开发工程师

测试依据:单元测试的文档+概要设计文档

测试方法:黑盒测试与白盒测试(灰盒测试)

测试内容:模块之间数据传输、模块之间功能冲突、模块组装功能的正确性、全局数据结构、单模块缺陷对系统的影响

补充说明:

单元测试是一个模块内部的测试,集成测试是在模块之间进行测试(至少两个)。

集成测试的目的

集成测试的目标是按照设计要求使用那些通过单元测试的构件来构造程序结构。单个模块具有高质量但不足以保证整个系统的质量。有许多隐蔽的失效是高质量模块间发生非预期交互而产生的。

以下两种测试技术是用于集成测试:

1)功能性测试。使用黑盒测试技术针对被测模块的接口规格说明进行测试。

2)非功能性测试。对模块的性能或可靠性进行测试。

另外,集成测试的必要性还在于一些模块虽然能够单独地工作,但并不能保证连接起来也能正常工作。程序在某些局部反映不出来的问题,有可能在全局上会暴露出来,影响功能的实现。此外,在某些开发模式中,如迭代式开发,设计和实现是迭代进行的。在这种情况下,集成测试的意义还在于它能间接地验证概要设计是否具有可行性。

集成测试是确保各单元组合在一起后能够按既定意图协作运行,并确保增量的行为正确。它所测试的内容包括单元间的接口以及集成后的功能。使用黑盒测试方法测试集成的功能。并且对以前的集成进行回归测试。

集成测试的内容

集成测试的内容包括模块之间接口以及集成后的功能。它主要使用黑盒测试方法测试继承的功能,并对以前的集成进行回归测试。具体来说,集成测试的内容包括以下方面: 
(1)、将各个具有相互调用关系的模块组装起来时,检查相应模块接口的数据是否会丢失。 
(2)、判断各个子功能组合起来是否能够达到预期要求的父功能。 
(3)、检查一个模块的功能是否对其他模块的功能产生不良影响。 
(4)、检查全局数据结构是否正确,以及在完成模块功能的过程中是否会被异常修改。 
(5)、单个模块的误差累计起来,是否会放大到不可接受的程度。

集成测试过程

1.计划阶段: 依据需求规格说明书、概要设计文档和开发计划,拟定软件集成测试计划;

2设计阶段:依据被测对象的结构、待集成模块、接口、集成测试策略、测试工具等进行分析,拟定集成测试设计方案;

3实现阶段:主要进行集成测试用例设计和集成测试代码设计;

4执行阶段: 执行测试,生成测试报告。

集成测试原则

1.所有的公共接口都要被测试到;

2.关键模块必须进行充分的测试;

3.集成测试应该按一定的层次进行;

4.集成测试的策略应该综合考虑质量、进度、成本;

5.当测试计划中的结束标准满足时,集成测试结束;

6.集成测试根据集成测试的计划和方案进行,防止测试的随意性;

7.项目管理者保证测试用例经过审查;

8.测试的执行结果应该如实的被记录。

集成测试技术和步骤

技术: 

   以黑盒测试技术为主、白盒测试技术为辅(灰盒测试技术)

步骤:

   与集成测试策略相关

 

集成测试策略

基于功能分解的集成测试:非渐增式集成、渐增式集成、瞬时集成。

 

瞬时集成测试策略又称大爆炸测试、一次性集成。首先对每个模块分别进行模块测试,然后将所有模块集成起来在一起进行测试,最终得到要求的软件系统。

集成测试工具

Jenkins持续集成自动化构建发布工具

开源的 Restful Api 集成测试工具 Hitchhiker

集成测试的三个级别

由于集成的力度不同,一般可以把集成测试划分为三个级别:

1、模块内集成测试。

2、子系统内集成测试。

3、子系统间集成测试。

3.系统测试(System Testing)

系统测试:将软件系统看成是一个系统的测试。包括对功能、性能以及软件所运行的软硬件环境进行测试。时间大部分在系统测试执行阶段,包括回归测试和冒烟测试。

测试阶段:集成测试阶段之后

测试对象:整个系统(软件、硬件)

测试人员:黑盒测试工程师

测试依据:需求规格说明文档

测试方法:黑盒测试

测试内容:功能、界面、可靠性、易用性、性能、兼容性、安全性等

补充说明:

(1)系统测试是从完整的角度,广面去看待问题,不再看模块;

(2)虽然系统测试包括冒烟测试和回归测试,但三者之间是有严格的先后顺序的,即:先冒烟、再系统、后回归。

系统测试的目的

系统测试的目的是验证最终软件系统是否满足用户规定的需求。

系统测试目标

1、 确保系统测试的活动是按计划进行的;

2、 验证软件产品是否与系统需求用例不相符合或与之矛盾;

3、 建立完善的系统测试缺陷记录跟踪库;

4、 确保软件系统测试活动及其结果及时通知相关小组和个人。

系统测试主要分为以下几种:

1.恢复测试

2.安全测试

3.强度测试

4.性能测试

系统测试原则

1、测试机构要独立;

2、要精心设计测试计划,包括负载测试、压力测试、用户界面测试、可用性测试、逆向测试、安装测试、验收测试;

3、要进行回归测试;

4、测试要遵从经济性原则。

系统测试的方法

功能测试:功能测试属于黑盒测试,是系统测试中最基本的测试。功能测试主要根据产品的需求规格说明和测试需求列表,验证产品是否符合需求规格说明。

协议一致性测试:主要用于分布式系统。在分布式系统中,很多功能的实现是通过多台计算机相互协作来完成的,这要求计算机之间能相互交换信息,所以需要制定一些规则(协议)。对协议进行测试,通常包括:协议一致性测试、协议性能测试、协议互操作性测试、协议健壮性测试。

性能测试:主要用于实时系统和嵌入式系统,性能测试是指测试软件在集成系统中的运行性能,目标是量度系统的性能和预先定义的目标有多大差距。一种典型的性能测试是压力测试,当系统同时接收极大数量的用户和用户请求时,需要测量系统的应对能力。性能测试要有工具的支持,在某种情况下,测试人员必须自己开发专门的接口工具。

压力测试:又称强度测试,是在各种超负荷的情况下观察系统的运行情况的测试。

容量测试:在系统正常运行的范围内测试并确定系统能够处理的数据容量。容量测试是面向数据的,主要目的就是检测系统可以处理目标内确定的数据容量。

安全性测试:安全性测试就是要验证系统的保护机制是否抵御入侵者的攻击。保护测试是安全性测试中一种常见的测试,主要用于测试系统的信息保护机制。评价安全机制的性能与安全功能本身一样重要,其中安全性的性能主要包括:有效性、生存性、精确性、反应时间、吞吐量。

失效恢复测试:验证系统从软件或者硬件失效中恢复的能力。失效恢复测试采用各种人为干预方式使软件出错,造成人为的系统失效,进而检测系统的恢复能力。如果恢复需要人为干预,则应考虑平均修复时间是否在限定的范围内。

备份测试:备份测试是失效恢复测试的补充,目的是验证系统在软件或者硬件失效的实践中备份其数据的能力。

GUI测试:GUI测试与用户友好性测试和可操作性测试有重复,但GUI测试更关注对图形界面的测试。GUI测试分为两个部分,一方面是界面实现与界面设计的情况要符合;另一方面是要确认界面能够正确处理事件。

                 GUI测试设计测试用例一般要从以下4方面考虑:

                 (1)划分界面元素,并根据界面的复杂性进行分层。通常把界面划分为三个层次,第一层是界面原子层;第二层是界面组合元素层;第三层是一个完整的窗口。

                 (2)在不同的界面层次确定不同的测试策略。

                 (3)进行测试数据分析,提取测试用例。

                 (4)使用自动化测试工具进行脚本化工作。

健壮性测试:又称容错测试,用于测试系统在出故障时,是否能够自动恢复或者忽略故障继续运行。健壮性测试的一般方法是软件故障插入测试,在软件故障插入测试中,需要关注三个方面:目标系统、故障类型和插入故障的方法。

兼容性测试:检验被测的应用系统对其他系统的兼容性。

易用性测试:与可操作性类似。检测用户在理解和使用系统方面是否方便。易用性测试是面向用户的系统测试,包括对被测系统的系统功能、系统发布、帮助文本和过程等的测试。最好在开发阶段就开始进行。

安装测试验证成功安装系统的能力。

文档测试:主要是针对系统提交给用户的文档进行验证。文档测试的目标是验证用户文档的正确性并保证操作手册的过程能正常工作。

在线帮助测试:用于检验系统的实时在线帮助的可操作性和准确性。

数据转换测试:目标是验证已存在数据的转换并载入一个新的数据库是否有效。

4.验收测试(Acceptance Testing)

验收测试(交付测试):是部署软件之前的最后一个测试操作。它是技术测试的最后一个阶段,也称为交付测试。是以用户为主的测试,软件开发人员和质量保证人员也应参加,由用户参加设计测试用例,使用用户界面输入测试数据,并分析测试的输出结果。

验收测试的目的是确保软件准备就绪,按照项目合同、任务书、双方约定的验收依据文档,向软件购买者系统测试展示该软件系统满足原始需求。

测试阶段:系统测试通过后

测试对象:整个系统(包括软硬件)

测试人员:主要是最终用户或者需求方

测试依据:用户需求、验收标准

测试方法:黑盒测试

测试内容:同系统测试(功能、各类文档等)

补充说明:

验收测试包括alpha测试和beta测试。alpha测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。Beta测试由软件的最终用户们在一个或多个客房场所进行。

验收测试分类

用户验收测试可以分为两个大的部分:软件配置审核和可执行程序测试,其大致顺序可分为:文档审核、源代码审核、配置脚本审核、测试程序或脚本审核、可执行程序测试。

验收测试策略

实施验收测试的常用策略有三种,它们分别是:

1· 正式验收

2· 非正式验收或 Alpha 测试

3· Beta 测试

您选择的策略通常建立在合同需求、组织和公司标准以及应用领域的基础上。

验收测试过程

1. 软件需求分析:了解软件功能和性能要求、软硬件环境要求等,并特别要了解软件的质量要求和验收要求。

2. 编制《验收测试计划》和《项目验收准则》:根据软件需求和验收要求编制测试计划,制定需测试的测试项,制定测试策略及验收通过准则,并经过客户参与的计划评审。

3. 测试设计和测试用例设计:根据《验收测试计划》和《项目验收准则》编制测试用例,并经过评审。

4. 测试环境搭建:建立测试的硬件环境、软件环境等。(可在委托客户提供的环境中进行测试)

5. 测试实施:测试并记录测试结果。

6. 测试结果分析:根据验收通过准则分析测试结果,作出验收是否通过及测试评价。

7. 测试报告:根据测试结果编制缺陷报告和验收测试报告,并提交给客户。

验收测试的内容

通常可以包括:安装(升级)、启动与关机、功能测试(正例、重要算法、边界、时序、反例、错误处理)、性能测试(正常的负载、容量变化)、压力测试(临界的负载、容量变化)、配置测试、平台测试、安全性测试、恢复测试(在出现掉电、硬件故障或切换、网络故障等情况时,系统是否能够正常运行)、可靠性测试等。

 

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

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

相关文章

Unity OnDrawGizmos的简单应用 绘制圆形

编辑器和配置表各有各的好。 卡牌游戏即使再复杂,哪怕是梦幻西游,大话西游那种,甚至wow那种,用配表都完全没问题。但是崩坏3,或者鬼泣,格斗游戏,可视化编辑器是唯一的选择。 开发初期刚开始配技…

人工智能技术

人工智能技术是什么? 人工智能技术(Artificial Intelligence Technology,AI技术)是一种模仿人类智能和思维方式的计算机技术,旨在使计算机能够执行需要人类智能才能完成的任务。这些任务包括理解自然语言、解决问题、…

高手进阶之路---pyqt自定义信号

高手进阶之路—pyqt自定义信号 1.思考问题为什么要自定义信号,qt5本身已有信号槽函数 # pushButton 被clicked的时候connect 函数print self.pushButton.clicked.connect(self.print)def print(self):print("我被点击了")或者使用 # 需要引入 pyqtSlo…

ubuntu20.04 编译安装运行emqx

文章目录 安装依赖编译运行登录dashboard压力测试 安装依赖 Erlang/OTP OTP 24 或 25 版本 apt-get install libncurses5-dev sudo apt-get install erlang如果安装的erlang版本小于24的话,可以使用如下方法自行编译erlang 1.源码获取 wget https://github.com/erla…

微服务中间件--多级缓存

多级缓存 多级缓存a.JVM进程缓存1) Caffeine2) 案例 b.Lua语法1) 变量和循环2) 条件控制、函数 c.多级缓存1) 安装OpenResty2) 请求参数处理3) 查询Tomcat4) Redis缓存预热5) 查询Redis缓存6) Nginx本地缓存 d.缓存同步1) 数据同步策略2) 安装Canal2.a) 开启MySQL主从2.b) 安装…

mysql(八)事务隔离级别及加锁流程详解

目录 MySQL 锁简介什么是锁锁的作用锁的种类共享排他锁共享锁排它锁 粒度锁全局锁表级锁页级锁行级锁种类 意向锁间隙临键记录锁记录锁间隙锁 加锁的流程锁的内存结构加锁的基本流程根据主键加锁根据二级索引加锁根据非索引字段查询加锁加锁规律 锁信息查看查看锁的sql语句 数据…

龙迅LT7911UX TYPE-C/DP转MIPI/LVDS,内有HDCP

1. 描述 LT7911UX是一种高性能的Type-C/DP1.4a到MIPI或LVDS芯片。HDCP RX作为HDCP中继器的上游端,可以与其他芯片的HDCP TX协同工作,实现中继器的功能。 对于DP1.4a输入,LT7911UX可以配置为1/2/4车道。自适应均衡使其适用于长电缆应用&#…

bash: conda: command not found

问题描述: 在Pycharm上用SSH远程连接到服务器,打开Terminal准备查看用 conda 创建的虚拟环境时,却发现调用 conda 指令时出现以下报错: -bash: conda: command not found如果使用Xshell 利用端口号直接连接该 docker 容器&#…

zhm_real/MotionPlanning运动规划库中A*算法源码详细解读

本文主要对zhm_real/MotionPlanning运动规划库中A*算法源码进行详细解读,即对astar.py文件中的内容进行详细的解读,另外本文是 Hybrid A * 算法源码解读的前置文章,为后续解读Hybrid A * 算法源码做铺垫。 astar.py文件中的源码如下&#xff…

Matlab高光谱遥感数据处理与混合像元分解实践技术

光谱和图像是人们观察世界的两种方式,高光谱遥感通过“图谱合一”的技术创新将两者结合起来,大大提高了人们对客观世界的认知能力,本来在宽波段遥感中不可探测的物质,在高光谱遥感中能被探测。以高光谱遥感为核心,构建…

Qt中XML文件创建及解析

一 环境部署 QT的配置文件中添加xml选项&#xff1a; 二 写入xml文件 头文件&#xff1a;#include <QXmlStreamWriter> bool MyXML::writeToXMLFile() {QString currentTime QDateTime::currentDateTime().toString("yyyyMMddhhmmss");QString fileName &…

opencv 文档识别+UI界面识别系统

目录 一、实现和完整UI视频效果展示 主界面&#xff1a; 识别结果界面&#xff1a; 查看处理图片过程&#xff1a; 查看历史记录界面&#xff1a; 二、原理介绍&#xff1a; 将图像变换大小->灰度化->高斯滤波->边缘检测 轮廓提取 筛选第三步中的轮廓&#xf…

Microsoft Excel整合Python:数据分析的新纪元

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

论文笔记: MOGRIFIER LSTM

2020 ICLR 修改传统LSTM 当前输入和隐藏状态充分交互&#xff0c;从而获得更佳的上下文相关表达 1 Mogrifier LSTM LSTM的输入X和隐藏状态H是完全独立的 机器学习笔记&#xff1a;GRU_gruc_UQI-LIUWJ的博客-CSDN博客这篇论文想探索&#xff0c;如果在输入LSTM之前&#xf…

Go 语言进阶与依赖管理 | 青训营

Powered by:NEFU AB-IN 文章目录 Go 语言进阶与依赖管理 | 青训营 语言进阶依赖管理测试 Go 语言进阶与依赖管理 | 青训营 GO语言工程实践课后作业&#xff1a;实现思路、代码以及路径记录 语言进阶 Go可以充分发挥多核优势&#xff0c;高效运行 Goroutine是Go语言中的协程…

【PostGreSQL】PostGreSQL到Oracle的数据迁移

项目需要&#xff0c;有个数据需要导入&#xff0c;拿到手一开始以为是mysql&#xff0c;结果是个PostGreSQL的数据&#xff0c;于是装数据库&#xff0c;但这个也不懂呀&#xff0c;而且本系统用的Oracle&#xff0c;于是得解决迁移转换的问题。 总结下来两个思路。 1、Postg…

【Python机器学习】实验15 将Lenet5应用于Cifar10数据集

文章目录 CIFAR10数据集介绍1. 数据的下载2.修改模型与前面的参数设置保持一致3. 新建模型4. 从数据集中分批量读取数据5. 定义损失函数6. 定义优化器7. 开始训练8.测试模型 9. 手写体图片的可视化10. 多幅图片的可视化 思考题11. 读取测试集的图片预测值&#xff08;神经网络的…

『C语言入门』初识C语言

文章目录 前言C语言简介一、Hello World&#xff01;1.1 编写代码1.2 代码解释1.3 编译和运行1.4 结果 二、数据类型2.1 基本数据类型2.2 复合数据类型2.3 指针类型2.4 枚举类型 三、C语言基础3.1 变量和常量3.2 运算符3.3 控制流语句3.4 注释单行注释多行注释注释的作用 四、 …

【项目 计网6】 4.17 TCP三次握手 4.18滑动窗口 4.19TCP四次挥手

文章目录 4.17 TCP三次握手4.18滑动窗口4.19TCP四次挥手 4.17 TCP三次握手 TCP 是一种面向连接的单播协议&#xff0c;在发送数据前&#xff0c;通信双方必须在彼此间建立一条连接。所谓的“连接”&#xff0c;其实是客户端和服务器的内存里保存的一份关于对方的信息&#xff…

线性代数的学习和整理7:各种特殊效果矩阵汇总

目录 1 矩阵 1.1 1维的矩阵 1.2 2维的矩阵 1.3 没有3维的矩阵---3维的是3阶张量 1.4 下面本文总结的都是各种特殊效果矩阵特例 2 方阵: 正方形矩阵 3 单位矩阵 3.1 单位矩阵的定义 3.2 单位矩阵的特性 3.3 为什么单位矩阵I是 [1,0;0,1] 而不是[0,1;1,0] 或[1,1;1,1]…