测试是一个很尴尬的职业,因为如果你把工作做得近乎完美的时候,就要面临失业。这点与开发不同,固然,如果某天出现了一个根据需求可以自动生成代码的机器,并且开发人员能够完美的实现该机器,那么开发也就面临失业。但是当前技术条件下,开发的失业概率还是要远小于测试。
其实,与其说测试是一个职业,不如说测试是一种思维。这种思维更看重批判性,以发现问题为目的,努力使交付给最终用户的产品缺陷最少。
就具体技能上来说,其实测试和开发的测试技能范围差异不大,几乎可以说技能树是一样的,但是在树的各个分支上加的技能点各自有所偏重。在设计/编码上,开发应当较强;在流程分析/验证上,测试应当强于开发。
测试的全局观
在测试设计上,更应当关注设计方案和编码实现,尤其是较小的改动和有限状态机种增加状态时,对全局的影响。很大一部分原因,是在开发人员设计和实现时,多数情况下,重点考虑的是对当前模块的实现,怎样与上下游模块集成,数据流和业务流的打通,对于之前已经实现的逻辑,尤其是分支逻辑,或者三个环节以前的逻辑,考虑较少。
所以,好的测试,尽量从全链路,全流程,各个主要的分支流程,重点状态节点,考虑测试方案的设计,回归范围。
测试更依赖于经验
发布后的故障,是测试成长必需要缴纳的学费,同时由于测试所涉及的业务范围更广,所以能够有机会遗漏缺陷到线上的机会也更多,所以沉淀和积累的容易出问题的tips就更多,越有经验的测试,越能在短时间内定位一个问题,并提出建议的解决方案。
质量有成本
测试是为了保证质量的一个角色,首先提供给测试这个职业的薪酬自然涵盖在成本中。越完备的测试,越能避免故障遗留到发布以后,但是这也意味着投入的成本越多,为了一个短期内的迭代版本,投入过多的测试其实是浪费。
测试生而为消亡
测试某天把工作做到极致,这个极致其实不是通过自己的努力把缺陷全部消灭在发布之前,而是把质量意识和测试技能,深深地建立在开发的脑海中。那这个时候,测试就可以作为测试工具的开发人员,为方便测试执行而工作的开发。
这种消亡,从短期来说,是纯手工测试的逐步被半自动化/自动化的测试工具替代;从长期来说,是随着质量意识的普遍提高,测试人员转变为测试工具的开发人员,实际上,也就变成了开发人员。
语云:天下本是将军定,不许将军见太平。