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

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.rhkb.cn/news/108893.html

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

相关文章

天润融通「微藤大语言模型平台2.0」以知识驱动企业高速增长

8月23日,天润融通(又称“天润云”,2167.HK),正式发布「微藤大语言模型平台2.0」。 “大模型企业知识企业知识工程”。 “不能有效记录和管理知识的企业是不能持续进步的。在企业的生产流程中,相比于其他场景&#xff0…

com.mysql.jdbc.PacketTooBigException: Packet for query is too large(windows)

使用mysql查询数据的时候报错: Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1078 > 1024). You can change this value on the server by setting the max_allowed_packet variable. 这是因为mysql的server默认接受数据…

ISIS路由协议

骨干区域与非骨干区域 凡是由级别2组建起来的邻居形成骨干区域;级别1就在非骨干区域,骨干区域有且只有一个,并且需要连续,ISIS在IP环境下目前不支持虚链路。 路由器级别 L1路由器只能建立L1的邻居;L2路由器只能建立L…

IDEA启动两个Tomcat服务的方式 使用nginx进行反向代理 JMeter测试分布式情况下synchronized锁失效

目录 引出IDEA启动Tomcat两个端口的方式1.编辑配置2.添加新的端口-Dserver.port80833.service里面管理4.启动后进行测试 使用nginx进行反向代理反向代理多个端口运行日志查看启动关闭重启 分布式情况下synchronized失效synchronized锁代码启动tomcat两个端口nginx反向代理JMete…

VR智慧校园资中控管理平台综合提升了课堂教学质量

随着越来越多高校在课堂中引进VR虚拟仿真实训系统,为了方便老师对全班同学进行高效率地管理,VR中控平台应运而生。下面为您详细介绍VR中控平台在课堂教学中的应用优势。 VR中控系统安装在教师总控端,融合了课件、视频、3D动画等丰富的教学资源…

python+mysql+前后端分离国内职位数据分析(源码+文档+指导)

系统阐述的是使用国内python职位数据分析系统的设计与实现,对于Python、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计,描述,实现和分析与测试方面来表明开发的过程。开发中使用了 Flask框架和MySql数据库技术搭建系统的整体…

二、数学建模之整数规划篇

1.定义 2.例题 3.使用软件及解题 一、定义 1.整数规划(Integer Programming,简称IP):是一种数学优化问题,它是线性规划(Linear Programming,简称LP)的一个扩展形式。在线性规划中&…

ZeroMQ入门

官网: ZeroMQ 简介 ZeroMQ是一个库,不是消息队列也不是消息中间件,介于应用层和传输层之间(按照TCP/IP划分)。 传统的Socket通信模式需要创建连接,销毁连接,选择协议等一些列操作。而ZeroMQ是在Socket封…

【Java集合学习1】ArrayList集合学习及集合概述分析

JavaArrayList集合学习及集合学习概述 一、Java集合概述 Java 集合, 也叫作容器,主要是由两大接口派生而来:一个是 Collection接口,主要用于存放单一元素;另一个是 Map 接口,主要用于存放键值对。对于Col…

电商平台京东平台获得京东商品描述API接口演示案例

京东商品描述API接口可以获取京东商品描述: 详细介绍商品的特点和功能,让消费者能够了解商品的具体用途和效果。 使用简洁明了的语言,避免使用过于专业的术语和长句子,让消费者能够轻松理解。 重点突出商品的卖点和优势,让消费者能够更加清晰地了解商品的价值 …

AIGC时代开启!拓世数字人短视频点燃企业数字化转型热潮!

短视频在近年迎来了高速发展期,与初期满足人们的娱乐需求和社交需求相比,短视频平台如今已经成长为一个巨量信息汇聚、流转、辐散的综合性场所。特别是随着移动互联网的普及,碎片化信息传播需求的迅猛增长,各行各业的内容创作者都…

原生小案例:如何使用HTML5 Canvas构建画板应用程序

使用HTML5 Canvas构建绘图应用是在Web浏览器中创建交互式和动态绘图体验的绝佳方式。HTML5 Canvas元素提供了一个绘图表面,允许您操作像素并以编程方式创建各种形状和图形。本文将为您提供使用HTML5 Canvas创建绘图应用的概述和指导。此外,它还将通过解释…

2、结构型设计模式

结构型设计模式 目录 结构型设计模式1. 代理模式1.1 概述1.2 结构1.3 静态代理1)抽象主题类 SellTickets2)真实主题类 TrainStation3)代理类 ProxyPoint4)客户端类 1.4 JDK 动态代理1)代理工厂类:ProxyFact…

C++类成员的访问权限以及类的封装

C通过 public、protected、private 三个关键字来控制成员变量和成员函数的访问权限,它们分别表示公有的、受保护的、私有的,被称为成员访问限定符。所谓访问权限,就是你能不能使用该类中的成员。 Java、C# 程序员注意,C 中的 publ…

ESP32应用教程(0)— PMW3901MB光流传感器

文章目录 前言 1 传感器介绍 1.1 关键特征 1.2 关键参数 2 硬件概述 2.1 信号引脚 2.2 参考电路图 3 寄存器 3.1 寄存器列表 3.2 性能优化寄存器 4 代码说明 4.1 结构体说明 4.2 编译说明 5 波形分析 前言 本文介绍了在 ESP32 DEVKIT V1 开发板上开发 PMW3901MB…

JVM知识点(一)

1、JVM基础概念 (1)JVM、JRE、JDK JRE:JVM基本类库组成的运行环境就是JRE。JVM自己是无法完成一次编译,处处运行的,需要有一个基本类库告诉JVM如何操作运行,如如何操作文件,连接网络等&#x…

[管理与领导-55]:IT基层管理者 - 扩展技能 - 1 - 时间管理 -2- 自律与自身作则,管理者管好自己时间的五步法

前言: 管理好自己的时间,不仅仅是理念,也是方法和流程。 步骤1:理清各种待办事项 当提到工作事项时,这通常指的是要完成或处理的工作任务或事务。这些事项可以包括以下内容: 任务分配:根据工作…

maven工程的目录结构

https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html maven工程的目录结构: 在maven工程的根目录下面,是pom.xml文件。此外,还有README.txt、LICENSE.txt等文本文件,便于用户能够…

疲劳检测-闭眼检测(详细代码教程)

简介 瞌睡经常发生在汽车行驶的过程中,该行为害人害己,如果有一套能识别瞌睡的系统,那么无疑该系统意义重大! 实现步骤 思路:疲劳驾驶的司机大部分都有打瞌睡的情形,所以我们根据驾驶员眼睛闭合的频率和…

PMP P-10 Purchase Management

竟然不让上传图片了。。为啥???【上传过于频繁】行吧