正好最近看到一篇关于“云会杀死运维么?”的文章,感触颇深,所以有了今天这篇文章。虽然好多人都说云层每年都在带节奏或者贩卖焦虑,但是5年后再来看,或许你会换一个想法。
废话不说,直接入正题
2019年聊到人工智能测试的话题也不少,这个也和最近两年人工智能和机器学习的热度有关,只要沾上了这个话题就有起飞的可能,毕竟中国最不缺的就是大数据和基于大数据机器学习所带来的人工智能。
先不谈这些东西能不能做到位,是不是人工智障,今天我就来谈谈人工智能能够帮助测试做些什么事情和对测试的冲击。
先谈分层自动化
在谈测试之前首先要谈一个很重要的基础就是分层自动化,相信各位对什么是分层自动化,为什么要做分层自动化很清楚,但是如何分层甚至如何做好分层自动化应该想明白的却不多(基于云层2019在各个客户中聊到分层自动化的反馈数据)。
如果需要通过人工智能来完成分层自动化,能做到什么的地步呢?
人工智能之自动化进阶
大数据去重的自动化用例设计
第一阶段
其实这种测试策略并不是随着大数据起来的,很早就有这类测试的手段和方法。简单来说通过埋点或者日志等方式获取用户的操作流程,再将这些操作去重回放,从而实现基于用户的测试设计。
在这种方式下记录用户UI操作的代价略大而协议级别的捕获回放相对成熟,大量的全链路压测都会采用这类策略做压测负载(去重、放大、复制脱敏)。
在UI层面一般会通过业务记录来反推UI操作流程,完成测试用例的自动生成。在单元级别通过执行统计完成自动化的用例设计,从而做到接近100%的条件判定覆盖率也并不是什么难事。
大数据 机器学习的自动化用例设计
第二阶段
如果要给这种人工智能测试定义的话,个人觉得更像Alphago,通过足够多的数据和标记来训练机器,从而让机器能够代替人思考完成测试工作。例如对需要访问的某个功能对应图片、文本框、按钮进行识别,从而极大的提升自动化脚本实现效率,配合语义识别,最终实现讲自动化测试,实现自动化测试的目标。
思考这样一个场景,当测试人员说“请打开XX应用,找到登录,输入用户名和密码,点击登录,检查界面上是否出现了TestOps云层”,接着机器开始尝试在各个可能的位置找到XX应用,接着启动应用,查找登录(可能是图片!),在登录框中输入对应的信息点登录并验证登录后的结果。
上面的场景听起来视乎很科幻,但是实际思考下离我们并不遥远,因为在大数据下已经可以完成对每个应用的图标、操作流程、按钮等元素的深度学习和标识,就好像给一个没做过这个事情的人讲做这样的一个测试,机器是完全可以做到极高成功率的(参考天猫精灵的语义识别 CRNN文字识别 图片训练模型)。
训练机器像人一样测试
第三阶段
参考Alphazore在只告诉规则的基础上通过大量的练习找到其中匹配规则的最有解法。在当前可以获取被测对象覆盖率的基础上,让机器从零开始尝试识别被测对象(代码方法、API接口、UI界面),尝试访问每一个对象并对返回做出评估,基于大量的反复遍历(配合部分逻辑支持),可以获取非常高的测试遍历覆盖结果,再进一步通过专业的人工训练师补充和调整,就可以轻松完成测试工作。
以后还会需要测试么?
到了这里可能大家会想我靠,这样岂不是测试不就被杀死了么?都能自动化测试了以后还有测试什么事情?
在回答这个问题前我想问大家一个问题,以前由于语言和IDE的限制,我们常常出现被测对象500错误、各种兼容适配、内存泄露问题,现在这些问题已经几乎都灭绝了,是不是测试就消灭了?没有,测试在现在比以前任何时候的人都要多,那么科技进步到底淘汰了什么?
在人工智能测试出现后,当前的快速反馈问题解决了,接着就是研发软件的复杂度极大提升,当前的解决方案不能解决对应的问题,所谓魔高一尺道高一丈,所有的解决方案都在解决当下问题,而未来的问题并不是当下问题能解决的。例如未来的测试更多的都是没有准确答案和标准的,如何确保其质量在未知解决方案下可靠,所诞生的测试职位和空间会越来越大。
云消灭了某些运维人员,而更加专业的运维团队却比以前更大了,这是因为组织能解决的问题比以前多了很多,高维淘汰低维是历史进步无法阻挡的,快还是慢是在于你自己的节奏。
云层要补充的话
云层也不是专业的人工智能研究者,上面的内容参考了当前一些主流的互联网文章及自己的脑补,如有错误请及时指导。
最后感谢TestIn的CTO陈冠诚,帮助我审阅了这篇自己写的新年新文,也是Testin在NCTS2019的开场Show“说好不哭”给了我很多启发和灵感。