利用大模型打造更聪明的猴子:下一代跨平台软件测试基础设施 HydraLab 步绍鹏 演讲嘉宾介绍 步绍鹏微软中国高级研发经理 负责PhoneLink项目工程系统,保证产品质量和团队能效 多年研发和管理经验 《软件工程·最佳实践》作者 在软件质量保障系统方面获得多项专利 领导构建开源云测系统HydraLab 推动微软AzureOpenAIService在产品端、工程系统端赋能 爱好:篮球、电影、脱口秀 PhoneLink 支持三星和荣耀手机的深度连接集成体验 跨平台应用的端到端测试解决方案 HydraLab Agenda 01从手动到工程化创新 02HydraLab和测试工程化 03智能涌现:更聪明的猴子 04大模型时代:智能测试和测试智能化 01 软件测试的时代印记:从手动到 byAlanPage 2008 byJames 2010 国内的“测开”在国外一般叫:软件测试工程师(SoftwareTestEngineer,STE)或软件开发测试工程师 (SoftwareDevelopmentEngineeringinTesting,SDE/T) 质量很重要,但测试很“无聊” 自动化测试并不自动,依然需要维护 如何合作?责任在谁? 自动化测试的广义和狭义 工具多、选哪个? 自动化测试现状与挑战 测试解决方案的多元化 软件质量保障 软件测试 自动化的挑战 工程化解决方案 自动化测试 51%ofpreviouslymanualtestcaseshavebeenreplacedbyautomation.Stil,itisnotamagictoolthatcanremovetheneedformanualtesting. TheStateofTestingReport,PractiTest,2023 测试金字塔 自下而上 集成度提高、接近用户视角更“生动”、“保真”和完整 运行慢、成本更高、脆弱更“黑盒“ 调试和归因难度提高 手工测试 性能测试 UI测试系统测试 自上而下运行速度越来越快 成本更低范围小、针对性强、目标明确更“白盒”,接近开发视角 保真度低、远离用户范围局限、增加信心程度低 和体验相关性低 随机测试无障碍兼容性 集成测试单元测试 测试工程化 持续集成系统 测试管理系统 报告和问题追踪 代码仓库 构建任务和执行系统 构建任务流水线 测试设备管理 测试任务分发和管理 测试结果分析系统 测试设备和环境控制 测试任务执行器 测试记录系统 问题发现和分析 •计划阶段:Testable可测试性 •开发阶段:Test-drivendevelopment 设备测试驱动 日志收集 录屏截屏 •构建:融入到持续集成BVT •发布和部署:AcceptanceTest 为什么需要测试工程化开源方案 为什么不选择Firebase或者其他第三方云平台? 定制化 开源 免费 可信 使用三方平台潜在问题: 把公司的包含调试信息的内测应用开发包上传到第三方平台 HydraLab架构解析 HydraLab架构解析 HydraLab架构解析 AzureOpenAIService Docker容器 HydraLab管理中心 HydraLab监控系统 用户和权限管理设备和代理管理测试任务调度管理 智能数据分析 测试数据管理 文件存储管理 GrafanaPrometheus Prometheus网关 Pushmetrics Nginx HydraLab架构解析 测试管理测试设备管理 日志和录屏系统测试任务执行器性能测试服务 运行环境能力发现 设备驱动层 MonkeyTest HydraLab 中心通信层 测试中心通信管理数据诊断和上报 SmartTest $ AndroidClientApp 本地数据库 Maestro AzureOpenAIService HydraLab架构解析 HydraLab设备管理集群 RESTfulAPI 群 RESTfulAPI HydraLab设备管理集 HydraLab设备管理集群 RESTfulAPI HydraLab设备管理集群 RESTfulAPI HydraLab设备管理集群 RESTfulAPI HydraLab设备管理集群 RESTfulAPI 内部落地情况 •每月运行5~8万测试任务 •管理全球设备 •覆盖单元测试、UI测 试、Monkey测试、智能测试、端到端测试和性能测试 •落地测试生成、测试报告数据分析和可视化 03智能涌现 MonkeyTest ChaosMonkeyFaultInjection 最”受欢迎”的自动化测试 24 一百万只猴子 在一百万个键盘前敲一百万年 DALL-E2 ->莎士比亚作品 三个盒子 输入逻辑处理输出 C1 B1 输入AC2 B2C3 输出1输出2输出3 灰盒测试 白盒视角的LLM测试应用:TestPilot 帮“我对选中的代码生成 单元测试,要求验证边 界情况和异常情况…” 27 28 •理解程序界面 •找到可交互元素 •进行交互 黑盒视角:聪明的猴子 DALL-E2 黑盒视角的测试 •理解程序界面 •找到可交互元素 •进行交互 Rulebased Modelbased 智能探索SEE模型 Start初始化 Extraction 提取元素 Comprehension 理解转化 Decision 分析决策 Evaluation 评估反馈 Action执行动作 Modelbased的探索:强化学习 将应用看做“状态机” 观察(提取) 理解 决策 行动 评估(反馈) 进入了新界面 发生了异常 到达了目的状态 理解Comprehension 页面张量元素特征向量 多层感知机页面分类 Output 页面和元素特征 预处理 Bert [ "position":[0,322,1440, 位置信息元素类型 Class… 576], "clickable":true,"element_type":“input","textfeature“:Enteryour 文本类特征元素截图 TokenInput IconTextButton 特征提取 email", ] "image":array SentenceTransformer 编码 Cosine页面向量相似度 理解Comprehension CosineSimilarity= 0.4579 CosineSimilarity= 0.9954 这两个页面不相似(<0.5) 这两个页面很相似(>0.9) 04 广义自动化测试视角下, 大语言模型如何发挥作用? 测试智能化中LLM面对的问题 如何理解用户的测试需求? 如何智能探索一款应用?理解和交互? 如何整合测试信息?分析测试结果? 长处弱项应用思路 LLM的 特性与应用 内容生成、补充 原子性的代码任务 数字和推理 幻觉、善变、漂移 清晰指令、必要信息 预处理:压缩、分段 总结和内容摘要 知识和上下文限制 PromptSkills 不同量级工程的规模 GPT4代码理解或生成(2,000lines) 一般5-10年开发规模项目(1,000,000lines) AndroidAOSP(12,000,000lines) Windows10 (50,000,000lines) *ByVisualCapitalist 源代码 不同测试问题的上下文的规模 运行时调试信息 SRCSRC 编译产物 白盒测试生成:单元测试 WARN ERROR LOG 白盒测试生成:集成测试 EXE 36 运行时交互信息 测试结果分析 探索测试 黑盒测试生成 SourceCode GeneratedUT NewPrompt BuildandRun N NeedContext? GetContextCode Pass N OtherRuntimeError? CombineErrorInfo ValidGeneratedUTCheckin ContextCodeIndexerCodeRepoScanner BuildandFix FixwithContextualCode ScreenOutProblematicUT LangChain LLMFine-Tuning 工程化单元测试生成 LLM-based:单步探索 特征提取: •可交互元素的关键特征 •页面上下文 •应用上下文 相关原理 •UX交互设计的原理 •探索式测试的理论 面对这样一个界面,你会如何向GPT描述?你想点哪里? 38 三个盒子 输入逻辑处理输出 C1 B1 输入AC2 B2C3 输出1输出2输出3 灰盒测试 黑盒测试的生成 AppStructuredData LLM-based:黑盒用例生成 AppiumPython JUnit+Mockito 基于Maestro的UI测试用例: <应用解析数据> <功能状态转换图描述 > ” “ LLM-based:黑盒用例生成 AppiumJava 这是应用的解析数据和状态转换图的文本表示,基于这些生成 [New]Maestro 应用解析数据 GeneratedTestCases 性能数据的自然语言解读分析 TestTrigger HydraLabCenter PerfData ADOPipeline Analysis AzureOpenAI PerfData Agent Analysis 45 LLM赋能下的全面测试智能化 路径决策 页面元素理解 用例生成 测试结果分析 探索 理解 生成 执行 分析 数据生成 状态图分析 测试日志分析 测试环境的模拟生成 测试数据生成 智能探索型测试 测试用例生成和优化 测试结果分析解读 测试智能分析调度 基于测试结果的诊断建议 智能测试与测试智能化IntelligenceTestingandTestIntelligence. HydraLabtodoInteligenceTesting RESTfulAPI NPU/GPUCapability RunModelEvaluationTasks References&Thanks 1)EvaluatingLLMtrainedoncode 2)ASurveyofLargeLanguageModels 3)StarCoder:AState-of-the-ArtLLMforCode 4)Competition-LevelCodeGenerationwithAlphaCode 5)HydraLab团队工程师周乐、邹家祥、沈理、陶冉 我与微软专家胡晓武、莫曲合著的《软件工程最佳实践: 程序员走向架构师的关键8步》即将出版,书中将对该领 域有更多深入探究。 敬请期待!