前言
不得不说最近AI概念确实很火,好像什么搭上AI概念都立马变得高大上了。但是也要看清,AI目前仍然是处于早起发展的阶段,仍处于算法研究革新的阶段,技术发展目前是先于应用层面的。现在比较成熟的应用场景主要在,智能硬件、机器人、翻译、医疗诊断和一些推荐系统等等
目前看现状是大公司都在加大经费投入算法研究和平台建设,比如现在很火的Tensorflow,百度推的Apollo等,都在想着做AI领域的IOS,Android。而中小型的公司则深耕某个垂直领域,比如语音识别领域的科大讯飞,计算机图像识别领域的Face++等。
在此AI浪潮之下,作为一个测试人员,我们要怎么做,才能搭上风口或者说不被浪潮抛下呢?个人觉得有两个选择:
- 只要你理论基础足够好,你可以转型研究各种算法,参与框架和平台的搭建,找个目前最火热的职位-算法工程师
- 学习目前成熟的框架,调用别人封装好的各种网络和深度学习算法,利用自己手头有的数据,训练模型,利用AI解决一些问题
本文仅就在选择第二种的前提下,讨论在测试行业内,我们能利用AI做些什么,从而改善测试的质量和效率
选择有监督、无监督还是强化学习?
既然要在别人计算框架的基础上,选择网络和深度学习算法训练模型,但是网络和算法有这么多,选哪个?怎么选?
其实目前大部分深度学习算法大体可以分为有监督学习、无监督学习和强化学习三大类。监督学习就是基于一堆带标签数据进行模型训练,无监督学习简单理解就是给一堆无标签数据,让计算机自己去学习总结规律。
目前应用层面用的多还是监督学习,比如商业化比较成功的广告推荐系统,类似今日头条那种新闻推荐,都是基于你日常浏览、搜索和用户画像标签数据的。
所以AI如何运用于测试领域,个人认为重点还是数据,找到我们已有的一些数据,才知道我们到底能做什么。
数据数据!
那一般测试人员会有什么类型的数据呢?
- 系统运行时候产生的日志信息
- 移动App运行中收集连续性能数据
- 测试人员本身提的bug数据,包括标题、描述、截图等
- 网站或app运营数据,埋点数据,用户访问路径,用户评论数据等
...
有了数据,然后呢?发散一下
- 假设我们有了大量的报错日志片段-标签是报错责任人和报错模块,那么我们大概可以通过机器学习训练一个模型,该模型可以自动识别一段报错日志,并提交给XX模块的负责人YY
- 另外假设我们有app运行一段时间的各项性能指标,标签是性能是否达标,那么我们大概也可以训练一个模型,只要提交一段时间的各项性能数据,机器自动会告诉你性能达标与否
如果没有数据呢?
前面说的都是在有大量人为标注的格式化数据的前提下的想象,那万一我们没有这些数据积累了,我们还能做啥?
如果某些测试场景,我们不但没有数据,反而需要自己构造一堆数据,该怎么办?AI有没有办法自动产生类似数据呢?
有的,这里介绍一个目前比较好的一个神经网络,叫做GAN(对抗生成网络),简单讲,这个网络有两个模型,一个是生成模型,一个是识别模型,生成模型不断产生跟训练数据很像的数据,企图欺骗识别模型,识别模型在不断训练,提高识别准确率,企图把所有生成模型生成的假的都找出来。在对抗的过程中,两个模型不断发展,最后达到一个比较好的平衡。
这里面比较有意思的变形就是DCGAN,即在生成和识别模型均使用卷积神经网络去处理图像,可以通过一堆数据,比如通过很多妹子的图像,伪造一个妹子图像。
训练头像资源及教程来源于这篇博文:传送门
生成二次元萌妹纸图像如下:
假如随着生成网络算法的完善,比如测试车险的智能理赔业务的时候,我们是不是可以通过AI生成一堆不同车型,不同部位受损的照片,作为测试数据对智能理赔业务进行测试呢?
同理,类似车牌识别,人脸识别等等,我们是不是都可以想想办法构造类似数据,看看人脸识别SDK是否能准确检测呢?
当然,这里只是随意YY一下,具体到实施肯定还有诸多问题。
基于强化学习的游戏测试
2013年的时候DeepMind就提出DQN(Deep Q Network)算法,实现端到端学习玩Atari游戏。输入是一帧像素图像,训练AI自动玩游戏。
假设我们遇到关卡类手游的测试,比如开心消消乐这种,是不是也可以训练AI来自动测试关卡难度呢?
比如酷跑类游戏,也可以边训练AI,边收集性能数据,随着AI越来越智能,就能收集到游戏长时间运行的数据,也能发现长时间跑后可能出现的bug了,如果这些依赖人工操作的话,可能要耗费大量人力成本。
基于迁移学习-图片相似度判断
迁移学习,简单来说就是基于别人训练好的模型,来做自己的事情,而不用重新训练
比如,谷歌有个图片识别模型Inception-v4,是谷歌用几百万图片训练出来,对图片进行分类识别的,识别准确率很高,机器训练模型结构很复杂,用了多个卷积核和多层卷积模型。
假设我们认可这种识别图片的模型,在此基础下,我们截取模型最后输出的特征向量来代表这张图片,那如果要计算两张图片的相似度,我们是不是拿分别产生的两个特征向量来计算余弦距离,距离越小相似度则越高。
93%相似度的两张图片:
85%相似度的两张图片:
40%相似度的两张图片: