一、人工智能概述
1. 人工智能定义与分类
人工智能是一种思维和响应方式与人相似的自动化计算技术,分为两类:
狭义人工智能:完成单一、具体任务,例:棋牌对弈、机器翻译、自动驾驶、图像识别。
广义人工智能:可执行多种工作,能自主推理、在不同任务间切换。
2. AI给软件测试带来两大层面影响
AI系统本身具备全新特性
◦ 系统行为会随自我学习持续演化,不同学习环境产生不同效果,旧测试结论无法适配演化后的模型;
◦ AI输出结果的正确性难以判定,存在不确定性。
AI技术大规模落地软件测试全流程
覆盖测试方法、项目组织管理、缺陷预测、故障挖掘、测试有效性评估等环节,深刻改变测试理念、测试策略、团队管理、投入产出比。
3. AI对软件测试的三大具体影响
测试工作前移
依托基于模型的测试,在需求分析、系统设计阶段就能搭建面向测试的软件模型,提前开展测试。
自动化程度大幅提升
AI赋能各类测试、管理工具,自动化覆盖测试项目管理、测试需求分析、测试设计、测试执行全流程。
测试可靠性增强
从测试充分性、测试有效性两个维度体现。
二、人工智能辅助测试技术
AI自动化测试两大核心技术:基于约束的技术、启发式搜索算法
(一)基于约束的技术
1. 核心原理:将被测程序/模型、测试准则/目标转化为约束条件,通过约束消解器求解约束,自动生成测试用例。
2. 配套覆盖准则
自动生成用例同样需要测试覆盖准则管控、评估用例集完整度;准则能否用约束表达,是AI自动生成用例的关键。
3. 覆盖准则三类划分
◦ 结构覆盖
◦ 数据覆盖(最适配约束消解器,含统计数据覆盖、边界值覆盖)
◦ 基于故障覆盖
4. 适用场景:黑盒测试 + 白盒测试
◦ 黑盒:用于基于模型的测试;
◦ 白盒:用于全路径覆盖测试策略。
5. 基于模型测试完整四步骤
① 解析模型,把操作拆解为谓词(粒度由覆盖准则决定);
② 将所有待覆盖测试目标转化为约束问题,调用约束消解器求解;
③ 搭建测试架构,生成完整测试用例;
④ 将用例输入被测软件,分析运行结果。
6. 白盒全路径覆盖痛点:循环迭代次数由输入变量决定时,需要穷举输入,落地难度极高。
(二)启发式搜索算法
核心价值:解决测试数据最优选择难题,主流3类算法:遗传算法、蚂蚁算法、模拟退火算法
1. 遗传算法
借鉴生物进化(遗传、突变、自然选择、杂交),遵循优胜劣汰;
◦ 用二进制串(0/1)代表候选解(个体/染色体);
◦ 流程:随机生成初始种群→评估个体适应度→筛选优质个体→交叉、突变生成新一代种群,迭代逼近最优解。
2. 蚂蚁算法
多用于功能测试、基于UML模型测试的用例生成;
◦ 核心逻辑:路径信息素浓度越高,吸引蚂蚁越多;
◦ 最短路径重复通行频次高,累积信息素更多,持续吸引蚂蚁聚集,最终收敛到最优最短路径。
3. 模拟退火算法
从高初始温度起步,逐步降低温度;依托概率突跳机制在解空间随机搜索,可跳出局部最优解,最终找到全局最优解。
三、机器学习在软件测试中的应用
1. 优化测试设计
挖掘历史测试数据,梳理需求、测试、用例间关联;对比不同方案效果,吸取失败经验,给测试人员提供优化用例设计的建议,规避同类错误。
2. 缺陷挖掘与缺陷修复优化
多数代码修改由缺陷引发;机器学习分析多版本代码演化规律,定位缺陷、总结修复模式,快速识别新版本潜在问题,提升缺陷检出、修复效率。
3. 软件缺陷预测
根据产品迭代、代码修改、架构弹性,预判软件薄弱点与缺陷高发区域。
4. 优化测试策略、降低验证成本
分析单版本故障/代码改动对其他版本的连锁影响,定制轻量化测试方案,削减验证成本。
5. 基于用户行为的测试与质量评估
采集、归纳、分析各类用户使用习惯;自动生成、执行高覆盖率用例;同时评估易用性、易学习性等软件体验指标。
6. 定位软件失效根源
监控系统与外部环境交互模式,梳理引发故障的操作序列;一方面复用序列生成测试用例,另一方面辅助开发定位失效诱因。
7. 静态代码安全分析
静态扫描代码,识别会使软件进入危险状态的潜在通路。
8. 自动化生成高有效攻击应力
借助模糊算法生成攻击用例,降低应力生成复杂度、提升效率,同时保障攻击覆盖率,强化测试有效性。
9. 软件架构风险分析评估
不仅能分析代码层脆弱点,还可结合真实案例评估软件架构;结合内外部威胁、运行环境,筛选风险最低的架构方案。
夜雨聆风