您当前的位置:检测资讯 > 科研开发

软件性能测试理论分析研究

嘉峪检测网        2022-07-06 23:31

通过软件性能测试可以测算出当前系统可以承载的负荷,保证系统在实际的压力下正常工作。本文主要阐述了软件性能测试的分类和衡量指标,并提出了分析和调优的方法,最后罗列了一些常见的性能瓶颈和产生原因。

 

一、软件性能测试的分类

 

软件性能测试是系统测试的一种,在软件质量模型中,软件性能测试是属于效率这一类的。对软件的性能进行衡量,需要考虑软件效率的时间特性、资源利用率及效率依从性。

 

时间特性是指在特定的软硬件条件下,软件产品在运行功能时需要满足的系统响应时间及吞吐率能力。

 

资源利用率是指软件产品在执行功能时需要满足合适的数量和类别的软硬件资源的能力。

 

效率依从性是指软件产品遵循与效率相关的标准或约定的能力。

 

软件性能测试的目的是验证软件系统的各种性能指标是否满足用户需求及根据测试结果对系统中可能存在的性能瓶颈进行分析和优化。主要包括以下几个方面:

 

1、对系统的负载能力进行评估。根据测试数据,可以对系统的内存、进程、磁盘、网络等负载能力进行评估,并根据评估结果分析定位性能瓶颈,为性能的优化提供决策依据。

 

2、识别系统弱点。大量的负载可以评估系统在极端情况下的性能状况,找到系统的薄弱点并进行修复。

 

3、系统调优。通过反复运行测试,对系统性能优化后的结果进行验证,检查其是否达到了预期的结果。同时,长时间运行测试,可能会导致内存泄漏、系统崩溃等问题的发生,揭示程序中隐含的问题或冲突。

 

4、验证系统的可靠性、稳定性。在特定的负载情况下,长时间运行测试可以对系统的可靠性和稳定性进行验证。

 

对一个软件系统而言,性能主要包括软件的资源占用率,系统的稳定性、可靠性等。本文中提到的软件性能测试主要是通过自动化测试工具Performance Center模拟测试业务时正常、异常及峰值负载条件来对比模块的各项性能指标进行测试。

 

软件性能测试的方法很多,本文主要介绍以下4种类别的测试。

 

1、负载测试(Load Testing)。指在不同的软硬件及网络环境下,运行一种或多种业务,通过对系统逐步增加负载的方式,对系统性能的变化进行测试,并确定系统在满足各项性能指标的情况下,所能承受的各项阀值。

 

2、基准测试(Benchmark Testing)。指模拟一定数量的虚拟用户行为,在系统测评或调优过程中,根据测试出的基准数据运行相同的业务场景并对测试结果进行分析比较,以确定测试结果是否能对系统调优提供决策数据或对系统性能的改善提供帮助。

 

3、压力测试(Stress Testing)。指通过逐渐增加系统负载,确定在什么负载条件下系统性能处于失效状态,从而获得系统所能承受的最大压力数据,并根据测试数据对系统的压力瓶颈进行定位及调优。压力测试更强调在极端情况下系统的可靠性及健壮性。

 

 4 、并发测试(Concurrency Testing)。主要用来测试系统是否存在死锁、数据错误及在并发用户量大的情况下系统是否会出现页面滞后、系统崩溃等故障。并发测试是软件性能测试中最常用的测试方法,为了避免函数方法或数据库等在并发下的错误,需要专门针对每个模块进行并发测试。

 

二、软件性能的衡量指标

 

对于一个应用系统来说,还需要对性能指标进行监控。衡量一个软件系统性能的常见指标有: 

 

1、响应时间(Response time)。对于网站系统来说,响应时间就是从点击了一个页面计时开始,到这个页面完全在浏览器里展现计时结束的这一段时间间隔,响应时间越短越好。可以细分为服务器端响应时间、网络响应时间、客户端响应时间。响应时间描述如下图所示。

 

软件性能测试理论分析研究

 

 

在软件性能测试中一般是通过事务函数Transaction Response Time来统计响应时间。 

 

2、吞吐量(Throughput)。吞吐量反映的是系统的处理能力,具体来说,就是指软件系统在每单位时间内能处理多少个事务/请求/单位数据等。吞吐量的大小由负载或行为方式来决定。在Performance Center中,吞吐量反映单位时间内系统处理的事务数目。一般以TPS(Transaction Per Second)即每秒事务数表示。 

 

3、资源使用率(Resource utilization)。指系统在负载情况下软硬件上各种资源的占用情况。例如,CPU占用率、内存使用率、磁盘I/O等。 

 

4、并发用户数(Concurrent users)。并发用户数用来度量多个用户同时访问同一个应用、同一个模块或者数据记录时是否存在死锁或者其他性能问题,反映了系统的并发处理能力。

 

5、点击数(Hits per second)。点击数是按照客户端向Web Server 发起了多少次 HTTP请求计算的。 

 

三、性能分析及调优原理

 

软件性能测试的目的是评估当前系统性能指标,根据测试结果对性能瓶颈进行定位及优化,以预防规避性能风险。在进行系统的调优过程中,好的策略是按照由易到难的顺序对系统性能进行调优。

 

性能分析主要是根据测试结果对可能导致性能瓶颈的原因进行定位,而调优则是解决发现的性能瓶颈。可以通过以下两种方法来对性能进行调优: 

 

(一)性能分析法 

 

1、指标达成法。指根据用户需求,将得出的测试结果与之进行比较,如果能够满足用户需求则测试通过。如果不满足,则对测试数据进行分析定位,并解决查找出的性能问题,直到系统性能在用户可接受的范围内。 

 

2、最优化分析法。指根据测试数据,对性能瓶颈进行分析及优化,以使系统资源得到充分利用,使系统的处理能力最大化。

 

性能调优方向如下图所示:

 

软件性能测试理论分析研究

 

 

1)应用程序诊断。通过模拟大量用户的操作对系统形成负载,根据测试结果对应用程序进行检验,看其是否能够满足用户的性能需求。如果满足需求则测试通过。反之,则对测试数据进行分析定位并找出解决瓶颈的方案,以保证系统的可靠性、稳定性。 

 

2)系统调优。主要包括对独立的瓶颈进行调优及对软硬件迭代调优。在测试过程中,模拟大量用户形成负载,并且对系统的软硬件环境进行迭代测试,根据测试结果找出影响性能的要素,对其进行优化后最终提升系统的性能。对系统软硬件进行迭代调优是一个循序渐进的过程。

 

(二)调优的基本步骤

 

对系统进行分析及调优的步骤主要包括: 

 

1、确定详细的软件性能测试计划、方案和目标,并按优先级排列; 

 

2、利用合适的软件性能测试工具执行测试,并对测试结果进行分析和整合;

 

3、拆分分布式系统的各个组件,如Web层、业务层、集成层、网络层等,分别进行调优;

 

4、按照软件性能测试-> 定位瓶颈 -> 性能调优 -> 再次执行测试的方法对系统进行逐步调优; 

 

5、确定影响系统性能的主要因素:CPU、Memory、Process还是I/O;

 

6、找出主要的性能瓶颈,首先处理最容易的瓶颈问题,再重复测试;

 

7、提高 CPU的性能:例如更优化的算法、更高效率的代码、优化的SQL 等,以减少短期生存的对象; 

 

8、提高内存性能:主要是减少长期生存的对象; 

 

9、提高I/O性能:重新对应用进行设计,减少输入输出的交互;

 

10、性能优化完成之后,进行 QA 测试;

 

11、在代码中对优化的地方进行记录,并对旧代码进行注释。

 

四、常见的性能瓶颈

 

(一)硬件上的性能瓶颈

 

主要指RAM、CPU方面的瓶颈。分为服务器操作系统瓶颈;Web服务器、数据库等中间件瓶颈;服务器硬件瓶颈;数据库设计、算法、业务逻辑、SQL语句等的应用瓶颈及网络瓶颈。例如,在测试过程中发现数据库服务器CPU的持续利用率超过90%以上,此数据库服务器需要5个CPU、10GB 内存,这时可以认为系统出现了硬件上的性能瓶颈。 

 

(二)应用软件上的性能瓶颈

 

一般指的是应用服务器、Web服务器等应用软件,还包括数据库系统。例如,在Weblogic平台上配置了JDBC连接池的参数,最大连接数为50,最小连接数为5,增加量为10。在测试时发现,当负载增加时,现有的连接数不足,系统会动态生成10个新的连接,导致交易处理的响应时间大大增加。这时可以认为在应用软件上出现了性能瓶颈。

 

除此之外,还包括应用程序上的性能瓶颈、操作系统上的性能瓶颈、网络设备上的性能瓶颈等。

 

五、常见性能问题及成因 

 

(一)常见的性能问题有以下几个特征  

 

1、随着时间推移越来越慢。在负载不变的情况下,随着时间的推移,系统可能由于缓存中数据量大或者达到某个阈值,导致页面滞后,系统被锁定或出现大量错误而崩溃。 

 

2、随着负载增加越来越慢。在负载增加的情况下,每增加若干用户,系统响应时间慢,在用户较少的情况下,系统响应时间相对较快。 

 

3、锁定。在系统出现挂起或错误的情况下加速出现锁定,直到系统完全锁定。通常需要重启系统才能解决。 

 

4、突然混乱。系统运行一直都较为正常,在持续运行或者负载量较大的情况下,系统突然出现大量错误或锁定。

 

(二)常见性能问题及成因 

 

1、资源泄漏。主要是CICS 事务网关连接、JDBC语句等泄露导致了桥接层及对后端系统产生了影响。并随着时间的推移,出现锁定或系统崩溃等问题。

 

成因:遗漏了finally块,没有用close()关闭外部资源的对象。 

 

2、内存泄露。分为线性内存泄漏和指数方式内存泄漏。内存泄露会随着时间推移及负载增多而增加系统内存消耗降低系统性能。

 

成因:原因较多,主要与资源泄露及向集合(Vector、HashMap)中加入不删除的元素有关。

 

3、外部瓶颈问题。随着负载的增加,后端运行持续缓慢,减缓了应用服务器及应用程序的响应时间,或者应用程序通过大量请求滥用后端系统。

 

成因:后端系统不合理或者冗余的工作请求。可以通过咨询专家、分解工作请求等方法解决。 

 

4、线程阻塞、死锁/活动锁。“获得顺序”的问题或线程遇到同步阻塞,随着负载量的增加,系统会出现挂起、锁定或异常错误。

 

成因:锁定策略及“获得顺序”的算法不合理。 

 

5、中间层问题。数据库连接池管理及JDBC驱动程序桥接层不合理,随着负载的增加系统持续缓慢。在早期阶段很容易与外部瓶颈混淆。

 

成因:有可能是桥接层和外部系统的版本不兼容造成的。 

 

6、内部资源瓶颈。对象池、线程池等内部资源稀缺,随着负载的增加系统持续缓慢并且出现挂起或异常错误。

 

成因:分配不足或过度使用。可以根据预期的最大负载量,通过提高对象池、线程池的最大尺寸等方法解决。 

 

软件性能测试对于确保系统的正常运行有着重要的意义。因此,分析和研究产生性能瓶颈的成因,有助于与我们更好的理解软件性能测试,解决性能瓶颈问题,确保系统健康有序的运行。

 

分享到:

来源:Internet