前段时间在内部做了一个性能测试方面的培训或者叫sharing,发现谈到一些具体技术的时候大家都比较容易接受,但是性能测试中有些部分却比较难以理解。比如说常见的问题有:
1. 为什么选用这样的sample来测试?
2. 为什么用这样的配置来测试?
3. 这样的测试结果能反映客户的真实情况吗?
这些都是很好的问题,愿意思考的人才会提出这样的问题。
其实这些也是困扰做性能测试的人的问题,因为这里存在着一对矛盾。相比稳定性(stability)或者大流量(volume)的测试而言,性能测试是要求精确量化的测试,比如response time要到毫秒,还有concurrent connection和throughput等指标,都是要实际测出的具体数字。但是另一方面,它其实又是很模糊的,比如说你只可能挑选一种或者几种可能的配置来测试,而不可能精确的涵盖所有的配置情况下的性能。而且实验室测试的数据和production上真实的数据流量也是不一样的,甚至客观的讲永远不可能完全精确的模拟,就好比一个网站上线之前怎么能预料到将来成千上万的用户将要怎么来使用呢?姑且称之为性能测试的dilemma。
联想起最近看到的一个例子,大家可能更容易理解,据称工信部最近列出了6000多种车型的“实际“油耗。相对于之前都是各个厂家给出的理论油耗,很多是在90公里等速的情况下的理论或者叫完美油耗,在无风的日子里,平坦的马路,没有急踩油门,没有刹车,所以很多油耗都是6.x。但是很显然,大家都知道,你不可能找到一条这样完美的 路,连续的开上100公里。
我们也可以把上面的油耗测试看成是一种性能测试。那么因为这样的不完美,我们就变成一个怀疑论者吗?认为所有的性能测试都是没有意义的,因为它永远不可能反映真实的情况。
自己做性能测试也有很长一段时间了,有段时间我也在思考同样的问题,does it make sense?直到有段时间,我看到一个很好的别的行业的例子。
不好意思,还是汽车行业的例子。(最近怎么老关注这个行业?)
比较关注汽车安全性的人常常会去看他关注的车在一些碰撞测试中得到几星级的评价。在中国,这个标准就是C-NCAP。由于最近几年才开始运作,所以也参考了不少美国和欧洲的标准。好吧,让我们来看一下它大概是如何来给一辆车的安全性打分的。
关于这一部分,大家可以参考C-NCAP的评价规程 。
“试验车辆100%重叠正面冲击固定刚性壁障。碰撞速度为50km/h~51km/h(试验速度不得低于50km/h)。试验车辆到达壁障的路线在横向任一方向偏离理论轨迹均不得超过150mm。在前排驾驶员和乘员位置分别放置一个Hybrid III型第50百分位男性假人,用以测量前排人员受伤害情况。在第二排座椅最右侧座位上放置一个Hybrid III型第5百分位女性假人,用以考核安全带性能。 ”
从测试的角度,我们可以看出这里的test config包括:
1. 迎面很正的撞到一个很硬的墙上 (好吧,这是很通俗的理解 :))
2. 撞上的时候速度是 50-51 km/h
3. 一个驾驶员,第二排坐了一个人。
然后根据两个人的受伤情况来评分。
还包括另外两个类似的测试。
这个大概模拟的是车头部分追尾前车的情况。
这个模拟的是驾驶员侧面被另一辆车撞上的情况。
根据总分,按照以下星级划分对试验车辆进行星级评价:
总分 | 星级 |
≥50分 | 5+ (★★★★★☆ ) |
≥45且<50分 | 5 (★★★★★ ) |
≥40且<45分 | 4 (★★★★ ) |
30且<40分 | 3 (★★★ ) |
≥15且<30分 | 2 (★★ ) |
<15分 | 1 (★ ) |
到此为止,我们就知道在广告上看的“五星安全”是怎么来的了。现在再看到这样的字眼和你完全不了解它的做法的时候是不是有些不一样呢?
我说说自己的感受吧。在不了解这些规程之前,会以为他们一定有一套完美和非常全面的评价方法,然后得出这些评分。第一次了解后不免很失望,好像很粗糙的方法,覆盖的方面也很少。是的,如果严格的从测试完整性的角度来看,上面的方法确实有很多不够全面的地方。比如说,
1. 为什么时速是 50~51或者56~57 km/h?
我不知道交管部门有没有统计数据,是不是很多事故中“撞墙”的速度都是这样的范围?
无论统计数据如何,肯定有很多的例外吧。比如70码撞上去会如何呢,看运气和人品?
2. 为什么第一个正面100%的测试中,车上只有两个人?
如何是四个人,会有几个人受伤,伤势如何?而且更实际一点,人有高矮胖瘦,一个很胖或者很高的司机有没有可能更容易受伤?
3. 为什么是40%重叠而不是其他的比例?
4. 这些都是在平路上的碰撞,有没有下坡或者上坡的时候的结果?
因为在这样的时候车身的倾斜导致角度的不同可能会有不同的结果。