我正在为我们的软件运行一套2000多个性能测试,用于每个人所做的代码更改(对于每个测试我收集5到10个样本)。我有数千个代码更改的性能结果历史记录。
当有人进行代码更改导致测试运行速度变慢时,我希望尽快告知(尽管我可以等待另外1或2次代码更改的结果)。
这就是问题的主旨。
这些测试中存在一些自然差异,我们会看到偶尔的尖峰只是噪音,可能是因为计算机上的某些后台进程正在做一些导致测试运行速度较慢的事情。出于这些原因,当测试运行速度较慢时,我不希望收到通知。我知道仍会有一些类型I错误,但我想最小化它。
几乎所有的代码更改都对性能没有实际影响,而那些通常会影响子集特定测试的代码。
但是因为基本上我们历史上任何代码的变化都会改变平均值/标准差/无论如何,使用这段历史似乎都是不稳定的。
但我的问题似乎不是一个完全独特的问题。我有什么选择?
This is a graph of how one of the tests performs over time。 y轴表示测试所用的时间(越低越好),x轴是我们的代码随时间从最旧到最新的变化。早期的大幅下降应该被称为真正的改善,当它重新上升时,这是一个真正的损失。同样在图表的末尾,这是一个真正的损失,然后是真正的收益。所有其他的昙花一现不应该被召唤出来。
Here's another one where the history is mostly all just noise
我在多个地方问过这个问题,但从来没有得到任何真正的答案。我将编写所有分析,并且我愿意使用任何工具,进行任何研究,并学习任何有助于我的统计方法。这不是一个独特的问题。那么人们如何处理它(除了手动查看结果)?
答案 0 :(得分:2)
首先,您可以尝试减少噪音量。您可以通过后台进程不影响测量(unix时间)的方式来测量时间
您希望了解效果指标中是否存在整体趋势,表明效果会下降。如果将其视为信号,则可以应用低通滤波器(可以通过采用k个先前的采样和平均值来简单地近似)。然后使用一些简单的阈值。这很简单,但我觉得应该有用,因为正如@nograpes写的那样,性能下降往往很大。
如果它不起作用,您可以将其视为“趋势检测”的问题。所以基本上问题是“时间序列中是否存在重大趋势”。这是机器学习问题/统计问题:https://en.wikipedia.org/wiki/Trend_estimation。因此,您可以获得N个先前的样本,尝试拟合ARMA(http://www.nek.lu.se/nekkfr/d-kurs/Ch4NEWunivariate.pdf)并查看斜率是否为正值且具有某个阈值。但是我对这种方法知之甚少,所以这只是一个想法:)