2020-11-15
编者按:
2020年10月23日,第十一届中国国际软件质量工程(iSQE)峰会在重庆完美落幕,大会中嘉宾们从不同的角度阐释了软件质量工程产业相关问题。本次峰会汇聚了国内外顶级软件质量保证领域的权威学者以及企业高管,着眼于对软件保障的方法技术和实践,搭建了一个集聚影响力的交流互动平台。华体官网网页版(中国)有限公司官网作为活动的承办方,将会陆续整理推出嘉宾们的精彩发言。此次分享的是Testin云测CTO陈冠诚先生的主题演讲,他介绍了云测试模式的发展历程,随着AI技术的出现与云测试模式的结合应用方式,以及如何借助融合自然语言处理、文本识别、图标识别等技术的云测试产品,使软件开发生命周期流程更加精简和有效。
嘉宾简介
陈冠诚,Testin云测CTO,国内最大的Druid开源大数据技术社区发起人,原IBM研究院高级科学家,在Supercomputing,IEEE BigData等]顶级会议上发表过多篇大数据机器学习相关论文,拥有8项国际专利,目前在Testin云测担任首席技术官( CTO )。
嘉宾按
大家上午好,刚刚居老师演讲让我很振奋,清华有一句口号:为祖国健康工作50年。我自己的导师今年也60多岁了,是一个瑞典人,也是积极奋战在产学研的一线。今天很荣幸受到大会的邀请,来给大家分享一下。
刚刚刘琴教授分享过,怎么建立针对AI系统测试标准,AI随着生物学从2016年开始带来了很多变革。AI系统本身是一个概率,通过大量的数据复杂的模型,能够做一些识别,不管是图像还是语音,还是自然语言处理。识别过程中,非常考验识别的概率是多少,所谓的准确度是多少,精度是多少。我今天分享另外一个维度——AI怎么帮助测试做得更好?
有软件的第一天开始就有测试的需求了,我们这个公司跟测试的结缘怎么开始呢?我们公司叫Testin云测,我们这个公司上一家公司,是做飞信的,当年中国移动做的类似微信这样一个通信的软件,可以免费发短信,那时候用户量也是过亿的。我们做飞信的过程中,需要在塞班机型上做一些兼容性测试,成本非常高,人也非常痛苦。我们后面想有没有可能先把设备云化,用设备云做测试,这就是Testin云测的起源。
Testin云测创立于2011年,是一家以人工智能技术驱动的企业服务平台。在AI领域,从2018年开始做了大量投入,我一直不停在想一件事情:我们做这种自动化测试,有没有可能在测试这件事情上,用AI的技术把自动化测试的能力给提升一个档次?我们在内部研发团队进行探讨的时候,一直在考虑一件事情——所谓的智能驾驶,有L1到L5,现在市场上的车型,自动驾驶都是在L2级,L4就是大概率情况下的自动驾驶。我们讲AI能帮人做很多事情,AI做测试这件事情,有可能做到L4的自动化测试吗?如果有一天说AI能够把很多测试工作自动完成了,是可以把大量人力解放出来做更复杂的事情。
我们带着这个大的命题,能不能有一天做到L4级自动化测试?今天给大家分享近一两年里我们在宏观方向中取得的比较具体的成果。聚焦在APP端移动化测试有非常多,对于做APP测试领域的人来说,应该都是一些耳熟能详的框架。这些框架有几个典型的痛点,比如学习成本高、维护成本高、HYbird识别差、跨应用能力差、不支持跨平台等。
我们嫁接在AI这个技术上的浪潮,它随着生物学深度网络神经的流行,在视觉和自然语言处理都有非常突破的进展,能不能结合图象识别,自然语言处理最先进的技术应用到测试里面来。在定义落地的产品的时候,我们提了几个维度的问题。有没有可能有一天,我们的测试执行机器,能够像人一样看懂人话,有没有一天能够自动理解APP里各种各样的图形,有没有一天可以像人一样识别各种各样的图标。我们带着一个设想开始做这个产品相关的一些定义。
第一步,就是讲编写测试脚本这件事情,这是一个非常常规的动作。我们写脚本的时候,可以写一个代码,做自动化的测试,随着先进生产力工具的迭代,编写脚本的难度越来越低。用AI技术它的难度可不可以降低到像写白话文一样?这就是我们当时一个产品定义的出发点。
我们先定义了自然语言测试脚本的规则,左边是用代码写的测试脚本,需要懂编程语言。右边就是一句大白话——向下滑动。左边跟右边两个代码效果是一模一样的,用自然语言的方法极大的降低我们编写测试脚本的难度和门槛,这是我们想要实现的一个目的。
通过自然语言脚本的输入接口,我们还希望达到,只要会中文就可以写自动化脚本这一目的,同时希望一套自动化的测试脚本,以中文为基础的测试脚本,可以实现跨平台互用。大家讲华为的鸿蒙系统,在美国打压下,从备胎转成了主胎,它是一个典型跨平台系统,你的一个应用不局限于在APP上使用,可以跨PC端。同一个应用,可以在不同平台上,不管是手机还是智能手表上,还是自动驾驶汽车上,汽车的屏幕上都可以无缝进行数据的互通互联。一个很大的出发点是,用自然语言编写的一套AI测试脚本之后,能够跨平台使用。未来我们希望一套测试脚本,可以跨安卓、跨车机、跨手表、跨眼镜等等。这样有一个好处就是,只要业务逻辑是基本一致,可以只用维护一套脚本,同时应用在不同设备。过往是一定要维护两套脚本的。整个脚本的维护,编写开发成本直接缩短了一半,产生了巨大的经济效益。未来有一天,可以实现无缝兼容VR设备,可穿戴设备,车机等等。真正可以实现跨平台的联动。
前面讲的是信息输入层一个典型测试活动,有一个测试输入的过程,编写测试脚本。第二就是执行测试脚本,第三进行测试结果分析。我们在整个测试执行过程中,怎么样进行AI测试在里面的赋能?我们用了一个很典型的技术叫“文字识别”。我们当时想解决的痛点是,市面上各种各样的手机型号特别多,比如华为、小米、三星等等。他们的操作系统都是深度定制的,移动应用端哪怕同一个APP,不同手机操作系统上面,手机控键ID都是不一样的,导致我们维护成本特别高,因为你需要做各种适配和兼容。所以我们想有没有可能通过文字识别技术,克服控键不兼容的问题,这样用文字识别,替代控键识别进行控制技术。比如APP测试自动化控制技术,不需要再承担因为不兼容导致测试执行失败,造成维护成本太高相关的缺陷。
典型的文字识别,以一个场景举例,手机截屏的文字识别,它需要解决的计算难点,跟别的场景不太一样。比如发票识别,海报识别,有一些是用手机拍摄自然场景下图片的文字识别,跟截屏是不一样的,因为手机的分辨率不一样,截屏之后分辨率相对还好,不会有太多,因为光线变化带来有一些字体的问题。手机机型分辨率的不一样,会带来很多挑战,因为手机性能问题,或者网络问题,导致加载很多文字没有加载成功,很多文字没有显现出来。这个属于APP端OCR特有的表现。
手机截屏里面我们属于印刷字体的,在相对比较通用场景下的截屏,有别于在街景,包括手写体等相干场景。OCR过程中我们讲算法,会分成两个阶段,第一文字检测,第二文字识别。文字检测是说现一家APP截屏上面,文字分散在不同区域,需要用计算机神经网络算法,把文字的位置框出来,拆解成一个一个文字框,紧接着再进行识别。我们尝试过了不同的文字检测这块算法,各自都有各自的优缺点,如果相对比较复杂的算法,对计算资源要求比较高,对训练的数据量要求也会比较高。可能就不够轻量级,轻量级有一些好处,有一些场景下,算力资源不是那么多,有一些实际的客户,没有那么多的GPU资源供给我们做比较复杂算法。同时,还有很多做文字切割,比如说在APP里面,一篇文章所有的文字都要进行识别,怎么处理文字换行问题和文字空格问题,都具有很大挑战。所以我们在使用过程中,我们使用了多种检测算法融合的方式,进行了最后的算法的提效。
第二部分就是文字识别模型,用了典型的神经网络CRNN,换分成转录层循环层、卷积层等等。文字的检测和文字的识别,有了这两个算法就够了吗?根据实际的经验,光有算法不够,我们还做了一个动作,就是获取大量的带标注信息的数据,进行高精度的OCR实验算法训练,我们用了一些方法,比如说有人工标注的团队,我们本身也是中国最大的AI数据标注服务供应商之一。我们不仅服务我们客户,提供AI训练的数据,同时也外接业务。我们采集了大概百万量级APP截图数据进行标注,人工标注跟机器自动标注进行辅助,能够提效,纯人工标的话成本太高了。
同时,我们还做了数据增强的工作,比如突变的积淀、调色,通过一些数据增强的方法,把百万量级数据扩充到千万级。典型的模拟这种显示不全,模拟低分辨率,模拟干扰,模拟立体等等。
刚刚讲的都是算法跟数据相关的事情,具体到工程领域,我们还是做了很多工程领域的实践。AI需要三要素,一个是数据,一个是算法,还有一个算力。不是所有客户都能买得起很贵的GPU,很多企业或者服务的客户,他们会觉得大量的采购GPU也是无形中增加了成本。他们给我们提出一个命题,有没有可能用传统的CPU服务器,就能够完成测试。我们这块跟英特尔做了一个合作,用了他的CPU里面运行池优化的技术等,最后识别的速度提升了5倍以上。
这张图是量化的一个数据,实现OCR这个模型,准确率可以做到99.03%,在行业里面跟所有的APP端OCR服务,都经过严格的对比测试。我们也把市场上公有云体系里面,一些最顶级的公有云厂商AI付费服务一起跟我们做了对比,他们在APP数据级上,也是只能做到94%的精度。其实不是说云测技术能力有多强,核心点还是来自于多方面的因素,一个是很聚焦在这个场景下,比如应用里面的文字识别。为了这个场景采集了千万级别的数据,这个级别的训练数据,是很多厂商不具备的。
因为时间有限,我后面简单分享一些其他领域的工作,除了文字识别,很多应用里面都有图标,不带任何文字提示的,我们AI能不能对任意类型图标进行识别?比如说示意图里面返回按钮,加号按钮,能不能让AI自动识别这些图标?而且这些图标也会因为分辨率太抽象,导致人很难识别出来。一个搜索图标,让机器去理解,会有很多技术上的挑战。我们精度大概能做到97%,也是用了很多混搭的方式做。
在整个AI使用中,我们利用了大量的训练数据,加上对于综合利用深度神经网络和传统的机器学习结合的方式,以及跟英特尔算力厂商合作方式,实现了从算法、数据到算力三端融合,来完整实现整个AI,在自动化测试里面的落地。现在还做了一些很有意思的事情,比如说有没有可能让AI自动打游戏?我们也有很多成果,希望以后有机会跟大家分享交流,谢谢大家。