原文出处:tech-blog.tabelog.com/entry/ai-fo… 转载背景:学习整体思路和AI相关AI实践,对部分非关键信息进行省略,无任何商业用途
背景
我们发起了一个项目,叫做「AI4QA」,在第一阶段中我们实现了手动测试用例:399件测试用例中,304件由AI生成。 但实际新的课题出现,即执行测试的时间占整体时间的50%+, 所以第一阶段的实践对整体效果的改善有限。 我们需要把执行测试这个环节AI化。 而实际上我们做到了。其结果是降低了78%。
用一个表格的表达:(译者注 这种量化能力值得学习)
| 活动 | 工作量(人月) | 占比 | 改善项目 |
|---|---|---|---|
| 用例设计 | 0.80 | 21.4% | - |
| 用例编写 | 0.84 | 22.3% | Phase1的AI化 |
| 用例执行 | 2.10 | 56.3% | Phase2の目标 |
| 合计 | 3.74 | 100% | - |
先思考一个问题,为什么执行需要这么多时间
本质是一个小小的修改会带来非常多的回归测试。 作为一个餐饮预定产品,调整一个预约路径,需要进行的验证非常多。包括取消流程,资金返还,手续费的处理等等。 但作为核心业务流程,不进行验证是不行的。
所以针对不得不验证的,又非常多的回归测试进行 AI化节约工作量,势在必行。(译者注* AI是手段不是目的)
整体的解决方案
一句话概括:复用第一阶段的手动测试用例生成的知识库,在Cursor中完成自动化测试脚本的自动生成,进而进一步走CI/CD的流程。
第一阶段生成手动测试用例的部分,不光是得到了手动用例生成的结果,更重要的是知识库的积累。 跟仓库一起在Github上进行管理。
具体我们再来看这张图:
阶段1中基于一系列输入完成测试知识库的生成,阶段二复用。
阶段二为了实现自动化测试,主要的输入,处理和输出如下。
输入有三:
- 测试用例
- HTML文件群
- 操作录制文件
处理有二:
- Cursor+自动化测试用例生成指南(知识库)
- 生成结果检查
输出有三:
- Gherkin Feature file: cucumber BDD 测试脚本
- Page Object: 自动化测试的页面文件
- Step Definition: 测试脚本
译者注*:背景说明,当前业务的自动化测试框架是 BDD模式的,Selenium + cucumber
为什么没有直接选择Devin,具备浏览器能力的AI Agent?
核心两点: 1、FlakyTest问题,测试不稳定,AI整体的思考过程导致每次测试的稳定性相当不可控 2、假装正确问题,针对软件测试领域,期待值必须符合预期来讲,很多时候,大模型会模糊正确
所以,现阶段,基于当前的LLM的成熟度等,选择的策略依然是这个流程不变:
Selenium + Cucumber + CircleCI
这个选择可以带来四个好处:
- 使用过去运行很久的稳定的环境,自动化测试的稳定性得到保证
- 生成的代码质量可控,与原来积累的自动化测试代码统一管理
- 业务测试团队可以较快的上手
- 未来进一步发展到其他Agent上的空间依旧保留
译者注*:结合现场和现状,确定合适的测试策略,非常关键
如何提升使用AI的质量?
其核心就是我们过程在自动化测试和手动测试上积累的大量经验。我们作为
「自动化测试设计指南」进行管理和积累。
里面包括流程,架构设计,成功案例等等。 退一步讲,任何公司都可以学习我们的做法,但是如果没有这个设计指南的积累和注入, 是无法达到我们同样的效果的。
译者注*:未来LLM能力的持续迭代,无所不能。真正AI化的关键依然是组织对与自己业务的把控度和文档化,知识化能力,并将其转化为实际的业务流程。
另外,针对最终的输出质量,我们总结了「自动化测试12项检查清单」
这保证了我们:
- Page Object生成准确率: 97.26%
- Step Definition生成准确率: 92.63%
具体包括:
- 确保类型安全性的全面保障
- 选择器存在确认:检查与HTML文件的一致性
- 现有代码重复检查:彻底贯彻DRY原则
- 架构一致性验证:遵循PageObject模型原则
- 组件责任分离确认:验证合理的职责分工
- 继承链一致性:避免与基类的重复
- 参数化适当性:确保可重用性
- 错误处理完备性:正确处理异常情况
- 测试数据一致性:合理使用SharedData
- Modal初始化处理:确保动态元素的可靠处理
- 语言支持适当性:保证多语言环境下的正常运行
- 运行时稳定性:排除不稳定性测试因素
最终的执行我们依然复用过去的CircleCI,这样的好处有如下四点:
- 与AI化前相同的运行环境:不引入新风险,保持经过验证的稳定性
- 预约/取消/计费等重要功能:直接沿用现有监控与警报机制
- 沿用传统质量标准:AI生成代码与人工编写代码采用同等评估标准
- 运维团队零学习成本:无需掌握新工具即可立即投入正式运营
所以可以看到,一切的本质是如何将日常大家工作的潜规则明文化。
另外,为了更好的提升质量,注入利用AI时的 禁止规则,few-shot举例,输出格式参考,生成后再确认等都 是非常关键和重要细节。
取得了什么成果?
我们用数字来做一下说明。
| 活动 | 过去 | AI化后 | 效果 |
|---|---|---|---|
| 测试执行 | 0.9人月 | 0.43人月 | 52%削減 |
| 自动化测试率 | 24% | 64%(703件/1,102件) | 40%増加 |
| 自动化测试工作量 | 1.7人月 | 0.7人月 | 58.8%削減 |
有哪些收获和展望
- 再优秀的技术方案也需要手动实际执行和学习
- 跟AI建立有效的协作关系,而非对立和替代关系
- 作为QA对未来产生了更多的信心
译者注:发现现场的课题,系统化的思考并小范围验证,数据可视化可量化表达,大范围推广,这个路径是依然是大型系统质量保证的有效实践