微言码道 · 手记

性能测试这个事,谁来负责?

—— 程序员,你做为开发者,有自己做过性能测试么?

有时候,仅仅是坚持做正确的事,你都可能会备感孤独

本周,我和大家来聊一下关于性能测试。

突然想到这个话题,原因也很简单,因为最近我在对自己用基于Kotlin+Vert.x的领域驱动框架myddd-vert.x做一个实际的项目,在功能完成后,我就开始计划做性能测试相关的工作。

之所以想到做性能测试这个工作,完全是因为我个人的习惯,虽然这几年我在后台的项目及时间并不是非常多,主要精力是在移动端及前端上面,但仅有的几次参与后台项目的经历,我都做了性能测试。

问题也出在这里,因为基本全是我自己要求自己做的,我没有受到任何其它群体的来自这方面的要求或约束,甚至我怀疑我做的单元测试,出具的报告是不是真有人关心的仔细阅读了。

这也是我想聊下这下性能测试这个事情的原因。

它与哪些人有关?

坦率的讲,我认为性能测试这个工作,它的待遇已经非常差了,已经快沦落到和单元测试一样的地步了。当然,它仍然会比单元测试的处境好很多,因为毕竟相对而言,单元测试这个工作是完全属于开发个人的事,其它人没有太多的理由去重视,但性能测试则不一样,它会受到几类人的关注:

  1. 第一个群体:开发人员

显而易见,开发人员自己或多或少会注意到它,毕竟我相信没有谁开发一个东西,会对自己写的这些功能在性能上能支撑到什么地步完全无动于衷。开发人员自己或多或少还是会关注它的

  1. 第二个群体:测试人员

如果从工作职责上来讲,测试人员显然是对这个工作要负有一定程度的职责的,性能的职责本身就是应该包括功能测试以及性能测试两个维度的才对。

  1. 第三个群体:公司

我认为任何一个技术公司,都应该在自己整个公司的技术体系,规范,约束上有一定的要求及流程才比较正常。比如规范整个公司的技术使用规范等,当然也需要对性能这一块需要有所约束才对。比如约定每个项目都至少要在内部先性能测试通过,才能交付给客户或交付使用等

  1. 第四个群体:客户

很少会有客户真正不关心自己所购买的服务或产品,或项目的性能如何。所以大多数客户都会要求提供相应的性能测试报告或者做实时性能测试。

所幸,性能测试的待遇终究会比单元测试好很多。

虽然单元测试这个事情就除了开发人员,压根不会有其它人太关注了。然而大多数开发人员自己就放弃了。

那现状如何呢?扪心自问,这些群体是真的重视它了,还是有意无意的忽略它了?

各有理由的忽略

每当有任何一个事我们没有做到时,我们总是不自觉的寻找类似的借口:不是我不XX,而是因为XX。

“这不是我的职责”

如果要问开发人员,估计他们回答最多的就是这句话了。

对开发人员来说,性能测试不太象是需要自己来做的一个事情。开发人员天然的认为应该由测试团队来主导或负责这个事情。也就是我已经开发完成了,寻找BUG及验证性能这些事情理所当然的是测试人员的职责。

“无能为力,或没有时间”

我在2021年,也就是今年,面试了很多测试人员,我得出一个结论:国内专业的测试人员比较少。

我猜测主要原因在于:大部分测试并不是开发出身,对技术维度的很多东西一知半解,甚至是一知半解可能都谈不上。有部分测试人员可能做过一些性能测试,也知道一些技术上的东西,但本身这个部分的人就不多,要是要求再高点,期望测试对技术能有专业的掌握和理解,这个就更难了。

这就造成一个比较尴尬的现状:很多测试人员可能并不具备完成一个良好的性能测试的能力与水准。

而且国内测试团队普遍话语权较小,不要说性能测试,很多时候连功能测试的时间都无法自我掌控。大多数情况下是,测试人员更多的是从属地位,而不是监督和约束技术团队的强有力的第三方。于是常见的场景是最后上线时间已经规定,开发都可能需要加班才能完成,这种情况下,至于测试需要多久,能不能正常测试完成,测试完成有没有权利拒绝此版本上线,这些也就更谈不上了。

试问,有多少团队或公司赋予了测试团队拒绝不合格版本上线的权利?

“心有余而力不足”

如果我们再往上看一下,看下公司怎么处理这个问题。

那我认为可能最适合的描述就是:『心有余而力不足』

当一个人想做一件事虽然能力有所不足的时候,还能通过自我努力,激励等方式为自己加油,说不定还可能可以做到。那对于一个能力尚有不足的公司来说,这个就太难了。

好的做法当然谁都知道,对吧,要求开发人员写单元测试,要求测试人员做性能测试,要求产品人员写需求,要求客户给合理的时间,当一切尽善尽美的时候,也许公司还有能力推行好的做法。

但事实上,很多公司在这个方面就更为难了,进度要保障,客户的承诺要遵守,团队人员能力参差不齐,还有各有想法的员工,想要推行并做好,没有一定的环境条件及强有力的领导力,想做到很好其实很难。

于是,很多团队和公司在这些方面举步为艰。对这一块视而不见成了默认的选择。

“我们要证明”

事实上,说起对性能测试最重视的,我认为可能就是客户了。

客户购买一个产品或服务时,理所当然的会关注这个东西的性能是否满足需求,所以大多数客户要么会要求公司出具性能测试报告,也有很多是直接上线前实时性能测试的,也有。

我在我们公司,唯一的一次和性能测试打交道(非我自己)的经历就是有一个客户上线前要求我们做性能测试,于是我们当时安排了一个测试人员,客户也安排 了自己的测试人员一起来做这个事。

最终的结果是:可能客户的测试人员比我们的还专业点。。。

很尴尬,是吧。。。

开发人员,你为什么也不做性能测试?

抛开客户不说,毕竟客户是出钱的,不重视说不过去。那从开发,到测试,到公司,我们到底哪里出错了?

测试和公司我就不谈论了,毕竟我也不是做这个的。所以我来专门讲下开发人员怎么回事,为什么我们不愿意做这个事情?

我认为与单元测试一样,开发人员自己做性能测试是非常具有优势的一件事,原因在于:

  • 我们熟悉代码逻辑实现,很明白可能的性能问题点在哪。
  • 我们写的代码,不应该由别人来告诉我们哪里出问题了,这是最基础本的职业素养才对。至少我们得自已觉得OK了,才交付给测试,由他们去把关吧。
  • 现在的技术条件非常成熟了,无论哪一端,做性能测试都不是个难事。比如后端用Jmeter, 移动端也有各自的性能分析工具,前端Chrome的Performance分析工具。
  • 这也是避免后续自己陷入被动的预防措施,于其到上线后,各种问题搞来搞去搞的自己精力压力大,还不如提前把这些事做好。一旦我们对性能有了验证,后续线上出现这方面的可能性就大大降低了。否则很多开发人员自己都心里没底,不知道线上会出什么毛病。整天提心吊担的。

而之所以开发人员不愿意做性能测试,我认为更多的可能性在于专业精神的欠缺。不管真实的原因是什么,比如时间不充足,或不会性能测试,或认为职责属于测试团队。

我认为一个开发人员,编写代码这个事情本身就包含性能的保证。由写代码的你来保证你的代码没有性能上的问题,而不是测试或其他人,这应该是职业素养的基础要求。

把时间花在正确的地方

所以,从性能测试这个点上,包括其它很多事上,我的一个最大感悟是:与其天天说奋斗,讲努力这些虚无缥缈的文化,还不如把我们的精力花在让我们自己变的更专业这个事情上来。

只要我们变得更专业了,我们的工作就会变得有趣,好玩而又有挑战。

而一个优秀的技术管理者最大的重心与能力也在于:提升技术团队的专业性

这应该是我们专业的程序员应该追求的。

这也是我的追求。