人工智能一直科技最高级的地域,将程序代码、数据分析进行自动可视化,依托软件和硬件一体去模仿人类一些或繁琐或简单的工作。
此文也是关于人工智能技术的探讨,主题为:如何将人工智能技术应用到自动化测试上?
在测试中加入AI,自动测试也变为可能。将无聊、重复的工作交给AI,这样测试人员就可以用更多时间做其他测试方面的思考。
布道师、Applitools的高级架构师Gil Tayar为我们介绍了如何将AI技术应用到自动化测试的内容。
InfoQ采访了Tayar,咨询了他有关现如今测试面临的主要挑战,自动化测试分为哪六个层次,软件产业在这六个层次中取得了什么样的进展,如何实现自动可视化测试,我们在测试中如何应用机器学习技术,以及AI给测试人员的工作会带来什么影响。
Tayar:很遗憾的是,测试还没有成为主流。我还记得在80年代、90年代的时候,整个行业都没有把QA这个职业和手动测试软件当一回事。不只是说没有自动化测试,而是根本没有测试!好在现在时代已经不一样了,在交付产品之前测试人员都会定期测试软件,而且很多人开始使用自动化测试。
但在如今的“互联网时代”,这还不够。由于使用了敏捷方法,我们需要部署得越来越快,这其实是一件好事。因为越来越多开发人员会自己测试自己的软件,而不是慢悠悠地等待专门的测试人员来测试他们的软件。
但是,开发人员测试自己的软件还没有成为主流。大多数开发人员不会自己写测试来检查代码,他们选择手动测试,或者等待测试人员进行测试,保证他们的软件正常运作。
这正是测试面临的主要挑战,怎么让开发人员编写自己的测试。而不幸的是,AI在这方面起不到什么作用,AI只是测试时使用的工具,但如果你自己不测试,AI就没用了。事实就是这样,AI从现在到未来都只能作为测试的辅助,如果你自己不想测试,AI不可能自动帮你完成测试。
开发人员必须要有测试的想法,这就是我们在测试方面面临的主要挑战。
自动化测试的六个层次。它们分别是什么?
Tayar:这个概念来源于自动驾驶的五个层次。它们描述了AI如何帮助我们进行测试。
驾驶辅助:AI可以查看到页面,帮助你写出断言。你还是要自己写“驱动”应用程序的代码,但是AI可以检查页面,并确保页面中的期望值是正确的。
部分自动化:虽然能分辨实际页面和期望值的区别这一点已经很好了,但是第二层次的AI需要有更深层的理解。比如说,如果所有页面都有相同的变更,AI需要认识到这是相同的页面,并向我们展示出这些变更。进一步来说,AI需要查看页面的布局和内容,将每个变更分类为内容变更或是布局变更。如果我们要测试响应式web网站,这会非常有帮助,即使布局有细微变更,内容也应该是相同的。这是Applitools Eyes这样的工具所处的层次。
条件自动化:在第二层,软件中检测的问题和变更仍然需要人来审查。第二层的AI可以帮助我们分析变更,但不能仅仅通过查看页面判断页面是否正确,需要和期望值进行对比才能判断。但是第三层的AI可以做到这一方面,甚至更多其他方面,因为它会使用到机器学习的技术。比如说,第三层的AI可以从可视化角度查看页面,根据标准设计规则,例如对齐、空格、颜色和字体使用以及布局规则,判断设计是否过关。AI也能查看页面的内容,基于相同页面之前的视图,在没有人工干预的情况下,判断内容是否合理。我们还不能达到这一层次,但我们正在向这个方面努力。
高度自动化:直到现在,所有AI都只是在自动化地进行检查。人类尽管使用自动化软件,还是需要手动启动测试,需要点击链接,而第四层的AI可以自动启动测试本身。AI将通过观察启动应用程序的真实用户的行为,理解如何自己启动测试。这层的AI可以编写测试,可以通过检查点来测试页面。但这不是终点,它还需观察人的行为,偶尔需要听从测试人员的指令。
完全自动化:我必须承认,这个层次有点恐怖。这个层次的AI可以和产品经理“交流”,理解产品的标准,自己写测试,不需要人的帮助。
软件产业在这六个层次中取得了什么样的进展?
Tayar:大多数公司肯定在第二层,目标向第三层努力。我相信要达到第四层需要一段时间,但我们终有一天是可以达到的。至于是否能达到第五层,我非常怀疑,但未来不可估量!(原文中引用了古犹太人毁坏第二圣殿的典故,比喻未来不可估量。)
Tayar:其实在几年前,即使是开发人员都不能自动进行可视化测试,更不要说使用AI了!由于基于像素的算法误报率过高,截图应用程序,根据预期进行检查是不可能的。
但是随着计算机视觉算法和现代人工智能(AI)技术的应用的发展,编写可视化测试已经成为现实。人们发现测试中缺少可视化测试。由于可视化测试的存在,现在我们可以测试到软件的方方面面。
那我们如何使用AI技术避免误报,AI是否能比单纯比较像素的算法做得更好?答案不仅仅牵涉到一个技术,需要将不同算法结合在一起,一个算法解决一个准确度的问题,通过决策树结合不同算法的结果(有时候将一个算法的结果应用到另一个算法中)来确定最后的结果。但要使用什么算法呢?分割算法就是一个例子,这个算法试图确定图片的文字和图像部分。这不是一个简单的问题,因为我们需要弄清,表情符号其实是文字,而图像中的文本是图像的一部分,并不是新的文字。这就是深度学习的魅力所在,由于我们代码中使用了深度学习技术,我们的准确率从88%提高到了96%。
所以要做到自动视觉化测试,你需要使用现代的数据化测试工具,比如Applitools Eyes。这些工具有一些简单的高级AI技术,因此你不需要理解并实现。看看这个例子:
在这个例子中,我们验证了一个博客应用程序。在常规的、非视觉化、非AI的测试里面,我们需要验证主页和特定的博文,对于页面中的每个元素进行几十次检查(即使这样我们还是会遗漏一些)。但是在这个例子里面,我们只是“checkWindow”,截图上传到服务器,服务器使用AI技术检验截图。
我一直觉得,测试是为开发过程服务的,它避免了在代码中添加新功能的烦恼,更重要的是,避免了代码重构的烦恼。但为什么这只能运用在业务逻辑上?为什么我们的可视化代码(在CSS、HTML和JS文件中)不能测试,我们还要再为它们担忧?AI可以帮助我们实现这一目标。
Appraise是另外一款可以用于视觉化测试的工具。早先,InfoQ采访了Gojko Adzic有关使用Appraise进行自动视觉化测试的内容:
Adzic:Appraise采用实例化需求的方式,但将其运用于视觉化内容。我们采用具体的例子,让其从自动化层面创建可执行的实例化需求,用headless Chrome截屏,与预期的结果进行对比。和普通的实例化需求工具(期望结果和实际结果不同就认为是错误的)不一样,Appraise采用确证测试方法。它将所有的不同展现给人来评估,让人决定差别是否正确,如果是的话就进行确认。
Tayar:我最近看到了一个讲座,讲的是如何使用机器学习测试Candy Crush游戏。由于Candy Crush是高随机的游戏,任何情况都可能发生,标准的测试技术很难实现。King的目标是想要了解是否这局游戏可以成功完成,要完成有多复杂。他们一开始使用蛮力法尝试所有路径,计算其中有多少可以成功。这个方法确实有用,但需要花好几个小时,因为组合可能太多了(使用去除无效路径组合的算法)。要解决这个问题,他们使用了Genetic Algorithms,使用一些最基本的算法(如只使用粉色糖果,一直消除障碍等),在一局游戏中进行试验。之后他们使用最佳算法(基于如何胜利完成一局游戏的算法),再结合两者,“创建”一个新的算法。不断重复,最后得到一个最佳算法。
再举一个例子,卷积神经网络帮助我们分析图像,并从中提取语义信息。在生成图像的应用程序中是非常实用的。可视化测试工具使用它来理解页面的不同部分,以及相互之间的联系,正如我上文所述一样提取不同的文字和图像块。
Tayar:请问拖拉机会给农民的工作带来什么影响?当然是巨大的影响!农民不再需要做枯燥、乏味的体力劳动工作,只要交给机器来做就可以了。我相信AI也会给测试人员带来相同的影响。乏味、重复的工作交给AI,测试人员就可以用更多时间来思考。
大多数测试人员已经习惯思考测试相关的方方面面:思考产品,思考怎么测试,思考边界情况等等,他们也需要工具来完成无聊、重复的工作。一些测试人员需要学会怎么思考更高层次的问题,确实会有一部分测试人员无法适应,但我相信他们只是少数。
新闻热点
疑难解答
图片精选