Facebook没有专门的测试人员,都是开发自己测;微软裁掉了测试部门,改由开发测;google有少量的测试人员,主要做测试自动化框架开发或者性能、安全等专项测试,测试用例还是开发人员自己设计自己跑(参见:google是如何测试的?)。还有很多互联网公司都不要测试人员了,直接把产品发布出去,让用户来测,有问题马上打补丁。
看起来现在测试人员越来越没有价值了,而且国内流行鄙视测试人员,特别是做手工测试的,更是在被鄙视链的底端,公司领导也不重视测试部门,感觉测试人员越来越没有前途,难道现在真的不需要专门的测试人员了?
诚然,互联网的产品多,相对独立,更新迭代快,而且需要快速的响应、发布,所以互联网公司可以不用测试人员,而是开发自己测,然后发布给用户让用户直接体验并发现问题,这种模式是可以的。比如一个新闻客户端,用户点了“体育”分类,可是没有显示对应的体育新闻,那没关系,用户报了问题,开发马上发布个更新就行了,用户基本上没什么损失,公司也就被吐槽一下,这比养几个测试人员成本小多了。
可是对开发企业级应用软件的公司来说,可以不用专门的测试人员吗?
企业级软件一般都很庞大、复杂,功能、业务逻辑太多,这样的软件需要很高的正确性、稳定性,新版本都是在已有版本的基础上开,周期长,迭代慢,新功能需要和已有的功能兼容,不能引起regression问题,所以需要不停的测试,不仅要测试新功能,还要测试这些新加的功能是否破坏了以前的功能。这些光靠开发自己做,肯定是做不过来的,他们能对自己的新代码都写单元测试就很好了。
那么能发用敏捷开发的方式来开发新版本?我觉得不太适合,原因就是前面所说的。我公司做企业级软件,现在也是实行敏捷开发,但是感觉其实并不敏捷,本身新功能的开发就慢(因为功能复杂,还要兼容已有的功能,不像互联网的产品,彼此独立性很强),能测试的时候往往已经过去了几周,然后测出问题来还要修复bug,增强可用性等等,再回来测试,再修bug……这个过程本来就不敏捷啊。那能否先搭建好自动化测试框架,开发自己设计用例,然后放到自动化测试框架里跑?也不是好办法,因为首先自动化并不能覆盖所有的case,很多case还是需要手工来运行,而且手工运行发现的问题往往很多很重要。其次开发人员和测试人员的思维还是有差别的,很多场景开发考虑不到,否则如果开发都能想到,那么他写代码的时候就可以完全避免可能出现的bug,但实际上测试的时候还是有很多问题。
所以企业级软件还是需要专门的测试人员的。那什么样的测试人员才能让公司认识到自己的价值呢?
1. 如果是手工测试,那么你需要深入了解业务,怎么和产品结合,然后设计出好的测试用例,从而检测产品是否存在重大问题。如果只是根据需求说明,测试产品满足了需求规定的基本功能,不能深入扩展、发掘深层需要,那么这种测试人员的价值就很低了,因为可替代性太强了。你能根据需要更深入的思考,再和具体的业务联系起来,那么很容易设计出更多更好的用例,即使你提出的是更好的产品UI的布局,报错信息的友好程度,也是帮助了产品质量的提高。
2. 如果是自动化测试,那么需要考虑的是如何能提高case的自动化覆盖率,如何扩展自动化框架来支持新的case,或者开发新的工具来运行case。会编程语言、脚本语言更好,能找到合适的开源工具也可以。当然,如果你能设计一个满足大部分case运行的自动化框架或者工具,是最好的了,因为这样,我们就可以在测新功能时,按照标准设计好case,然后按照流程放到自动化框架里跑就行了,我们只需要手动运行少量的不能自动化的case就可以了,这样得省了多少时间和精力啊。持续集成需要做,因为回归测试需要它做基础。自动化测试结果分析:能根据结果轻松的判断一个错误是产品bug还是测试框架/工具问题并能修复,这都是能力的体现。
3. 性能测试:企业级软件的性能是竞争力的体现,即使你的功能再强,但是性能太差,一秒钟处理不了几个请求,恐怕客户在购买时也要权衡再三吧。所以把性能做好使对产品质量的极大帮助。一般收费用LoadRunner,免费用JMeter就可以了,关键是设计性能测试用例,和结果分析。
4. 安全测试:安全的重要性毋庸置疑了,“棱镜门”事件,各种黑客、病毒木马事件,还有现在无处不在的贷款、买房骚扰电话(这是个人信息泄露),人们越来越重视安全的问题了。软件也不例外,如果你有漏洞被入侵了,导致机密信息泄露,或者产品瘫痪了,试问谁还能信任并购买你的产品?那安全测试人员的价值就体现了。一个安全测试人员,需要至少了解SQL注入、XSS、CSRF等等安全问题,需要做渗透测试,需要对产品做全面的检测,像黑客一样从各个方位入侵,这样测试后的产品,才会有可靠的安全性。
5. 测试管理:测试经理自不必说了,他整合团队、分配任务等等都是需要能力和经验的。另外还有别的管理比如制定测试流程,规范测试过程和标准,整合测试资源、结果等,这些工作会对测试的效率、产出起很大的帮助。好的测试流程、标准更能起到事半功倍的效果(当然团队人员的执行力也需要很强)。
6. 解决问题人员:不管是自动化测试,性能测试,还是安全测试,如果发现问题,能分析出问题的原因,找出问题的根源,然后再根据问题开产品bug或者修复测试问题的人员,都是人才。能给开发提供最多的信息,特别是指出具体出错的代码的测试人员,应该是开发最喜欢的吧,因为这样省了他们很多时间。
另外QA和测试不能等同,只是现在大家为了好听,很大测试人员都称自己为QA了。我认为QA的职责更大,他需要在需求阶段就参与讨论、分析,要让需求更合理,要从需求阶段就知道测试的重点、难点,然后在开发、测试阶段都时时紧跟,这样才能让产品的质量有更大的保证。