热门标签 | HotTags
当前位置:  开发笔记 > 大数据 > 正文

人工智能在软件测试领域的应用

人工智能作为当下最热门的前沿性科学技术,被广泛的应用于各个行业,软件测试行业也不例外。作为软件质量保证的一个重要环节,软件测试从最初的手工测试到自动化测试再到云测试,其智





人工智能作为当下最热门的前沿性科学技术,被广泛的应用于各个行业,软件测试行业也不例外。作为软件质量保证的一个重要环节,软件测试从最初的手工测试到自动化测试再到云测试,其智能化脚步也越来越快。随着人工智能技术的进展及其在软件测试中的应用,人工智能赋能软件测试日益受到关注。

引言







传统软件测试痛点



首先,软件产品功能及应用场景日趋复杂。如今一款软件可能会处理很多传统软件所不曾面临的复杂信息,例如手势或脸部识别、GPS定位、通知推送、云端存储、移动支付等,对这些复杂信息的处理增加了软件的复杂程度,也增加了测试的难度。同时,软件还会在各种复杂场景中进行应用,比如WI-FI、2G、3G、4G、5G等网络状态,冷热干湿等不同环境,静止或高速移动等运动状态。这些复杂场景都是软件测试的难点。

其次,测试成本高昂。如今的软件测试工作量巨大,不仅包括测试环境模拟,还包括测试用例、测试数据、测试路径设计等等。但目前大多数的测试工作还是通过人工来完成,对于层出不穷的软件新版本,不断改变的功能特性,让测试人员疲于编写测试脚本,而普通的自动化测试回报率不高。此外,手机终端碎片化问题严重,如设备繁杂,版本各异,分辨率不统一等等,这些也给测试带来了高昂的成本。

最后,测试结果可靠性低。正因为测试工作量巨大,测试人员时间精力也有限,从而造成测试覆盖率不高。同时由于大量测试工作由人力完成,因此无法避免的会出现不准确和不一致的问题。



软件测试需要引入人工智能



“自动化测试”在软件测试中通常指将预定义的一组输入操作和输出验证步骤编码到脚本中,而脚本可由机器自动执行。这个过程唯一自动化的方面是测试执行和日志记录。因此,自动化测试需要测试人员定义测试目标,获取充分测试软件所需的知识,设计和指定详细的测试场景,编写测试自动化脚本,并分析测试结果以检测软件的缺陷。

由于人工智能技术日趋成熟,人工智能在软件测试领域的应用得到了业界关注。软件测试的研究人员认识到人工智能在弥补手工测试能力与机器驱动测试能力之间的差距方面拥有巨大的潜力。人工智能赋能软件测试能够生成更智能的测试用例并扩大测试范围、创建更智能的自动化测试,从而提升软件质量。一些初创企业正试图开发人工智能赋能的自动化测试工具,例如Mabl、Applitools、AutonomIQ等。



人工智能赋能软件测试



目前人工智能的技术和算法已经渗透到了软件测试生命周期的各个阶段中,本文挑选了几个比较典型的应用进行介绍。


测试用例自动生成

测试用例自动生成问题是软件测试中的一个基本问题,解决测试用例自动生成问题对软件测试中的覆盖率测试尤为重要。比如,应用强化学习的技术,利用其模拟人类利用经验进行决策的能力指导测试用例的自动生成。计算机能够选择合适的变量并选择合适的动作进行运算。有研究表明,利用强化学习策略生成的测试用例可以明显可以减少变量计算次数,提升测试效率。此外,神经网络也被用于预测测试用例生成的时间、分析影响测试用例生成的因素等,该技术可以帮助测试人员在测试时提前了解每个函数、文件和工程进行测试可能所需要的时间,从而准确估计测试的时间工。


测试用例优先级排序

在软件测试中,测试人员通常将手工测试和自动测试结合在一起,而前者在整个软件测试过程中扮演着至关重要的角色。因此,提高手工测试的效率依然是软件测试领域重要的研究内容。为了解决这个问题,人们提出了各种测试用例优先级排序技术,通过对测试用例进行目标排序并优化其执行顺序,可以有效地提高手工测试效率。考虑到测试用例总是包含在文本中或在文本中被描述,因此人工智能中的自然语言处理技术很自然地被用来识别测试用例的优先级。此外,通过测试用例执行的历史记录分析,我们可以自动将测试用例作分级和排序。


预测自动化测试的覆盖范围

软件测试是现代持续集成开发的重要组成部分。理想情况下,每次提交软件产品时,都应该执行每个系统的测试用例,并且应该为新代码生成新的测试用例。然而,由于软件产品提交之间的时间限制,完全的回归测试对于大型项目是不可行的。因此,可以利用人工智能中的机器学习模型来预测由测试数据生成工具实现的分支覆盖率。选择代码度量来表示被测试类的复杂性的特征,例如Chidamber和Kemerer(CK)度量,使用支持向量回归来训练能够预测自动化测试工具实现的覆盖范围的模型,并预测自动化测试覆盖率等。


智能化的GUI测试

目前,自动输入生成器广泛用于移动app的大规模动态分析和测试。这些输入生成器必须不断地选择要与之交互的UI元素以及如何与之交互,以便在有限的时间预算内实现高覆盖率。目前,大多数输入生成器都采用伪随机或蛮力搜索策略,这可能需要很长时间才能找到正确的输入组合。

人工智能中的强化学习技术可以学习人类生成的交互轨迹,并根据当前UI状态和最新状态转换中的视觉信息生成类似人工的测试输入。神经网络可以学习用户与app的交互,可以根据所学模型为任何新的UI生成类似人工的输入,达到比传统的测试输入生成器更高的覆盖率和更快的速度。下图为应用强化学习进行GUI测试的有向图,其节点是UI状态,边是使得UI状态变化的动作:


软件缺陷预测

软件缺陷是软件开发中的必然产物。大多数的软件项目通常没有足够的时间和人员来消除软件产品发布之前的所有错误。软件缺陷预测能够利用已有的知识,采用预测推理的方法对可能发生的缺陷做出判断。然而传统的缺陷预测方法难以分析复杂特征数据,难以实时准确地预测缺陷。而基于人工智能技术的预测方法为解决这些问题提供了契机。利用深度学习算法以及大量缺陷数据,通过故障模型训练、故障特征识别、故障演化规律来获取动态预测,针对软件缺陷突变特性,利用软件质量特征属性进行静态缺陷预测。



总结


人工智能具有通过使用智能模型和算法自动分析复杂数据的能力,人工智能赋能软件测试已经展现出巨大的潜力。然而,随着人工智能在软件测试领域应用上的研究的不断深入,研究人员和测试人员依然面临着诸多挑战。(1)技术应用的难度:如何将人工智能技术与测试技术有机结合,在实践中提升软件测试的效能是需要继续研究的内容;(2)智能化的程度:目前很多基于人工智能的测试技术和工具的智能化程度还有待于测试实践的进一步检验;(3)技术应用的成本:现阶段人工智能应用成本较高,很难被众多软件开发与测试团队接受。

人工智能时代已经来临,人工智能技术赋能软件测试已经成为未来技术发展的趋势。如果通过 “AI+测试” 应对日益复杂的软件功能及其应用场景,提升软件测试的效能,将是学术界和工业界未来需要重点研究突破的问题。



上海市计算机软件评测重点实验室(简称SSTL)由上海市科委批准成立于1997年,是全国最早开展信息系统质量与安全测评的第三方专业机构之一,隶属于上海计算机软件技术开发中心。



推荐阅读
author-avatar
Eva绫波_772
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有