随着计算机视觉算法和现代人工智能(AI)技术应用的发展,编写可视化测试已经成为现实。由于在测试中加入AI,自动测试也变为可能。我们可以将无聊、重复的工作交给AI,这样测试人员就可以用更多时间做其他测试方面的思考。
布道师、Applitools的高级架构师Gil Tayar 在Craft Conference 2018 上和我们介绍了如何将AI技术应用到自动化测试的内容。InfoQ以采访的形式报道了这次大会。
InfoQ采访了Tayar,咨询了他有关现如今测试面临的主要挑战,自动化测试分为哪六个层次,软件产业在这六个层次中取得了什么样的进展,如何实现自动可视化测试,我们在测试中如何应用机器学习技术,以及AI给测试人员的工作会带来什么影响。
Gil Tayar:很遗憾的是,测试还没有成为主流。我还记得在80年代、90年代的时候,整个行业都没有把QA这个职业和手动测试软件当一回事。不只是说没有自动化测试,而是根本没有测试!好在现在时代已经不一样了,在交付产品之前测试人员都会定期测试软件,而且很多人开始使用自动化测试。
但在如今的“互联网时代”,这还不够。由于使用了敏捷方法,我们需要部署得越来越快,这其实是一件好事。因为越来越多开发人员会自己测试自己的软件,而不是慢悠悠地等待专门的测试人员来测试他们的软件。
但是,开发人员测试自己的软件还没有成为主流。大多数开发人员不会自己写测试来检查代码,他们选择手动测试,或者等待测试人员进行测试,保证他们的软件正常运作。
这正是测试面临的主要挑战,怎么让开发人员编写自己的测试。而不幸的是,AI在这方面起不到什么作用,AI只是测试时使用的工具,但如果你自己不测试,AI就没用了。事实就是这样,AI从现在到未来都只能作为测试的辅助,如果你自己不想测试,AI不可能自动帮你完成测试。
开发人员必须要有测试的想法,这就是我们在测试方面面临的主要挑战。
Tayar:这个概念来源于 自动驾驶的五个层次 。它们描述了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,测试人员就可以用更多时间来思考。
大多数测试人员已经习惯思考测试相关的方方面面:思考产品,思考怎么测试,思考边界情况等等,他们也需要工具来完成无聊、重复的工作。一些测试人员需要学会怎么思考更高层次的问题,确实会有一部分测试人员无法适应,但我相信他们只是少数。
查看英文原文: Testing Software with Artificial Intelligence
原文转自: http://www.infoq.com/cn/news/2018/06/testing-artificial-intelligence