摘要:良好质量的软件产品是客户的基本诉求,而良好质量的软件需要更多的测试手段和投入,因此,软件测试是软件研发过程中一个非常重要的环节,会占用大量的项目时间和人力成本,如何高效、及时地完成测试工作一直是软件测试领域的难题之一。随着移动互联网应用行业的迅猛发展,软件的规模和复杂度不断增加,传统的软件测试通过人工手动去设计和执行测试用例,成本高、效率低、局限性大。近年来,人工智能技术在软件测试自动化领域的应用越来越受到关注。本文分析总结了人工智能软件测试自动化技术的优势、应用挑战和未来的发展方向,并提出了一种自动化的测试框架研究实践。人工智能技术在提高软件测试自动化领域的效率和测试质量方面有较大优势,未来的有关研究和应用将会继续深入,推动人工智能技术在软件测试行业的发展。
Abstract:Good quality software products are the basic demands of customers, and good quality software requires more testing methods and investment. Therefore, software testing is a very important part of the software development process, which will occupy a lot of project time and labor costs. How to efficiently and timely complete testing work has always been one of the challenges in the field of software testing. With the rapid development of the mobile Internet application industry, the scale and complexity of software are increasing. Traditional software testing designs and executes test cases manually, which is costly, inefficient and limited. In recent years, the application of artificial intelligence technology in software testing automation has received increasing attention. This article analyzes and summarizes the advantages, application challenges, and future development directions of artificial intelligence software testing automation technology, and proposes an automated testing framework research practice. Artificial intelligence technology has significant advantages in improving the efficiency and quality of software testing automation. Future research and applications will continue to deepen, promoting the development of artificial intelligence technology in the software testing industry.
1. 前言
随着移动互联网应用行业的迅猛发展,基于其上的测试技术也日新月异。软件测试是保证软件质量的重要手段之一[1]。传统的软件测试方法需要投入大量的时间和人工成本,效率低、成本高,而且存在一定的局限性,已经不能完全满足移动互联网时代快速、高质量的需求。为了提高软件测试效率和软件测试质量,人工智能技术的逐步成熟与发展,被运用到软件测试领域,为测试人员高效地进行软件测试提供了新的解决方案。通过建立自动化测试框架,运用人工智能技术能够自动化地设计和执行测试用例,发现软件中的缺陷,提高软件测试的覆盖率和效率,应用前景非常广泛。
一般传统的软件测试需要手工编写测试用例并逐个执行,伴随软件复杂度达到一定程度,人工测试的压力会陡增,导致测试的可靠性降低。在测试场景的覆盖程度上,传统的软件测试方法无法做到对所有可能的情况进行全覆盖。另外,传统的软件测试方法需要耗费大量的时间和人力成本。
人工智能在软件测试中的应用具有很多优势,其中最重要的就是提高测试效率和测试覆盖率以及降低测试成本[2]。基于人工智能的软件测试,一是可以通过数据分析和机器学习等技术,自动化地生成测试用例并执行测试,避免了人工测试主观性较强的问题,提高测试的可靠性;二是可根据大量测试数据和已有规则,调整测试策略,覆盖更多的测试场景,避免了人工测试的盲点,提高测试的覆盖率和准确性,减少测试所需的时间和人力成本;三是可自动发现软件中的缺陷和问题,并自动记录和分析测试结果,自动形成报告,帮助更专业的测试人员准确、高效地发现和解决软件中存在的缺陷和问题,进一步提高软件的可靠性。
2. 人工智能自动化测试技术具体应用
2.1. 自动化执行总体框架
为了能够帮助手工测试人员提高测试效率、节省测试成本,人工智能的自动化测试程序需要框架支撑,总体包含如下几个部分组成:核心部分是面向切面技术的系统录制和回放技术;测试结果报表部分;多种系统与终端设备的连接;测试用例管理部分。总体的框架流程如图1所示。
Figure1.Overall framework for automated execution
图1.自动化执行总体框架
2.2. 自动化签名实现
一般的移动互联应用软件通过工具进行测试,需要对应用程序进行签名确认,而手动的签名方式无法适应自动化的测试机制,因此,采用批处理的方式,实现了自动化签名,为应用测试提供基础,实现的原理是利用winrar命令结合批处理来实现重签名的,具体的实现流程如图2所示。
2.3. 自动化生成测试用例并执行
测试用例是根据软件的需求和设计,编写的有测试输入、执行条件以及预期结果的案例[3]。测试用例是软件测试的核心。测试用例设计过程就是对每一条产品需求经过以下步骤后生成1条或N条测试用例:理解分析→测试点拆解→构造测试输入数据→手工输出测试用例。当项目需求规模达到数百条、数千条时,测试用例设计往往耗时较长。传统的测试用例设计依靠人工,存在测试效率低、覆盖率低和成本高的问题。
随着敏捷开发、DEVOPS的盛行,如果测试用例设计耗时较长,将会严重不匹配项目进度要求,人工智能自然语言处理技术强大的上下文理解和文本生成能力,使得自动生成测试用例变得可行。基于人工智能的软件测试用例设计,根据用户的需求文档进行关键词提取和筛选,对筛选完得到的关键词和测试用例集进行匹配,然后自动生成更有效的测试用例;利用自然语言处理技术,从被测软件的说明文档中提取语义信息,快速生成测试用例,能提高测试的准确性和效率。
Figure2.Automated signature implementation
图2.自动化签名实现
人工智能也可以自动化执行测试用例。在软件测试中执行测试用例时,一是利用自然语言处理技术将测试用例中的语言描述自动转化成代码,实现测试用例的自动化执行。例如,在进行移动应用程序测试时,可以将测试用例中的描述自动转为批处理加abdbshellam命令的方式实现,达到自动执行测试用例的目的。二是通过junit编写自动化测试脚本和使用自动化测试工具[4],将测试用例转为可执行的测试脚本语言代码。测试人员只需要设定测试用例执行的条件和预期结果,利用人工智能会自动执行测试用例、分析测试结果并生成测试报告。它还会自动识别测试报告中的问题,并给出解决方案,测试人员可根据这些方案对软件进行改进。
2.4. 自动化检测和修复缺陷
人工智能自动化测试技术可以检测代码缺陷,生成修复建议,并能自动生成补丁代码。人工智能自动化测试技术通过对代码进行静态分析或动态执行,能够检测出代码中存在的缺陷(如注入漏洞、空指针、内存溢出等),并根据检测到的缺陷提出修复建议,帮助测试人员从代码层发现产品缺陷。众所周知,发现bug越早期、越底层,越容易提高测试覆盖率。甚至人工智能自动化测试技术可以进一步生成修复补丁代码,提高缺陷修复速度。人工智能自动化测试技术经过历史缺陷的学习,分析代码风格和结构,能够预测出缺陷存在的位置和类型,给测试人员提供参考建议。人工智能自动化测试技术对已发现的缺陷集合进行分析,可预测缺陷分布和缺陷趋势,并生成可视化的缺陷分析报告和统计数据,帮助测试人员进行测试质量评估。
2.5. 自动化测试程序APK的生成过程
自动化测试过程执行,需要对被测程序的配置,首先,将送测过来的被测程序APK安装包放入到自动化框架的APK文件夹下,这主要是为自动化执行测试做好准备,该文件夹下每次只能存放一个最新版本的被测程序APK安装包,否则,会导致安装程序时出现错误的一场现象。再通过Eclipse开发平台创建自动化测试平台的测试APK,将该APK放至自动化测试平台的org.athrun.android.app2.test文件夹下,且该文件夹下每次只能存放一个最新版本的被测程序APK安装包,否则,会导致安装程序时出现错误的一场现象。
测试时使用的测试设备是有要求的,每次测试时使用的设备ID必须与TestCase目录下需要执行的TC中的DeviceID一致。其中,设备的名称可以在cmd终端中使用命令得到,命令如下所示:
adb get-serialno获取设备的ID和序列号serialNumber;
adb devices查询当前计算机上连接哪些设备(包括模拟器和手机)。
3. 人工智能在软件测试中应用的挑战
3.1. 软件的复杂性
软件系统目前主要是人力投入的结果,往往非常复杂,包含很多个模块,调用关系复杂,需要有不同的测试场景,穷尽一个软件产品的测试是不可能达成的任务。在测试环境搭建和部署上,会涉及不同的系统和技术。另外,基于人工智能的软件测试需要大量的测试数据进行训练和测试,这些测试数据获取和处理有一定的困难,而且如果数据质量不高就不能保证模型的准确性,进而会导致测试结果出现问题。
人工智能自动化技术需要通过海量数据进行训练,这些训练数据集可能存在片面、偏见或者错误,由此生成的结果也会存在不准确的问题;特别是某些特定领域的知识,由于缺少专业的训练数据,模型只能根据已有信息进行猜测,得到的结果自然不正确;或者因为训练集合存在偏见,导致输出结果也存在误导和偏向。另一方面,人工智能文本生成技术是通过上下文进行语义理解,在处理一些复杂逻辑或者推理问题时,它可能不会给出完全正确的结果。
3.2. 数据的安全性
数据的安全问题也是一个挑战。利用人工智能进行软件测试时,需要收集大量的测试数据。这些数据中往往会包含企业用户相关的敏感信息,如果对这些数据的保护不到位,很有可能遭遇黑客攻击,导致数据泄露。例如软件测试中的测试用例、测试结果、测试报告等,都包含着用户的隐私信息,若这些信息被泄露或滥用,将对用户造成损失。
4. 人工智能自动化软件测试发展趋势
随着现代科学技术的发展,人工智能自动化软件测试方法也在不断变化和发展。在计算机技术发展方面,计算机从最初的庞然大物发展到现在笔记本式的载体物件,形态上发生了巨大变化。传统的计算机以晶体管为核心,在体积和性能上将难以有效突破。目前,计算机的主要发展方向是人工智能,量子通信等在其中起辅助作用。因此,自动化软件测试方法的发展应以人工智能技术应用为主导。未来,计算机软件测试方法必须根据计算机本身的发展加以进步和创新,以确保设计的软件能在最大程度上同计算机系统的运行有效契合,提高用户体验。
另外,更加多样的测试场景,面对不同的软件、不同的系统和不同的应用场景,需要采用不同的测试方法和策略。人工智能软件测试技术需要模拟不同的测试场景,如压力场景、并发场景以及安全场景。通过模拟不同测试场景下系统的使用情况,能更好地了解系统的性能以及稳定性。未来,基于人工智能的软件测试技术也将更加智能化和自动化,可以模拟人类的行为进行测试,可自主学习、自动生成和设计测试用例,自动执行测试用例并生成测试报告。智能化软件测试技术将会更好地满足大规模的软件系统,提高测试的效率和准确性,降低测试的时间和人力成本[5]。
5. 结论
本文对基于人工智能的软件测试技术进行了介绍,并分析了人工智能技术在软件测试领域的应用挑战和未来发展趋势。基于人工智能的软件测试技术能大大提高测试的效率和覆盖率,找出软件中隐藏很深的BUG,并提出了一个自动化的执行框架,但同时也存在软件本身复杂性难以全覆盖、数据质量不高以及安全性等问题。随着人工智能技术的不断发展,基于人工智能的软件测试技术也需要不断更新[6]。虽然基于人工智能的软件测试还存在一些局限性,但未来将会不断优化和应用,为保障软件质量做出更大贡献。