软件性能与性能测试第1部分

上传人:工**** 文档编号:562785826 上传时间:2023-02-01 格式:DOC 页数:16 大小:438.50KB
返回 下载 相关 举报
软件性能与性能测试第1部分_第1页
第1页 / 共16页
软件性能与性能测试第1部分_第2页
第2页 / 共16页
软件性能与性能测试第1部分_第3页
第3页 / 共16页
软件性能与性能测试第1部分_第4页
第4页 / 共16页
软件性能与性能测试第1部分_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《软件性能与性能测试第1部分》由会员分享,可在线阅读,更多相关《软件性能与性能测试第1部分(16页珍藏版)》请在金锄头文库上搜索。

1、软件性能与性能测试教程 第 1 部分中国软件评测中心 陈 兵本系列教程对软件性能与性能测试这个主题进行了较为全面的介绍和分析。教程分为三个部分: 在第 1 部分,讲解了软件性能的基本知识,介绍了常用的软件性能指标,在分析 影响软件性能因素的同时,以实例清晰讲解了如何提高软件的性能及性能的可扩展性等问 题;在第 2 部分,首先给出了性能测试的基础知识, 然后侧重于从性能工程的角度提出开展 性能测试工作的流程,和进行性能测试工作的策略,以及如何分析性能测试数据;在第 3 部分,从开发的(而不是第 3 方测试)角度,以实例为引导,一步一步地分析讲解在开发环 境下进行性能测试的策略、方法和手段(采用的

2、工具) 。本系列教程可以用作软件开发人员、软件测试人员、软件项目经理、软件质量人员和 需要了解软件性能测试的各级软件管理人员的工作参考手册, 也可作为有志于软件开发和软 件性能测试领域人员的参考资料。 .在 20 世纪 60 年代,计算机资源还十分有限, 效率是被关心的最重要问题。 到了 70 年代计算机迅速发展,程序员意识过分专注于性能会损害程序的可读性 和维护性。因而软件性能和代码调整受到的重视程度有所下降,随着 80 年代微 型计算机的革命,性能限制又把效率问题提出来。在整个90 年代中它被人们关注的程度则逐渐下降。 21世纪初,移动电话和 PDA 等设备上嵌入式软件受到的 内存限制,以

3、及解释型代码的执行时间过长,使效率再度成为了一个热点话题。1. 什么是 软件性能 系统的性能是个很大的概念,覆盖面非常广泛,对一个软件系统而言,包 括执行效率、资源占用、稳定性、安全性、兼容性、可扩展性、可靠性等等。一般来说,性能是一种指标,表明软件系统或构件对于其及时性要求的符 合程度;其次性能是软件产品的一种特性,可以用时间来进行度量。通常,对于软件性能的关注是多个层面,用户关注软件性能,系统管理员 关注软件性能, 软件开发人员也关注软件性能, 那么这些不同的关注者所关注的 “软件性能” 的具体内容是不是都完全相同呢?如过不同, 那么不同点在哪里?面我们从三个不同的层面对软件性能做一个简要

4、的介绍(1)用户视角的软件性能从用户角度来说,软件性能就是软件对用户操作的响应时间。(2)管理员视角的软件性能从系统管理员的角度来看,所重点关注的软件系统性能是:系统的响应时 间;系统运行时服务器的状态,如 CPU利用情况、内存使用情况等;系统是否能 够实现扩展;系统支持多少用户访问;系统性能可能的瓶颈在哪里;系统是否支 持7*24小时的业务访问等。(3)产品开发人员视角的软件性能这也是本文的视角,即本文从开发人员的角度来讨论软件性能与性能测试。 从开发人员的角度来说,会关心主要的用户感受一响应时间,因为这毕竟是用户 的直接体验;另外,开发人员也会关心系统的扩展性等系统管理员所关心的内容, 这

5、里指的是性能而不是功能的可扩展性, 这个问题本文的后面讨论;但对开发人 员来说,最想知道的是“如何通过调整设计和代码等等 方法来提高软件的性能表 现”和“如何发现并解决软件设计和开发过程中产 生的由于多用户访问引起的缺 陷”等等,参见表1。表1给出了开发视角的软件性能关注内容。开发人员关心的问题冋题所属环节架构设计是否合理?系统架构数据库设计是否合理?数据库设计代码是否存在性能 方面的冋题?代码系统中是否有不合理的内存使用 方式?代码系统中是否存在不合理的 线程同步方式?设计与代码系统中是否存在不合理的资源竞争?设计与代码从表1中可以看到,问题所 属的关键环节是在代码构建上面。从开发人员的角度

6、来看,可以用 如下五个方面来作为评判性能的标准:1)运算的性能一一哪一个算法的执行性能最好?2)内存的分配一一程序运行时需要耗费多少内存?3)启动的时间一一程序启动需要多长时间?这在 Web项目中的影响不大, 但要注意部分程序需要部署或运行在客户端时的情形(比如Applet程序)。4)程序的可伸缩性在压力负载的情况下,程序的性能如何?5)性能的感知用户在什么情况下会觉得程序的性能不好? 以上五个方面,在具体的使用场景可以有选择的去评判。关于如何提高系 统性能的问题,我们在下节进行讨论。2. 如何提高程序的性能 要提高软件的性能,我们可以从以下几个方面着手, 使用高性能、速度快的硬件- $ =

7、速度 使用恰当的编程语言和进行编译器优化 设计可扩展的应用程序架构设计方面 选择正确的数据结构和算法 代码调整避免使用较慢的 OS APIs调整、测量(注意是测量而不是测试)、再调整、再测量 (1)从上面的几个方法来看,使用高性能、速度快的硬件很容易理解,也 是决大多数人在碰到性能问题的时候首先会想到的办法。采取这样的方法总是很 有效的吗?(2)使用恰当的编程语言和进行编译器优化也是提高软件性能的方式之 一。例如在使用Intel C+编译器时,编译器选项可以组合。每种优化各有其特 点,尝试着各种优化选项的效果,有时各种优化选项组合使用可能效果更好。使 用时,这些选项加到Project Sett

8、ing对话框中。如图1所示。Project Settings?X图1同样,在原则Java语言构建软件系统时,可以 针对JDK进行调优。例如: 选择合适的JDK版本:不同版本的JDK,甚至不同厂家的JDK可能都 存在着很大的差异,对于性能优化的程度不同。一般来说,尽可能选择 最新发布的稳定的JDK版本。最新的稳定的JDK版本相对以前的JDK 版本都会做一些bug的修改和性能的优化工作。垃圾收集:垃圾收集就是自动释放不再被程序所使用的对 象的过程。当 一个对象不再被程序所引用时,它所引用的堆空间可以被回收,以便被 后续的新对象所使用。垃圾收集器必须能够断定哪些对象是不再被引用 的,并且能够把它们所

9、占据的堆空间释放出来。如果对象不再被使用, 但还有被程序所引用,这时是不能被垃圾收集器所回收的,此时就是所 谓的“内存泄漏”监控应用程序是否发 生了内存泄漏,有一个非常优 秀的监控工具推荐给大家 Quest公司的JProbe工具(这样的工具非 常多,有许多是开源的),使用它来观察程序运行期的内存变化,并可 产生内存快照,从而分析并定位内存泄漏的确切位置,可以精确定位到 源码内。这个工具的使用我在后续的章节中还会做具体介绍。Java堆的优化:Java堆是指在程序运行时分 配给对象生存的空间。通过 -mx/-Xmx和-ms/-Xms来设置起始堆的大小和最大 堆的大小。根据自己 JDK的版本和厂家决

10、定使用-mx和-ms或-Xmx和-Xms。Java堆大小决 定了垃圾回收的频度和速度,Java堆越大,垃圾回收的频度越低,速度 越慢。同理,Java堆越小,垃圾回收的频度越高,速度越快。要想设置 比较理想的参数,还是需要了解一些基础知识的。Java堆的最大值不 能太大,这样会造成系统内存被 频繁的 交换和分 页。所以最大内存 必须 低于物理内存 减去其他应用程序和进程 需要的内存。而 且堆设置的太 大,造成垃圾回收的时间过长, 这样将得不偿失,极大的影响程序的性 能。在效率 方面,程序的效率与 详细设计阶段确 定的算 法的效率直接有关。在 详细设计翻译转换 成源程序代码后,算法效率反映为程序的

11、执行速度和存 储容量 的要求。要从计算 复杂性、内存的使用、 数据依赖 性等多方了解,使用如何实现 算法指导起一个重要作用。而数据的依赖性与指令的选择密切相关,以Intel86x指令结构为例: 选择指令需要实现一种算 法的指令可能对性能有一个大的 影响。因此检测采 用某个算法中的某些指令,像整数加法可能执行两个/s,还执行其 它指令;像整数除法,可能每23Clock才能执行一次。由于不同的 指令有不同的 延迟和吞吐量,指令的速度是一定的。指令输入准备好以后( 预取来自内存),指令的延迟是要求执行开 始并完成一条指令的时钟数。例如:整数乘大约15-18 Clock。所有, 乘法的响应在它开 始执

12、行以后有可利用的 15-18 Clock。指令的吞吐量是开始执行相同的指 令之前处 理器要求等 待的时钟 数。指令的吞吐量总是少于或等于指 令的延迟。乘法的吞吐量是 5Clock,意味着新的乘法可能开始执行每5Clock,即使它 花费 15-18Clock去响应任何指定的乘法。指令流水线引起吞吐 量和延迟 的 Clock 数是不同的。数据的依赖性和指令的平行性数据的依赖性影响处理器的同 步执行指令的能力,它能提高算法的性能。Pentium处理器是能够每个Clock执行六条指令但由于指令流的问题,同步执行 指令数经常是较低的。理想的情况如 图2所示:乘法:a=u*v b=w*x c=y*z051

13、0152025a=u*v b=w*x5ClockC=y*Z吞吐量|I15ClOck图2延迟图2这是假设这些指令之间没有数据依赖性存在,允许它们同时进行,只 有指令的延迟和吞吐量的限定。在实际情况下,数据依赖性往往存在,并且这会使结局有巨大的不同,如 图3所示:规则在图3中,数据的依赖性和延迟限制指令的平行性对算法性能来说是关键 的限制因素。补充指令平行性规则对各个已存在的处理器家族已有说明,但用数 据依赖性和延迟解释能产生一个稍微好些的执行指令,可以忽略补充指令平行性乘法: a=w*x*y*z051015202530w*xy*zwx*yzI 1】 I35Clock吞吐量数据的依赖性对于线程的监

14、控可以借助很多工具来完成,图4是采用JProfiler对线程进 行的监控例子亟 JPFtsfll酎 EAnlniated Bezier Curve DemoCPU viewt亠口凶 ecsHan Edit ProlMer Viswc Windmu lie Ip4 越渤& &心 ProflriQ-AviewsHeap wdteThread vlevMSvMviews图4(3) 设计可扩展的应用程序:指的是软件性能上的可扩展。这点可能会使 很多读者感到很困惑,难道还有哪些设计会 造成使用更高速度的硬件不能提高软 件的性能吗?答案是肯定的,如果一个软件设计的不具备可以扩展性,那么在 4 个、8个CP

15、U的机器上运行会 比在1个CPU的机器上运行的速度 快不了多少。 让我们用一个例子来说明这个问题。这是一个SMPT服务器的例子,为了说明问题,我们 将该邮件服务器的实 现进行高度抽象(实际要复杂的多)。这个服务器的基本功能就是:发邮件,来 邮件后进行处理,分析邮件发给谁,如果发给是本机的邮箱的人员就给把它直接 拷贝到一个邮箱中去。如果是传送的另外一个SMPT服务器的,就通过TCPIP 把它给转发出去。高度抽象后的抽象SMPT服务器/ Read SMTP commands/data from sockets-首先把邮件从 sockets读进来If (ReadFile( ) / various housekeep ing removed / Parse SMTP recipients and other headers- 分析读进来的邮件,先分析头 文件(地址,来源的信息)If (!ParseSMTPHeaders( )/ han dle errors/ Parse bodies-然后分析文件的 bodiesIf (!ParseSMTPBodies( ) / handle err

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号