是否有任何技术可以单独进行配置文件测试应用程序?

Posted

技术标签:

【中文标题】是否有任何技术可以单独进行配置文件测试应用程序?【英文标题】:Is there any technique for profile testing application in isolation? 【发布时间】:2010-08-26 12:10:02 【问题描述】:

我是分析的傻瓜,请告诉我你们是如何分析你的应用程序的。哪个更好,分析整个应用程序还是进行隔离?如果选择是隔离,你会怎么做?

【问题讨论】:

我的意思是每个类模块等都是在不知道对方的情况下单独测试的(抱歉,可能不是一个正确的词来表示它)。 【参考方案1】:

尽可能分析整个应用程序,运行真实(典型)工作负载。其他任何事情都可能会导致您将优化工作集中在错误的地方。

编辑

在分析整个应用程序时获得正确的结果不是太难了吗?所以测试结果取决于用户交互(按钮点击等)而不是使用自动任务?如果我错了,请告诉我。

获得“正确结果”取决于您如何解释分析数据。例如,如果您正在分析一个交互式应用程序,您应该找出配置文件的哪些部分对应于等待用户交互,然后忽略它们。

在部分分析您的应用程序时存在许多问题。例如:

通过事先决定要分析应用程序的哪些部分,您无法很好地了解不同部分的相对贡献,并且可能会在错误的部分上浪费精力。

您几乎必须使用人工工作负载。无论何时这样做,都存在工作负载不能代表“正常”工作负载的风险,并且您的分析结果存在偏差。

在许多应用程序中,瓶颈是由于应用程序的各个部分相互交互的方式,或者与 I/O 或垃圾收集的交互方式。单独分析应用程序的不同部分可能会错过这些交互。

...我正在寻找的是技术

粗略地说,您从个人资料数据确定的最大“热点”开始,然后向下钻取,直到您弄清楚为什么在某个领域花费了这么多钱。如果您的分析工具可以自上而下和自下而上地聚合和呈现数据,那真的很有帮助。

但是,归根结底,从分析证据(热点、堆栈快照等)到根本原因和补救措施通常取决于来自经验的实践知识和直觉。

(是的......我有点胡扯。但我的意思是,没有什么神奇的公式可以做到这一点。最终,你必须使用你的大脑......就像你在调试复杂的时候一样申请。)

【讨论】:

感谢您的快速回答,但是在分析整个应用程序时获得正确的结果不是太难了吗?所以测试结果取决于用户交互(按钮点击等)而不是使用自动任务?如果我错了,请告诉我。 @bonjomo:斯蒂芬是完全正确的。如果你专注于一个特定的模块,那么你实际上是在承担一个预先判断,当你做这项工作时,你学到的第一件事就是问题不是你可能猜到的。如果您从整体上进行分析,那么问题会告诉您它们在哪里。无需猜测。 直到最后一段我都非常同意你的观点 :-) 我不关心“热点”的概念,也不关心“向下钻取”的方法,但我怀疑当我们言归正传,我们说的是同一件事。 您可能不需要,因为您可能有丰富的经验和直觉。我发现,尽管我有经验和直觉,但我可以写出看起来表现不错的东西,但还有 很多 的加速空间。但是,找到要优化的代码并不需要直觉。它只需要stackshots。有些问题需要直觉,但性能不是其中之一:***.com/questions/926266/…【参考方案2】:

首先我只是用手表计时以获取整体测量结果。

然后我在调试器下运行它并获取stackshots。它们的作用是告诉我哪些代码行占用了大部分时间。特别是,这意味着调用函数的行真的不需要,以及我可能不知道的 I/O。

因为它向我展示了需要时间并且可以以更好的方式完成的代码行,所以我修复了这些。

然后我从头开始,看看我实际节省了多少时间。我重复这些步骤,直到我再也找不到 a) 花费大量时间的东西,并且 b) 我可以修复。

这被称为“穷人的剖析”。小秘密不仅便宜,而且非常有效,因为它避免了common myths about profiling。

附:如果它是一个交互式应用程序,只需对它的慢部分执行所有这些操作,例如按下“Do Useful Stuff”按钮,然后几秒钟后完成。在等待你的时候,没有必要进行堆栈截图。

附言假设有一些活动应该更快,但完成太快而无法拍摄堆栈,例如它需要一秒钟但应该只需要几分之一秒。然后你可以做的是(暂时)在它周围包裹一个 for 循环,10 或 100 次迭代。这将使获取样品需要足够长的时间。加快速度后,移除循环。

【讨论】:

+1 链接,+10 链接,谢谢。我虽然你写这个是为了反驳我对 Stephen C Answer 的评论,所以它有点偏离原来的答案。很好,但我应该选择斯蒂芬作为接受的答案 @bonjorno:谢谢。是的。斯蒂芬说得很好。您有点按下了我的“通用按钮”,即性能调整不必是一个侦探工作的过程,而更像是修剪一棵树,调用树。这不是众所周知的,所以我倾向于喋喋不休。【参考方案3】:

看看http://www.ej-technologies.com/products/jprofiler/overview.html

【讨论】:

谢谢,但我正在寻找的是技术。

以上是关于是否有任何技术可以单独进行配置文件测试应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

是否有任何适用于 WINDOWS 的 iPAD 模拟器以便使用我们的 ipa 文件进行测试?

使用 XCTest 和单独文件进行 iOS 测试

从 CSV 文件加载数据以进行负载测试并为每个用户保持会话

python的日志,如何做到一天是单独一个日志,并且定期清理?

是否可以使用文本区域进行实时协作?

Spring基于范围的默认配置文件选择