近和几个同事一起组织了一门ETP(Engineer Training Program)的课程,叫做Advanced Performance Testing。叫Advanced不是因为多么高深,而是因为这是一个多次的系列课程,而且里面结合了大量的实例和实践的经验,不希望只是泛泛的介绍。当然,这样叫还是会觉得有些大言不惭的,毕竟做性能测试久了,知道深浅。

  近在Weinberg(对,还是他,可见我读书多么慢)的《becoming a technical leader》书中看到一段话,提到他对于培训的一点心得,他对于成功与否的判断标准是受众在其后对于这个领域的关注度是提高了还是下降了。我也希望在我们这个系列的课程结束之后,大家对于这一块有了更多的认识和了解,也愿意去更深入的学习和实践。总之,希望会有一些帮助。

  昨晚上完第一次overview的课后坐地铁回家,碰到一位来上课的同事,他对于我在课上提到的和性能测试相关的几个观念有一些印象。看来,简洁的归纳是有助于传播的,可能比一堆的checklist更容易让人记住和获取一些新的想法。这里也整理一下发出来供大家参考。

  1. 精确和模糊

  这是困扰很多性能测试人员的一个问题。因为基本上性能测试都需要得到一个精确的量化的结果,比如:

  a. 系统可以支持10,000个并发连接

  b. 每秒钟可以处理80封电子邮件

  c. 可以支持3000人同时浏览网页

  ......

  类似的数据可能出现在需求中,也可能出现在测试的结果里面。使得我们认为,相比功能测试或者稳定性测试而言,性能测试是一种要求精确的测试。

  但是,真的是这样吗? 试着回答下面这个问题:

  一辆汽车开100公里需要多少汽油?

  直觉上你会说不同的车不一样,对,这是好的开始,那好,确定是某一台确定的车,不仅是型号,是门口的某一台。

  嗯,怎么样?开始犯难了吧,特别是如果你是一个严谨的人。因为你的大脑开始快速列出下列条件:

  1. 坐几个人,带多重的物品?

  2. 路况如何,是高速还是拥挤的市区?

  3. 天气如何,温度如何,要开空调吗?

  4. 驾驶习惯是怎样的?

  ......

  还有很多,越有经验的人可以列出越多,想想F1调整一下尾翼的角度可以改变下压力之类的事情。天哪,我要开一个长长的清单。

  到现在,你还觉得性能测试是一个精确的测试吗?也许问题出在有太多的前置条件,它们或大或小的影响着测试的结果。

  所以呢,我们应该怎么办?这是对很多新参与性能测试的人来说难的问题,而不是那些看起来复杂的工具。大家常会问:我怎么知道该用什么样的sample?

  关于这些前置条件,或者我们称之为假设(assumption),我把一些做法归为三个阶段。

  Stage 1:做了假设却不知道自己做了假设

  比如前面提到的那个油耗的问题,有人的做法是我开100公里看看,得出来是多少是多少,比如9L。然后我告诉别人这个车的100公里油耗是9L。

  问题是这样的结果对你是OK,因为你有切身的体验,知道遇到的状况,可是测试的报告是要给别人,甚至你都无法直接面对或者沟通的人参考。这会很容易误导别人,即便这不是你的本意,而且你自己也确定你是真实的记录了结果。这里的问题在于你并不清楚自己所做的假设,因为我们一直在做这样的假设。