【实际开发18】- 静态 3
目录
1. 调试与评估
2. 单元测试的管理
1. 单元测试的文档
3. 系统集成的模式与方法
1. 集成测试前的准备
2. 集成测试的模式
3. 大棒集成方法 ( Big-bang Integration)
4. 自顶向下和自底向上集成方法
1. 自顶向下法 ( Top-down Integration )
2. 自底向上法 ( Bottom-up Integration )
3. 混合策略 ( Modified Top-down Integration )
4. 三明治集成方法 ( Sandwich Integration )
5. 持续集成
6. 集成测试流程
1. 调试与评估
调试与测试的对象及采用的方法有很大程度上的相似,调试还用到断点控制等排错方法,但其目的却完全不同。测试是为了找出软件中存在的缺陷,而调试是为了解决存在的缺陷。
-
软件单元功能与设计需求一致。
-
软件单元接口与设计需求一致。
-
能够正确处理输入和运行中的错误。
-
在单元测试中发现的错误已经得到修改并且通过了测试。
-
达到了相关的覆盖率的要求。
-
完成软件单元测试报告
2. 单元测试的管理
过程:
-
在详细设计阶段完成单元测试计划。
-
建立单元测试环境,完成测试设计和开发。
-
执行单元测试用例,并且详细记录测试结果。
-
判定测试用例是否通过。
-
提交《单元测试报告》。
1. 单元测试的文档
单元测试的文档
1、《软件需求规格说明书》、《软件详细设计说明书》 -----> 《单元测试计划》
2、《单元测试计划》、《软件详细设计说明书》-----> 《单元测试用例》
3、《单元测试用例》文档及《软件需求规格说明书》、《软件详细设计说明书》-----> 《缺陷跟踪报告》/《缺陷检查表》
4、《单元测试用例》、《缺陷跟踪报告》、《缺陷检查表》-----> 《单元测试检查表》
5、评估 -----> 单元测试报告》
3. 系统集成的模式与方法
集成测试定义
定义
集成测试又称“组装测试”、“联合测试”。集成测试遵循特定的策略和步骤将已经通过单元测试的各个软件单元(或模块)逐步组合在一起进行测试,以期望通过测试发现各软件单元接口之间存在的问题。
集成测试对象
理论上凡是两个单元(如函数单元)的组合测试都可以叫做集成测试。实际操作中,通常集成测试的对象为模块级的集成和子系统间的集成,其中子系统集成测试称为组件测试。
集成测试目的与意义
考虑以下问题:
-
在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;
-
各个子功能组合起来,能否达到预期要求的总体功能;
-
一个模块的功能是否会对另一个模块的功能产生不利的影响;
-
全局数据结构是否有问题 单个模块的误差积累起来,是否会放大,从而达到不可接受的程度。
-
共享资源访问的测试 ( 要想发现并排除在模块连接中可能发生的上述问题,就需要进行 集成测试。)
集成测试有以下不可替代的特点:
-
单元测试具有不彻底性,对于模块间接口信息内容的正确性、相互调用关系是否符合设计无能为力。只能靠集成测试来进行保障。
-
同系统测试相比,由于集成测试用例是从程序结构出发的,目的性、针对性更强,测试项发现问题的效率更高,定位问题的效率也较高;
-
定位问题较快,发现问题后比较容易定位,所以能够有效地加快进度,减少隐患。
集成测试(when)
-
在开始体系结构设计的时候开始制定测试方案;
-
在进入详细设计之前完成集成测试方案;
-
在进入系统测试之前结束集成测试。
集成测试(who)
-
集成测试可以在开发部进行,也可以由独立的测试部执行。
-
开发部尽量进行集成测试,测试部有选择地进行集成测试。
集成测试原则
-
集成测试是产品研发中的重要工作,需要为其分配足够的资源和时间。
-
集成测试需要经过严密的计划,并严格按计划执行。
-
应采取增量式的分步集成方式,逐步进行软件部件的集成和测试。
-
应重视测试自动化技术的引入与应用,不断提高集成测试效率。
-
应该注意测试用例的积累和管理,方便进行回归并进行测试用例补充。
集成测试内容
-
集成功能测试
-
接口测试
-
全局数据结构测试
-
资源测试
-
任务优先级冲突测试
-
性能和稳定性测试
集成测试、单元测试与系统测试的差别
测试类型 | 对象 | 目的 | 测试依据 | 测试方法 |
---|---|---|---|---|
单元测试 | 模块内部的程序错误 | 消除局部模块的逻辑和功能上的错误和缺陷 | 模块逻辑设计,模块外部说明 | 大量采用白盒测试方法 |
集成测试 | 模块间的集成和调用关系 | 找出与软件设计相关的程序结构,模块调用关系,模块间接口方面的问题 | 程序结构设计 | 结合使用白盒与黑和测试方法,采用较多黑盒方法构造测试用例 |
系统测试 | 整个系统,包括系统中的硬件等 | 对整个系统进行一系列的整体、有效性测试 | 系统结构设计,目标说明书,需求说明书等 | 黑盒测试 |
由以上可以看出,整个软件系统的测试过程是:先对各个软件模块进行单元测试,然后把经过单元测试的各个模块组装起来进行集成测试,最后把经过集成测试的子系统合成软件版本,对照需求规格,在实际环境下,进行系统功能验证。
1. 集成测试前的准备
人员安排 、测试计划、测试内容 、集成模式、测试方法
2. 集成测试的模式
渐增式测试模式与非渐增式测试模式:
-
非渐增式测试模式:先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,如大棒模式。
-
渐增式测试模式:把下一个要测试的模块同已经测试好的模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。
各自的优缺点:
-
非渐增式测试模式优缺点:工作量较小;发现模块间接口错误较晚;发现错误较难诊断,可以并行测试。
-
渐增式测试模式优缺点:要编写的软件较多,工作量较大;发现模块间接口错误较早;测试执行更彻底;需要较多的机器时间。
3. 大棒集成方法 ( Big-bang Integration)
采用大棒集成方法,先是对每一个子模块进行测试(单元测试阶段),然后将所有模块一次性的全部集成起来进行集成测试 。
因为所有的模块一次集成的,所以很难确定出错的真正位置、所在的模块、错误的原因。这种方法并不推荐在任何系统中使用,适合在规模较小的应用系统中使用。
非增量式集成测试实例
评述:模块d1、d2、d3、d4、d5是对各个模块做单元测试时建立的驱动模块,s1、s2、s3、s4、s5是为单元测试而建立的桩模块。这种一次性集成方式将所测模块连接起来进行测试,但是一次试运行成功地可能性并不大。其结果发现有错误,但茫然找不到原因,差错和改错都会遇到困难。
适应于一个维护型或被测试系统较小的项目。
非增量式策略——优缺点:
-
优点: ①方法简单 ②允许多测试人员同时并行工作,人力物力资源利用率较高
-
缺点: ①必须为每个模块准备相应的驱动模块和桩模块,测试成本较高 ②一旦集成后包含多种错误,难以纠正。
4. 自顶向下和自底向上集成方法
驱动程序/驱动模块(driver),用以模拟被测模块的上级模块。驱动模块在集成测试中接受测试数据,把相关的数据传送给被测模块,启动被测模块,并打印出相应的结果。
桩程序/桩模块(stub),也有人称为存根程序,用以模拟被测模块工作过程中所调用的模块。桩模块由被测模块调用,它们一般只进行很少的数据处理,例如打印入口和返回,以便于检验被测模块与其下级模块的接口。
1. 自顶向下法 ( Top-down Integration )
自顶向下法,从主控模块(主程序)开始,沿着软件的控制层次向下移动,逐渐把各个模块结合起来。
组装过程可以采用深度优先策略和宽度优先策略
-
深度优先:从最顶层单元开始,持续向下到下一层,选择一个分支,自顶而下一个一个的集成这条分支上的所有单元,直到最底层,然后转向另一个分支,重复这样的集成操作直到所有的单元都集成进来。
-
广度优先:从最顶层单元开始,持续向下到下一层, 一个个完成下一层上所有单元集成后,再转向下面一层,重复这样的集成操作直到所有的单元都集成进来。
1. 自顶向下增量测试
自顶向下集成测试的整个过程由3个步骤完成:
-
主控模块作为测试驱动器。
-
根据集成的方式(深度或广度),下层的桩模块一次一次地被替换为真正的模块。
-
在每个模块被集成时,都必须进行单元测试。 重复第2步,直到整个系统被测试完成。
自顶向下法——优缺点
优点:
不需要测试驱动程序;
能够在测试阶段的早期实现并验证系统的主要功能;
能在早期发现上层模块中的接口错误。
缺点:
需要桩程序,要使桩模块能够模拟实际子模块的功能十分困难;
底层验证被推迟; 同时涉及复杂算法,真正输入/输出的模块一般在底层,
他们是最容易出问题的模块,到测试和集成的后期才遇到这些模块,一旦发现问题导致过多的回归测试。
自顶向下增量式集成适用范围:
-
产品控制结构比较清晰和稳定;
-
高层接口变化较小;
-
底层接口未定义或经常可能被修改;
-
产口控制组件具有较大的技术风险,需要尽早被验证;
-
希望尽早能看到产品的系统功能行为。
2. 自底向上法 ( Bottom-up Integration )
自底向上法,测试从原子模块(软件结构最底层的模块)开始集成以进行测试。自底向上进行集成和测试时,需要为所测模块或子系统编制相应的驱动模块。
自底向上增量式集成测试步骤:
起始于模块依赖关系树的底层叶子模块,也可以把两个或多个叶子模块合并到一起进行测试
使用驱动模块对步骤1选定的模块(或模块组)进行测试
用实际模块代替驱动模块,与它已测试的直属子模块组装成一个更大的模块进行测试
重复上面的行为,直到系统最顶层模块被加入到已测系统中
自底向上法——优缺点
与自顶向下法刚好相反。
优点:
-
不需要桩程序;
-
同时由于涉及到复杂算法和真正输入/输出的模块最先得到集成和测试,可以把最容易出问题的部分在早期解决;
-
自底向上增值的方式可以实施多个模块的并行测试,提高测试效率。
缺点:
-
“程序一直未能作为一个实体存在,直到最后一个模块加上去后才形成一个实体”。也就是说,在自底向上集成和测试的过程中,对主要的控制直到最后才接触到。
-
驱动的开发工作量大;
自底向上增量式集成适用范围:
适用范围:
-
适应于底层接口比较稳定;
-
高层接口变化比较频繁;
-
底层组件较早被完成。
3. 混合策略 ( Modified Top-down Integration )
混合法:对软件结构中较上层,使用的是“自顶向下”法;对软件结构中较下层,使用的是“自底向上”法,两者相结合。
4. 三明治集成方法 ( Sandwich Integration )
-
混合式集成
-
把系统划分成三层,中间一层为目标层,目标层之上采用自顶向下集成,之下采用自底向上集成
集成步骤
-
首先对目标层之上一层使用自顶向下集成,因此测试A,使用桩代替B,C,D
-
其次对目标层之下一层使用自底向上集成,因此测试E,F,使用驱动代替B,D
-
其三,把目标层下面一层与目标层集成,因此测试(B,E),(D,F),使用驱动代替A
-
最后,把三层集成到一起,因此测试(A,B,C,D,E,F)
优缺点分析
优点: 集合了自顶向下和自底向上两种策略的优点
缺点: 中间层测试不充分,在真正集成之前每一个独立的模块没有完全测试过。
适用范围: 适应于大部分软件开发项目
5. 持续集成
-
通常系统集成都会采用持续集成的策略,软件开发中各个模块不是同时完成,根据进度将完成的模块尽可能早的进行集成,有助于尽早发现Bug,避免集成中大量Bug涌现。
-
而且容易定位Bug、修正Bug,最终提高软件开发的质量与效率。
6. 集成测试流程
集成测试主要由系统部的系统设计人员、软件评测部完成,开发人员也参与集成测试。集成测试相对来说是挺复杂的,而且对于不同的技术、平台和应用差异也比较大,更多是和开发环境融合在一起。集成测试所确定的测试的内容,主要来源于设计模型。
集成测试流程
1. 集成测试计划
输入 :需求规格说明书、概要设计文档、 产品开发计划路标
输出:集成测试计划
活动步骤
-
确定被测试对象和测试范围
-
评估集成测试被测试对象的数量及难度,即工作量
-
确定角色分工和划分工作任务
-
标识出测试各阶段的时间、任务、约束等条件
-
考虑一定的风险分析及应急计划
-
考虑和准备集成测试需要的测试工具、测试仪器、环境等资源
-
考虑外部技术支援的力度和深度,以及相关培训安排
-
定义测试完成标准
2. 集成测试分析和设计
集成测试分析和设计
集成测试分析和设计的主要目的是制定测试大纲(测试方案)。集成测试大纲规定了今后的集成测试内容、测试方法以及可测性接口,以后所有集成测试均在该大纲的框架下进行,所以,制定一份完善的集成测试大纲非常重要。
输入:需求规格说明书 概要设计 集成测试计划
输出:集成测试设计方案
活动步骤
-
被测对象结构分析
-
集成测试模块分析
-
集成测试接口分析
-
集成测试策略分析
-
集成测试工具分析
-
集成测试环境分析
-
集成测试工作量估计和安排
3. 实施阶段
输入:需求规格说明书 概要设计 集成测试计划 集成测试设计
输出:集成测试用例 集成测试规程 集成测试代码、集成测试脚本、集成测试工具(如果有)
活动步骤
-
集成测试用例设计
-
集成测试规程设计
-
集成测试代码设计(如果需要)
-
集成测试脚本(如果需要)
-
集成测试工具(如果需要)
4. 执行阶段
输入
-
需求规格说明书
-
概要设计
-
集成测试计划
-
集成测试设计
-
集成测试用例
-
集成测试规程
-
集成测试代码(如果有)
-
集成测试脚本(如果有)
-
集成测试工具(如果有)
-
详细设计
-
代码
-
单元测试报告
输出
-
集成测试报告
活动步骤
-
执行集成测试用例
-
回归集成测试用例
-
撰写集成测试报告
相关文章:

【实际开发18】- 静态 3
目录 1. 调试与评估 2. 单元测试的管理 1. 单元测试的文档 3. 系统集成的模式与方法 1. 集成测试前的准备 2. 集成测试的模式 3. 大棒集成方法 ( Big-bang Integration) 4. 自顶向下和自底向上集成方法 1. 自顶向下法 ( Top-down Integration ) 2. 自底向上法 ( Bott…...

【swagger2】开发api文档
文章目录一、swagger2 简介背景Open API ???swagger2的作用swagger2常用工具组件:二、Springfox三、springBoot使用swagger2(简单示例)四、Swagger-UI使用五、配置文件1、配置类:给docket上下文配置api描述信息2、配置类&#…...

Github 上如何提交 pull request
什么是复刻(forking)? 我们可以通过复刻操作将喜爱的仓库保存自己的Github账户中,以便独立地对其进行操作。 通过复刻,我们可以得到包含完整版本历史的目标仓库的实例,之后可以对复刻得到的仓库进行任意操作而不会影响…...

Redis面试知识
概述 Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。 键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。 Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能…...

Spring面试重点(四)——Spring事务
Spring事务 事务的方式 spring中使用事务有两种方式,一种是编程式事务,一种是声明式事务。编程式事务推荐使用TransactionTemplate,实现TransactionCallback接口,需要编码实现;声明式事务只需要在函数增加注解Transa…...
♡ — MySQL 存储引擎
MySQL 存储引擎架构 MySQL 存储引擎采用的是插件式架构,支持多种存储引擎,我们甚至可以为不同的数据库设置不同的存储引擎以适应不同场景的需要;存储引擎是基于表的,而不是数据库。 MyISAM 和 InnoDB 的区别 MySQL 5.5 之前&am…...

大数据技术架构(组件)34——Spark:Spark SQL--Optimize
2.2.3、Optimize2.2.3.1、SQL3.3.1.1、RB1、Join选择在Hadoop中,MR使用DistributedCache来实现mapJoin。即将小文件存放到DistributedCache中,然后分发到各个Task上,并加载到内存中,类似于Map结构,然后借助于Mapper的迭…...

Zookeeper实现分布式锁
文章目录ZK节点类型watch监听机制Zookeeper实现分布式锁锁原理创建锁的过程释放锁的过程ZK锁的种类代码实现Zookeeper是一个开源的分布式协调服务,是一个典型的分布式数据一致性解决方案。 分布式应用程序可以基于Zookeeper实现诸如数据发布/订阅,负载均…...
MFC 添加重新启动管理器支持
重启管理器是添加到 Visual Studio for Windows Vista 或更高版本操作系统的功能 如果发生意外关闭或重启,重新启动管理器将为你的应用程序添加支持。 重新启动管理器的行为取决于应用程序的类型。 如果你的应用程序是文档编辑器,则重新启动管理器让应用…...

一文带你深刻的进入Python,并且了解Python的优缺点
最近几年Python被吹的神乎其神,很多同学都不清楚Python到底能干什么?就盲目去学习Python,今天我就Python的应用领域来简单盘点一下,让想学习Python 的同学找对方向不迷茫。 2. Python 的特点 这里就谈谈自己的看法,首先 Python是…...

别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(4)
别具一格,独此一家,原创唯美浪漫情人节表白专辑 不一样的惊喜哦~!(html5,css3,svg)表白爱心代码(复制就可用)(4) 目录 款式四:时光的记忆款 1、拷贝完整源代码 2、更新时光盒所…...

编译原理—翻译方案、属性栈代码
系列文章戳这里👇 什么是上下文无关文法、最左推导和最右推导如何判断二义文法及消除文法二义性何时需要消除左递归什么是句柄、什么是自上而下、自下而上分析什么是LL(1)、LR(0)、LR(1)文法、LR分析表LR(0)、SLR(1)、LR(1)、LALR(1)文法之间的关系编译原理第三章习…...

链表
一、从尾到头打印链表题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。解题思路:使用栈作为中转,可以实现倒置打印classSolution { public:vector<int> printListFromTailToHead(ListNode* head){//使用栈完成中…...
CSS 样式优先级
CSS 样式优先级决定了最终呈现在浏览器中的样式是哪一组样式,在多组样式中有冲突时,最终呈现在浏览器中的样式是具有最高优先级的样式。 CSS 样式优先级顺序如下: 内联样式 > 内部样式 > 外部样式 !important > 内联样式 > ID…...
SpingMVC获取请求参数
通过ServletAPI获取请求参数将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象。html<form th:action"{/param/servletAPI}" method"post">用户名:<input ty…...

微搭使用笔记(二)微搭低代码平台介绍及基础使用
概述 官网地址: 官网 官方文档: 官方文档 FAQ: FAQ 腾讯云微搭低代码是一个高性能的低代码开发平台,用户可通过拖拽式开发,可视化配置构建 PC Web、H5 和小程序应用。支持打通企业内部数据,轻松实现企业微信管理、工…...

CountDownLatch的定义、使用 、原理
一、定义 CountDownLatch的作用很简单,就是一个或者一组线程在开始执行操作之前,必须要等到其他线程执行完才可以。我们举一个例子来说明,在考试的时候,老师必须要等到所有人交了试卷才可以走。此时老师就相当于等待线程ÿ…...

《Terraform 101 从入门到实践》 Terraform在公有云Azure上的应用
《Terraform 101 从入门到实践》这本小册在南瓜慢说官方网站和GitHub两个地方同步更新,书中的示例代码也是放在GitHub上,方便大家参考查看。 简介 Azure是微软的公有云,它提供了一些免费的资源,具体可以查看: https:/…...

别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(3)
别具一格,原创唯美浪漫情人节表白专辑, (复制就可用)(html5,css3,svg)表白爱心代码(3) 目录 款式三:心形实时显示认识多长时间桃花飞舞(猫咪)款 1、拷贝完整源代码 2、拷贝完整js代码 3、修改时间 4、…...
Linux 删除修改日期大于某一天的文件
在服务器运维过程中,我们往往会产生大量的日志文件. 如果日志文件命名能看出日志产生的时间,这些文件是很好删除的. 但有时,我们可能有成千上万的没有命名规律日志文件 下面的方法可以根据日志最后修改时间 批量删除这些文件 先给出完整命令: find /mydir -mtime 10 -name &…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...

uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...