服务热线
- :
- :
- :
- :
- 服务电话:0756-3391906
- 软件测试技术:0756-3391891
- 嵌入式软件测试:0756-3391732
- 网络测试技术:0756-3396982
- 监督电话:0756-3391848
- 软件业务服务:0756-3391906
- 网络业务服务:0756-3396981
软件性能测试技术研究
来源:评测中心 发布时间:2010-07-14 05:43:01
【摘要】本文主要从性能测试分类、测试模型建立、测试技术、测试过程管理等方面对性能测试和故障诊断进行阐述,将笔者多年对性能测试的研究经验和相关成果与同行分享。
【关键字】性能评测故障诊断测试模型
检测中心面向产业提供性能测试和故障诊断等相关业务已接近五年,完成了近30个案例的测试或研究工作,笔者利用检测中心开展的多次专业培训和结合案例开展技术研究的良好时机,同时总结多年的实践经验,分别从性能测试分类、测试模型建立、测试技术、测试过程管理等方面进行阐述。其目的是将笔者多年的研究经验和相关成果与同行分享。
什么是软件性能,对一个软件系统而言,软件的性能是软件的一种非功能特性,它关注的不是软件是否能够完成特定的功能,而是在完成该功能时展示出来的相关包括执行效率、资源占用、稳定性、安全性、兼容性、可扩展性、可靠性等特性。由于感受软件性能的主体是人,不同的人对于同样的软件能有不同的主观感受,而且不同的人对于软件性能关心的视角也不同。下面分别从用户视角、管理员视角、产品开发人员视角的软件性能进行说明。
(1)用户视角的软件性能:
对用户而言,软件性能就是软件对用户操作的响应时间。用户甚至不关心响应时间中哪些是软件造成的,哪些是硬件造成的。
(2)管理员视角的软件性能:
管理员首先关注普通用户感受到的软件性能,其次,管理员需要进一步关注如何利用管理功能进行性能调优,主要关注如下几点:
系统的响应时间;
系统运行时服务器的状态,如CPU利用情况、内存使用情况等;
系统是否能够实现扩展;
系统支持多少用户访问;
系统性能可能的瓶颈在哪里;
系统是否支持7*24小时的业务访问。
(3)产品开发人员视角的软件性能:
开发人员的视角与管理员的视角基本一致,但开发人员需要更深入地关注软件性能。希望能够尽可能地开发出高性能的软件。
用户关心的响应时间;
管理员关心的系统可扩展性等;
架构设计是否合理;
数据库设计是否合理;
代码是否存在性能方面的问题;
系统中是否有不合理的内存使用方式。
那么我们是通过什么方法来了解一个应用系统的现有软件性能状况,是否能够满足不同用户提出的性能要求,这样通过结合质量特性对软件系统进行性能测试,来进一步了解应用系统在一定规模数据量、特定生产环境下性能指标状况的确认。
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试确认。目的是验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,优化软件,最后起到优化系统的目的。
性能测试类型主要包括负载测试,压力测试,疲劳强度测试,大数据量测试,基准测试,如下表:
测试类型 | 描述 | 测试目标 | 备注 |
负载测试 | 负载测试是通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足性能指标的情况下,系统所能承受的最大负载量的测试。 | 探索系统最佳并发用户数等。 | 系统不能失效,且在满足性能指标的前提下。 |
压力测试 | 它通过逐步增加系统负载,测试系统性能的变化,并最终确定在什么负载条件下系统性能处于失效状态,并以此来获得系统能提供的最大服务级别的测试。 | 探索系统最大并发用户数等。 | 压力测试是一种特定类型的负载测试,逐渐增加压力直到系统失效。 |
疲劳强度测试 | 按照系统最佳负载压力用户数、或者日常运行用户数,持续执行一段时间业务,保证达到系统疲劳强度需求的业务量,通过综合分析交易执行指标和资源监控指标,来确定系统处理最大工作量强度性能的过程。 | 验证系统长时间运行大工作量强度下的稳定可靠性,分析其性能等。 | 一般情况下,可采用疲劳强度测试来模拟系统日常业务操作场景。预测出系统未来运行多长时间后会失效或出现故障,以明确系统的承载潜力。 |
大数据量测试 | 大数据量测试又可分为独立的数据量测试和综合数据量测试。独立的数据量测试指针对某些系统存储、传输、统计、查询等业务进行的大数据量测试;综合数据量测试指和压力、负载、疲劳强度相结合的综合测试。 | 验证系统处理大数据量的能力,分析数据量的变化对系统性能的影响等。 | |
基准测试 | 分别通过模拟软件所设计的不同的用户数量和系统软件所能承受的用户数量进行测试,通过抽取一次测试结果作为基准值与其它测试结果进行对比,并分析出最佳运行用户环境。 | 探索系统在性能指标允许范围内的最佳运行环境等。 | 可在系统上线前进行最佳环境、最佳配置测试。 |
在进行系统的性能测试时,建立合理的、科学的性能测试模型,对于应用系统的性能测试是至关重要。
性能测试模型是指为预计或估算软件的性能所建立的性能框图和数学模型,是一种在目标应用系统中测试中应用的模型。性能测试模型为应用系统的性能分析和规划提供了一种有效的分析方法,将复杂系统的性能分解并标识为简单明了的符号,并在性能测试过程合理运用,通过监控硬件、软件网络等相关的性能指标,以便定量预计、估算和评价复杂系统的性能状况,快速定位应用系统的性能瓶颈,找出最大限度避免这些系统性能情况出现的应对方法,并能预测被测试应用系统应该满足怎样的资源需求以及系统未来的运行状况,同时还告诉测试人员的具体执行方法。
建立合理、科学的性能测试模型主要以软件系统实际生产环境为标准,通过各种不同的渠道来获取生产环境所需的各项数据信息,这样获取数据信息才更充分,性能测试结果才能真实有效的反映应用系统生产环境的实际性能情况。
如何建立一个合理、科学的性能测试模型呢?
性能测试模型包括在整个性能测试过程中的每一个阶段以及阶段所需的内容要素,下面分别从测试目标、测试环境、业务流程、测试数据、业务场景、数据监控、诊断分析、执行测试、技术风险等几个方面进行分析各项模型,根据具体项目进行灵活组合运用,建立一个合理、科学的性能测试模型。
在进行一个项目的性能测试,确定测试目标是重中之重,测试目标没有确定,那后面所做的工作都是没有意义,因做出来的结果并不是用户所需要的,达不到用户的测试需求,以笔者的经验,主要关注以下目标:
A 在不同测试环境下,分别通过负载测试和压力测试收集操作系统、数据库、中间件等相关性能指标,明确被测系统的性能状况,在应用部署前,评估系统性能;
B 分析该系统在不同测试环境下的性能趋势和性能瓶颈,摸索系统最佳运行环境;
C系统最佳并发用户数、系统最大并发用户数;
D 定位系统性能瓶颈、系统性能拐点分析、系统资源利用分析,明确系统性能缺陷;
E 系统性能诊断分析,必要时进行系统源代码分析,并提供优化建议;
F 配合用户完成操作系统、数据库、中间件等参数设置,系统优化,并进行必要的回归测试;
G 采取疲劳强度测试和大数据量测试等多种手段,预测系统未来三至五年性能趋势。
首先确定测试环境是在实际生产环境或是模拟测试环境进行。
对一个被测应用系统首先要分析系统在实际生产环境的系统拓扑图及其架构技术,包括硬件、软件及网络环境三大部分:
对于硬件来说,则指被测应用系统运行所需的硬件配置,包括采用CPU、内存、硬盘等,同时还应考虑软件对运行的硬件环境有无特殊说明,如对计算机的型号,网卡的型号、声卡的型号、显卡的型号、硬盘型号、CPU型号位数等有无特别的声明,确认软件要求的最低配置和推荐配置的合理性和正确性。
对于软件来说,则指被测应用系统运运行所需的操作系统、数据库、中间件、以及与被测试软件共存的其他支撑应用软件等构成的环境以及类型版本和补丁版本。
对于网络来说,随着网络的普及,一个软件产品离不开网络环境,网络环境是硬件因素和软件因素的综合。各种路由器、交换机、防火墙、网线等硬件基础,各种代理、协议等软件基础。
总之,要根据应用系统的运行环境来建立测试环境模型。
从软件度量的角度来说,根据被测应用系统的特点,结合质量特性、子特性综合分析应用系统在各子特性的权值,不同的系统所对应的效率特性权重不一样,所以要充分根据应用系统的业务特点,选择关键、核心的的业务流程进行测试,这样更能反应被测试应用系统的性能状况。
这些关键、核心业务模块通常具有功能比较复杂、使用比较频繁、属于核心业务等特点。始终是性能测试的重点。核心业务模块在需求设计阶段就可以确定,或通过对应用系统的日志文件或历史交易数据来分析确定,以及分析选取的业务流程在整个应用系统运行过程中性能压力分布比例及类别。最终建立一个通过选取这些业务流程能够更接近模拟应用系统实际运行场景的业务模型。
测试数据模型建立主要是考虑到测试数据和垫底数据两类数据,根据所选取的业务流程以及测试目标来确定性能测试过程中所需的测试数据和垫底数据,测试数据就是在测试过程中所以使用到的数据,主要用来进行数据参数化,垫底数据就是模拟系统一段时间所分布的数据,在这数据量基础上确保系统数据库中数据容量和真实性符合实际运行情况,更能反应应用系统在生产环境实际运行中的真实性能状况。
根据测试目标以及选取的业务流程,在性能测试过程还要涉及业务场景的设计,通常分为单一业务和混合业务场景两种,这两种业务场景根据测试目标可以灵活组合运用。
单一业务又分为有背景和无背景模式单一业务,有背景单一业务是模拟接近用户实际使用情况选取一个关键、核心业务流程当作主体,别的业务流程当作背景进行测试,无背景模式单一业务就是单单选取一项关键、核心业务流程模块进行测试。单一业务场景测试更能对被测业务流程快速定位性能问题,但与应用系统实际使用情况存在一定的差距,得到的测试结果与实际生产环境差距较大,不能更真实模拟真实情况。
混合业务场景是指对多项业务流程模块进行组合性能测试,通常对于一个应用系统来说,所有的用户不会只使用一个或几个核心业务流程模块,每个业务模块都可能被使用到。所以性能测试既要模拟多用户的使用同一功能的操作,又要模拟多用户同时对一个或多个业务模块的不同功能进行操作。混合业务场景测试是最接近用户实际使用情况的测试,也是性能测试的核心内容。通常根据用户使用系统的情况分成不同的用户组进行并发,每组的用户比例要根据实际情况来进行匹配来模拟各个业务的组合并发情况。
两种场景互为补充合理运用,才能更好地反应应用系统的真实性能状况,满足用户要求。
性能测试的最终目的是通过验证被测试应用系统的性能状况以及通过分析性能瓶颈进行性能调优达到系统优化作用。所以在测试过程中对资源利用的监控是必不可少的,所以在测试过程中不仅仅是获得关键业务的软件性能指标,同时也要通过性能测试监控操作系统、数据库、中间件、网络、测试机以及各节点程序处理时间等各个性能指标,收集各项数据进行分析整理,从而发现性能瓶颈,为进一步的性能调优提供准确的参考数据,主要从以下几个方面进行:
1、 硬件环境:
从处理器、内存、存储、其他外设等方面考虑对系统性能影响;
2、 软件环境:
2.1 从软件自身配置、部署环境(如操作系统、中间件、数据库),以及其他相关支撑系统分析;
2.2 从源代码如SQL语句效率,事务的性能方面进行考察;
2.3 从整体系统架构分析其合理性;
3、 网络环境:
考察网络自身带宽、拓扑结构等指标对系统性能的影响。
4、 其他影响系统性能的因素。
对基于J2EE/.NET架构应用系统,采用诊断工具对应用系统深入研究应用程序组件诊断分析,J2EE 架构收集JSP/Servlet、EJB、JNDI、JDBC、JMS、Struts等方法调用的性能指标;.NET架构收集ASP、ADO、MSMQ调用的响应时间。
来源:检测中心——侯建华、徐锋光、雷正伟