人工智能在软件测试中的应用研究
2020-01-10彭玲武汉软件工程职业学院
彭玲 武汉软件工程职业学院
一、软件测试的发展形势
目前整个软件质量工程环境与软件开发的节奏越来越快,开发团队受制于市场的竞争,需要持续构建、持续集成、持续测试才能做到持续交付。开发关注的是构建软件产品的质量,而测试是软件质量的守护者,可以帮助开发减少错误,提醒开发改进软件质量的方面。这样就更好地帮助团队构建软件质量。
软件测试的效率已经成为软件行业关注的焦点。白盒测试、黑盒测试、手工测试、自动化测试,哪一个效率更高呢?自动化测试公认会带来高效率。敏捷开发的回归测试范围越来越大,完全靠手工测试肯定不行。在一般情况下,软件测试中回归测试更适合自动化,即使在当今的测试环境下,仍然适用。调查显示,2016、2017年,国内自动化测试的使用情况并不乐观,2017年大部分测试任务自动化的占比为32%,自动化测试超过一半的公司仅23%,具体情况如图1所示。
图1 国内自动化测试使用情况
AI测试工具可以理解代码,但是真正跟业务结合起来的数据也很少。就像机器学习有时候需要大量的数据,但是真正基于业务的数据比较少,像开源里面有4TB的代码,这些代码更多的是可以做Java、C、Python这方面语言的学习,甚至可以做到Bug的自动定位、Bug的自动修复。但是如果真正结合业务,发现与业务结合这个工具还是很弱的,需要靠人工进行测试。
二、人工智能提升测试效率
(一)人工智能助力测试自动化
从软件测试的发展历程来看,早期是纯手工测试,然后发展到依赖部分自动化工具完成自动化测试,到后来使用健壮的TA工具与开源框架集成,受到业界的欢迎和广泛的应用。云计算、大数据技术的推动下,构建代码库,把所有的代码整合到一起,可以更好的复用或者学习。公司在不断尝试将自己的开发环境和测试环境放到云平台,这样才能有更多的数据积累下来,为机器学习提供便利。当前基于云计算平台和大数据,基于生态链工具,可以更好地去完成自动化测试。未来,测试基于新的微服务架构或者其他架构,可以真正做到自主、智能化。
未来,在测试过程中,测试人员更多地完成分析、设计、建模、训练模型的任务。所有的执行测试的任务应该交由测试工具去完成。例如,Google提供了TensorFlow(TF)或其他的一些平台,针对自己的业务,通过大量的分析来构建对应的模型。Google研发出了AlphaGo,然后加入人机交互智能生成了AlphaZero。人工智能或者机器人,或者未来的测试机器人是需要人去训练的。相当于把测试工程师的经验和知识,对业务流程和业务场景的理解赋能给机器人。
(二)人工智能在测试领域应用的挑战
一般来讲,人工智能包含计算智能、感知智能和认知智能,现在计算智能和感知智能发展相对比较成熟,但认知智能比较弱,要让人工智能真正去理解人类业务还是比较困难的。需要人类构建业务流程或者知识图谱,让机器去理解、学习。人工智能的应用前期需要依赖很多的人力,没有大量的数据标识,机器是不会去识别或者做预测的。所以有时候在某些相对落后地区,有大量的人力从事数据标识的基础性工作,这个过程会比较慢。
人工智能的算法不一定要有数据标识,监督学习需要标识数据,还有无监督学习、强化学习。目前无监督的学习更受欢迎,有更好地应用和发展。从单元测试扩展到系统测试,文字识别变成图像识别来处理。在游戏行业,腾讯、华为、网易等公司在测试上应用AI能力方面有了良好应用成果,与高清摄像头结合,做到更多的场景识别、人工智能辅助决策,实时游戏控制等。
借助AI生成测试数据、生成测试用例等方面,进行了一段时间的探索,并取得了一定的收获。人工智能的应用,使用全局和局部的智能优化算法,如遗传算法、粒子群优化算法、蚁群优化算法、爬山算法、禁忌搜索算法等。
三、AI技术提高测试覆盖率
实践表明,借助AI提高功能测试覆盖率、源码测试覆盖率、回归测试覆盖率、系统非功能性测试覆盖率等。同时,也可以借助关键字引导的搜索策略以提高测试覆盖率。在回归测试中利用AI,选择40%测试用例集可以达到80%的测试覆盖率,如图2所示。
图2 回归测试覆盖率提升
通过针对关键字索引提高测试覆盖率。例如:Eggplant AI导入已有测试资产创建模型、使用智能算法选择最佳测试集运行测试,基于模型算法能最大程度减少构建与维护的成本。Eggplant AI的测试覆盖率与以前相比,有很大提高,达到80%-90%。通过遗传算法和对源码“编译时插桩”的方式自动生成测试用例。以探索二进制程序内部新的执行路径,而且能够不断优化执行路径,从而获得高效的模糊测试策略。这样可以大大提高源码测试覆盖率。
当前人工智能能够企及的地方,包括黑盒测试、单元测试、回归测试等,但其结果只能作为测试员判断的依据或是参考,起到一个辅助的作用。也就是说,AI还做不到“无人化”的参与效果。虽然并行计算与分布式计算给我们带来了可靠的支撑,但目前的瓶颈是缺乏有效的建模。因此,未来的AI助力测试的理想状态是结合MBT与AI,共同助力测试。