中心极限定理(The central limit theorem)
中心极限定理表明如果总体的分布有一个平均值μ和标准偏差σ,那么对于一个十分大的n(>30),其取样平均值的分布将接近于正态分布,其平均值μmean = μ ,标准偏差σmean = σ/√n。
注意取样平均值的分布是正态的,而取样自身的分布不必是正态的。也就是说如果多次运行测试脚本则测试结果的平均响应时间将会是正态的。
图 5 和图 6 分别展示了两个正态分布。 在这里横坐标是采样响应时间的均值, 总体的均值被调整到坐标的原点(shifted so the population mean is at the origin)。 图5 表明90%的时间里,采样均值位于±Zσ的区间里(percent of the time, the sampling means are within the interval ±Zσ,),这里的Z=1.645 和 σ 是标准偏差。 图 6 表明了99%的情况下的情形这时的Z=2.576。 在给定的概率下,如90%, 我们可以看到相应的Z呈现正态曲线,反之亦然。
Figure 5。 Z value for 90 percent
Figure 6。 Z value for 99 percent
在相关资料中所列的是可提供正态曲线计算的一些网站。在这些网站,我们可以计算随意的相对区间内的概率(如,-1.5 < X < 1.5)或者在一个聚集的区域(cumulated area)内 ,(如, X < 1.5)。 也可以从下面的表中得到近似值。
表 1。 对应于给定的置信区间(confidence interval)的标准偏差范围(Standard deviation range)
表 2。 对应于给定的标准偏差范围(Standard deviation)的置信区间(confidence interval)
置信区间(Confidence interval)
置信区间(confidence interval)的定义是[取样平均值- Z*σ/√n, 取样平均值+ Z*σ/√n]。 例如, 如果置信区间(概率)是90%, 经查找可知Z 值是1。645, 于是置信区间就是 [取样平均值- 1。645*σ/√n, 取样平均值+ 1。645*σ/√n], 这意味着在90%的时间里, 总体平均值(population mean)(是未知的) 会落入这个置信区间内。 也就是说, 我们的测试结果是十分接近的。 如果 σ(标准偏差) 更大一些, 置信区间也会更大,这就意味着置信区间的上限就会更可能会越过可以接受的范围,即σ 越大,结果越不可信。
响应时间需求(Response-time requirements )
现在我们把所有的信息都归结到响应时间需求上来。首先。必须要定义性能需求,如: %95概率的置信区间的平均响应时间的上限必须小于5秒。 当然,最好有相应的需求或场景。
在性能测试结束后,假设进分析得出结论是平均响应时间是4.5秒,标准偏差时4.9秒,样本数量是120个,然后就可以计算%95概率的置信区间了。 通过查表1,找到Z值是 1。95996。 于是置信区间就是 [4.5 – 1.95996*4.9/√120, 4.5 + 1.95996*4.9/√120], 也就是 [3.62, 5.38]。 尽管看起来这个响应时间看起来很不错,但这个结果(因为超出了需求的要求,因而)是不可接受的。 实际上, 可以检验的是即使是对于80%概率的可信区间,这个测试结果也是不能接受的。正如你所看到的,使用了置信区间分析后,会得到一个十分精确的方法来估算测试质量。
在web应用中,为了测定某一场景的响应时间,我们一般要通过测试工具来发送多个访问请求,例如:
4. 登陆
5. 显示表单
6. 提交表单
假设我们对请求3更感兴趣。为进行置信区间分析,我们需要的仅是请求3的所有样本的响应时间均值和标准偏差,而不是全部被统计的样本的。
在Jmeter的图表结果监听器中计算的却是全部请求的响应时间均值和标准偏差。 而Jmeter的聚合报告监听器计算的是独立的采样器的响应时间均值,可惜没有计算标准偏差。
总之, 仅仅指定响应时间均值是危险的, 因为不能反映出数据的变化。 即使响应时间均值是可以接受的,但是置信区间仅有75%,这个结果也不能令人信服。但是,使用置信区间分析还是会带来更多的确定性。
结论
本文讨论了以下内容:
·详细讲解了Jmeter 线程组在加载负载时的特别设置
·使用Jmeter代理服务器(Proxy Server)元件自动建立测试脚本的指导方针,其重点在于模拟用户思考时间(user think time )。
·置信区间分析(Confidence interval analysis), 一种我们可以用来更好地满足响应时间需求的统计分析方法
通过使用本文提及的技术可以改善测试脚本的质量,更广泛地说,本文所讨论的内容属于是性能测试的一个工作流程的一部分, 是其中的一个较困难的部分。性能测试包括并不仅限于以下内容:
·编写性能测试需求
·选择测试情景
·准备测试环境
·编写测试脚本
·执行测试
·回顾测试脚本和测试结果
·指出性能瓶颈
·书写测试报告
此外, 性能测试结果,包括确定下来的瓶颈, 都需要反馈给开发团队或者架构师进行优化设计。 在这个过程中,并写测试脚本和回顾测试脚本是其中很重要的部分,要精心筹划和管理实施。凭借测试脚本指导和一个好的性能测试流程,你将会有更多的机会来在较重负载下优化软件性能。
关于作者
Chi-Chang Kung 是台湾Sun 公司的java系统架构师,也是IEEE 和ACM的成员。
相关资源
·JMeter: http://jakarta.apache.org/jmeter/index.html
·《中心极限理论以及经典推论》("Central Limit Theorem and Classical Inference" )Scott M。 Lynch (2005年2月): http://www.princeton.edu/~slynch/clt_inference.pdf
·置信区间(Confidence intervals):http://people.hofstra.edu/faculty/Stefan_Waner/RealWorld/finitetopic1/confint.html
·《java网站的性能分析》(Performance Analysis for Java Websites), Stacy Joines et al. (Addison-Wesley, 2002年9月; ISBN: 0201844540):http://www.amazon.com/exec/obidos/ASIN/0201844540/javaworld
·《响应时间:三个重要的限制条件》("Response Times: The Three Important Limits") 引自《实用工程学》( Usability Engineering), Jakob Nielsen (Morgan Kaufmann, 1994; ISBN 0125184069):http://www.useit.com/papers/responsetime.html
·一些提供了正态曲线计算功能的网站(Websites for normal curve calculation):
o http://www.psychstat.smsu.edu/introbook/normal.htm
o http://www.ecositebr.bio.br/curva_normal.htm
o http://statistik.wu-wien.ac.at/mathstat/hatz/vo/applets/probCalc/normal_z_p.html
·更多关于测试的文章,请参照JavaWorld's 标题索引的Testing 部分:http://www.javaworld.com/channel_content/jw-testing-index.shtml
·关于JAVA开发工具,参见JavaWorld's 标题索引的Development Tools 部分:http://www.javaworld.com/channel_content/jw-tools-index.shtml
文章来源于领测软件测试网 https://www.ltesting.net/