没有明确要求,如何进行性能和可扩展性测试?

时间:2009-06-03 03:28:35

标签: performance testing scalability

如果没有定义明确的性能要求,是否知道如何进行性能和可伸缩性测试?

有关我的申请的更多信息。

该应用程序有3个组件。一个组件只能在Linux上运行,另外两个组件是Java程序,因此它们可以在Linux / Windows / Mac上运行......这3个组件可以部署到一个盒子中,或者每个组件可以部署到一个盒子中。部署非常灵活。仅Linux组件将通过网络捕获原始TCP / IP包,然后一个Java组件将从中获取这些原始数据并将它们组装到最终用户将需要的数据中,并将它们作为数据文件输出到硬盘。最后一个Java组件将批量上传数据文件中的数据到我的数据库。

10 个答案:

答案 0 :(得分:5)

如果没有'必须能够在Y秒内执行X次迭代......'类型要求,那么这些事情怎么样:

  • 两倍大小的数据集需要两倍的时间吗? (是=好)
  • 两倍于数据集的大小需要10倍吗? (是=坏)
  • 是否受CPU限制?
  • 是否绑定了RAM(例如,大量交换到虚拟内存)?
  • 是IO /磁盘绑定了吗?
  • 是否有一定的数据集大小,性能突然从悬崖上掉下来?

答案 1 :(得分:2)

令人惊讶的是,这是大多数性能和可伸缩性测试的开始。

您可以在没有标准的情况下清楚地进行测试,只需定义测试并测量结果即可。我认为你的问题更多的是“如何在没有性能要求的情况下建立测试通过标准”。实际上这并不罕见。许多新项目没有明确的标准。非正式地说它会像'如果它不能每秒做X我们失败'。但是一旦你每秒传递X(你最好做到了!)X是“通过”标准吗?通常不会,会发生什么情况是你建立一个新的基线,你的性能测试防止回归:你将你当前的数字与你得到的最好的数字进行比较,并确定新的构建是否是“可接受的”作为构建验证通过(通常orgs将解决这里有70-80%的可接受,开放性能,并确保在出货时你回到90-95%或100%+。所以基本上性能测试本身就成了他们自己的要求。

可伸缩性有点复杂,因为没有限制。测试的范围应该是找出产品中断的 。对任何东西都施加足够的负荷,最终会破裂。您需要知道该限制的位置,并且非常重要的是,了解您的产品如何破解。它是否提供了一个很好的错误信息并且还原或者是否会泄漏其在地板上的内容?

答案 2 :(得分:1)

定义自己的。采取主动,自己描述性能目标。

为了更好地回答,我们必须更多地了解您的项目。

答案 3 :(得分:1)

如果“没有定义性能要求”,那你为什么要测试它呢?

如果定义了性能要求,但它是“含糊不清的”,您是否可以用什么方式表明它是模糊的,以便我们能够更好地帮助您?

除此之外,从“含糊”的要求开始,选择一个至少在您认为满足或超出模糊要求的合理目标,然后回到客户并让他们确认您的澄清符合他们的要求并且理想地得到正式的签署。

答案 4 :(得分:1)

一些定义/假设:

性能=应用程序响应用户输入的速度,例如:网页加载时间

可伸缩性=应用程序可以处理的峰值并发用户数。

首先是性能。性能测试非常简单,例如在开发环境中测量和记录页面加载时间,以及使用应用程序分析等技术来识别和修复瓶颈。

负载。要执行负载测试,有四个关键因素,您需要获得所有这些才能成功。

<强> 1。关于用户如何使用您的网站和/或应用程序的良好使用模式。这可能很容易被应用程序使用,但如果您要发布新内容,例如,这可能非常困难。一个Facebook应用程序。

如果你不能将目标作为要求,做一些研究并做出一些有根据的假设,记录并传播它们以供反馈。

<强> 2。工具。您需要拥有可以执行步骤1中定义的方案的性能测试脚本和工具,以及步骤1中预期用户的数量。(这可能非常昂贵)

第3。环境。您将需要一个孤立的生产环境,以便您的测试可以产生可重复的结果。 (这也可能非常昂贵。)

<强> 4。技术专家。一旦应用程序和环境开始破坏,您将需要能够识别故障并重新配置环境,或者在发现故障后重新编写应用程序代码。

一般来说,大多数项目都有一个“性能测试”框,他们需要因为过去的一些失败而打勾,但是他们从来没有计划或预算做适当的事情。我通常建议做预算并进行适当的可扩展性测试或节省您的资金而不要这样做。试图以便宜的价格购买一半是浪费时间。

然而,任何优秀的开发人员都应该能够在本地计算机上进行性能测试并获得一些好处。

答案 5 :(得分:0)

依靠工具(fxcop浮现在脑海中) 依靠常识

答案 6 :(得分:0)

如果您想在没有要求的情况下测试性能和可扩展性,那么您应该创建自己的要求/规范,这些要求/规范可以在给您的时间线/截止日期内完成。在定义了上述要求之后,您应该告诉您的主管他/她是否同意。

测试可伸缩性(假设您正在测试程序/网站): 创建大量用户和数据,并检查您的系统和数据库是否可以处理它。 MySQL中的MyISAM表类型可以完成工作。

测试表现: 优化代码,在慢速互联网连接中检查等等。

答案 7 :(得分:0)

简短的回答:不要这样做!

为了获得(更好)定义编写性能测试概念,您可以与应该定义需求的专家讨论。

对您不知道的所有内容做出假设,并明确记录这些假设。假设包含可能与系统在负载下的行为相关的所有内容。正确的假设将由专家批准,不正确的假设将引发反应。

对于所有读过Tom DeMarcos最新着作(Adrenaline Junkies ......)的人:这是稻草人模式。大多数不愿意从头开始编写规范的人会毫不犹豫地向您的文档提供反馈。因为你在编写你的版本时需要多次猜测,所以你需要准备好在被评论时被嘲笑。但至少你会有更好的信息。

答案 8 :(得分:0)

我通常处理这类问题的方法只是为了获得真实或模拟的实际工作负载,并使程序在合理范围内尽可能快地完成。然后,如果它无法处理负载,我需要考虑更快的硬件,并行完成部分工作等。

性能调整分为两部分。

第1部分是同步部分,我在实际工作负载下调整每个“线程”,直到它really has little room for improvement

第2部分是异步部分,它很难,但需要完成。对于每个“线程”,我提取一个带时间戳的日志文件,记录每个消息发送的时间,收到的每个消息,以及何时对每个接收的消息起作用。我将这些日志合并到事件的公共时间轴中。然后,我将浏览所有内容或随机选择的部分,并跟踪进程之间的消息流。我想为每个消息序列确定其目的是什么(即它是否真的必要),并且在接收时间和处理时间之间存在延迟,如果是,为什么。

我发现通过这种方式我可以“减少脂肪”,异步流程可以非常快速地运行。

然后,如果他们不满足要求,无论他们是什么,都不是软件可以做得更好。它将采用硬件或基本的重新设计。

答案 9 :(得分:0)

虽然没有定义明确的性能和可伸缩性目标,但我们可以使用您提到的三个组件的高级描述来推动一般性能/可伸缩性目标。

  1. 组件1:它看起来像是一个网络I / O绑定组件,因此您可以使用任何可用的网络负载模拟器来生成各种工作负载以使链路饱和。可扩展性可以通过改变工作负载(10MB,100MB,1000MB链路)和测量响应时间来测量,或者以更精确的方式测量与接收原始数据相关的延迟。您还可以测量链接框的工作集,以推动有关您的服务器要求的实际想法(需要多少额外内存来接收X更多的数据包工作量,..等等)

  2. 组件2:该组件有2个部分,一个I / O绑定部分(从组件1接收数据)和一个CPU绑定部分(组装数据包),你可以从整体上看问题,当你想要测量CPU绑定部分时,确保使链接饱和,如果是多线程组件,如果你没有100%的CPU利用率,你可以寻找改善外观的方法,并且你可以测量所需的时间汇编X消息,由此您可以计算处理消息的平均等待时间,这可以在以后用于驱动系统的一般性能特性并为您的用户提供SLA(您将保证在X毫秒内的响应时间)例如)。

  3. 组件3:完全受I / O限制,并且取决于您的硬盘带宽和您使用的后端数据库服务器,但是您可以测量您将磁盘I / O饱和多少以优化吞吐量,读取X MB数据需要多少I / O数量,并围绕这些参数进行改进。

  4. 希望有所帮助。 感谢