软件测试学习

学习软件测试

软件测试的目的

用户的角度 暴露软件中隐藏的错误和缺陷
软件开发者的角度 表明软件产品中不存在错误

软件测试的定义

通过经济、高效的方法,捕捉软件中的错误,从而达到保证软件内在质量的目的

软件测试对应软件开发各阶段的工作

项目规划阶段:负责整个测试阶段的监控。
需求分析阶段:确定测试需求分析,制定系统测试计划。
概要设计和详细设计阶段:制定集成测试计划和单元测试计划。
程序编写阶段:开发相应的测试代码或测试脚本。
测试阶段:实施测试,并提交相应的测试报告。

软件开发过程模型

通用过程模型
惯用过程模型:
传统过程模型、瀑布模型、增量过程模型、演化过程模型、原型开发、螺旋模型、协同开发模型、协同过程模型
专用过程模型
V模型:
每一测试阶段的前提和基础是对应开发阶段的文档
在这里插入图片描述

W模型
由两个V型结构组成,分别代表测试与开发过程,每一个开发过程对应一个测试过程
在这里插入图片描述

H模型
在这里插入图片描述

二、软件测试技术

静态测试的两种技术

• 评审:

作用:
提高质量、降低成本、加快进度、提升能力
类型:
需求评审、概要设计评审、详细设计评审、数据库设计评审、测试评审

• 静态分析

类型:
控制流分析
通过分析程序去发现每一过程内控制流层次结构
数据流分析
一组用来获取有关数据如何沿着程序执行路径流动的相关信息的技术
代码检查
由程序员和测试员组成审查小组,通过阅读讨论分析技术对程序进行静态分析的过程

动态测试的两种技术

• 白盒测试 (看题)

逻辑覆盖法:
语句覆盖:程序中每个可执行语句至少都能被执行一次。
判定覆盖(分支覆盖): 程序中每个判定至少都获得一次“真”值和“假”值。
条件覆盖:判定中的每个条件获得各种可能的结果。
判定/条件覆盖: 判定中每个条件取到各种可能的值,并使每个判定取到各种可能的结果。
条件组合覆盖: 每个判定中条件的各种可能组合都至少出现一次。
路径覆盖:所有可能路径至少都走一遍
在这里插入图片描述

基本路径法:
画出控制流图
计算圈复杂度
导出测试用例
准备测试用例

– 如何设计测试用例,达到制定覆盖标准
点覆盖
在这里插入图片描述

边覆盖
在这里插入图片描述

主路径覆盖

• 黑盒测试

– 4种方法 (看题)
等价划分法:大题
边界值分析:
错误推测法:
因果图:判断表
基于质量特征的测试

• 功能测试

定义
对产品的各功能进行验证,根据功能测试用例逐项测试,检查产品是否达到用户要求的功能

• 14种非功能性测试:定义、指标、问题(背:列举8种)

性能测试:
检验软件是否达到需求规格说明书中规定的各类性能指标,并满足一些性能相关的约束和限制条件
压力测试:
在保证系统不崩溃的前提下,用于评价系统超过所描述的需求或资源限制时的情况
容量测试(Volume):
采用特定的手段,检测系统能够承载处理任务的极限值所进行的测试工作
健壮性测试( Robustness ):
当出现故障时,系统是否能够自动恢复或忽略故障继续运行
安全性测试:
检查系统对非法侵入的防范能力(发现软件系统中是否存在安全漏洞)
可靠性测试:
是在给被测试系统加载一定业务压力的情况下,使系统运行一段时间,以此来测试系统是否稳定
恢复性测试:
检查系统的容错能力;当系统出错时,能否在指定时间间隔内修正错误并重新启动系统
兼容性测试:
检查软件之间是否能够正确地进行交互和共享信息

• 软件缺陷

缺陷特点
雪崩效应
成本放大效应
集群效应

来源
疏忽造成的错误(Carclessness Defect,CD)
不理解造成的错误(Misapprehend Defect,MD)
二义性造成的错误(Ambiguity Defect,AD)
遗漏造成的错误(Skip Defect,SD)

基于缺陷分类的测试规则
规则1:发现的缺陷的数量说明不了软件的质量
规则2:缺陷要分类统计
规则3:不要指望找出软件中所有的缺陷
规则4:只依赖缺陷的趋势也可能有问题

三、软件测试过程(问答、名词解释、选择)

单元测试:对每一个程序模块进行,以确保每个模块能正常工作。白盒
集成测试:把已测试过的模块组装起来,形成一个完整的软件后进行测试,以检测和排除与软件 设计相关的程序结构问题。黑盒
确认测试:以规格说明书规定的需求为尺度,检验开发的软件能否满足所有的功能和性能要求。
系统测试:为了验证开发的软件是否能与系统的其他部分(如硬件、数据库及操作人员)协调工作
验收测试:验证系统的功能、性能等特性是否符合需求规格说明

软件测试过程

各个测试阶段、各阶段的主要工作
1、测试计划阶段
制定测试方案、测试策略、测试计划,测试的组织
2、测试设计阶段
建立测试配置、测试用例设计
3、测试执行阶段
创建测试任务、执行测试任务、处理软件问题报告
4、测试监控阶段
记录、分析
5、测试结束阶段
测试结果的统计与分析、编写软件可靠性测试报告

单元测试

定义
单元测试是针对程序模块来进行正确性检验的测试工作

测试重点
接口、局部数据结构、重要(独立)路径、错误处理路径、边界条件

桩模块
指模拟被测试的模块所调用的模块
驱动模块
模拟主程序功能,用于向被测模块传递数据,接收、打印从被测模块返回的数据
存根模块
用于模拟那些由被测模块所调用的下属模块功能

测试策略
自顶向下测试策略:
 先对最顶层的单元进行测试,把顶层所调用的单元作为桩模块;其次对第二层进行测试,使用上面已测试的单元作为驱动模块;依此类推直到测试完所有的模块。

自底向上测试策略:
 先对模块调用层次图上最底层的模块进行单元测试,模拟调用该模块的模块作为驱动模块;然后再对上面一层做单元测试,使用下面已被测试过的模块做桩模块;以此类推直到测试完所有的模块。

孤立测试策略:
 不考虑每个模块与其他模块之间的关联关系,为每个模块设计桩模块和驱动模块,每个模块进行独立的单元测试。
优点:简单易行,可以达到较高的结构覆盖率
缺点:不能为集成测试提供早期的集成途径。依赖结构设计信息,需要设计多个桩模块和驱动模块,增加了额外的测试成本
单元测试用例设计
步骤:
使被测单元运行;(尽量简单)
正面测试
负面测试
模块设计需求中其它测试特性用例设计
覆盖率测试用例设计
测试执行
完善代码覆盖

集成测试

定义
测试和组装软件的系统化技术

目的
在单元测试基础之上,将各个模块组装起来进行的测试
主要目的:是发现与接口有关的模块之间的问题

测试重点
各个模块之间的数据是否能够按期望值传递;
是否仍然存在单元测试时所没发现的资源竞争问题;
集成到一起能否实现所期望的父功能;
兼容性,一个模块是否对其他与之相关的模块产生负面影响;
集成后,每个模块的误差是否会累计扩大,是否会达到了不可接受的程度.

两种集成测试方法

非增量式集成测试
先独立地测试程序的每个模块(单元测试),然后再把它们组合成一个整体进行测试
问题:新旧故障混杂,很难断定出错的原因和位置

增量式集成测试
将待测模块与已测模块集合连接起来进行测试。在这一过程中,不断地把待测模块连接到已 测模块集(或其子集)上,对待测模块进行测试,直到最后一个模块测试完毕为止
自顶向下
从主控制模块开始,沿着程序的控制层次向下移动,逐渐把各个模块结合起来
步骤:
1.对主控制模块进行测试,测试时用存根程序代替所有直接附属于主控制模块的模块;
2.根据选定的结合策略(深度优先或宽度优先),每次用一个实际模块代换一个存根程序(新 结合进来的模块往往又需要新的存根程序;
3.在结合进一个模块的同时进行测试;
4.回归测试(即全部或部分地重复以前做过的测试),保证新加的模块没有引入新的错误;
在这里插入图片描述

优点:
较早地验证主要的控制和判断点。
可以首先实现和验证一个完整的软件功能,增强信心;
减少了测试驱动程序开发和维护的费用;
可以和开发设计工作一起并行执行集成测试, 能够灵活的适应目标环境;
容易进行故障隔离和错误定位。
缺点:
桩模块的开发和维护费用大。

自底向上
从最底层的模块开始,按结构图自下而上逐步进行集成并逐步进行测试工作
从“原子”模块开始组装和测试
 第一步,把低层模块组合成实现某个特定的软件子功能的族;
 第二步,写一个驱动程序(用于测试的控制程序),协调测试数据的输入和输出;
 第三步,对由模块组成的子功能族进行测试;
 第四步,去掉驱动程序,沿软件结构自下向上移动,把子功能族组合起来形成更大的子功能族。
在这里插入图片描述
在这里插入图片描述

优点
减少了桩模块的工作量
容易对错误进行定位。
缺点
直到最后一个模块加进去之后才能看到整个系统的框架;
只有到测试过程的后期才能发现时序问题和资源竞争问题;
驱动模块的设计工作量大;
不能被及时发现高层模块设计上的错误。

三明治混合集成
三明治集成是一种混合增殖式测试策略,综合了自顶向下和自底向上两种集成方法的优点
读操作:自底而上
从最底层的模块开始,按结构图自下而上逐步进行集成并逐步进行测试工作
写操作:自顶而下
从主控制模块开始,沿着程序的控制层次向下移动,逐渐把各个模块结合起来
在这里插入图片描述

系统测试

定义:针对系统中各个组成部分进行的综合性检验,很接近日常测试实践
目标:证明系统的性能
任务:证明被测系统的功能和结构的稳定性
• 系统测试过程(全背)

验收测试

任务、目标、依据
验证系统的功能、性能等特性是否符合需求规格说明
目标:验证软件的有效性(验收测试)
软件有效性的标准:需求规格说明书

验收测试完成标准: 完全执行了验收测试计划中的每个测试用例(网上搜的)

Alpha和Beta测试

Alpha:在受控的环境中进行:由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试;开发者负责记录发现的错误和使用中遇到的问题。
Beta:在开发者不能控制的环境中的“真实”应用:由软件的最终用户们在一个或多个客户场所进行;用户记录在测试中遇到的一切问题,并定期报告给开发者;衡量产品的FLURPS,着重于产品的支持性,包括文档,客户培训和支持产品生产能力。

回归测试

定义
指软件系统被修改或扩充后重新进行的测试
是为了保证对软件修改后,没有引人新的错误而重复进行的测试。
可以用于单元测试、集成测试、系统测试和验收测试各个测试过程的测试技术
适用情况
增加了新的功能
缺陷被修正
系统运行环境发生改变
发生了一个特殊的外部事件

五、测试工具

手工测试存在的问题
可能引入人为的输入错误,尤其在数据量大的情况下;
大量重复性的手工测试可能成本较高;
没有办法对组件进行隔离的测试,从而导致发现问题和解决问题的成本都太高
不可能符合软件快速开发的要求

自动化测试

定义
把以人为驱动的测试行为转化为机器执行的一种过程。
优点
能执行更多、更频繁的测试,使某些测试任务的执行,比手动方式更高效,可以更快地将软件推向市场。
能执行一些采用手动测试比较困难或不可能进行的测试。
能更好地利用资源,可以利用晚上或周末空闲的设备执行自动化测试。
将任务自动化,让测试人员投入更多的精力设计出更多更好的测试用例,提高测试准确性和测试人员的积极性。
自动测试具有一致性和可重复性的特点,而且测试更客观,提高了软件的信任度

自动化测试的5个级别=

录制和回放
当测试的系统不会发生变化时,可进行小规模的自动化
就是先由人工完成一遍需要测试的流程,由工具记录下这个流程中客户端和服务器端之间的 通信过程,以及用户和应用程序交互时的击键和鼠标的移动,形成一个脚本,然后可以在测 试执行期间回放。
录制、编辑和回放
当进行回归测试时,被测试的应用有很小的变化测试人员可以使用;这种技术来快速编制一些测试脚本以检验脑子里的想法来探索预定的测试设计
测试人员使用自动化工具来捕获想要测试的功能
编程和回放:测试脚本语言
大规模的测试用例被开发、执行和维护的专业自动化测试
数据驱动的测试:测试数据真实
数据驱动从数据文件读取输入数据,通过变量的参数化将测试数据传人测试脚本,不同的数据文件对应不同的测试用例。
可用于大规模的测试用例被开发、执行和维护的专业自动化测试
关键字驱动测试
这种专业的测试自动化能够将技能的使用达到最大化
将测试用例从测试工具中分离出来

• 局限

不能完全代替人工测试
对软件质量的依赖性较大
自动化测试在刚开始执行时,工作效率并不一定高于手动测试,只有当整个自动化测试系统成熟,且测试工程师熟练掌握测试工具后,工作效率才会随着测试执行次数的增加而提高
不能保证100%的测试覆盖率
需要更长的时间去分析和隔离所发现的缺陷

测试工具

测试管理工具
TestDirector
TestManager
TestCenter
TrackRecord/ QADirector
开源工具:
TestLink,Bugfree、Bugzilla等
功能测试工具
IBM Rational Robot
WinRunner
QTP
IBM Rational Functional Tester
性能测试工具
Jmeter
loadRunner

重点知识

1、Code Inspection 代码检查:
由程序员和测试员组成审查小组,通过阅读、讨论,分析技术对程序进行静态分析的过程
2、可靠性测试
是在给被测试系统加载一定业务压力的情况下,使系统运行一段时间,以此来测试系统是否稳定
3、驱动模块
模拟主程序功能,用于向被测模块传递数据,接收、打印从被测模块返回的数据
4、三明治测试
综合了自顶向下、自底向上两种集成方法的优点的混合增殖式测试策略
5、自动化测试成熟度模型
录制和回放、录制编辑和回放、编程和回放、数据驱动测试、关键字驱动测试
6、同时,以 1 种你在测试实习环节中使用的测试工具为例,谈谈你对性能测试的理解和使用体会
Apache jmeter可以用于对静态和动态的资源性能进行测试,它可以用于对服务器、网络和对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器、脚本、对象

试从软件开发过程和软件测试关系的角度,描述软件测试过程、各阶段的主要任务

单元测试:对每一个程序模块进行测试,以确保每个模块能正常工作。白盒
集成测试:把已测试过的模块组装起来,形成一个完整的软件后进行测试,以检测和排除与软件设计相关的程序结构问题。黑盒
确认测试:以规格说明书规定的需求为尺度,检验开发的软件能否满足所有的功能和性能要求。
系统测试:为了验证开发的软件是否能与系统的其他部分(如硬件、数据库及操作人员)协调工作
验收测试:验证系统的功能、性能等特性是否符合需求规格说明

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值