了解性能测试-Part 151Testing软件测试网+cD%_Gz1j
51Testing软件测试网A+q(Rm5L
作者: Dale Perry
{8NP5fS o8L0 大多数软件性能测试项目失败,这里我所说的失败,并不是意味着测试不正常的终止,而是不能给需求方提供任何有用的信息。
k0CQ1O}_Tq0
[ }5x[e?9JY`@0 引起失败的原因有很多。在这个系列的文章中,我将讲述性能测试中出现的基本问题和如何去避免他,你将理解很多问题以及你能不能解决它们。本系列并不能涉及到所有问题,也不适合于高级性能测试工程师。希望大多数读者可以学到如何从失败中找到解决的方法。
.|$l/d#_deI0 本系列文章中将涵括以下几个方面的内容:
:Cqc)Y
O+M7[e0Part 151Testing软件测试网,LJBC;l!s/y
- 测试过程中测试员的职责
- 确定性能和商业目标
- 如何把性能测试加入到开发过程
Part 2
Tv7])?|5ECY0Part 351Testing软件测试网I%x ^t2d!S$W
Part 451Testing软件测试网l-]5LpQaV'h4EN%ou
r:]7ld:i M3z)A0以上这些内容可以按照很多不同的次序讲述。但我将按照我认为最有效的次序进行阐述。这种方法已经被应用到各种类型的平台:大型机,C/S,嵌入式,web等等。第一部分讲述测试者的职责,了解性能目标以及如何使性能测试适合开发过程。51Testing软件测试网A-p1G8xvW
测试者的职责
n"QMp6`3A0
6oq.?|4GiPer0 在性能测试中,性能测试员很像一个顾问,你指导和协助技术人员识别和改正问题。性能测试员进行测试,并不改正,调试或者关闭发现的问题。成功的性能测试是团队共同努力的结果。任何关键的成员都可能不得不条则会调整,修复,调试系统或应用程序,做出对实现性能目标有益的事情。51Testing软件测试网1vXnAGj v
;{7?-?*s#w;M2G9vBr)|({0完整的性能测试团队应该包含如下关键成员:51Testing软件测试网KI@Au3P\l
- 测试/质保团队
- 用户/顾客
- 经理
- 市场销售人员
- 开发全体人员
- 网络管理员
- 系统管理员
- 安全管理员
没有尽早的使关键人员加入到测试过程中,几乎一定会有问题在后面被提出。促使关键人员尽早的加入到性能测试计划可以确保减少后面出现问题,尤其是在测试结果不是太好的时候。51Testing软件测试网!|.n0P1vB]^oca
s \9E;R }~D0 验证性能和商业目标.51Testing软件测试网|2Tf r7]E
接下来,我们需要明确验证的目标和性能测试的目的。人们在性能测试中最好犯的一个错误是思考的全是他们需要的性能测试工具(我们将在第四部分讨论工具)。当然工具是必不可少的,工具提供了解决问题的答案。但是在此之前,你需要知道问题是什么。不知道哪些性能问题需要你解决,就很难鉴定你的性能测试是成功还是失败。
dk/hUpq!y j vr0 我经常被问到的第一个问题是“我如何分析工具产生的测试结果?”。我的回答是“你希望你的工具做些什么?”。大多数人不能回答这个问题。这是第一个指标指示你的性能测试可能是没有什么价值的。51Testing软件测试网oHPbUt H1x
大多数情况,测试员从经理那里获取整体的指导。然而,经理倾向于关注投资效益和用户满意度,但是那些都不是性能指标。不了解性能测试项目目标和目的,即使工具带给你的大量信息,你也无法解释,乃至达到经理的预期。51Testing软件测试网0M.K
h3Hy$F
[ ^ K5XK
收集和确定性能测试目标可能是整个性能测试过程中最枯燥的部分。然而,时间会告诉你有些事情必须在前期就要做。如果你不能获取你需要的性能指标,进行性能测试是没有任何意义的。
w4om:x3P1l0 了解性能指标的第一步就是把它们从商业目标中分离出来。如下图1
z!Z(iy
m1[D0
7I\3A&zl0图1:从商业目的中分离出性能指标51Testing软件测试网8J#N'pf3lWX@
)}sj8SSF0K5T0 为了达到软件性能指标,有一些系统或者应用程序的指标是需要我们在测试过程中去度量的。糟糕的性能表现通常是在压力或者即将到达最大容量的时候发生的。如果你不能设计这些方面的测试,那么就不能算是完成任务。下面是一些问题,这些问题对于确定性能目标与测试目标的异同点是很有好处的:51Testing软件测试网K7hA
kd_]
- 我将执行什么测试?
- 我将收集哪些数据?
- 为了度量“性能”,你必须收集系统和应用程序运行时的相关信息
- 我如何证明目标已经实现?
'M5QU WBB-l4|s8w-~0“性能”定义是在给定的环境下的行为表现。比如你评审一个用户的效率。没有系统指标给你去测量以证明哪个用户效率更高。
*?%|Mt-Y-n:]6\7x051Testing软件测试网sJ&]P[w
如何使性能测试融入到开发过程51Testing软件测试网8h:c/y)Jc
51Testing软件测试网9U.uOo(PKkG
很多人把性能测试看作产品在交给客户之前才要做的最后一件事。这既是错误的也是危险的。图2显示了性能测试的通用做法。它依赖于一个完整的系统或者应用程序。51Testing软件测试网:}(xD
B5m.OL3t2f
51Testing软件测试网s*g0T{b+a7Y
图2:性能测试的一般做法
X,hBX9hz~#Y"H0使用这个方法的主要问题是:如果有问题产生而要做需求变更时可能要重新测试变更对功能的影响。这时重点需要注意的是同一时间超过一个功能变更就将很难协调。多个技术团队将问题变得复杂且难于协调。也有可能产生模糊不清的解决方案。同时调整数据库和程序代码可能会出现彼此覆盖的情况。因此,很多团队是使用一次一个的方法(OFAT)51Testing软件测试网I6d9bfp,P
r3?!tT#A4Ua0遗憾的是,OFAT在如下的情况下并不能很好的工作:51Testing软件测试网*~.bi/u
t1^w!ux
- OFAT假设元素是彼此孤立的
- 有很多复杂的,难于理解和隐藏的依赖关系
- OFAT花费时间太长
- 其它方法很难很好的应用
举例来说,一旦问题被“fixed”并重新进行测试,我们可能发现新的关于网络或程序的问题而不得不去“fixed”。而这可能又产生更多的问题。这可能最终成为死循环,周而复始。
X/HdCW y?6}h0 是的,性能测试需要一个稳定的环境和软件。然而,这并不意味着所有功能都要是完整的。可以使用预防性思维(静态测试)和增量迭代开发方法,在有几个稳定可用功能的情况下也可以进行性能测试。51Testing软件测试网'E,Sr5jl a(`
增量和迭代开发模式给尽早的执行性能测试提供了便利。通过在开发过程早期确定性能问题,就有很多机会在解决问题成本提高之前去改正设计和架构。51Testing软件测试网_,^0P
Zf
51Testing软件测试网1JKo#Nw'\+V*l
$vtW.JP6d#Y5h6j0图3:增量和迭代开发过程中允许早期进行性能测试51Testing软件测试网7G9[5r'f"h n3U+{#g
51Testing软件测试网wABr,i"A
一旦第一个build版本的功能测试结束,在开发团队继续开发下一个迭代时性能团队就可以开始测试了。这样做有两个好处:基本架构得到了尽早的测试,由于只是局限于一个完整的功能,修改架构和设计的代价也很小。缺点是协调开发团队和性能测试团队比较复杂。
UI,iwD5a0~/u1a:U051Testing软件测试网.L6q#C6q;w2xj'l5P
如下列出开发过程早期可能通过静态方法发现的在网络,应用程序以及数据库中存在的问题
l$O
ObUcEc0 网络问题:
rOL+^9s/JD0- IP连接和HTTP的使用情况
- 过度的使用安全功能
- 负载均衡的类型和特征
- 应用程序服务器与数据库服务器之间的交互
- 包的大小(应用程序网络规模的大小)
- 连接池和连接共享
- 服务器在网络中的位置
- 增加的延迟
应用程序问题:
3uP-IN,FuEc%[0- 过多的内存分配和取消分配
- 不正确的任务初始化和管理
- 不正确的垃圾收集,特别是产生失败或故障之后
- 缓存丢失或者缓存存在太久
- 持久性应用,比如黑莓设备
- 应用程序配置参数冲突
- 高资源消耗的功能(CAD/CAM,等等)
数据库问题:
.^pK5T5b"rF
P0- 索引设计
- 动态索引的使用
- 锁定连接中可能存在的死锁
- 使用效率低的缓存
- 过度使用的缓存
- 使用资源集中的功能,比如参照完整性
- 存储过程和触发事件的使用
- 表碎片(第三范式过度使用)
- 不正确的时间表和索引重组
51Testing软件测试网*FPZP_8_3h
如果你能在他们系统设计之前发现性能问题,他们将节约很多的钱去做正确的事情。诚然,这将减缓项目进度用以整治和改正需求或者设计。然而,项目后期做设计修改将对项目有更大的影响,而且重新设计还要承受影响项目进度的风险。51Testing软件测试网4|7Lv`)^~5@3l&M9lt
51Testing软件测试网e9h.qF8^N6h6k
无论选择哪种方法,性能测试的设计和分析活动都必须从需求阶段就开始。等待太久对于性能测试团队就意味着灾难。测试者是性能专家的眼睛和耳朵(典型的是系统管理员,数据库管理员,网络工程师,和开发人员)。51Testing软件测试网'ZaV4H0K%q9vI!}u
51Testing软件测试网a2QR"z2q"]A}(N
由于性能测试的复杂性,需要大量的资源。有些公司会外包一些或全部的测试工作。通常情况下,会外包那些与业务知识关联不大的而不是那些需要精通公司业务的测试者参与的测试工作(比如性能测试)51Testing软件测试网?G]Io
q ]+f^G|I
^5R0专注于性能测试的公司具有很多重要的技术。但是,除非你有妥善的计划,否则不要指望外包测试。外包测试者需要做同你一样的任务,而且他们要从你那获取信息。这相当于你付钱让别人告诉你已经知道的答案。如果你请昂贵的专家帮助你解决性能问题,确保在他们抵达之前你已经准备好初步的性能测试脚本。这可以节省大量昂贵的“闲暇”时间。
:D'm-Bo2Gi:P051Testing软件测试网&?+}4Vj"P&m+o8V@
如果性能测试是远程的,而且应用程序或者系统在开发或测试以及处在组织的防火墙下,要进行可行性测试以确保远程测试员可以通过防火墙访问被测试系统。
e/O%M(N D.C*G)n0大多数的外包承包商可以分为以下一个或多个类型:51Testing软件测试网4p$as'v&@J*ifK8?
- 现场顾问–顾问在客户的县城工作
- 远程顾问–顾问在他们自己地方工作,系统或者应用程序位于客户端。
- 测试实验室–应用程序或系统处于远程测试的位置,在那儿顾问可以安装和测试他们
- 应用服务提供商或管理服务供应商-内部工作人员利用硬件和软件托管在第三方的位置测试他们部署在自己站点的应用程序或系统。
了解关于性能测试各种作用以及把性能测试尽早得整合到开发过程中是测试成功的关键。如果你没有把握关键和尽早的开始计划,成功地几率是很低的。一旦那些关键问题处于可控状态,我们就可以开始分析问题,设计一套必要的性能测试。在本系列的下一部分,我将把问题通架构和基础结构结合起来,从而确定需要进行的性能测试类型。51Testing软件测试网+\ Tq#w U,fJT
y
原文地址:http://www.stickyminds.com/BetterSoftware/magazine.asp?fn=cifea&id=118
h3]F;h"d5x&_l l"x0 本文章由本人翻译供大家学习之用,版权归原作者所有。原作者如有任何异议,请通知本人删除,且未经书面授权许可,任何网站或个人不得转载。51Testing软件测试网C
F3E`,s*@}q
y