软件工程 系列为本学期(2020春季)软件工程以及软件工程实践课程笔记整理~

转眼间6月份快要到来了,考试要临近了~


问题:一个软件经过各种测试后没问题,但到用户电脑上无法运行,给出解决方案?(预计会成为今年的考试题,嘿嘿哈嘿,自己猜的)

系统集成:将模块中各自的数据结构、彼此之间不能识别的数据等进行系统地联合与测试,使得信息能够在模块之间相互流通。

软件测试:利用测试技术尽可能多得发现软件中存在的错误,发现软件的功能、性能等与实际需求不相符之处,通过测试,让软件中存在的错误在交付给用户之前暴露无遗,从而交付给用户一个质量可靠、性能良好的软件。


目录

一、系统集成

二、系统测试

三、黑盒测试

(一)等价类划分法

(二)边界值分析法

(三)错误推测法

(四)因果图法

四、白盒测试

(一)逻辑覆盖法

(二)基本路径测试

五、软件测试过程

(一)单元测试

(二)集成测试

(三)确认测试

(四)系统测试

六、软件应用测试


一、系统集成

1.系统集成基本概念

(1)通过结构化综合布线系统和计算机网络技术,将各个分离的设备(计算机、传感器等)和信息(软件模块)集成到相互关联的、统一和协调的系统之中;使资源充分共享,实现集中、高效和便利的管理;

(2)系统集成应该采用功能集成、网络集成、软件界面集成等多种集成技术;

(3)系统集成应综合利用各种计算机网络相关技术,适当选择各种软、硬件设备,经过相关人员的集成设计、安装调试、应用开发等大量技术性工作和相应的管理及商务性工作,使集成后的系统能满足用户对实际工作的需求,形成一个具有良好性能和适当性价比的计算机网络系统。

2.系统集成包括设备系统集成和应用系统集成两个方面

(1)设备系统集成:以搭建组织机构内的信息化管理支持平台为目的,利用综合布线技术、楼宇自控技术、通信技术、网络互联技术等将相关设备和软件进行集成设计、安装调试、界面定制开发和应用支持的行为。

(2)应用系统集成:从为客户提供高性能系统应用的角度,提出及实现系统模式的具体技术和运作方案,即为客户提供一个全面的系统解决方案。

3.系统集成的特点:

(1)以满足用户的需求为根本的出发点

(2)系统集成不是选择最好的产品的简单行为,而是选择最适合用户需求和投资规模的产品和技术

(3)不是简单的设备供货,体现更多的是设计、调试与开发的技术和能力

(4)包含技术、商务和管理等方面,是综合性的系统工程:技术是核心,管理和商务活动是系统集成项目成功实施的可靠保障

(5)性价比的高低是评价集成项目设计是否合理和实施是否成功的重要参考因素

二、系统测试

1.软件测试:是发现错误的重要手段,能够发现分析和需求阶段产生的多数错误,是取得高可靠软件质量的重要措施之一。

2.软件测试的目的:以较小的代价发现软件中存在的错误

3.软件测试原则

(1)穷尽测试是不可能的:软件测试时抽样测试,满足一定的测试出口准则时应当终止;根据测试的风险和优先级控制工作量

(2)测试应该贯穿于软件生命周期的始终,并尽早测试:测试的准备和设计在编码之前开始;开发过程的每个阶段通过测试保证该过程产品的质量;越到测试后期,为修复缺陷付出的代价越大

(3)缺陷具有集群特性:Pareto原则表明80% 的错误集中在20%的程序模块中

(4)杀虫剂悖论:同样的测试用例被反复执行时,发现缺陷的能力会越来越差-->评审和修改测试用例

(5)没有失效不代表系统可用:即使测试没有发现任何缺陷,也不能证明软件完全正确;如果系统无法使用或者不满足用户的需求和期望,研发就是失败的

(6)测试的标准是用户的需求

(7)尽早定义产品的质量标准:建立质量标准,根据测试的结果,对产品的质量进行分析和评估

(8)可以由第三方或者独立的测试团队完成

4.软件的可测试性

(1)测试过程便于对软件的内部状态进行控制-->可控性

(2)通过测试能够对软件的内部状态进行观测-->可观测性

即对软件进行测试时信息获取的难易程度

软件可测试性的一个重要原则为技术文档的完整,并根据设计变化而及时更新

尽早确定用户接口和特征集,使软件的变化很少而且可控

5.测试用例的设计

(1)测试用例:软件测试过程中为了实现特定的测试目的而设计的一组测试输入、执行条件和预期的输出结果,以便测试某个程序是否满足特定需求

(2)测试用例的设计原则:

  • 正面测试和方面测试条件下的测试

    • 正面测试:代表预期的条件,核实行为是否正确或者符合预期
    • 负面测试:代表不可接受的、异常的或者意外的条件
  • 单元测试中,主要的输入应该是被测单元的设计文档
  • 测试用例用来确定测试目标中所有的产品需求行为,每个测试用例说明或者代表唯一的输入集或事件顺序,产生唯一的测试目标行为

6.测试分类

(1)是否执行软件程序

  • 静态测试:不运行被测试的程序本身,仅分析检查源程序的语法、结构、接口等来检查程序的正确性
  • 动态测试:运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能

(2)软件开发过程的角度

  • 需求测试:充分发现需求中不完善和不严密的地方;常使用静态测试,同行评审是有效的拍错手段之一
  • 单元测试(模块测试):在编码完成之后对软件设计的最小单位——程序模块,进行正确性检验的测试工作
  • 集成测试:在单元测试完成的基础上,将所有的模块按照设计要求组装成系统后进行的测试
  • 确认测试:在集成测试的基础上,测试软件是否满足用户需求;由软件开发人员、质量保证人员和用户参与
  • 系统测试:在实际运行环境下,对计算机系统进行一系列组装和确认测试

三、黑盒测试

黑盒测试:在程序接口上进行软件功能测试,给定正确的输入,测试能否产生正确的输出;需要测试合法和不合法的输入数据;黑盒测试只能采用有限的输入作为测试,因此使用测试用例将测试的行为具体量化。

(一)等价类划分法

1.等价类划分:将程序的输入域划分成若干子集合,即把全部的输入数据合理划分成若干等价类,在每一个等价类中取一个或者几个有代表性的数据作为测试的输入条件,用少量有代表性的测试数据取得较好的测试结果

有效等价类:合理的、有意义的输入数据

无效等价类:输入无效的数据

2.设计测试用例

确定有效等价类和无效等价类

设计一个测试用例,尽可能覆盖尚未被覆盖的有效等价类

设计一个测试用例,仅覆盖一个尚未被覆盖的无效等价类

(二)边界值分析法

1.边界值分析法

  • 对输入数据的边界值进行输入和输出检测,测试用例来自有效等价类的边界数据
  • 是等价类划分的一种特殊情形,更加注重将等价类中的边界数值作为输入数据来检查,可以结合二者

2.设计原则

  • 输入数值的范围:选择刚达到这个范围边界的值、刚超过这个范围边界的值
  • 值的个数:选择最大个数、最小个数、比最小个数少1、比最大个数多1的数值作为测试数据
  • 输入输出域是有序集合:选择集合的第一个元素和最后一个元素
  • 内部数据结构:选择边界上的值作为测试用例

(三)错误推测法

通过经验和知识推断错误的所在之处,基于经验和知觉推测程序中所有可能存在的各种错误,从而有针对性的设计测试用例,可以作为一种辅助的测试手段

(四)因果图法

考虑输入到条件之间的相互结合,利用图解法分析输入组合的情况,从而设计测试用例

1.因果关系

恒等关系:C1存在则E1产生

非关系:C1存在则E1不产生

或关系:原因C1 C2 或者 C3存在,E1产生

与关系:原因C1和C3同时存在,E1 产生

2.约束条件——输入 输出的约束

  • 输入条件的约束

    • E关系(异):a b不同时为1
    • I关系(或):a b c不同时为0 至少有一个为1
    • O关系(唯一):a和b同时有且仅有一个为1
    • R关系(要求):a为1时b必须为1
  • 输出条件约束
    • M关系(强制):a为1则b强制为0

3.设计测试用例

  • 找出原因(输入条件或者输入条件的等价类)和结果(输出条件),并赋予标识符
  • 找出原因-结果、原因-原因之间的对应关系,画因果图
  • 标明不可能出现的组合情况
  • 转化为判定表
  • 针对判定表的每一列,设计测试用例

四、白盒测试

1.白盒测试:把测试对象看做透明的盒子,测试人员依据程序内部的逻辑结构设计测试用例,测试程序所有的逻辑路径

2.白盒测试是一种穷举测试,但是及时对所有路径进行了测试,错误仍然可能出现

  • 不能差出违反设计规范的错误
  • 无法发现遗漏路径出现的错误
  • 不能发现与数据相关的错误

3.白盒测试针对程序模块:

  • 保证独立路径至少被使用一次
  • 所有逻辑值:测试其为真和假的情况
  • 在上下边界以及可操作范围内运行所有循环语句
  • 检查内部数据结构保证有效性

(一)逻辑覆盖法

1.语句覆盖:每条语句至少执行一次;没有办法测试隐藏的条件和可能到达的隐式逻辑分支

2.判定覆盖:每个判定的每个分支至少执行一次,即每个判定有一次真、有一次假

3.条件覆盖:每个判定的每个条件取到各种可能的值,即每个条件有一次真、有一次假;条件覆盖并不能保证判定覆盖

4.判定-条件覆盖:判定语句中的每个条件的所有可能结果至少出现一次,同时每个判定本身的所有可能结果也至少出现一次

5.条件组合覆盖:每个判定中各个条件的每一种组合至少出现一次

(二)基本路径测试

1.基本路径测试是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,根据该集合设计的测试用例保证在测试中程序的每个可执行语句至少执行一次,同时判定条件也分别执行TRUE和FALSE一次。

2.基本路径测试的步骤:

  • 画控制流图(注意不是程序流程图)

    • 由圆圈和箭头组成:圆圈表示程序流程图中的一条或者多条语句
    • 基本元素

  • 计算环复杂度-->为程序逻辑复杂性提供测度的软件度量,计算程序基本路径的数目

    • =控制流图中区域的数量
    • =边-结点+2
    • =判定结点+1  所谓判定结点:包含条件的节点
  • 确定线性独立路径的基本组合,独立路径:一个程序语句的集合或者至少包含一条在定义该路径之前没有用过的边
  • 根据独立路径进行测试用例设计

五、软件测试过程

软件测试贯穿于软件过程的每一个阶段,不同阶段采用不同的测试策略-->尽早发现软件中可能存在的错误。

(一)单元测试

1.依据详细设计描述,对程序模块(软件设计的最小单位)进行正确性检验,采用白盒测试技术,对模块内重要的控制路径设计测试用例;单元测试通常在编码阶段完成

2.单元测试的内容

  • 模块接口测试:输入 输出参数等
  • 局部数据结构测试:数据类型说明、默认值等
  • 路径测试:对模块中主要的执行路径执行测试,包括处于重要位置的执行路径(完成单元功能的算法、控制、数据处理的等)和控制较复杂而易出错的路径
  • 错误处理测试:对程序运行中出现错误的处理方法
  • 边界测试:数据流、控制流中刚好等于、大于或者小于确定的比较值

3.单元测试的方法

单元测试在编码阶段进行

源程序代码编制完成-->评审 验证无语法错误-->根据设计文档设计测试用例-->验证程序功能

设计上层驱动模块和下层支持模块,单元测试需要驱动模块、支持模块的协同工作才能完成模块测试工作

(二)集成测试

1.集成测试:使得功能和性能完整的模块组合在一起仍然具有良好软件性能的测试技术,主要用于发现与接口有关的问题

2.模块组装成程序:

  • 非渐增式测试:分别测试所有的模块,然后将其结合成所要的程序
  • 渐进式测试:
    • 把下一个要测试的模块同已经测试好的模块结合起来进行测试,每次增加一个;
    • 容易定位和改正错误,对接口可以进行更彻底的测试
    • 集成测试时普遍采用

3.渐进测试的两种形式:

(1)自顶向下

  • 从主控模块开始,沿着程序的控制层次逐层向下移动,进行测试后把各个模块结合起来
  • 采用深度优先(将一条主控制通路上的模块进行组合)或者广度优先(逐层结合所有同一水平线上的模块)的策略
  • 基本过程:
    • 测试主控模块,使用直接从属于主控模块的模块模拟程序代替所有子模块
    • 根据深度或者广度优先,选择一个实际的模块代替一个模拟程序
    • 在结合一个新模块的同时进行测试
    • 回归测试
  • 特点
    • 支持错误隔离、较早发现程序主要控制点和决策点
    • 失去了在特定的测试和组装特定的模块之间的精确对应关系

(2)自底向上:从软件结构的最底层模块开始组装和测试

  • 过程:

    • 低层模块组合-->实现特定软件子功能的簇
    • 针对每个簇,编写驱动程序
    • 测试子功能簇
    • 沿着软件结构自下向上移动,把子功能簇组合起来
  • 特点:也支持错误隔离,但是对于重大错误问题往往到最后测试环节才发现

4.回归测试

  • 修改了旧代码后,重新进行测试以确认修改没有引入新的错误或者导致其他代码产生错误
  • 首要考虑:测试覆盖范围大 花费时间少
  • 方法:再测试所有用例、基于风险进行选择、只测试修改过的部分

5.烟幕测试

  • 每天自动编译并进行测试,观察编译好的产品以确认每天的编译结果是否成功
  • 意义:最小化集成的风险 减少产品低质量的风险 简单化错误诊断 鼓舞士气

(三)确认测试

1.概念

经过集成测试,得到了完整的软件系统

确认测试:根据需求规格说明书中描述的软件有效性准则进一步验证软件的功能和性能是否与用户的要求一致

重点考虑:软件是够满足合同规定的功能和性能、文档资料是否完整、准确、人机交互界面等是否令用户满意

2.内容

  • 软件配置复查:配置的各个成分齐全
  • 验收测试  α β测试
    • α测试:用户在开发环境下进行测试、公司内部用户在模拟的实际操作环境下进行测试
    • β测试:多个用户在实际使用环境下进行测试   开发者无法控制的环境下

(四)系统测试

1.系统测试:交付给用户之前最后测试阶段,结合计算机软件、硬件、外设、网络等进行各种组装测试和确认测试,是基于整体需求规格说明书的黑盒测试

2.包括

  • 压力测试:模拟应用的软、硬件环境以及系统负荷,长时间或者超大负荷地运行测试软件-->测试系统的性能、可靠性和稳定性
  • 容量测试:软件系统应用特征的某项指标的极限值
  • 性能测试:是否达到需求规格说明书中规定的性能指标,如响应时间等;与压力测试结合
  • 安全测试:验证系统的安全等级 识别潜在的安全性缺陷
  • 容错测试:检查容错能力,在异常条件下自身是否具有防护性措施或者抗灾手段-->针对异常数据操作、灾难恢复

六、软件应用测试

1.测试环境:硬件环境(服务器、客户端、网络连接设备、辅助硬件设备等)、软件环境(操作系统 数据库等)

2.确定软件的测试环境

  • 所需的计算机数量、硬件配置要求
  • 部署被测应用的服务器的操作系统、数据库等
  • 保存测试过程文档和数据的服务器的环境
  • 执行被测试工作的计算机的环境
  • 专门的计算机:备份被测应用服务器和测试管理服务器的环境
  • 所需软件:文档编写、测试管理系统、性能测试工具、缺陷跟踪管理系统
  • 初始化系统的各项数据

3.测试环境的管理

  • 设置专门的测试环境管理员-->管理和监控测试环境
  • 管理测试环境所需的文档:软硬件安装手册、被测应用的发布手册、测试环境备份恢复手册
  • 管理测试环境的访问权限
  • 测试环境的变更管理
  • 备份和恢复

总结一下这一章的主要内容

1. 掌握黑盒、白盒测试的主要方法,黑盒测试如等价类划分、边界值分析,以及因果图的画法;白盒测试主要是基本路径测试。

2. 掌握软件测试的几个过程,从模块测试到集成测试、确认测试和系统测试

3. 注意软件测试环境的管理,开头的问题是老师上课的时候提出的,可能的原因之一是因为客户的本地环境出现问题导致系统不能正常使用

4.有个好奇的想法,大的软件公司在进行软件开发时,现在都会采用哪些主流的测试方法呢?复杂的测试不会影响项目的进度吗?希望这些基本的理论有一天可以得以实践

软件工程 | 第六章 系统集成与测试相关推荐

  1. 十六章、渗透测试(千峰网络安全300课时笔记)

    十六章.渗透测试 引言:千峰网络安全300课时学习,视频学习过程中的学习笔记.笔记中借鉴了CSDN博主「beglage」文章中的图片记录,感谢千峰网络的视频和beglage博主的博文笔记记录分享. B ...

  2. 软件工程 第六章:状态图

    第六章:状态图 概述 状态图定义:状态图描述了一个对象或交互过程在它的生命周期中对**一系列外界激励的所呈现出的不同状态以及它相应的响应和活动.**状态图描述了一个状态机. 状态机定义:根据当前事件, ...

  3. (软件工程复习核心重点)第六章实现和测试习题

    文章目录 选择题 填空题 名词解释 简答题 画图/应用题 选择题 填空题 编码风格需要考虑的5个方面 程序内部的文档 数据说明 语句构造 输入输出 效率 单元测试的测试重点 模块结构 局部数据结构 重 ...

  4. (软件工程复习核心重点)第六章实现和测试-第七节:黑盒测试

    文章目录 一:概念 (1)目的 (2)适用性 (3)设计测试方案时需要考虑的问题(了解) (4)测试用例的标准 二:技术方法 (1)等价类划分法 A:定义 B:目的 C:流程 ①:划分数据的等价类 ② ...

  5. (软件工程复习核心重点)第六章实现和测试-第六节:白盒测试

    文章目录 一:逻辑覆盖 (1)定义 (2)分类 二:控制结果测试 (1)基本路径测试 A:定义(了解) B:步骤(了解) (2)条件测试(了解) A:关系表达式 B:条件错误的类型 C:条件测试的优点 ...

  6. (软件工程复习核心重点)第六章实现和测试-第五节:确认测试

    文章目录 一:概念 二:确认测试的范围(了解) (1)要求 (2)结果 三:软件配置复查(了解) (1)目的 (2)要求 四:Alpha测试Beta测试 (1)Alpha测试 (2)Beta测试 一: ...

  7. (软件工程复习核心重点)第六章实现和测试-第四节:集成测试

    文章目录 一:概念 (1)方法分类 (2)非渐增测试的缺点(了解) (3)渐增测试的优点(了解) 二:渐增式测试策略 (1)自顶向下集成 A:定义 B:步骤(了解) C:结合策略(了解) ①:深度优先 ...

  8. (软件工程复习核心重点)第六章实现和测试-第三节:单元测试

    文章目录 一:概述 二:测试重点(了解) (1)模块结构 (2)局部数据结构 (3)重要的执行通路 (4)出错处理通路(了解) (5)边界条件 三:测试方法 (1)代码审查 A:定义(了解) B:流程 ...

  9. (软件工程复习核心重点)第六章实现和测试-第二节:软件测试基础

    文章目录 一:软件测试的目标(了解) 二:软件测试准则(了解) 三:软件测试方法 (1)黑盒测试(功能测试) (2)白盒测试 四:软件测试步骤 (1)单元测试(模块测试) (2)子系统测试 (3)系统 ...

最新文章

  1. python 人脸识别_手把手教你用python实现人脸识别,识别率高达99.38%
  2. spring入门详细教程(五)
  3. python list 换位置_【已解决】Python中把list换成set
  4. 如何提高自己的思维逻辑能力?
  5. ASP.NET Core 中是否有 PostAsJsonAsync() 方法?
  6. IP-GUARD内网安全监管系统
  7. 计算机怎么把硬盘分成几个,如何把电脑的一个盘的容量分给另外一个盘
  8. Redhat之package管理--学点 YUM和RPM
  9. 死磕单点登录的实现原理....
  10. iphone pop服务器没有响应,iPhone 6 Plus跳屏或者触摸失灵的解决办法
  11. VGA接口和HDMI接口有什么区别
  12. pytorch 安装教程
  13. java 当前周_优化java获取当前系统时间属于第几周(时间段)
  14. windows错误代码
  15. 计算机专业英语朱龙主编,计算机专业英语(高职高专计算机系列)
  16. internet时间同步服务器地址(中国国家授时中心)
  17. 【负荷预测】布谷鸟(CS)算法优化BP神经网络的负荷及天气预测(Matlab代码实现)
  18. uni-app—使用vscode创建小程序项目(图文)
  19. 益世科生物冲刺港交所上市:业绩持续增长,IPO前紧急“套现”
  20. 武汉公办专科学校以计算机为特长,专业计算机技术公办学校

热门文章

  1. 控制台报错For input string: ““、empty String
  2. Spring Festival
  3. 二维泊松方程求解--点迭代法
  4. 32位通用寄存器ESP、EIP、EAX、EBX、ECX、EDX,在OD里操作这些寄存器
  5. Kubernetes系列(一)基于CentOS8部署Kubernetes1.19集群
  6. 中金环境携手海通安恒,启动SAP二期项目
  7. 【可视化开发】数据大屏可视化技术汇总
  8. 显示杂谈(2)为啥选择gamma2.2
  9. c语言合并两个顺序表算法,顺序表的两种合并操作(C语言)
  10. 有一个已经排好序的数组,今输入一个数,要求按照原来排序的规律将它插入数组中