性能
上一篇 / 下一篇 2008-01-24 10:56:39 / 个人分类:性能
一软件性能的概念
1.1什么是软件的性能
一般来说,性能是一种指标,表明软件系统或构件对于其及时性要求的符合程度;其次,性能是软件产品的一种特征,可以用时间来进行度量。
性能的及时性用响应时间或者吞吐量来衡量。响应时间是对请求做出响应所需的时间。对于交互式的系统(例如web系统)来说,我们一般用用户感受到的响应时间来描述系统的性能,而对于非交互式系统(嵌入式系统或银行等的业务处理系统)而言,响应时间是指系统对事件产生响应所需的时间。
1.2用户视角的软件性能
从用户的角度来说,软件的性能就是软件对用户操作的响应时间。必须要说明的是,用户所体会到的“响应时间”既有客观的成分,也有主观的成分。例如,用户执行了某个操作,该操作返回大量的数据,从客观的角度来说,事务的结束应该是系统返回所有的数据,响应时间应该是从用户操作开始到所有数据返回完成的整个耗时;但从用户的主观感知来说,如果采用一种优化的数据呈现策略,当少部分数据返回之后就立即将数据呈现在用户面前,则用户感受到的响应时间就远远小于实际的事务响应时间。
1.3管理员角度的软件性能
从管理员角度来说,软件系统的性能首先表现在系统的响应时间上,这一点和用户视角是一样,但管理员还会关心和系统状态相关的信息。例如服务器资源利用状况,数据库运行状况,应用服务器的一些信息,系统的可扩展性,处理并发的能力,系统的瓶颈在那里等等。在此简要列出管理员所关注的部分性能相关的问题。
管理员关心的问题 | 软件的性能描述 |
服务器的资源使用状况 | 资源利用率 |
应用服务器和数据库服务器资源使用状况 | 资源利用率 |
系统的可扩展性如何 | 系统的可扩展性 |
系统最多能支持多少并发用户的访问?系统最大的业务处理量是多少 | 系统容量 |
系统可能的性能瓶颈在那里 | 系统的可扩展性 |
更换那些设备能提高性能 | 系统的可扩展性 |
系统能否支持长时间的业务访问 | 系统的稳定性 |
1.4开发视角的软件性能
从开发人员的角度来说,对软件性能的关注就更深入了。不仅会关注管理员所关注的一切问题,同时还会关注如何通过调整设计和代码或是通过调整系统设置参数来提高性能,和如何发现并解决软件设计和开发过程中产生的由于多用户访问引发的缺陷等问题。因此,对于开发人员来说,单纯获知系统性能“好”与“坏”的评价并没太大意义,他们更想知道的是“那些地方是引起不好性能的根源”或是“那些可能存在故障发生的可能”。此简要列出开发人员所关注的部分性能相关的问题。
开发人员关心的问题 | 问题所属层次 |
架构设计是否合理 | 系统架构 |
数据库设计是否存在问题 | 数据库设计 |
代码是否存在性能方面的问题 | 代码 |
系统中是否有不合理的内存使用 | 代码 |
系统中是否有不合理的线程同步方式 | 设计与代码 |
系统中是否存在不合理的资源竞争 | 设计与代码 |
二性能测试分类
系统的性能测试是一个很大的概念,覆盖面非常广泛,对一个软件系统而言,包括执行效率、资源占用、稳定性、安全性、兼容性、可扩展性、可靠性等方面。在此处主要把软件性能测试分为以下几个方面(不同的文献和资料对性能测试方法的分类以及每种方法的范围界线都不同。)
Ø 负载压力测试
Ø 配置测试
Ø 失效恢复测试
2.1负载压力测试
负载测试是通过逐步增加系统的负载,测试系统性能的变化,并最终确定在满足性能指标的情况下,系统所能承受的最大负载的测试。该测试的特点:
(1) 这种测试方法主要目的是找到系统处理能力的极限
(2) 这种测试需要在给定的测试环境下进行,通常需要考虑被测系统的业务压力量和典型场景,使的测试结果具有业务上的意义
(3) 这种测试方法一般用来了解系统的性能容量,或是配合性能调优来使用
压力测试是通过逐步增加系统的负载,测试系统性能的变化,并最终确定在什么负载条件下系统性能处于失效状态,并以此来获得系统能够提供的最大服务级别的测试。通俗的讲,压力测试是为了发现在什么条件下系统的性能会变的不可接受。可见,压力测试是一种特定类型的负载测试。
负载压力测试有助于确认被测系统是否能支持性能需求,以及预期的负载增长等。负载压力测试不只是关注不同负载场景下的响应时间等指标,它也要通过测试来发现在不同负载场景下会出现的,例如速度变慢、内存泄露等问题的原因。因此,应该在开发过程中尽可能早的进行负载压力测试。
负载压力测试是性能测试的重要组成部分,负载压力测试包括并发测试、疲劳强度测试、大数据量测试等内容。
1,并发测试
并发测试方法通过模拟用户的并发访问,测试多用户并发访问同一个应用、同一个模块或者数据时是否存在死锁或者其他性能问题。系统的并发测试是负载压力测试的最主要的组成部分。
并发测试方法具有以下特点:
(1)以真实的业务为依据,选择有代表性的、关键的业务操作设计测试案例,主要目的是发现系统中隐藏的并发访问时的问题。例如系统中的内存泄露、线程琐和资源争用等方面的问题。下面列出一些主要关注的问题:
问题类别 | 问题描述 |
内存问题 | 是否有内存泄露 |
是否有太多的临时对象 | |
是否有太多的超过设计生命周期的对象 | |
数据库问题 |