您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 软件性能与性能测试 第2部分
软件性能与性能测试教程第2部分中国软件评测中心陈兵本系列教程对软件性能与性能测试这个主题进行了较为全面的介绍和分析。教程分为三个部分:在第1部分,讲解了软件性能的基本知识,介绍了常用的软件性能指标,在分析影响软件性能因素的同时,以实例清晰讲解了如何提高软件的性能及性能的可扩展性等问题;在第2部分,首先给出了性能测试的基础知识,然后侧重于从性能工程的角度提出开展性能测试工作的流程,和进行性能测试工作的策略,以及如何分析性能测试数据;在第3部分,从开发的(而不是第3方测试)角度,以实例为引导,一步一步地分析讲解在开发环境下进行性能测试的策略、方法和手段(采用的工具)。本系列教程可以用作软件开发人员、软件测试人员、软件项目经理、软件质量人员和需要了解软件性能测试的各级软件管理人员的工作参考手册,也可作为有志于软件开发和软件性能测试领域人员的参考资料。...1.软件性能测试软件性能测试软件性能测试软件性能测试各种软件在系统实施过程中,需要满足客户的一些特殊要求。如果软件系统没有经过测试和优化,软件系统将无法满足用户的需求,还会给软件在实际应用中带来很大的风险。一些公司缺乏必要的测试手段和工具知识导致测试不彻底,其中性能测试是整个开发、测试过程中一个重要方面。(1)什么是性能测试性能测试用来保证产品发布后系统的性能满足用户需求。性能测试在软件质量保证中起重要的作用。通俗地说,性能测试主要是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行的一种测试。性能测试包含三种类型的测试:负载测试负载测试是确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统组成部分的相应输出项,例如通过量、响应时间、CPU负载、内存使用等如何决定系统的性能,例如稳定性和响应等。负载测试通常描述一种特定类型的压力测试,即增加用户数量以对应用程序进行压力测试。通俗的说,这种测试方法就是模拟真实环境下的用户活动,在特定的运行条件下验证系统的能力状况。在项目中,通常是测试现有负载和预期负载的负载压力测试,进行对比分析。压力测试压力测试通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大的服务级别的测试。通俗地讲,压力测试是为了发现在什么条件下您的应用程序的性能会变得不可接受。在压力测试中,可以采取两种不同的压力情况--用户量压力测试或数据量压力测试。疲劳强度测试通常是采用系统稳定运行情况下能够支持的最大并发用户数或者日常运行用户数,持续执行一段时间业务,通过综合分析交易执行指标和资源监控指标来确定系统处理最大工作量强度性能的过程。(2)性能测试的目的为什么要进行性能测试呢?其目的是验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,优化软件,最后起到优化系统的目的。主要包括以下几个方面1)评估系统的能力,测试中得到的负荷和响应时间数据可以被用于验证所计划的模型的能力,并帮助作出决策。2)识别体系中的弱点:受控的负荷可以被增加到一个极端的水平,并突破它,从而修复体系的瓶颈或薄弱的地方。3)系统调优:重复运行测试,验证调整系统的活动得到了预期的结果,从而改进性能。4)检测软件中的问题:长时间的测试执行可导致程序发生由于内存泄露引起的失败,揭示程序中的隐含的问题或冲突。5)验证稳定性(resilience)可靠性(reliability):在一个生产负荷下执行测试一定的时间是评估系统稳定性和可靠性是否满足要求的唯一方法。(3)压力测试能够发现缺陷进行压力测试,您有希望找到很多种用其他测试方法更难发现的错误。主要有两种错误类型:内存泄漏(内存泄漏(内存泄漏(内存泄漏(Memoryleak):):):):一种极难检测的现象(或者说一般在单元级的开发和测试过程中往往会忽视的问题,现在有许多商品化或开源工具可以用于检测内存泄露问题,使用起来也很简单)。内存泄漏经常发生在已发行的产品中,原因很简单,使用简单的功能测试,几乎发现不了内存泄漏问题,因为在产品完成之前测试没对产品进行足够多的使用。内存泄漏通常要求操作要重复非常多的次数以使内存消耗达到能引起注意的程度。尽管与其它编程语言(如C/C++)相比,Java程序更难引入内存泄漏错误,但只要程序仍保持着对对象的引用,该对象仍有可能被实例化并且它占用的内存永远不会被释放。 并发与同步(并发与同步(并发与同步(并发与同步(ConcurrencyandSynchronization):):):):性能测试在查找并发性问题上非常出众,这是因为在任何一个测试生命周期中,它都应用了许多不同的代码路径和定时条件。一般的规则是,性能测试运行的时间越长,涉及并应用的代码路径组合和定时条件就越多。当然,这也的确使得这些问题很难再现(错误可以在5分钟或5天后发生)。死锁、线程泄漏以及任何一般的同步问题通常只能在性能测试阶段被检测出来。这些类型的问题很难通过执行单元测试来发现。开发人员不会一直考虑他或她的代码将与其他地方的代码(在执行单元测试时这些代码可能还没写出来,内存泄漏问题也类似)进行交互。(4)性能测试阶段性能测试可以发生在各个测试阶段中,即使是在单元层,一个单独模块的性能也可以使用相应的工具(在第3部分讲述)进行测试和评估;通常,只有当整个系统的所有成分都集成到一起之后,才能检查一个系统的真正性能。不过如果许多单元模块的性能不佳,集成起来的系统性能会好吗?答案是很明白的—一般都会更家糟糕。因此要从开发的早期阶段就关注和实施性能测试。2.性能测试的步骤性能测试的步骤性能测试的步骤性能测试的步骤应用系统的性能测试通常有如下步骤:(1)制定目标和分析系统1)制定目标确定客户需求和期望在需求分析和文档的支持下,需要对软件系统上的用户业务使用情况进行分析,提出我们所关注的性能测试需求,并告知业务人员。让业务人员来判断我们的性能需求是否能满足客户的真实要求。例如在与用户和系统分析人员进行了充分的讨论后,确定系统的响应时间,这是用户最重视的性能体验。确定响应时间的基本原则是:2/5/10原则:2:2秒钟用户会觉得是一个很好的体验。5:5秒钟用户可能会觉得差了一点,还行,比较好 10:10秒钟是用户所能承受的最大极限。可以根据不同的网络环境,确定用户所能承受的响应时间极限定(如12~15秒)。确定实际业务需求主要是确定用户的业务请求分布等:主要业务请求、平均日交易量、年交易量、峰值交易量等等。下面是一个性能应用请求分布的示例(表1):主要业务请求每单位日平均交易量单位数平均日交易量日峰值交易量年交易量(250工作日)备注A业务16569901287247500B业务1206720936180000……确定系统需求这里的主要工作是分析系统的性能需求、确定合理性能目标。可以从以下几个方面进行考虑。普通数据容量负载时,在不同的用户数时的并发业务响应时间、随机业务响应时间;大数据容量负载时,在不同的用户数时的并发业务响应时间、随机业务响应时间;未来若干年数据容量负载时,在不同的用户数时的并发业务响应时间、随机业务响应时间;下面是一个分析系统的性能需求、确定合理性能目标的示例:并发业务响应时间N个用户在登录系统做业务前,设置集合点,待并发用户到齐后,同时做预定的业务,参见表2。表2:并发业务响应时间单位数人数并发用户数业务响应时间648010A业务2秒200A业务5秒12192010A业务2秒300A业务5秒24480010A业务2秒300A业务5秒600A业务8秒注释:A业务数据容量是20万条记录随机业务响应时间N人随机登录系统,部分用户随机做A业务,部分用户随机做B业务、C业务,参见表3。表3:随机业务响应时间单位数人数随机用户数业务响应时间峰值响应时间6480100A业务200B业务3秒5秒121920300A业务400B业务500C业务5秒8秒244800500A业务800B业务1200C业务5秒8秒注释:A业务数据容量是20万条记录、B、C业务数据容量均为10条记录。2)分析系统系统类别系统类别:分清系统类别是我们掌握什么样的技术的前提,掌握相应技术做性能测试才可能成功。例如:系统类别是bs结构,需要掌握http协议,java,C#,html等技术。或者是cs结构,可能要了解操作系统,winsock,com等。所以甄别系统类别对于我们来说很重要。系统构成硬件设置,操作系统设置是性能测试的制约条件,一般性能测试都是利用测试工具模仿大量的实际用户操作,系统在超负荷情形下运作。不同的系统构成性能测试就会得到不同的结果。系统功能系统功能指系统提供的不同子系统,例如办公管理系统中的公文子系统,会议子系统等,系统功能是性能测试中要模拟的环节,了解这些是必要的。(2)制定性能测试计划主要任务是规划性能测试所需的测试环境、测试软件、相关技术与测试工具的选择,测试的人员组织,测试目标、测试日程等;1)测试环境测试环境主要是描述进行性能测试时所使用的环境,测试环境示例如表4所示:表4:测试环境服务器机型数量CPU内存存储网络连接操作系统系统软件应用系统备注数据库服务器IBMRS60006502816GSAN1000MAIXOracle9.2数据库应用服务器IBMRS6000630124GSAN1000MAIXWebLogic8.1应用系统2)测试软件描述需要测试的应用软件,其特点、采用的技术、架构等。3)相关技术与测试工具的选择要在对各种性能测试工具和性能测试的任务(是在单元阶段进行的性能测试还是在系统已经集成后进行的性能测试,如在单元阶段进行性能测试,那么没有必要采用LoadRunner等昂贵的商品化软件,效果也未必好,在后面我们会讲述这个问题,第3部分也会介绍适合这个阶段使用的工具)进行评估的基础上,选择符合现有软件架构和开发阶段的性能测试工具。性能测试是通过工具,模拟大量用户操作,对系统增加负载。所以需要掌握一定的工具知识才能进行性能测试。大家都知道性能测试工具一般通过winsock,http等协议纪录用户操作。而协议选择是基于软件的系统架构实现(web一般选择http协议,cs选择winsock协议),不同的性能测试工具,脚本语言也不同,比如rationalrobot中vu脚本用类c语言实现。开展性能测试需要对各种性能测试工具进行评估,因为每一种性能测试工具都有自身的特点,只有经过工具评估,才能选择符合现有软件架构和开发阶段的性能测试工具。确定测试工具后,需要组织测试人员进行工具的学习,培训相关技术。参见表5。主流黑盒测试工具列表参见表6。表5用途工具生产厂商/自产版本表6工具名公司名官方站点WASM$://://://://://)测试的人员组织不同的阶段、不同项目、不同的组织方式,使得参与性能测试的人员可能会有比较大的差异。从测试角色来看需求分析人员、案例设计人员、测试执行人员、测试分析人员;从人员组成的角度,应该有开发人员、测试人员、用户代表、系统人员等针对性能测试不同的关注点所对应的相关人员参见表7:表7关注问题相关人员确定性能需求的解决方法项目经理、业务人员、DBA、系统部人员、性能测试工程师确立性能测试目标的原则项目经理不同阶段的
本文标题:软件性能与性能测试 第2部分
链接地址:https://www.777doc.com/doc-4370838 .html