导读:“AI是一种技术通用解法”,“AI不是未来,AI已来”,AI已经应用于我们日常生活的方方面面。蚂蚁金服国际技术质量及技术风险工程效能部邓艾老师为我们介绍,当AI应用于测试领域,在移动端APP的智能化测试实践中,又遇到了什么非常特别的难题,以及是如何解决的。
同学们好,坐了一下午比较辛苦,我想说接下来的内容非常精彩,千万不要错过。今天我过来是有两个身份在这里,第一个身份是国际技术的无线质量和控制效能这个部分,我会分享我们在过去三年当中是怎么做移动端智能化的测试。第二个部分是经济体智能化测试小组的成员之一,这一块给大家分享是关于在体系化领域当中如何利用AI。
首先AI是一种技术,可以解决各个领域当中的问题,是一种通用解法,只要有数据。没有数据怎么办?那就造数据。接下来我会讲在移动端的测试领域当中怎么利用AI解决痛点和难点。第三个部分对于一个部门和一个组织而言怎么用体系化的技术解决测试领域的痛点问题,组织级的提升效能,最后是一个简单的小结和展望。
1. AI是技术通用解法
AI是技术通用解法,无论是日常生活当中多多少少感受到所谓的行业里面的AI的应用,一部分是我们会想这些AI技术能不能够应用在测试领域当中。我们想象一下现在每天的生活,早上上班打卡的时候刷脸过门禁,口渴了去超市买饮料,用支付宝刷脸支付,下班回家的时候,自动驾驶带你回家,回到家以后刷淘宝,刷抖音,会自动给你推荐你喜欢的商品,你喜欢的内容,你喜欢的小姐姐,你喜欢的小哥哥。
所有这些行业的应用,我将他归为这么几类。
- 第一类是识别类,比如说,人脸识别,猫脸识别,猪脸识别
- 第二类是预测类,销售预测,偏好预测
- 第三类在预测的基础上做商品推荐,内容推荐,文章推荐,各种推荐
- 第四类是规划类,比如说,自动驾驶。
这几类应用在大家日常生活有所体验,说明AI在一些领域成功大规模的商用,跟我们测试领域的测试同学有什么关系,这些AI的技术能不能够应用到测试领域当中呢?这是可以的。
怎么应用呢?这里我套用南门的一句话,叫做这是钉子和锤子的问题,什么锤子,AI技术,什么是钉子,测试领域当中的痛点和难点,我们既可以拿钉子找锤子,也可以拿锤子找钉子。举一个例子,很多同学都是做QA的,一定踩过无数的坑,这些经验可以用于代码扫描,监控报警等等,我们测试中的痛难点之一,有大规模的自动化做得非常好,但是它的通过率不是这么高,很难达到100%,大规模的自动化再加上通过率承接起来就是一个相当可观数量的数据,本质上面是缺陷诊断的问题,这是聚类和分类的问题,这两块的应用后面有案例。
2. AI用于测试痛难点解决
接下来这个部分会讲在移动端的测试过程当中,怎么从一个一个的问题到一个体系化的解决,我们是怎么做的。开始之前我想大概了解一下在座有多少同学使用过,这是对安卓和IOS原生框架做了封装,核心原理是说我整个APP有一系列UI,能够做到根据这些元素的属性对这些判定他是否存在,是否存在和他对不对这是两件事情,对于图像类图中的小图标是一个LOGO,首先是一张图片,图片里面有LOGO,也有可能有文案,怎么验证是对还是不对?这是一个难点。
怎么解决呢?图像识别,算法,提到图像识别算法一定绕不开OpenCV,我们选用的是SIFT算法,核心就是提取出图片当中的一些关键特征,这些特征在不同的机型,在不同的分辨率下面有很好的适应性。使用SIFT算法用来做小图标的验证,我们用下来的结果大概有100万次的调用,成功率在80%,为什么是80%,还有20%?我告诉大家是超小图标,他本身的特征非常少,即使SIFT不能满足我们的验证工作的需要,大家感受一下超小图标,例如文本协议下面非常小的矩形框,比如说选择座位的时候,空白座位背景全部都是白色,也是很细的一个座位的轮廓,怎么样能够准确识别出来,他是一个空座位。SIFT算法已经不够用。
用CNN,为什么用CNN?大家知道CNN是比较适合在图形图像处理领域非常迅速的框架,今天这个案例的关键要点在于对于超小图标,我们是反过来使用,怎么过来使用,你可以说我有很多APP,我每个APP都有很多新版本,有很多新的小图标,我事先把所有的超小图标取出来打标和训练,我们发现有变化,我们对于新识别出来的超小图标进行泛化,用工具进行各种扭曲拉伸变形,然后打出一批数据放到模型里面训练,我们最终发现它的最终率99%以上,准确率非常高。
解决了小图标的问题,超小图标的问题,接下来就是数字键盘的问题,为了支付类的问题,为了确定安全,他有数字键盘,应用难题就是左侧这个数字键盘,他是N个超小图标构成的,他是一个构成,如果用SIFT算法只能识别10个数字当中的1个,如果用OCR的结构识别文字的部分,数字部分无法识别。
用两张网络混合解决,一张是OCR的网络,我们自己自研发的网络,对于键盘的数字部分,用模型物体检测网络实现,最后将这两个识别的结果做一个混合。实际上,这个物体识别的网络,我们实现了并且做了孵化,在各个BU有复用。累计有700多万次的调用,准确率达到99%以上。
解决了小图标的问题,超小图标的问题,接下来是维护成本的问题。关于这一块我想要讲几个点,第一个点我所在的无线质量部门是横向部门,我们所有的都要做测试,不仅说我们有十几条的业务线,每一条业务线在过去几年当中都是井喷式的发展,业务发展非常快。在人员规模没有增长的情况下,必然带来一个问题,怎么样能够做到又快又好,怎么样使得效率数倍的提升。第二点在过去几年当中整个国际技术有一项非常大的挑战,就是国际化的挑战,这意味着我们要输出我们的技术,在东南亚帮助我们的合资公司,发展出他们本地的支付宝,能够为当地带来一些美好而微小的改变。现实的问题说,我们进去一看,由于各种原因,历史的原因,发展水平的原因,合资公司的QA的技术水平跟我们有一定的差距,大家想象一下原始社会,PD开发测试30个人在一起围一圈拿手机测试,测试完就可以上市,大家可以想象得到发版的质量是怎么样子。
从另外一个层面来说,奔着要帮助业务成功的角度来说,我们理论上面可以帮助他们做兜底,所有的测试我们可以来做,但是现实情况不允许,因为我们的QA的人数是他们QA人数的几分之一,可能四分之一或者是五分之一,所以这一条做不到,应该怎么办?
大家都知道传统的自动化技术维护成本相当高,我们应该怎么解决呢,大概是在两年前的这个时候我们下了一个决心,一定要用新的技术绕开object技术,用图像识别的技术,意味着不需要依赖这么重操作每个UIobject技术,文本和位置信息,对文本和位置信息做一层封装,类似于用自然语言的命令和驱动操作命令驱动之间建立影射关系。其中smatch实现文本和位置识别,最后做出来的效果,你要写自动化,只要你会写单词,你就可以写自动化,另外一个好处是说,我们将UI自动化成功左移到DEMO出来之后,等开发交付第一个版本直接跑版本,有问题就修复。
我们做过横向的对比,平均下来写 + 调试跑通,大概是8-10条,写到12条已经很厉害,用Smatch正常是40-50条,整体上面来说效能有4-5倍的提升。我们是怎么应用这个技术帮助我们的合资公司的小伙伴实现低成本的部署到本地。好处是说培训之后,本地的小伙伴掌握了用Smatch的经验,在我们撤出之后他们自动化的质量没有降低。
解决了小图标的问题,超小图标的问题,解决框架自动化维护成本的问题,那么还有什么问题?我要讲三个点,第一个就是说在座有多少同学负责的项目或者是产品出现过故障,大部分都有,大家都经历过复盘,复盘一定有一种结论是这样的,开发分析的时候遗漏的,测试分析的时候也遗漏,你问他为什么遗漏了,他说就是遗漏,有没有一种技术可以屏蔽掉他不知道自己不知道导致的问题。
有一个PM过来问我说,你们的Smatch应用AI的技术已经这么牛,为什么做测试的时候还要他们去写脚本,写脚本也是要花时间的,能不能做到测试项目测试APP的时候不需要写脚本,我思考几秒钟,可以的,你等我三个月。实际上,三个月之后第一个版本出来了,但是到后面不断打磨使用上一年左右时间。第三个点,最近几年在行业里面,AI领域发生几件大事,首先是Google的阿尔法狗打败围棋,还有就是游戏里面星际领域里面打败人类,既然AI的技术可以打游戏,能不能用于APP的测试当中,我认为可以。为什么呢?说白了游戏所有的状态是割裂的,所有的操作序列是有限可列的,我们的APP也是这样的,除非你设计出反人类的APP是无限状态的,我们的APP都是一个有限状态机,它的状态是有限可列的,操作路径是有限可列的,基于这个想法我们成立一个项目。开始研究怎么样使用smartbot。有同学来问,你可以证明他覆盖所有的操作路径,这些操作路径是不是人类的操作路径,有一些很傻无意义的操作路径在里面,我们称之为第二个阶段,我们使用NPR的技术。
它的核心原理是说我们的业务场景每一个APP里面的业务场景是有限可列的,对于支付类的APP来说就是几十个场景,这几十个场景打标,打完标之后,使得他可以感受到自己在哪个业务场景的上下文中,他会选择跟当前场景,当前业务场景的结果相关的奖励值最高的一个方向去走。这样我们就得出了和业务场景密切相关的一个操作序列,把无效无意义的操作路径给跑掉了。
中间这个图是我们拿一个业务场景做的覆盖之后的效果,这是他做所有的有意义的操作覆盖的一个有效图,右边同样是这个图,它的序列图的展现模式。事实上这是很复杂的,通常有一种观念说UI自动化也好或者怎么样也好,是没有技术含量的,这是很简单的事情,实际上这个序列图和有向图出来之后还是蛮震撼的,用智能技术用UI的测试是不简单的。
这里插入一个问题,有同学会问,你为什么做UI的自动化?我的思考是这样的,我们在移动端的测试是分层的,总体上面分两层,一层是我们叫做CI991,我做到这个程度就足够吗,还是不够的,我们的APP在实际应用场景当中涉及到多个的BU,人员需要一定规模的UI自动化。
解决了场景规划的问题,最后还有一个问题,大家知道在移动端的测试领域里面无论你线下测试无论是灰度还是生产,可能随时随地每时每刻都在报它的数量是巨大的,类型是复杂的,最关键的问题是说,怎么能够把这些问题去重,不要重复报,怎么把这些问题分类到具体的开发同学,到底是应用层面的问题,还是运行容器的问题,怎么能够做到快速的报给开发。
为什么用CNN,我们是用CNN网络来分析,替代人工分析分析,错误堆栈的过程,CNN网络对于抽象特征有非常好的表达和抽象能力,为什么用RNN,是因为RNN本身具备一定的记忆能力,非常适合用于解决复杂的上下文关系当中的里面的分类。无论是线下还是线上,出现问题要尽快修复,否则变成故障。
从最早的手动测试,大家想象一下我们合作的合资公司的小伙伴们,到UIobject的测试,智能化测试的能力,我们有一个产品叫做移动端的解决方案,这一套能力是国际无限质量团队自然发展出来的,就有一个问题,这个问题是说,现在具备一定程度上面的体系化,也应用了很多AI的技术,在智能和效能上面有明显的提升,当我作为一个管理者或者有想法的同学,我想要把这些经验复制到一个部门或者是一个公司的时候,有没有一套体系化的方法,能够帮助到我。能够体系化应用AI技术到整个部门,提高组织级的效能,有的。
我要隆重介绍一下经济体的智能化小组,在这一块迈出了一步,有一个智能化的测试标准,后面我会讲,我相信这个智能化的测试标准在某种程度上面帮助到大家。在第三个部分开始之前,我们的SmartX左边这个图是如何做场景分类,我们选择10%用人工打标,打标完之后放到模型里面直接训练,训练完之后我们再去人工纠错,最后看下来的效果需要纠错的分类场景数量是在100-200之间,这个准确率和识别率非常高,右边这两张动图我们应用在小程序和小游戏里面,他可以自动检测出来出现什么问题,自动报bug。
3. 体系化的使用AI技术来解决问题
我主要讲两个点,第一个点讲钉子和锤子的问题,我们有锤子是指用的AI的技术,钉子是指我们日常工作当中测试领域里面的各种痛点难点问题。钉子和锤子的问题,说白了我现在知道AI的技术有这些,这些技术怎么能够应用到测试领域当中去呢?另外一个在测试领域当中有痛难点,我应该去选择?经验规则算不算AI技术,我们认为算是,在智能化小组里面有争议,最后我们认为是算的,他可以证明是有效的,维护成本比较高,每一条经验规则需要人来维护。他可以做缺陷扫描,核对和报警。第二类是算法,聚类和分类和规划,除了做前面经验规则所能解决的问题,他还解决经验规则无法解决的问题,随机操作覆盖,另外做调度类简单曲线的定位,还可以做缺陷修复和缺陷检测他就是一堆算法的应用,最后的准确率还是不错的。机器学习能够做的工作更多,特点是说强依赖算力和数据规模的。这里我没有把上面已经解决的都列入进来,他和一般意义上面的算法和经验规则相比,他能够做更加复杂的问题,复杂的场景降噪等等。
最后一块是说属于AI技术里面比较前沿部分,就是学习如何去学习?这一块举一个例子,什么叫自学习,大家知道Google的阿尔法狗非常强大,只是用于下围棋,这是它的局限性的问题,我们的自学习就是自己学习相关领域的知识和经验,学术界是比较热的一个方向。
第二个部分就是说,当我想在一个部门或者是一个组织里面或者是多个组织里面体系化的应用AI技术解决测试领域的问题,组织级提升效能的时候我应该怎么做?智能化小组给出了一个参考,总体上面智能化标准,我们分为三层,第一层不仅对测试活动里面每个具体测试活动给出了参考和指引,而且左侧做了扩展,测试活动的左侧做了扩展,测试活动的右侧做了拓展。不仅仅是测试活动,他构建的对于整个质量体系的覆盖,不仅仅是检测能力,包括预防,包括生产环境的检测,都涵盖在这个体系之内。第二个点针对每个纬度测试主体的6个纬度和左右侧的两个纬度,从L0到L5的划分,主要是参考用什么技术,第二他达到的效果是什么样的?第三个纬度是说,我有一个产品或者有一个工具或者是一个平台,想要达到初级智能化的水平,这是很困难的,因为他要求覆盖中间测试活动主体中6个纬度中的至少4个都达到L3的标准,才能被评定为L3。L4是说整个所有加起来8个纬度当中的6个都达到或者是超过L4的要求,才能被评估为L4。那L5就是8个当中的8个,这是一个理想当中的中台,无论是技术上面还是度量要求上面,难度都是非常高的。
总体来说,从L0-L5的分级里面,首先从我们从衡量的效果和纬度来讲,横轴是效能的提升,质量的提升,对降低成本,对于量化的要求。还有一个点是规模化应用的程度,纵轴就是对AI的应用。无论是规则也好,算法也好,基于深度学习,强化学习,不同级别之间的差别是什么。L0不用说,原始社会,L1工具辅助测试,部分工具替代了手工。从场景规划一直到局限修复,L3我们认为他定位是初级的智能化的测试,录制回放技术利用生产的流量到线下环境和老代码去做一个对比,发现其中的缺陷,就是在L2的基础上迈出一大步。对于回归来说不需要规划场景,用生产的流量用生产的场景替代人的思考和分析。那么他为什么没有达到L4呢,因为L4要要求不仅是回归场景,不需要人工的介入就可以达到覆盖,L5是无人值守,整个过程没有人介入,从开发提交代码到上线,一直到线上的日常的运维都不需要人。
有同学可能会问,每一个等级里面的具体量化标准是怎么定义出来的,我们是参考学术界,参考的工业具体落地的情况,稍微拔高的一点,从AI技术在各个行业的应用到他在测试领域当中应用的可能性,再到国际质量使用AI技术去解决一系列痛难点问题,到测试框架的无成本降低,场景规划到缺陷诊断。我们核心是说AI技术是一种技术,是可以用来解决问题的,而且在测试领域当中也是可以应用的。
当一个组织希望系统化体系化的应用AI技术去解决问题,提升效能的时候可以参考经济体智能化小组的智能化标准。AI是用来解决问题的,他是普遍解法,怎么解决,钉子和锤子的问题,大家既可以拿着AI技术去找适合的应用场景和领域,也可以从测试的痛难点出发去找有哪些AI技术可以用,我们可以继续细化,解决得到底怎么样?可以参考经济体智能小组的智能化等级标准,无论是效果上面还是应用基础上。
对于智能化的标准,我们希望说在技术的发展上面给大家一个牵引,大家知道AI不是未来,AI已来。我们给出每个详细的标准里面,我们给出了可参考的一些技术方向的指引。第二个对于智能化的标准我们希望在经济体的范畴内能够有一个牵引之外,能够有一个融合和促进,比如说,在smartX团队和支付宝的团队有合作共建,另外就是能够将这些应用和智能化标准评估之后的产品,能够树立一个又一个的标杆,能够促进融合,以后会对外发布。
4. 回顾和展望
展望这一块也是分为两块,第一块是说AI技术本身,我个人判断是说这三大技术,NLP,GNN,L2L,这是比较重要的技术,包括我今天的演讲,大家的日常沟通,包括写代码,代码也是一种语言,大量的经验和积累都在语言中。为什么是GNN?因为GNN可以表征更加复杂的事物之间的联系和关系。为什么是L2L?刚才讲过就是Google围棋的例子,希望一张网可以干更多的事情。对于智能技术,短期和中期我的判断是这样的,对于测试的智能化来讲,三个关键领域,场景规划,缺陷诊断和缺陷修复,在这三块在集团层面和业界来讲,学术界到工业界能够规模化落地看到的实例不是很多,这三个点真正进一步提升效能和降低成本的关键技术。
随着AI技术的大规模的使用,规模化的落地之后,智能化的工程化的问题,会逐渐地凸显出来。举一个例子,图像识别大家知道一个截图有好几兆,几万的规模持续不断跑的时候,通讯成为一个难点。另外一个有一个GPU的集群,GPU的运行效率和使用率会成为难点,因为需要确保整个网络消耗在GPU上面,而不是消耗在通讯上面。
比如说,大规模的智能技术的应用在测试领域之后,这个模型什么时候更新,离在线的数据什么时候更新,后续都会成为比较重要的点。
邓老师的分享到此结束,
文章来源: 邓艾 阿里巴巴技术质量