您可以在测试之前估算应用程序的性能吗?

时间:2008-11-14 15:52:59

标签: performance load-testing benchmarking performance-estimation

这是一个棘手的问题,前几天我被问到......我们正在开发一个非常复杂的电话(SIP)应用程序,其中包含混合的C ++和PHP代码以及MySQL数据库和几个开源组件。

电信工程师要求我们估算应用程序的性能(尚未准备好)。他说得很好,你知道每秒可以通过Linux内核传递多少数据包,而且你可能知道你的应用程序有多快,所以告诉我每秒会有多少通过你的东西的电话'。

对我来说似乎是胡说八道,因为可能会发生一百万个场景(好吧,字面意思......)

但是......有没有办法在实际测试之前估算应用程序性能(知道它将运行的硬件,能够在其上运行标准基准测试等)?

7 个答案:

答案 0 :(得分:6)

您当然可以将问题限制在上限(最大吞吐量)限制。这没什么废话。事实上,不知道这些东西表明了一个非常随意的问题方法 - 特别是在电话世界。

您可以自己解决问题 - 您需要为交易或应用中的任何单位完成的最小“工作”是什么?

例如,有些消息来往于某些处理和数据库?获取有关各个部分的信息将使您了解最快的吞吐量。如果您加载系统并看到性能显着降低,那么您可以花时间找出使用低效算法等可能导致吞吐量下降的地方。

修改

要执行此练习,您需要了解应用为每个用例执行的所有步骤。然后,您可以确定每个用例的最大吞吐量。你应该在发布和上线之前知道这些东西。

我忽略了最糟糕的案例分析,正如你所指出的那样 - 是相当困难的。

答案 1 :(得分:3)

Capacity Planning for Web Performance: Metrics, Models, and Methods。还有一些工具可以进行这种离散事件模拟:

这个东西并不容易,商业工具会花费你的钱。容量规划书附带一张CD,其中包含许多Excel工作簿模板以及可以启动您的模型示例。

祝你好运:)

答案 2 :(得分:2)

如果你真的要回答这个问题,可以这样说:

“我不知道我的头脑。我会为你估计这个但是需要时间。显然我答案的准确性取决于我计算我的努力程度(IE时间)估计。我应该花多少时间计算我的估算?“

把负担重新放在他们身上。如果他们真的想要一个准确的答案,他们将不得不让你至少构建一些可以模拟实际环境的测试应用程序。

答案 3 :(得分:1)

你可以通过高峰来衡量表现。您的整个系统可能还没有工作,但您知道这些部件是如何组合在一起的。您可以在几个小时内完成一些工作,与最终应用程序在所有层中完成相同的工作,并使用它来衡量设计的性能。

请记住:原型广泛,尖峰很深。

答案 4 :(得分:1)

您绝对可以提前进行容量规划,但估算的质量取决于可用数据的质量。

最佳估计是在测试中构建系统,运行模拟工作负载,然后根据性能要求和工作负载预测容量。这3个形成一个预测空间 - 给出3个中的2个,你可以预测第三个:

  1. 考虑到性能要求和容量(即硬件),您可以计算出可以处理的工作量。

  2. 考虑到性能要求和工作负载,您可以计算所需的容量(即硬件)。

  3. 根据工作量和容量,您可以预测您的预期表现。

答案 5 :(得分:1)

你应该做估计。估计不会给你正确的答案。然而,它会让你思考问题。现在它听起来像你的编码,并希望一切都会好的。或者您处于恐慌模式,觉得您没有时间进行估算。

花一些时间思考它。分析重要的用例。想想你可能需要的记忆;考虑数据库访问;考虑网络访问(本地和远程)。这些将影响系统的性能。让整个团队一起完成这项工作。

定期测量系统在开发过程中对这些重要用例的性能。如果必须,可以模拟组件/其他系统。分析结果。这些与您的估算相比如何?也许组件是内存/数据库/网络绑定。也许你需要更多的记忆;少数据库访问;更简单的查询;缓存。您不必立即进行这些更改。但是,您确实知道您的系统如何运作以及您需要做什么。

结果:系统测试时出现令人讨厌的惊喜。随着发布日期的临近而减少恐慌。

答案 6 :(得分:0)

在某些领域也是如此,但除非您是该领域的专家,否则您根本不知道。例如,我编写代码来控制工业机器人。速度受机器人运动的限制,而不受代码执行速度的限制。了解机器人的速度和速度,我们可以对“速度”做出相当好的估计。我不知道如何估计你申请的时间。