r语言 - 自动查找软件性能测试中的错误



我正在我们的软件上运行一套大约 2000+ 的性能测试,用于某人所做的每次代码更改(对于每个测试,我收集了 5 到 10 个样本)。我有数千次代码更改的性能结果历史记录。

当有人进行代码更改导致测试运行速度变慢时,我希望尽快被告知(尽管我可以等待另外 1 或 2 次代码更改的结果)。

这就是问题的要点。

这些测试中存在一些自然差异,我们将偶尔看到只是噪音的峰值,可能是因为计算机上的某些后台进程正在执行导致这次测试运行速度变慢的事情。由于这些原因,我不想在测试运行速度变慢时收到通知。我知道仍然会有一些I型错误,但我想尽量减少它。

几乎所有代码更改都不会对性能产生实际影响,而那些更改通常会影响特定测试的子集。

但是,由于基本上我们历史上的任何代码更改都可能改变平均值/标准差/其他任何内容,因此使用该历史记录似乎不稳定。

但我的问题似乎不能完全独特。我有哪些选择?

这是其中一个测试随时间推移的执行情况的图表。y 轴表示测试的时间(越低越好),x 轴是我们的每个代码随时间从最旧到最新的变化。早期的大幅下跌应该被称为真正的进步,当它回升时,这是一个真正的损失。同样,在图表的末尾,这是一个真正的损失,然后是真正的收益。所有其他昙花一现都不应该被叫出来。

这是另一个历史大多只是噪音

我在很多地方问过这个问题,但从未得到任何真正的答案。我将编写所有分析,我愿意使用任何工具,做任何研究,并学习任何对我有帮助的统计方法。这不可能是一个独特的问题。那么人们如何处理它(除了手动查看结果)?

首先,您可以尝试减少噪音量。您可以以后台进程不会影响测量的方式测量时间(unix 时间)

您希望查看性能度量中是否存在指示性能下降的总体趋势。如果将其视为信号,则可以应用低通滤波器(可以通过取k个先前的样本并取平均值来简单地近似)。然后使用一些简单的阈值。这很简单,但我认为应该有效,因为正如@nograpes所写,性能下降通常很大。

如果它不起作用,您可以将其视为"趋势检测"的问题。所以基本上问题是"时间序列中是否存在显着趋势"。这是一个机器学习问题/统计问题:https://en.wikipedia.org/wiki/Trend_estimation。因此,您可以获得 N 个先前的样本,尝试拟合 ARMA (http://www.nek.lu.se/nekkfr/d-kurs/Ch4NEWunivariate.pdf),并查看斜率是否为正,并具有一定的阈值。但是我对这种方法了解不多,所以这只是一个想法:)

最新更新