使用人工智能测试软件

  • Ben Linders
  • 刘嘉洋

2018 年 6 月 9 日

话题:测试文化 & 方法

随着计算机视觉算法和现代人工智能(AI)技术应用的发展,编写可视化测试已经成为现实。由于在测试中加入 AI,自动测试也变为可能。我们可以将无聊、重复的工作交给 AI,这样测试人员就可以用更多时间做其他测试方面的思考。

布道师、Applitools 的高级架构师 Gil Tayar在 Craft Conference 2018上和我们介绍了如何将 AI 技术应用到自动化测试的内容。InfoQ 以采访的形式报道了这次大会。

InfoQ 采访了 Tayar,咨询了他有关现如今测试面临的主要挑战,自动化测试分为哪六个层次,软件产业在这六个层次中取得了什么样的进展,如何实现自动可视化测试,我们在测试中如何应用机器学习技术,以及 AI 给测试人员的工作会带来什么影响。

InfoQ:你认为现如今测试面临的主要挑战是什么?

Gil Tayar:很遗憾的是,测试还没有成为主流。我还记得在 80 年代、90 年代的时候,整个行业都没有把 QA 这个职业和手动测试软件当一回事。不只是说没有自动化测试,而是根本没有测试!好在现在时代已经不一样了,在交付产品之前测试人员都会定期测试软件,而且很多人开始使用自动化测试。

但在如今的“互联网时代”,这还不够。由于使用了敏捷方法,我们需要部署得越来越快,这其实是一件好事。因为越来越多开发人员会自己测试自己的软件,而不是慢悠悠地等待专门的测试人员来测试他们的软件。

但是,开发人员测试自己的软件还没有成为主流。大多数开发人员不会自己写测试来检查代码,他们选择手动测试,或者等待测试人员进行测试,保证他们的软件正常运作。

这正是测试面临的主要挑战,怎么让开发人员编写自己的测试。而不幸的是,AI 在这方面起不到什么作用,AI 只是测试时使用的工具,但如果你自己不测试,AI 就没用了。事实就是这样,AI 从现在到未来都只能作为测试的辅助,如果你自己不想测试,AI 不可能自动帮你完成测试。

开发人员必须要有测试的想法,这就是我们在测试方面面临的主要挑战。

InfoQ:你在谈话中介绍了自动化测试的六个层次。它们分别是什么?

Tayar:这个概念来源于自动驾驶的五个层次。它们描述了 AI 如何帮助我们进行测试。

  1. 完全没有自动,你需要自己写测试!
  2. 驾驶辅助:AI 可以查看到页面,帮助你写出断言。你还是要自己写“驱动”应用程序的代码,但是 AI 可以检查页面,并确保页面中的期望值是正确的。
  3. 部分自动化:虽然能分辨实际页面和期望值的区别这一点已经很好了,但是第二层次的 AI 需要有更深层的理解。比如说,如果所有页面都有相同的变更,AI 需要认识到这是相同的页面,并向我们展示出这些变更。进一步来说,AI 需要查看页面的布局和内容,将每个变更分类为内容变更或是布局变更。如果我们要测试响应式 web 网站,这会非常有帮助,即使布局有细微变更,内容也应该是相同的。这是 Applitools Eyes 这样的工具所处的层次。
  4. 条件自动化:在第二层,软件中检测的问题和变更仍然需要人来审查。第二层的 AI 可以帮助我们分析变更,但不能仅仅通过查看页面判断页面是否正确,需要和期望值进行对比才能判断。但是第三层的 AI 可以做到这一方面,甚至更多其他方面,因为它会使用到机器学习的技术。比如说,第三层的 AI 可以从可视化角度查看页面,根据标准设计规则,例如对齐、空格、颜色和字体使用以及布局规则,判断设计是否过关。AI 也能查看页面的内容,基于相同页面之前的视图,在没有人工干预的情况下,判断内容是否合理。我们还不能达到这一层次,但我们正在向这个方面努力。
  5. 高度自动化:直到现在,所有 AI 都只是在自动化地进行检查。人类尽管使用自动化软件,还是需要手动启动测试,需要点击链接,而第四层的 AI 可以自动启动测试本身。AI 将通过观察启动应用程序的真实用户的行为,理解如何自己启动测试。这层的 AI 可以编写测试,可以通过检查点来测试页面。但这不是终点,它还需观察人的行为,偶尔需要听从测试人员的指令。
  6. 完全自动化:我必须承认,这个层次有点恐怖。这个层次的 AI 可以和产品经理“交流”,理解产品的标准,自己写测试,不需要人的帮助。

InfoQ:软件产业在这六个层次中取得了什么样的进展?

Tayar:大多数公司肯定在第二层,目标向第三层努力。我相信要达到第四层需要一段时间,但我们终有一天是可以达到的。至于是否能达到第五层,我非常怀疑,但未来不可估量!(原文中引用了古犹太人毁坏第二圣殿的典故,比喻未来不可估量。)

InfoQ:如何实现自动可视化测试?

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 采用确证测试方法。它将所有的不同展现给人来评估,让人决定差别是否正确,如果是的话就进行确认。

InfoQ:我们在测试中如何运用机器学习?

Tayar:我最近看到了一个讲座,讲的是如何使用机器学习测试 Candy Crush 游戏。由于 Candy Crush 是高随机的游戏,任何情况都可能发生,标准的测试技术很难实现。King 的目标是想要了解是否这局游戏可以成功完成,要完成有多复杂。他们一开始使用蛮力法尝试所有路径,计算其中有多少可以成功。这个方法确实有用,但需要花好几个小时,因为组合可能太多了(使用去除无效路径组合的算法)。要解决这个问题,他们使用了 Genetic Algorithms,使用一些最基本的算法(如只使用粉色糖果,一直消除障碍等),在一局游戏中进行试验。之后他们使用最佳算法(基于如何胜利完成一局游戏的算法),再结合两者,“创建”一个新的算法。不断重复,最后得到一个最佳算法。

再举一个例子,卷积神经网络帮助我们分析图像,并从中提取语义信息。在生成图像的应用程序中是非常实用的。可视化测试工具使用它来理解页面的不同部分,以及相互之间的联系,正如我上文所述一样提取不同的文字和图像块。

InfoQ:AI 会对测试人员的工作产生什么影响?

Tayar:请问拖拉机会给农民的工作带来什么影响?当然是巨大的影响!农民不再需要做枯燥、乏味的体力劳动工作,只要交给机器来做就可以了。我相信 AI 也会给测试人员带来相同的影响。乏味、重复的工作交给 AI,测试人员就可以用更多时间来思考。

大多数测试人员已经习惯思考测试相关的方方面面:思考产品,思考怎么测试,思考边界情况等等,他们也需要工具来完成无聊、重复的工作。一些测试人员需要学会怎么思考更高层次的问题,确实会有一部分测试人员无法适应,但我相信他们只是少数。

查看英文原文Testing Software with Artificial Intelligence

测试文化 & 方法