1

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

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

这就是问题的要点。

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

几乎所有代码更改都对性能没有实际影响,而那些确实影响特定子集的测试。

但是因为基本上我们历史中的任何代码更改都可能改变了平均值/标准偏差/无论如何,使用该历史似乎是不稳定的。

但我的问题似乎不能完全独一无二。我有什么选择?

这是一个测试如何随时间执行的图表。y 轴代表测试所用的时间(越低越好),x 轴是我们的每个代码随时间从最旧到最新的变化。早期的大跌应该被称为真正的进步,而当它回升时,那是真正的损失。同样在图表的末尾,这是一个真正的损失,然后是一个真正的收益。不应调用所有其他光点。

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

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

4

1 回答 1

2

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

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

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

于 2013-09-16T20:49:28.390 回答