作为思科的测试工程师,以前也在华为,诺基亚西门子工作过,就楼主的问题说下我了解的公司测试的情况。但首先还是说下那篇文章。作者可能是优秀的开发,但码得一手好code并不能说明就能作好测试,只从代码的角度看问题难免有点眼光狭隘。不过我猜想这可能和他平时做的产品有关——测试的重要性和产品对稳定性成熟度要求、面向的客户群、还有修复成本高低有关。要求越高的软件,测试越重要,越需要完善的测试部门。
相对来说要求较低的软件如一些互联网软件,浏览器,手机app等,这些很多都是简单测试甚至不测试,只要发布一个版本,然后利用庞大客户群去发现bug,再做下一个版本,再发布……因为这些软件有问题一般影响也不大,所以对这部分开发人员来说,他们是最觉得专职QA是不需要的。所谓做不了开发就做测试吧,其实也可以说只会写代码的话就去做开发吧。
再来就是大型网站,操作系统之类的,主要处理好性能、稳定和安全性,功能只要能正常工作一般问题也不大。这些可能可以由一些资深的开发来做测试,但他们也不是完全能达到独立测试的要求,另外时间和精力也是一个问题。
接着是电信,企业级的通信设备,除了性能和稳定外,对软件功能要求也比较高,因为错误的严重性和修复的成本可能会很高。更重要的是因为功能,协议,网络环境的纷繁复杂,开发能不能达到专业的测试要求,知识面是一个方面:会网络不见得会HA,会语音不见得懂底层转发,懂微码不见得懂网络。
最后是一些特别行业的软件,如航天航空,医疗和工业控制等,这些一旦出问题造成的可能就是场灾难,这些就更需要专业的测试了。
————————————分割线——————————-
回到正题,简单说下公司里的测试。在思科,测试称为DT(develop testing engineer),开发则是DE(develop engineer)。从比例上看,我们现在部门DT:DE大概是1:1.5的样子:开发按功能领域分成6个大组,像network, data plane, infra…测试则是3个功能测试和一个系统测试,还加上一些外包测试人员。 一般在项目开始阶段DT就会开始介入,主要工作是了解功能实现和协议规范,并作出sanity test plan。其目的是保证系统基本功能的正常。在测试认为软件不满足基本测试要求的情况下,测试是可以拒绝接受开发的版本的。
现在公司在推敏捷模式,DT和DE都坐在一起,基本上一个月一个cycle。测试不用一轮轮的反复进行,一个月做完一点,然后系统测试那边就同步的测,以前的regression脚本也会同步的跑。开发现在也被要求在提交功能之前要先完成UT(unit test)并提交report以保证基本功能的OK,同时UT的用例会交给测试来review以确认是否能达到要求。之后DT大概用半个月到一个月的样子完成手工测试,接着就是写自动化测试代码。一般测试的时候发现问题可以直接找DE来看来,有时候也能通过邮件描述下现象,基本能确认是个问题就发bug。而像crash,错误打印,内存泄露之类的我们一般都直接发bug了,把相关信息描述清楚即可。做完之后,所有的组都会做demo,介绍下当前完成的功能并演示给远在美国的老大的老大的老大看…-_-。除了完成产品测试,DT也要解决客户问题。这些case都是客户那边发现的bug,开发和测试会一起来重现并分析,然后测试再负责验证和完成针对这个问题的自动化脚本。
关于自动化测试,之前在诺西的部门是有专门写自动化测试的工程师,而思科基本上要求每个DT都要会手动和自动化,除了写自己的还要porting别人的代码到新的平台。其实在中国,自动化测试看起要比手动高级,这估计还是由于代码至上的想法造成的——就如同外面有些公司或人认为开发比测试高级一样。其实在美国很多大牛都是擅长做手动测试的。
总的来说,公司的测试工作涵盖从文档设计,单元测试,可用性测试,功能测试,系统测试,性能测试,回归测试到用户问题解决的方方面面。嘛,目的都是一个,提高产品质量。
—————————————–分割线————————————–
顺便说一下,不少人都觉得黑盒测试技术含量不高或很苦逼,其实不是这样的。相反,黑盒测试更能体现一个测试人员的能力高低。对协议的理解程度,对系统的掌握程度,对不同特性之间的关联的理解程度都影响能不能做好黑盒测试。有句话不错:在测试中发现的问题不是说明了开发的愚蠢而是体现出测试的智慧。
— 完 —
本文作者:apoptoxin
【知乎日报】
你都看到这啦,快来点我嘛 Σ(▼□▼メ)
此问题还有 21 个回答,查看全部。
延伸阅读:
互联网产品如何进行测试?
软件测试有哪些前景?