目录
集成测试完成以后,就得到了一个完整的软件系统,这时就可以将系统上线或交付用户验收了吗?
答案是:否
系统测试
V模型中继单元测试、集成测试之后的第三个级别的测试。
什么是系统测试?
从最终用户的角度,依据系统和软件需求规格说明对整个系统进行测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不符合或矛盾的地方。
典型系统测试对象:
- 系统管理手册和用户操作手册;
- 系统功能和非功能需求;
- 系统中使用的数据。
系统测试主要内容:
- 功能测试;
- 性能测试;
- 安全性测试;
- 压力测试
- 容量测试
- 安全测试
- 用户界面测试
- 安装/卸载测试
- 文档测试
- 回归测试
系统测试策略
手工测试; 自动化测试。
系统测试的方法:
黑盒测试方法
功能测试
定义:功能测试是系统测试中最基本的测试,它不管软件内部的实现逻辑,主要根据产品的需求规格说明书和测试需求列表,验证产品的功能实现是否符合产品的需求规格。
依据:产品的需求规格说明书和测试需求列表
链接或界面切换测试
测试所有链接是否按指示的那样确实链接到了该链接的页面;
测试所链接的页面是否存在;
保证Web应用系统上没有孤立的页面。
业务流程测试
主要是系统应用功能的测试。
基于用例场景设计测试用例。
用例场景是通过描述流经用例的路径来确定的过程,这个流经过程要从用例开始到结束遍历其中所有基本流和备选流。
功能测试工具
WinRunner:一种企业级的功能测试工具,用于检测应用程序是否能够达到预期的功能及正常运行。
QARun:自动回归测试工具,当进行手动测试时,它在测试脚本中记录测试过程,如果程序受到了局部修改、优化、升级版本后,需自动运行测试脚本就能重现当初的手动测试过程,节省回归测试消耗的时间和人力。
Rational Robot:一种对环境的多功能的、回归和配置测试工具。
非功能性测试 | 性能测试
常见的性能问题
启动系统、打开页面越来越慢
查询数据,很长时间才显示列表
网络下载速度很低,如5k/s
什么原因导致?
资源耗尽,如CPU使用率达到100%
资源泄漏,如内存泄漏 ,最终会导致资源耗尽
资源瓶颈,如线程、GDI、DB连接等资源变得稀缺
什么是性能测试
就是为了发现系统性能问题或获取系统性能相关指标而进行的测试。一般在真实环境、特定负载条件下,通过工具模拟实际软件系统的运行及其操作,同时监控性能各项指标,最后对测试结果进行分析来确定系统的性能状况。
性能测试包括以下几个方面:
评估系统的能力。测试中得到的负荷和响应时间等数据可以被用于验证所计划的模型的能力,并帮助做出决策。
识别系统中的弱点。受控的负荷可以被增加到一个极端的水平并突破它,从而修复系统的瓶颈或薄弱的地方。
系统调优。重复运行测试,验证调整系统的活动得到了预期的结果,从而改进性能,检测软件中的问题。
性能测试目标
获取系统性能某些指标数据
为了验证系统是否达到用户提出的性能指标
发现系统中存在的性能瓶颈,优化系统的性能
性能测试过程
性能测试的方法
在实际的工程应用之中,存在性能测试的两种负载类型:
(1)“flat”测试 对于一次给定的测试,应该取响应时间和吞吐量的平均值。精确地获得这些值的唯一方法是一次加载所有的用户,然后在预定的时间段内持续运行。
(2)ramp-up测试 用户是交错上升的(每几秒增加一些新用户)。ramp-up测试不能产生精确和可重现的平均值,这是因为由于用户的增加是每次一部分,系统的负载在不断地变化。ramp-up测试的优点是,可以看出随着系统负载的改变,测量值是如何改变的。然后可以据此选择以后要运行的flat测试的范围。
对于企业级的系统,性能测试的方法有:
基准法
响应时间
从应用系统发出请求开始,到客户端接收到最后一个字节数据为止所消耗的时间。
并发用户数
同一时间段内访问系统的用户数量。
吞吐量
单位时间内系统处理的客户请求数量。
性能计数器
是用来描述服务器或操作系统性能的一些数据指标。
性能规划测试
性能规划类型的测试其目标是找出在特定的环境下,给定应用程序的性能可以达到何种程度。
要确定系统的容量,需要考虑几个因素:
(1)用户中有多少是并发与服务器通讯的。
(2)每个用户的请求间时间间隔是多少。
渗入测试
渗入测试是一种比较简单的性能测试。渗入测试所需时间较长,它使用固定数目的并发用户测试系统的总体健壮性。这些测试将会通过内存泄漏、增加的垃圾收集(GC)或系统的其他问题,显示因长时间运行而出现的任何性能降低。
建议运行两次测试——一次使用较低的用户负载(要在系统容量之下,以便不会出现执行队列),一次使用较高的负载(以便出现积极的执行队列)。
峰谷测试
峰谷测试兼有容量规划ramp-up类型测试和渗入测试的特征。其目标是确定从高负载(例如系统高峰时间的负载)恢复、转为几乎空闲、然后再攀升到高负载、再降低的能力。
压力测试
压力测试(Stress Testing)是指模拟巨大的工作负荷,以查看系统在峰值使用情况下是否可以正常运行。 压力测试是通过逐步增加系统负载来测试系统性能的变化,并最终确定在什么负载条件下系统性能处于失效状态,以此来获得系统性能提供的最大服务级别的测试。
压力测试与性能测试的联系与区别
压力测试是用来保证产品发布后系统能否满足用户需求,关注的重点是系统整体;
性能测试可以发生在各个测试阶段,即使是在单元层,一个单独模块的性能也可以进行评估。
压力测试是通过确定一个系统的瓶颈,来获得系统能提供的最大服务级别的测试。
性能测试是检测系统在一定负荷下的表现,是正常能力的表现;而压力测试是极端情况下的系统能力的表现。
举例
例如对一个网站进行测试,模拟10到50个用户同时在线并观测系统表现,就是在进行常规性能测试;当用户增加到系统出项瓶颈时,如1000乃至上万个用户时,就变成了压力测试。
压力测试与负载测试(Load Test)
负载测试是通过逐步增加系统工作量,测试系统能力的变化,并最终确定在满足功能指标的情况下,系统所能承受的最大工作量的测试。
压力测试实质上就是一种特定类型的负载测试。
压力测试与并发性测试
并发性测试是一种测试手段,在压力测试中可以利用并发测试来进行压力测试。
压力测试方法
压力测试应该尽可能逼真的模拟系统环境。对于实时系统,测试者应该以正常和超常的速度输入要处理的事务从而进行压力测试。批处理的压力测试可以利用大批量的批事务进行,被测事务中应该包括错误条件。
压力测试的特点
压力测试是检查系统处于压力情况下的能力表现。
压力测试一般通过模拟方法进行。
压力测试一般用于测试系统的稳定性。
容量测试基本概念
所谓的容量测试(Volume Testing)是指,采用特定的手段测试系统能够承载处理任务的极限值所从事的测试工作。
这里的特定手段是指,测试人员根据实际运行中可能出现极限,制造相对应的任务组合,来激发系统出现极限的情况。
容量测试的目的是使系统承受超额的数据容量来发现它是否能够正确处理,通过测试,预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数、数据库记录数等),确定系统在其极限值状态下是否还能保持主要功能正常运行。容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。
容量测试案例
首先根据某银行终端监控系统的需求说明,作出如下分析:
服务器支持挂接100台业务前置机。
每台前置机支持挂接200台字符终端。
字符终端有两种登录前置机的模式,
即终端服务器模式和Telnet模式。
不同的用户操作仅反映为请求数据量的不同。
不同的配置包括:不同的系统版本(如SCO、SOLARIS等),不同的shell(shell、cshell、kshell)。
容量需求分析的策略
对应上面五条容量需求分析,分别制定如下策略:
对于需求1、2,挂接100台业务前置机,200台字符终端的容量环境不可能真实地构造,这里采取虚拟用户数量的方式,多台业务前置机采用在一台前置机上绑定多个IP地址的方式实现,同时启动多个前置程序。
对于需求3可以给出两种字符终端登录前置机的模式。
对于需求4,不同数据量可以执行不同的shell脚本来实现。实际上可以执行相同的脚本,而循环输出不同字节数的文本文件内容。最后,对于不同的系统版本,则只能逐一测试,因为谁也代替不了谁。当然,以用户实际使用的环境为重点。
=========================================================================