AI智能总结
杨萍 字节跳动基础架构 1.智能测试技术现状2.LLM技术快速兴起3.LLMforTesting典型场景4.字节的探索与实践5.未来展望 目录CONTENTS 智能测试技术现状 AI在软工领域的研究趋势 AI for SE的研究集中在使用机器学习、知识图谱、信息检索等技术,助力SE传统领域如测试、分析、代码生成与理解等的效率、性能和准确性 •NLPfor代码生成•GUI控件识别•自动设计软件布局 •BugTriage/Locate•精准测试/用例推荐 智能测试技术现状 近几年软工顶会的软件测试相关的文章(215篇),热门Topic: •AI for testing:25篇•Testing AI:34篇•领域特定测试:48篇•嵌入式系统(以智能驾驶为主):14篇•移动App(集中在Android):21篇•并行系统(concurrency bugs):8篇•云服务:3篇•区块链:3篇 智能测试技术现状 •移动App测试:优化遍历效果,MBT;录制与回放;具体测试;•优化Fuzzing;•测试用例管理:用例挑选/推荐,精准测试,用例优先级排序;•其他:微服务,机器人,嵌入式系统(自动驾驶); •数据标准化,AtScale•业务场景,资损,业务安全 •更集成化的测试解决方案•LLM逐步在测试领域发光发热 •GUI:Sapienz,Ape,Stoat,Fastbot…•服务端/单测:EvoSuite,AFL-Fuzz•工业界的各类质量域解决方案 LLM技术快速兴起 LLM技术快速兴起 •Keywords:•LLM/AIGC/AIGA •ChatGPT/CodeInterpreter/各类Copilot •趋势: •数据质量越来越重要•垂直场景(Domain)的应用前景光明 •掘金:•Infra:计算&硬件,存储,网络 •PaaS:向量数据库,ML平台,安全•应用:应用开发,BI,营销 LLM技术快速兴起 •局限: •Transformer:有限的视野•过时和矛盾的输出结果•“不负责任”•顽固的幻觉问题 •复杂任务怎么办? •PromptEngineering,各种PE•In-ContextLearning,语境学习•Fine-Tuning,微调•Autonomous Agents,AI自治•知识库+搜索引擎+LLM LLMforTesting典型场景 LLMforTesting? •GenerateContentV.S.GenerateAction -用例执行-结果分析-Debug-自动程序修复 -生成用例描述-生成测试数据/输入-DebugGenerateContent 典型场景1:单测生成 •问题: •传统单测生成技术需同时兼顾程序分析与测试生成•不同语言的特性,意味着要迁移程序分析到不同PL上 •LLM优势: •降维突破语言之间的壁垒•可利用传统方法为LLMforUT生成提供大量训练数据 •评价指标 •正确性•充分性•可读性•可用性 典型场景1:单测生成 •LLM结合SBST,例:CodaMOSA(ICSE2023) •把单测生成当作任务,例: ChatTester(ArXiv2023),两步走: •让ChatGPT总结Focalmethod的意图,将意图作为Prompt;•循环生成单测,让ChatGPT自己与自己交互,处理编译问题; 典型场景2:GUITesting •问题: •GUI测试工具在生成适当的文本输入以跳转到下一页面困难 •LLM优势: •从非结构化的GUI页面中提取“更有意义的信息”做Prompt•例:InputWidget,各种Context等;•生成具有语义相关性的输入能有效提升测试序列的可用性 •相关Work: •Qtypist,Liu Z, Chen C, Wang J, et al. Fill in the blank: Context-aware automated text input generationfor mobileguitesting[C]//2023 IEEE/ACM 45th International Conference on Software Engineering(ICSE). IEEE, 2023: 1355-1367.•LIBRO,Kang S, Yoon J,YooS. Large language models are few-shot testers: Exploringllm-basedgeneral bug reproduction[C]//2023 IEEE/ACM 45th International Conference on Software Engineering(ICSE). IEEE, 2023: 2312-2323. 典型场景3:自动程序修复 •问题: •自动程序修复(APR)面临有限的补丁类型和复杂性问题 •LLM优势:•生成更加多样性的补丁 •相关Work: •Xia C S, Wei Y, Zhang L. Automated program repair in the era of largepre-trained language models[C]//Proceedings of the 45th InternationalConference on Software Engineering (ICSE 2023). Association forComputing Machinery. 2023. 字节的探索与实践 实践1:单测生成 •模型:Bart、CodeT5、Vicuna、Bloomz、StartCoder、PolyCoder•https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard •微调:函数级Fine-Tune,文件级Fine-Tune •数据增强:传统工具先生成 •Eval:CodeCoverage,可用性,正确性 -入门必读:https://huggingface.co/ 实践1:单测生成 实践2:识别与修复风险代码 实践2:识别与修复风险代码 •“风险代码”指由于存在“缺陷”有概率引发线上漏洞的代码,是构成代码漏洞的必要不充分条件。 •“校验缺失”是最常见的风险代码类型之一。由于缺少对关键变量进行关系校验、值域校验、类型校验、模式校验等必要合法性检查,会导致非法请求数据进入业务流程,造成安全危害。 代码1:缺少if-condition校验代码(17-20行)会导致水平越权漏洞(为方便本文阐述构造的测试代码,不存在于模型数据集中) 实践2:识别与修复风险代码 •“校验缺失”是最常见的风险代码类型之一。 •“风险代码”指由于存在“缺陷”有概率引发线上漏洞的代码,是构成代码漏洞的必要不充分条件。 由于缺少对关键变量进行关系校验、值域校验、类型校验、模式校验等必要合法性检查,会导致非法请求数据进入业务流程,造成安全危害。 实践2:识别与修复风险代码 •技术挑战: •如何利用LLM解决不同类型的风险代码:风险代码是漏洞发生的必要不充分条件,梳理可能引发漏洞的风险代码类型并全量治理、可以提前解决很多潜在漏洞危害。但目前风险代码类型的定义还需要人工分析,方案的完整实施需探索更高效、支撑所有类型风险代码的方法。 •如何利用LLM自身语言逻辑解释SFT任务:引导Risky Code LLM使用语言来描述风险代码识别与修复任务推理过程,希望通过LLM原有的“语言逻辑”来表示SFT任务习得的“任务逻辑”,进一步提升任务可解释性。 未来展望 未来展望 •大模型在SE/ST的应用还处于初期,未来将围绕“改造存量工具平台”与“完成更复杂的软件活动”继续演进•质量领域的特殊性,意味着大模型的应用需要更加准确和可靠•合规与安全,将促使SE/ST在大模型的应用中,扮演更加重要的角色 感谢聆听