AI技术在软件测试领域的应用比软件开发早。早在上个世纪七、八十年代,软件测试就开始应用采用遗传算法生成测试数据,到九十年代,其研究和应用逐渐增多,从单元测试、接口测试到GUI的系统测试, 提供自动化的测试用例生成、自动化的测试执行和评估等功能,取得了不少成功的实例,帮助研发团队节省了大量时间和成本,提高了测试的质量和可靠性。
1. 单元测试中的应用AI:AI技术可以帮助自动生成单元测试用例。通过使用机器学习和符号执行等技术,AI算法可以分析代码和程序的结构、逻辑,AI算法可以自动识别潜在的边界条件、异常情况和路径覆盖需求,并生成相应的测试用例自动生成覆盖率较高的单元测试用例,从而提高单元测试的效率和准确性。例如智能测试工具evoSuite就是其中的一个代表,国内也有公司推出智能单元测试工具:smartUnit。
除了开源的evoSuite,Microsoft开发了一个名为SAGE的自动化测试工具,它使用了AI技术来生成和执行单元测试用例。SAGE能够自动分析代码和执行路径,生成具有高覆盖率的测试用例,并发现潜在的错误和异常。
大模型推出之后,AI赋能单元测试,其能力有了明显的提升,根据实验评测结果:ChatGPT 生成测试的覆盖率与人工编写的测试相接近,并高于现有的测试生成技术;而且ChatGPT 生成的测试具有良好的可读性,与人工编写的测试相比具有相近的可读性水平(详见论文:No More Manual Tests? Evaluating and Improving ChatGPT for Unit Test Generation)。但受Test Oracle制约,其生成脚本在执行时容易出错,主要由于ChatGPT生成的错误断言语句导致的。加上人工检查,容易修正断言的问题。
2. 接口测试中应用AI,我们可以通过使用机器学习和模型驱动测试等技术,AI算法可以分析系统的结构和接口,自动生成集成测试用例,并自动执行和评估测试结果,从而提高集成测试的效率和覆盖率。也可以借助NLP技术,分析接口测试文档,从而生成接口测试数据,从而高效、全自动地完成接口测试。
3. GUI系统测试中的应用AI:通过使用图像识别和自然语言处理等技术,AI算法可以自动分析和识别GUI界面的元素和操作,自动生成测试用例,并自动执行和评估测试结果,从而提高GUI系统测试的效率和准确性。
之前,智能模糊测试工具也具有代表性,如Facebook(Meta)的Sapienz就是基于搜索的“遗传算法”(GA)来实现的,只是指导GA算法进化的适度函数(fitness function)非常复杂:有多个目标,由“帕累托最优”(Pareto optimality)交织在一起,每一次成功的进化都必须实现这些目标,效果不错,但不能用在功能测试上,而是稳定性测试上。
之后,深度学习和强化学习技术在GUI测试中的应用得到了广泛关注,我们可以使用深度学习模型来分析GUI界面的特征和行为,生成测试用例,检测异常和错误,并优化测试过程;我们使用强化学习算法来学习最佳的用户交互策略,从而自动生成各种用户交互和操作序列,以测试GUI应用程序的各种功能和用户体验,以最大化测试的效果和覆盖率。例如
DeepRoad: GAN-based Metamorphic Autonomous Driving System Testing:https://arxiv.org/pdf/1802.02295.pdf(by Huang, W., Zhang, B., Li, Z., & Zeng, H. 2020):这篇论文介绍了一种基于深度学习的自动化测试方法,用于测试自动驾驶汽车的控制逻辑。它使用深度学习模型和随机最优控制方法来生成测试用例,并通过探索不同的驾驶场景和行为来测试自动驾驶汽车的控制逻辑的性能和安全性。
Deep Reinforcement Learning for Black-Box Testing of Android Apps:https://arxiv.org/pdf/2101.02636.pdf
DeepTest: Automated Testing of Deep-Neural-Network-driven Autonomous Cars:https://arxiv.org/pdf/1708.08559.pdf(by Tian, Y., Pei, K., Jana, S., & Ray, B. 2018): 这篇论文介绍了一种基于深度学习的自动化测试方法,用于测试自动驾驶汽车中的深度神经网络。它使用深度学习模型来生成测试用例,并通过探索自动驾驶汽车的各种驾驶场景和行为来测试深度神经网络的性能和安全性
DeepXplore: Automated Whitebox Testing of Deep Learning Systems:https://arxiv.org/pdf/1705.06640.pdf (by Pei, K., Cao, Y., Yang, J., & Jana, S. 2017):这篇论文提出了一种基于深度学习的白盒测试方法,用于测试深度学习系统。它使用深度学习模型来自动生成测试用例,并通过探索神经网络的边界和错误行为来找出可能的漏洞和错误。
大模型发布之后,软件测试的智能化明显得到提升,想象空间迅速扩大。
例如,我自己亲自尝试用GPT完成验收标准、测试用例生成等工作。
这样例子很多,最近,我看到一篇论文(Fill in the Blank- Context-aware Automated Text Input Generation for Mobile GUI Testing),是由中科院软件所研究团队写的,他们借助GPT进行Android的功能测试,开发了基于大模型的测试工具GPTDroid,在这216个应用程序中,发现了135个漏洞,涉及115个应用程序。其中,48个漏洞涉及39个应用程序是新发现的。令人更为关注的是,这些新的漏洞并未被之前的静态分析工具所发现。这48个漏洞提交给开发人员,他们已修复了其中的31个,确认存在的有17个,但没有一个被拒绝。这进一步证明GPT的能力是最强的。
最后:下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。