关于自动化这个被炒了无数次的概念,我不想再多说什么了。这里我想提一个概念,我暂且把它叫做自动化精神,意思是尽一切可能让程序来对程序负责,让代码来保障代码,让软件来管理软件,因为传统方式里,这些都是由人来做,不管这个人多么熟练细心、人出错的几率也绝对远远大于机器,这就是自动化精神。
我经常觉得自动化总被跟测试绑定在一起来说,企业招聘动不动就问你会不会自动化测试。笔者看来,现在特别是国内的IT公司里,需要自动化远远不止测试这个领域。我们来细数项目团队中那些由人来做的事吧:
- 产品设计需求,发起项目
- 设计师美工设计产品原型
- 开发构建框架完成程序开发
- 打包部署工程师完成安装包制作
- 测试按照需求验证结果
- 市场客服人员收集用户反馈
- 开发、测试、产品针对反馈不断的改善产品
在每一个环节中,其实都存在许多本来由人来做但是却可以被机器代替来做的事。机器代替人来做一来可以7x24不停歇,二来机器在一定的规则范围内也绝对不会出错。而这些统统都可以叫做自动化,现代IT行业不再是人海战术堆积苦力干活的时代了,项目也不再是动不动上百人规模了,技术的水平也允许机器在遵循规则的时候可以更加智能高效了。在各个公司、各个团队,其实大家都或多或少正在做着自动化的事:
- 因为需求经常变更,有的团队会自研发需求变更管理系统,把需求分模块的保存和组合,变化的毕竟大多数情况下是个别模块,这样各个模块独立维护也能方便的衍生出各种User Story
- 美工做出来的icon,为了适应浏览器的并发下载模型,经常需要被合成整图然后页面按坐标访问,但是任何单个icon的变更,意味着整图也需要重新合成,于是有些团队的前端工程师就会研发工具来自动做这件事
- 开发写完代码,许多团队里经常会互相review,毕竟代码的质量直接决定了产品的质量,同时也会使用静态代码检查程序,让代码来检查代码,更优秀的团队会随时更新完善静态代码检查的逻辑,使得工具能够与时俱进甚至自我学习进化
- 测试就不必多提了,为了验证功能经常要重复的执行很多重复的操作,然后检查日志、查看数据库、审核页面,这些都可以被机器来代替,甚至衡量监控产品软件长期运行的性能和数据,让程序来监视检查程序,效率比人要高得多
- 打包部署里一个很火的概念就是持续集成,Hudson/Jenkins的日益流行,让每天团队的进度都可以被自动的做一个总结,方方面面的做一个审核,从编译、到单元测试、到打包、到部署、到功能自动化、到issue/bug统计、到最终报表的生成。这一切都在有条不紊的进行着,而且是由机器来完成,而不是一群不同职能的人跑来跑去……
- 市场客户的工作里,为了服务10万用户公司不可能雇佣10万客服,可以根据用户的问题进行20/80分类然后把常见固定模式匹配的用户咨询,做成机器人程序,机器人客户来智能回答,只有剩下20%的复杂场景需要真实的客服人员介入提供服务。
- 市场运营收集用户的数据进行分析,就更不用多做解释了:Google Analysis,互联网的人都懂的
其实这一切都是在让机器代替人来做事,也是未来必然发生的改变。本质上来说它们都是自动化的范畴,当然Google/Facebook喜欢称呼它们为工具文化,而在中国测试领域平均技术水平的落后,也导致了这些例子其实由测试人员来完成的部分寥寥无几。笔者觉得抛开测试和开发不说,企业是需要这种角色来完成这些自动化工作的,可以称呼它们为自动化工程师,而企业也时刻需要鼓励团队拥有这种自动化精神,然后就不必再区分什么开发、测试的职位定义了,整个团队时刻不忘自动化精神,提高工作效率降低出错几率最终产出更出色的产品。
当然,这一切都是只是笔者的个人愿景而已,大部分的公司还是在守旧坚持传统的方式,用堆人来解决问题,恶性循环下人的技能也被固定死了……