《应用程序性能测试的艺术(第2版)》—第1章 1.2节为什么性能问题如此常见

简介: 性能问题之所以让人头疼,有一个很重要的原因就是它通常在应用生命周期的后期才会凸显出来,越晚发现问题,就要花费越多的精力去解决问题。

本节书摘来自异步社区《应用程序性能测试的艺术(第2版)》一书中的第1章,第1.2节为什么性能问题如此常见,作者【新西兰】Ian Molyneaux(莫得尼克斯),更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.2 为什么性能问题如此常见
上文为什么是好的性能、什么是差的性能做了一个基本的定义。应用的性能孰优孰劣,似乎也很好判断,那为什么还有那么多的应用无法满足高性能这样一个关键需求呢?下文给出了一些常见的原因。

1.2.1 IT商业价值曲线
性能问题之所以让人头疼,有一个很重要的原因就是它通常在应用生命周期的后期才会凸显出来,越晚发现问题,就要花费越多的精力去解决问题。图1-1所示的IT商业价值曲线很好地描述了这个观点。


365a5d87d3794aa1fb847caf1ca5b6485422061e

图1-1所示中,实线(预期)表示在经过一段时间的IT投入(应用开发过程)后,应用按期发布成功,上线之后运行良好,几乎没有任何性能问题,并立即开始带来营收(黑色方块)。

图1-1所示中,虚线(实际)描绘了在现实世界经常发生的真实情况:开发延迟、发布延期(虚线方块)。应用发布上线之后,为了应对层出不穷的线上性能问题,大量的时间和金钱被消耗。最终开发出来的应用不能为企业带来预期的收益,这对谁都不是一个好消息。

类似这样的问题,在公司董事执行层得到越来越多的重视。很多公司都引入了IT服务管理(Information Technology Service Management,ITSM)和IT资产管理(Information Technology Portfolio Management,ITPM),希望由此走上拥抱IT基础架构库(Information Technology Infrastructure Library,ITIL)这个行业标准的道路。在当今很多公司里,IT部门再也不是一个“独立王国”,可以享受不受限制的资金和资源投入。它也成为公司众多部门当中的一个(重要的)业务单元,同样需要在一定的预算控制下运作。

1.2.2 性能测试成熟度
图1-2所示是弗雷斯特研究公司在2006年针对一次应用部署的产品中性能缺陷的修复率监控得到的数据。在本次再版中,我本想用一些更新的数据来代替这张图,但是很遗憾,这些数据从2009年以来似乎并没有发生太大变化。


4ee67788f8baf2047cc2a9745664e2dffdb425bd

图1-2中描述了3个性能测试成熟度等级。第一级称为“救火式”,也就是说在应用正式发布之前几乎没有任何性能测试,因此基本上所有的性能问题都需要在线上发现并解决。这是最低效的一种方式,但让人诧异的是,这种做法在业界还相当普遍。采用救火式对待应用性能的公司面临着巨大的风险。

第二级称为“性能验证(或者叫检验)”。采用这种模式的公司在对待应用性能时,会做一些性能测试,但是这通常只会发生在应用生命周期的靠后阶段;因此,仍然会有相当一部分性能缺陷会遗漏到线上(30%)。这是目前大多数公司采用的方式。

最后一级称为“性能驱动”。这意味着在应用生命周期的每一个阶段,性能都会被纳入考虑。采用这种方式的公司,通常只会有很小一部分性能缺陷遗漏到线上(5%)。这才是所有公司应该努力采用的一种性能测试模式。

1.2.3 在应用设计阶段缺少性能考虑
回到关于导致性能问题的常见原因的讨论上来:如果在应用设计阶段没有充分考虑性能,麻烦会接踵而至。“性能驱动设计”本身对于应用性能就是一个很好的保证,或者至少在出现意料之外的性能问题时,提供了一种便捷修复的可能性。由于设计导致的性能问题如果在应用生命周期的早期阶段没有发现,那么到后期很难彻底消除,而且这种性能纠正如果不耗费巨大返工几乎是不可能的。

1.2.4 最后一刻才想起性能测试
上文提到,有很多公司在研发过程中采用了“性能验证/检验”模式。使用这种模式,性能测试往往是在应用即将发布之前才开始的,他们几乎没有考虑性能测试本身所需要的时间,也没有考虑如果发现问题所需要的修复时间。虽然这种方式比性能“救火”要好,但这种方式的缺点也显而易见:一些非常严重的性能缺陷仍有可能被遗漏到线上;另一种情况是虽然发现了问题,但是却没有足够的时间在应用发布以前修复这些问题。

性能测试被延迟到最后一刻带来的常见场景就是为了修复临近发布才发现的性能问题,应用发布不得不一拖再拖。一个带着性能问题上线的应用在发布之后仍需要不断的投入来修复问题,最坏的情况是应用彻底下线直到问题解决。

所有这些问题都会对业务以及等着使用应用的客户信心造成极大的负面影响。所以性能测试必须尽早开始,而不是等到应用即将发布的最后一刻。

1.2.5 可扩展性
对应用容量需求或者应用的可扩展性评估不足也是导致性能问题常见的一个原因。应用的设计和预期的发布模式很容易忽视潜在的用户社区体量和地理分布。许多应用在开发和测试过程中都容易忽略下面一些问题。

有多少终端用户会使用这个应用?
这些用户会分布在什么地方?
有多少用户会并发使用这个应用?
终端用户如何接入这个应用?
随着时间发展,应用的用户增长模式是怎样的?
最终的应用拓扑是怎样的,会有多少台服务器,它们地理位置分布在哪里?
应用对于网络容量的需求会是怎样的?
如果忽视上面提到的这些问题,我们就无法真实评估应用到底需要支持多少线上并发用户。同样,应用终端用户的网络情况,比如低带宽、高延迟的广域网连接,也是容易被忽视的一个考量因素。本书第2章将会讨论关于连接性问题的更多细节。

1.2.6 低估受欢迎程度
很多公司会低估他们网站的受欢迎程度,这听起来有点奇怪,但是事实确实如此。公司在发布网站时容易忽视“追新效应”。每当有什么新奇的东西出现,人们都会对此非常好奇,然后蜂拥而至。有的时候为了发布效果,公司也会通过媒体来做一些推广,这就更加重了这种群集效应:本来预期网站在发布之后第一天会有10000的点击量,结果等着你的却是1000000的点击量,这样预期之外的压力足以将你的系统彻底击溃。

换句话说,当我们考虑性能时,我们需要考虑的是峰值流量而不是平峰流量。

重大故障:一个真实案例

几年前,英国政府决定在互联网上公开1901年的人口普查数据。这项工程浩大,需要将大量的纸质文档电子化,然后开发一个应用供用户来访问。

我本人也非常期待这个项目的实施,因为我当时正在追溯自己的家族历史,而政府即将公开的这部分数据应该可以提供很多有用的信息。当这个网站上线之后,我便马上登录使用。虽然我发现网站有点慢,但我还是能够用它进行一些简单的搜索。然后仅仅过了一天,当我再来使用这个网站时,呈现在我面前的已经是一则道歉信息,表明网站暂时不可用。这个网站在最终修复重新发布之前连续好几个星期不可用。

这是一个低估应用受欢迎程度的典型案例。大家对这个网站的关注程度远远超出了预期,因此网站的性能支撑不了如此大体量的访问点击。这并不意味着这个网站在推出之前没有做过性能测试。但这个案例至少说明,对于这样一个网站,评估的性能和容量需求太保守了。

一个好的应用必须能够支撑那些突发的需求高峰。

1.2.7 性能测试还是一门非正式学科
正如上文提到的那样,性能测试计划和实施通常还是非常不正式的。其中的原因很难考究,因为功能测试在很多年前就已经成为一门非常正式的学科。关于功能测试,行业内有许多沉淀和专家意见,甚至还有很多咨询公司专门提供测试类的咨询服务。

回到2009年看性能测试,情况却和功能测试恰恰相反,至少从参考资料的层面上说是这样。当时测试行业内几乎没有任何关于性能测试的系统性文档,所以我决定为性能测试写些东西。我们一直不缺关于如何进行应用性能调优的书籍和文档,但是阐述如何有效地进行性能测试的书籍实在是太少了。

到了2014年,我很高兴地看到情况有所改观。当我们在谷歌上搜索“性能测试”的时候,我们能够搜到大量公司,他们提供性能测试服务、工具和一些培训,当然这些公司更多的出发点还是性能测试工具。

1.2.8 没有使用自动化测试工具
如果不使用自动化工具,就没有办法有效开展性能测试。人肉战术(周末叫上100个心怀怨恨的员工,掐着秒表测试性能)显然不是一个好主意。首先,这种人肉测试没法复用,然后为了测试稳定性,让员工连续24小时使用/测试系统,这恐怕已经侵犯员工权利了。

还有,你如何对来自100个不同员工的响应时间数据进行关联分析呢?更别提还有那么多监控指标(网络、服务器)需要关注。如果你的应用的目标用户数小于5个,这种人肉性能测试方法或许还可行,但是如果真是这样,恐怕你现在也不需要阅读这本书了。

业界有不少非常棒的性能测试工具,而且这样的工具还会越来越多。需要进行多大规模的性能测试,很大程度上决定了你使用工具的成本。好消息是,性能测试工具市场是一个充满竞争的市场,最大的不一定是最好的。因此在选择工具之前,最好多做点功课,帮助公司IT预算负责人更好地决策。附录C的列表包含了当今业内领先的性能测试工具供应商。第2章会详细讲述如何根据需求,选择最合适的性能测试工具。

1.2.9 应用技术的影响
应用开发中使用到的一些技术,可能无法使用第一代,甚至第二代自动化工具来进行压测。这样的借口已经越来越勉强了,因为如今绝大多数的应用都在一定程度上Web化了。而如今大部分自动化测试方案都能够很好地支持Web技术。

Web软件开发过程中的技术栈都慢慢开始标准化了,形成了一些核心的技术。大多数自动化工具供应商都会跟随这个节奏,推出对应支持功能。在本书第9章,我会探讨一下现在(以及老旧)的应用技术如何影响了性能测试的发展。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
4天前
|
设计模式 测试技术 持续交付
深入白盒测试:提升软件质量与性能的关键策略
【4月更文挑战第20天】 在软件开发的复杂世界中,确保产品的质量和性能始终是至关重要的任务。白盒测试,作为软件测试领域的重要分支,提供了对程序内部结构和逻辑的深入分析手段。本文将探讨如何通过有效的白盒测试策略来优化软件性能,减少缺陷,并最终提高用户满意度。通过剖析代码检查、单元测试、集成测试等白盒测试技术,我们将了解这些方法如何揭示潜在的问题点,并为改进提供方向。
|
1月前
|
测试技术
性能场景之压测策略设计
【2月更文挑战第19天】性能场景之压测策略设计
295 4
性能场景之压测策略设计
|
1月前
|
安全 测试技术
BOSHIDA DC电源模块的安全性能评估与测试方法
BOSHIDA DC电源模块的安全性能评估与测试方法
 BOSHIDA DC电源模块的安全性能评估与测试方法
|
1月前
|
安全
DC电源模块的安全性能评估与测试方法
DC电源模块的安全性能评估与测试方法 DC电源模块的安全性能评估与测试方法应包括以下几个方面: 1. 输入安全性测试:包括输入电压范围、输入电压稳定性、输入电流范围、输入电流保护等方面的测试。测试方法可以是逐步增加输入电压或输入电流,观察模块的工作状态和保护功能。
DC电源模块的安全性能评估与测试方法
|
3月前
|
存储 缓存 监控
Web 应用程序性能测试核心步骤
Web 应用程序性能测试核心步骤
|
4月前
|
存储 测试技术 Linux
添加E1000网卡进行测试,只有VMXNET3性能的四分之一
添加E1000网卡进行测试,只有VMXNET3性能的四分之一
68 0
|
4月前
|
存储 测试技术 区块链
阿里云、百度云及移动云对象存储横向性能对比测试
在企业的数字化转型进程中,我们观察到越来越多的公司将其IT基础设施迁移到云端。随着企业业务的持续运营,无论是储存、处理、分享还是删除,都会产生大量的数据,这就要求有一个既可靠又高效的系统来管理和存储这些信息。对象存储产品在这个场景中扮演了至关重要的角色。它们以一种可扩展、安全、持久的方式,有效地满足了对大规模非结构化数据存储的需求。 尽管市场上云计算提供商众多,各自都有自己独特的对象存储产品,面对这样的丰富选择,如何寻找最符合企业需求的产品呢?这正是企业今天寻求解答的问题。 在本篇文章中,我们将深入进行一项横向对比测试,专门对阿里云OSS、百度云BOS和移动云EOS这三大云服务提供商的对象
1365 0
|
3月前
|
开发框架 测试技术 定位技术
如何开展移动应用程序性能测试?
如何开展移动应用程序性能测试?
|
18天前
|
测试技术
深入白盒测试:提升软件质量与性能的关键策略
【4月更文挑战第6天】 在软件开发的生命周期中,确保代码质量和性能始终是至关重要的环节。白盒测试作为一种深入代码内部的测试方法,提供了对程序结构、逻辑路径和内部功能的全面评估。本文将探讨白盒测试的核心概念、技术及其在提升软件质量与性能方面的应用。通过分析控制流测试、数据流测试和静态代码分析等关键技术,我们揭示了白盒测试如何有效发现潜在缺陷,优化代码效率,并增强系统稳定性。
|
1月前
|
消息中间件 弹性计算 测试技术
如何快速实现 Kafka 性能压测
如何快速实现 Kafka 性能压测
89808 1