开发团队里是否需要测试人员?

最近在看“软件随想录”,里面有个非常有名的“乔尔测试”,其中有一个问题是“你的团队里面是否有测试人员”,如果有的话就加分,表明团队对产品质量比较重视。

但是在现在的软件开发团队中是否真的需要测试人员呢?

如何替代测试人员的工作

我们先来看一下测试人员的工作是什么?测试人员的工作是尽可能的找出bug,然后提交给开发人员进行修复。如果团队里面没有测试人员,开发人员要如何找bug呢?

首先我们来看测试人员做的最多的测试——功能测试,对于功能测试我们有什么办法可以来替代呢?

单元测试

单元测试是开发人员找出代码中潜在bug的自我救赎行为,相比手工测试功能,开发人员一般更倾向于写代码来测试功能代码,即所谓的单元测试。只要能想到相应的测试案例,就能写出单元测试,可以测试包括正常,异常,分支,边界等情况下的问题。

集成测试

单元测试虽然可以找到一些bug,但还不能完全替代测试人员的工作,单元测试只能测试细粒度级别的功能,比如某个方法的功能,如果需要对几个功能点一起测试的话,单元测试就满足不了了。但没有关系,开发同样可以用代码来写测试,这种粒度稍大的测试就是集成测试,比如测试一个后端的api,验证输入参数和输出结果,这个api的真正功能可能是后端调用数据库等一系列的操作,你一个测试方法就可以把这个api的各个功能点串起来一起验证。

UI测试

还有粒度更大的测试,一个页面上的按钮的点击可以看成是UI测试,相对于集成测试,这个测试的范围涉及了前端和后端,测试包括验证前端的页面是否正确,到点击按钮后触发的后端功能是否正确。现在市面上有很多端到端的测试框架,涵盖各种语言和浏览器。

性能测试

除了功能测试,测试人员还会做一些性能测试,同样地,开发可以通过代码或者脚本来调用性能测试工具来对系统进行性能测试。

持续集成

如果不想像测试人员一样每天做重复性的劳动,就可以将以上那些测试代码放到持续集成上面,让机器帮你运行,想象一下,几百上千个测试,如果手工跑的话可能要花不止一天的时间,而通过持续集成,可能在一天就能跑完好几轮所有测试。

不能替代的测试工作

如果我们做到了以上这些,是否就可以完全代替测试人员了呢?其实有些测试是机器无法测试的,比如网页的样式,机器只能判断是否有显示,但无法判断显示的是否好看。还有一些交互效果,也只有通过人工才能识别效果是否正确,还有其他各个领域的测试,目前是不能通过代码或者机器来替代的。

高级测试工程师

可能有人会说上面提到的用代码来执行测试的工作,高级测试工程师也能做。其实我觉得软件开发和软件测试到了越高的位置,技能重合的领域就越大,两者都同时会写代码,做测试,可能还会部署,会运维,这个时候我觉得不如就叫高级工程师好了,或者全栈工程师。

结论

说了这么多,所以结论是什么呢?

具体情况要具体分析,不能一概而论说完全不需要测试人员,团队不需要测试人员的条件是:

  • 团队的开发人员可以写的单元测试,集成测试和UI测试
  • 没有太多需要人工测试的功能,比如团队开发的是常规的web系统或者纯后端应用等

Comments