从希腊神话中造出的巨型铜人Talos,到《弗兰肯斯坦》中Simon 博士造出的怪物,再到Hal 9000,人类对人工智能(AI)的想法持续了几个世纪。创造具备自我智力导向的机器人是人类的第二大梦想——仅次于能够像鸟一样飞行。然而,当莱特兄弟在1903年起飞之时,AI还没有准备起飞的迹象。AI需要数据、计算能力和算法,三者缺一不可。人类在算法领域探索多年,现在,大数据和强大的计算能力终于让我们突破了这个结界。
历史上的任何时候,AI的可行性都不会超过今天。数字经济的到来迫使企业以闪电般的速度创新。我们需要投入资源创造新的客户价值,同时不断提高运营敏捷性。否则,终有一天会变成另一个诺基亚。
任何负责生产软件的人都知道,开发和交付软件的传统方式不足以满足这一新需求。很久之前,大多数公司每年都会发布软件或者每两年一次,也可能是每季度发行一次。现在,产品迭代通常持续两周或者更短。虽然交付周期正在变短,提供积极的用户体验和保持竞争优势所需的技术复杂度却在增加——我们需要引入令人信服的创新速度。
在软件测试方面,这些竞争力创造了一个空白,而这个空白将会由连续测试来弥合。鉴于如此高的交付速度和技术复杂性,我们需要额外的帮助才能提供积极的用户体验,AI将是连续测试的完美执行者。
软件测试达到了一个新的水平,在应用AI之前,先让我们回顾一下AI真正的意义。
将AI定义为:通过编码、业务规则和越来越多的自学能力建立的系统,能够补充人类的认知和活动,并与人类自然交互,而且了解环境,解决人的问题,执行人的任务。
另一个有趣的定义是:AI是一个研究领域,使计算机能够在没有明确编程的情况下学习。
AI的要点之一是不需要明确编程算法。算法肯定被使用,但它们并不是为明确解决问题而设计的,这些算法让机器可以通过数据自主学习,进而解决问题。
为了应对随着技术复杂性增加而加快交付速度所带来的挑战,我们需要遵循一个非常简单的要求:测试更聪明且不难
例如,考虑如何使用图像识别将UI测试提升到一个新的水平,以便动态UI控件(例如,对于响应的站点)可以以其各种形状和形式自动识别。我们已经可以从人的角度识别UI控件,超越了纯模板匹配。UI的像素结构可以被解释为目标是识别图像模式和诸如文本的识别信息。例如,可以使用边缘检测来将以下控件标识为按钮,并且可以使用OCR / GDI层来识别其文本。
使用AI,软件测试工具可以学习在扫描和测试执行过程中识别控件,而不受控件大小,颜色,文本对齐等的影响。应用学习方法:添加新的图像模式和调整图像,扫描测试执行过程中的现有图像模式。
每个控件通过锚定识别图形界面知道其上下文。从图像图案中提取控制属性,并且可以在测试执行期间用于限制某些控件(例如,滚动条)的自动化。这消除了从技术层面(ID等)识别它们的需要。
这个学习的最终结果?即使在响应式UI上,它也能够进行可重复且稳定的测试执行,这将是UI测试自动化的下一步。
不会自主学习的自我修复技术可以用吗?
当然可以。不会自主学习也就意味着不是AI技术,但现在很多系统都具备一定的修复能力,比如漏洞修复,这不一定非要通过AI来完成。其中最有趣的例子是在运行时更新损坏(不同步)测试用例的技术。通常有多种方法来标识要自动化的控件(例如按钮)。每个控件通常由技术属性(如ID,名称等)来标识。在许多情况下,多组属性对于控件是冗余的。例如,假设用于识别特定控件的3个标识符中有2个不能再定位它,只有1个仍然是最新的,那么可以使用自愈技术来识别控制,并更新其他2个标识符。
自主修复技术是由先进的算法驱动的,而不是自主学习。这不是AI,是通常所说的“认知测试”。不过,只要能解决问题都是合适的解决方案。