既然是“核心价值”,就应该能用一句话说清楚。关于软件测试的核心价值是什么,各种观点争论了很久,似乎很难得出一个明确的结论。这里有个很重要的原因,就是我们都深陷在测试工作的细节里面,没办法看清自己的位置和价值。不识庐山真面目,只缘身在此山中。
要想搞清楚这个问题,我们必须走出围城来进行分析,如果把软件测试看成一种服务,那么从客户的视角来评判,最合适不过了。下面讲一件真实的事情。
有一次我回家跟老友一起吃饭,聊起最近的工作。老友的单位是一家大企业,几个月前委托一家软件开发公司,开发了一套很大的企业管理软件。现在软件已经开发完成,进入了验收阶段。现在问题来了,负责验收软件的是信管部,部门老大非常担心软件的质量,希望能在验收签字前,把软件的严重质量问题都找出来,可是又不知道该从哪下手,如果能有一个权威的软件评测机构,对软件进行专业的测试,就最好了。
“你们淘宝的软件测试,应该做的很专业吧,能不能帮我们来测试一下这个软件?你们接这种业务么?”老友提出这个问题。
虽然淘宝测试现在还没有这种外接服务,不过这是一个难得的,饶有趣味的话题。
“那你想要我们来测试哪些东西呢?哪些地方最担心?”
“主要是性能吧,如果全公司人一起来用,不知道会不会出问题。还有就是数据的安全方面,公司的重要数据一定要绝对安全,不能被挖走。”
“那软件的功能呢,功能需不需要我们来测一下?”
“功能就不用了,我让我们部门的人来点点就行了。”
听到这话我有点觉得不爽,不过想想倒也没必要跟老友去争辩这个问题,其实这确实是很多人对软件测试的看法。后来这个话题被岔开,没有继续谈下去了。
所以下面的谈话并没有真实发生,是我用推理的方式,把讨论继续了下去,非常有趣。
“功能测试并不是随便点点这么简单,淘宝的测试非常专业的,因为我们…”
大家注意,精彩的地方到了,当我说出一个原因,并且能让老友信服,那就说明,这就是软件测试的核心价值了。
“…我们的工程师对需求理解得很透彻,对业务很精通。”
“我们部门的人对需求也很清楚的,因为他们就是最终的用户。”在平时的项目里我们也发现,无论需求分析做得多细致,软件交付以后,用户总能提出很多问题和改进意见,这是正常的,大可不必因此责怪测试工程师,因为没有人比用户更了解需求。最重要的是,不要让用户发现既严重又初级的Bug。
“…我们编写的测试用例、文档非常专业非常完整,能够保证测试的质量。”
“很好啊,你们很专业,不过这是你们内部的工作方式,我不是很关注的。”这里并不是否定测试文档的作用,只不过测试文档是测试团队的过程产物,无法直接给用户带来价值。
“…我们对软件的架构设计非常了解,可以提前发现软件设计中的重要缺陷,避免返工。”
“嗯,这个非常好,不过现在他们已经开发完了,要是在他们编码之前,请你们来对设计方案把把关,就好了。”用户非常希望能控制软件开发的全过程,而软件设计是最重要的里程碑,设计是否合格,直接影响后面的工作。
“…我们能看懂代码,找出代码里的问题,不仅如此,我们还能修复Bug。”
“好是好,不过代码量那么多,你们需要多少人来做啊?至于修复Bug,还是让他们自己改吧,不然我花那么多钱请他们干吗?”
“…我们现在用的最好的测试管理工具,还有最好的自动化测试工具,可以把测试完全自动化。”
“挺好,不过我还是担心需要的资源太多,自动化测试是挺好,你说说具体好在哪里呢?如果比手工测试成本低,就行。”同样的,用户对我们用什么方式测试并不特别关注,成本才是关键。
“…我们的工程师工作效率很高,测试速度非常快,比你们部门的人要快50%。”
“厉害!不过我们这里的薪水都比较低的,你们都是高薪IT,人月成本这么高,如果测的结果差不多,还是我自己找人来做吧。”
“…我们的工程师都是专业人员,你的人只能发现一些表面的Bug,而我们能找出隐藏很深,并且很严重的Bug,这些Bug提早发现,能减少很多损失。”
“有道理,其实我也担心他们这样点点,有些深层次问题发现不了,要是上线一段时间以后,大家才发现,那改都来不及了。”
好了,这段虚拟的对话就到此为止,下面我们来做一些分析。先看一下最开始提到的性能测试和安全测试,这两个测试类型有一定的技术壁垒,因此性能和安全的Bug,不是每个人随便就能发现的。另外虚拟对话中提到,发现软件设计方案中的问题,也非常有难度。而功能测试的门槛相对较低,即使没受过训练,一般人也能发现一些初级的Bug,这让很多人产生一个错觉:“一般人”都能做功能测试。
要证明这个错觉不成立,其实也挺容易,那就是看测试人员所发现的Bug,与“一般人”有哪些不同。如果找不到明显的不同,那错觉就变成了现实,如果测试人员没发现的Bug,让一般人或者用户发现,那就更杯具了。由此我们推理出测试的核心价值:
能发现一般人发现不了的Bug!
这句话看起来非常简单朴实,但是包含了很多因素。目前淘宝测试团队所设定的金Bug大奖(Gold Bug Award),就是为了鼓励测试工程师体现这一核心价值。
有的测试工程师,由于项目时间太紧,开发匆忙赶出的代码质量又不合格,所以大部分时间都纠缠在初级的Bug里面,根本没时间、没精力去关注深层次Bug,虽然做的很辛苦,也做了很多项目,但是成长很慢,原因就在这里。
要解决这个问题,测试工程师一方面要加强对开发技术的学习,了解软件程序的内部结构,为发现深层Bug创造必要条件;另一方面,要想办法推动开发提高代码质量,让自己从初级Bug里解脱出来,为自己赢得更多的时间,来寻找深层Bug,并且总结发现Bug的技巧和经验。
到这里我们对测试核心价值的讨论可以告一段落了,软件测试要体现核心价值,自说自话是没有意义的,只有把测试作为一种服务提供给客户,让客户来评判,测试才能发展得更好。现在淘宝测试团队也专门成立了TAAS团队(Testing As A Service),在测试服务化上进一步探索。这篇文章送给淘宝测试团队,也特别送给文朗,与你讨论总有很多收获。