我正在研究软件构建的统计数据。我有关于通过/失败和经过时间的每个构建的数据,我们每周生成约 200 个这些数据。
成功率很容易汇总,我可以说任何一周都通过了 45%。但我也想汇总经过的时间,并且我想确保我不会错误地歪曲数据。想我最好问问专业人士:-)
假设我有 10 个持续时间。它们代表通过和失败的情况。一些构建会立即失败,这使得持续时间异常短。有些在测试期间挂起并最终超时,导致持续时间很长。我们构建不同的产品,因此即使是成功的构建也会在 90 秒到 4 小时之间变化。
我可能会得到这样的一套:
[50, 7812, 3014, 13400, 21011, 155, 60, 8993, 8378, 9100]
我的第一种方法是通过对集合进行排序并选择中间值来获得中间时间,在本例中为 7812(我没有为偶数集合的算术平均值而烦恼。)
不幸的是,这似乎产生了很多变化,因为我只选择了一个给定的值。因此,如果我要对这个值进行趋势分析,它将在 5000-10000 秒之间反弹,具体取决于哪个构建处于中位数。
所以为了解决这个问题,我尝试了另一种方法——删除异常值,然后计算剩余值的平均值。我决定把它分成三分位,只在中间的一个上工作:
[50, 60, 155, 3014, 7812, 8378, 8993, 9100, 13400, 21011] ->
[50, 60, 155], [3014, 7812, 8378, 8993], [9100, 13400, 21011] ->
[3014, 7812, 8378, 8993]
这对我来说似乎更好的原因有两个:
- 我们不想对更快的构建采取任何行动,它们已经很好了
- 最长的构建可能是由超时引起的,并且会一直存在。我们有其他机制来检测那些
所以在我看来,这就是我正在寻找的数据,但我担心我已经通过移除真相来实现平滑。
这有争议吗?方法合理吗?
谢谢!