上海品茶

刘逵-基于大模型的程序修复-已修改.pdf

编号:142164 PDF 34页 7.87MB 下载积分:VIP专享
下载报告请您先登录!

刘逵-基于大模型的程序修复-已修改.pdf

1、基于大模型的程序修复刘逵 华为刘逵华为2012软件工程应用技术实验室智能化软件工程技术专家华为2012实验室智能化软件工程技术专家,CCF会员,CCF软件工程专委会委员。主要从事软件编码、软件测试、程序分析、代码检视等智能化软件工程工作,在软件工程领域发表高水平研究论文40余篇,其中CCF A类期刊/会议论文十多篇,曾任南京航空航天大学计算机科学与技术学院副教授,主持过国家自然科学基金面上项目一项,江苏省自然科学基金青年项目一项,参与国家重点研发计划项目两项,担任IEEE TSE、ACM TOSEM、EMSE、软件学报、ICSME、SANER等国际期刊/会议审稿人。演讲嘉宾目 录CONTENT

2、S1.软件缺陷带来的问题2.修复软件缺陷的挑战3.软件缺陷自动修复的探索与实践4.大模型下软件缺陷自动修复的探索5.总结与展望软件缺陷带来的问题PART 01软件缺陷难易避免,也备受关注第一个Bug1媒体关注软件代码Bug2行业技术报告4Windows 2000的发布版本伴随着63000个已知、在档的Bug32“Why we all sell code with bugs”,May 24,2006,The Guardian.1“CE:Worlds First Computer Bug”,Sep 9,1947,Society.3“Will bugs scare off users of new

3、windows 2000”,2000,Rick Lockridge,CNN.4“So many bugs,so little time”,Jul 2010,MIT Technology Review.软件缺陷带来的损失6Michael Zhivich and Robert K Cunningham.The real cost of software errors.IEEE Security&Privacy,7(2):8790,2009.胰岛素剂量控制软件存在缺陷造成病例死亡67“Northeast blackout of 2003”,https:/en.wikipedia.org/wiki/N

4、ortheast_blackout_of_2003电网管理软件存在重大缺陷造成美加大停电、近一百人死亡78“TAM Airlines Flight 3054”,https:/en.wikipedia.org/wiki/TAM_Airlines_Flight_30542006年巴西天马航空3054航班空难,187人丧生,防撞系统问题85https:/en.wikipedia.org/wiki/Tokyo_Stock_Exchange2020年富士通开发的证券交易软件系统存在缺陷导致四个半小时的停机事故5软件缺陷会造成巨额的损失2002年,软件缺陷造成美国595亿美元的损失,占了美国当年0.6%的

5、GDP。至少1/3的损失可以通过有效的软件缺陷鉴定和修复来避免9。2016年,软件缺陷造成的损失突破到了1100亿美元10。9.http:/ 02什么会有这么多的软件缺陷?软件缺陷修复时间分布2006年,Sunghun Kim等人的技术报告指出:修复一个独立的软件缺陷的中间时间是200天2。Sunghun Kim and E James Whitehead Jr.How long did it take to fix bugs?In Proceedings of the 3rd international workshop on Mining software repositories,pag

6、es 173174.ACM,2006.人工修复软件缺陷的挑战Debugging的巨额花费:2001年,Boehm等人的技术报告指出:修复缺陷开销逐年猛增1。2003年,Seacord等人出版的一书中指出:“在一款软件产品发布以后,其90%的开销都将花费对该软件产品的Debugging上”2。2013年,剑桥大学的技术报告声称:程序员在Debugging上需要花费一半软件开发时间和软件开发费用3。1.Barry Boehm and Victor R.Basili.Software Defect Reduction Top 10 List.Computer,Volume 34,Issue 1,Ja

7、nuary 2001,pp 135137.2.Robert C Seacord,Daniel Plakosh,and Grace A Lewis.Modernizing legacy systems:software technologies,engineering processes,and business practices.Addison-Wesley Professional,2003.3.Tom Britton,Lisa Jeng,Graham Carver,Paul Cheak,and Tomer Katzenellenbogen.Reversible debugging sof

8、tware.Technique Report in University of Cambridge,UK,2013.逐年软件缺陷修复花费增长趋势Meta OPT-175B训练过程也遇到很多BugOPT训练过程中的故障统计OPT故障处理Scalable Metric 使能模型训练监控,这块目前完全依赖经验描述:OPT训练在992个80GB显存A100上训练,历时3个月,核心训练时长56天(2022年),结构大小(175B)和GPT3类似,过程中平均每天约2.7个故障,其中主要为软/硬件故障(92%)、损失发散。训练故障解决方式大多依靠任务重启。集群在一定的容错能力,部分故障不中断训练,事后根据C

9、KPT重启 软件:NCCL算子、计算算子 硬件:Lost GPU、ECC 模型:损失发散故障类型故障的节点数处理方法硬件故障75(49%)检测节点,替换或重启节点,并利用CKPT重启任务软件故障66(43%)替换或重启节点,并利用CKPT重启任务未知故障6(4%)更换节点,CKPT重启任务代码Bug4(4%)修改并重新运行部署错误1(1%)向运维人员求助,并要求提供更多机器GPU训练由于精度误差导致训练抖动,任务训练不搭预期大模型能力涌现性加大了模型训练监控的难度。软件缺陷自动修复的探索与实践PART 03缺陷自动修复基本流程GenProg2009-ICSE1.KTH Martin Monpe

10、rrus教授关于APR研究的实时报告:“The Living Review on Automated Program Repair”,https:/hal.archives-ouvertes.fr/hal-01956501/document维基百科词条:Automatic Bug Fixinghttps:/en.wikipedia.org/wiki/Automatic_bug_fixingAPR专题网站:专题网站:https:/program-repair.org每年关于每年关于APR的论文研究情况的论文研究情况CoderAssist2016-FSEAngelix2016-ICSEAllRep

11、air2016-FMDeepFix2017-AAAIKali2015-ISSTALeakFix2015-ICSEMemFix2018-FSEMintHint,RSRepair2014-ICSEProphet2016-POPLSPR2015-FSESearchRepair,QACrashFix2015-ASEPAR,SemFix2013-ICSEACS2017-ICSEARJA2020-TSEAVATAR2019-SANERAstor2016-ISSTAConFix2019-EMSEGenPat2019-ASEGenesis,ErrDoc2017-FSEHDRepair2016-SANERJAI

12、D,ssFix2017-ASEJFix2017-ISSTALSRepair,kGenProg2018-APSECNopol2017-TSENPEFix2017-SANERSimFix2018-ISSTATBar,PraPR2019-ISSTAkPAR2019-ICSTCapGen,SketchFix,BugZoo,FootPatch,Repairnator2018-ICSEClara2018-PLDIInFix,Refactory2019-ASECURE2021-ICSECoCoNut2020-ISSTASelfAPR2022-TSERecoder2021-FSE软件缺陷自动修复软件缺陷自动修

13、复APRAutomated Program RepairAutomatic Program RepairAutomatic Bug FixingInternational Workshop on Automated Program Repair软件缺陷自动修复的Road Map0070802009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023缺陷自动修复技术的学术研究探索软件缺陷自动修复技术的基本流程缺陷定位补丁生成补丁验证缺陷定位:根据分析缺陷导致的非正常现象与代码之间的关系,

14、找到引发该缺陷的类、函数、代码行1。基于统计的缺陷定位技术基于程序状态的缺陷定位技术基于数据挖掘的缺陷定位技术基于模型的缺陷定位技术基于信息检索的缺陷定位技术基于学习的缺陷定位技术(机器学习、深度学习)基于程序切片的缺陷定位技术(静态、动态、双重切片等等)基于静态分析的缺陷定位技术(SpotBugs,Infer,ErrorProne)基于频谱的缺陷定位技术(需要测试用例,Ochiai等等)()=()+(+()1.Wong et al.A Survey on Software Fault Localization.IEEE TSE,42(8),707-740(2016).补丁生成:通过既定的自动

15、化方法,自动地修改可疑的缺陷代码,生成潜在的缺陷补丁。基于启发式的补丁生成技术(e.g.,GenProg,2009-ICSE,SimFix,2018-ISSTA)基于修复模板的补丁生成技术(e.g.,PAR,2013-ICSE,TBar,2019-ISSTA)基于语义约束的补丁生成技术(e.g.,SemFix,2013-ICSE,Nopol,2017-TSE)基于学习的补丁生成技术(e.g.,DeepFix,2017-AAAI,Recoder,2021-FSE)更多信息可参详:2.姜佳君等,软件缺陷自动修复技术综述,软件学报,2021,32(9):266526903.Liu et al.,On

16、 the Efficiency of Test Suite based Program Repair,ICSE-2020.补丁验证:通过自动化、智能化方法验证补丁的可行性、正确性。编译,APR工具容易生成无意义(nonsensical)的补丁,存在语法错误,无法通过编译。测试,APR工具会产生无效的(invalid)补丁,虽然可以通过编译,但是不能让打过补丁的程序通过测试。持续验证,APR工具产生的补丁虽然可以通过所有的测试,但仍然无法确保该补丁的正确性,会产生很多貌似合理/过拟合的(plausible)补丁。动态分析的方法,e.g.,PatchSim,Xiong et al.,2018-IC

17、SE.基于学习的方法,e.g.,BATS,Tian and Liu et al,2022-TOSEM.业界的缺陷自动修复技术探索与实践公司公司APRAPR技术技术技术出处技术出处微软微软BugLabBugLab 基于自监督学习的缺陷自动定位与修复技术。基于自监督学习的缺陷自动定位与修复技术。NeurIPSNeurIPS-20212021FaceBookFaceBook全栈式缺陷预测、定位与修复技术全栈式缺陷预测、定位与修复技术ISSTAISSTA-2016,OOPSLA2016,OOPSLA-2019,ICSE2019,ICSE-20192019谷歌谷歌TriCoderTriCoder 缺陷自

18、动定位与补丁推荐缺陷自动定位与补丁推荐富士通富士通缺陷自动定位与修复技术缺陷自动定位与修复技术ASEASE-2017,ICSE2017,ICSE-20192019华为华为可解释的缺陷预测与定位、可适配的缺陷自动修复微软BugLab:基于自监督学习的程序自动定位与修复技术受生成对抗网络的启发,基于自监督学习的缺陷定位与修复,无需带标签的训练数据,专注于Python代码4种Syntax Error缺陷,能修复26%的缺陷,但无法修复复杂的缺陷。Bug Selector Introduce a bug?Where?What bug?Bug DetectorIs there a bug?Where?H

19、ow should it be fixed?CodeDetectedCorrect?LearningCodeAllamanis,M.,Jackson-Flux,H.,&Brockschmidt,M.“Self-Supervised Bug Detection and Repair”.NeurIPS,2021Facebook GetaFix:基于历史修复记录的程序自动修复 将Getafix计算出的修复建议与人工编写的修复方法(包含了大概200个提交并且每个提交改动不超过5行)进行了比较发现,大概25%的Getafix的修复建议和人类的修复方法完全一致 在Instagram代码库上测试(包含约20

20、00个Infer发现的Null方法调用问题),Getafix尝试修复了大概60%的bug,其中90%的修改都通过了自动验证(修复后程序可编译且 Infer 将不再发出警告)。总体来说,Getafix成功地修复了1077(约占53%)个Null方法调用问题 除了Infer发现的Bug,Getafix尝试修复之前代码检视中积压的Bug。结果Getafix修复了几百个返回不可为空以及字段不可为空的Bug。并且这些bug的正确修复率前者从56%提高到了62%,后者从51%提高到了59%。Getafix 还为 SapFix 生成了修复建议,用以处理 Sapienz 检测到的崩溃问题。过去几个月以来,Sa

21、pFix 所采用的修复方法中有约半数来自Getafix且实际有效(通过全部测试);而在Getafix 提供给SapFix的修复建议中,约80%通过了全部测试2新的修复模式挖掘:利用新的层次聚类技术以及反合一方法进行模式挖掘13标识抽象语法树级别的更改:有效且精确地对树级别中的之前与之后部分进行对齐,从而识别出正确的实际编辑及其映射关系创建补丁:获取存在 bug 的源代码并从挖掘到的结论中生成修复模式,从而针对源代码生成修复补丁Getafix在Facebook中用于为Infer(Facebook的静态分析工具)找到的空指针错误自动提交修复,也能通过SapFix为Sapienz(Facebook的

22、智能化测试系统)发现的Crash问题提供修复方案Getafix的工作流程及关键技术Getafix:Learning to Fix Bugs Automatically,OOPSLA,2019谷歌TriCoder:缺陷自动定位与补丁推荐系统生态化的分析平台:采用微服务架构,便于扩展;允许公司中各团队开发面向特定语言、特定框架或特定需求的分析插件低误报:分析器的误报率必须低于10%(平台可以下线误报率超标的静态分析器)修复辅助:提供缺陷修复建议,方便程序员采纳(每天700次)数据驱动:持续收集修复反馈,优化提升检测与修复能力工作流集成:与代码检视工具顺畅衔接存在缺陷的代码建议修复后的代码Trico

23、rder的的架构架构开放的分析平台开放的分析平台Tricorder设计理念旨在易于扩展,这个平台既包含了开源分析工具,也有Tricoder团队开发的工具,当前的更多来自公司内部团队自研工具。截至2018年1月,该平台共包括146个分析器,其中125个来自Tricorder团队之外数据驱动数据驱动Tricorder团队跟进这些无用的点击标记,计算请修复与无用之间的点击比率。如果分析器的比例超过10,那么Tricorder团队会禁用该分析器直到作者对其进行改进应用规模应用规模截至2018年1月,Tricorder平均每天分析约50000次的需要代码检视的变更,其中检视人员点击请修复超过5000次,

24、作者采纳自动修复方案的约为3000次;Tricorder分析器每天收到250次无用点击反馈。无用无用按钮检视人员可以点击表示他们不认同分析发现的结果。点击动作会自动附带提交bug跟踪器中的错误,并将其指向分析器所属团队请修复请修复按钮检视人员可以通过单击该按钮要求开发者必须修复该缺陷代码。在所有评论(手动和自动发现的)都得到解决之前,检视人员通常不会批准合入代码变更Tricorder的检查器会针对告警提供合理修复建议的检查器会针对告警提供合理修复建议TriCoder:可扩展可扩展的程序分析平台,旨在打造数据驱动的程序分析生态系统生态系统,利用静态分析工具定位软件缺陷,并生产补丁推荐。涵盖30个

25、静态分析工具,支持20种编程语言。每天可生产93000的分析结果,只需2-3个维护人员。富士通:全栈式缺陷自动定位与修复技术支持多程序段的缺陷定位与修复支持多程序段的缺陷定位与修复支持软件开发期间的缺陷定位与修复支持软件开发期间的缺陷定位与修复支持软件运维期间的缺陷定位与修复支持软件运维期间的缺陷定位与修复Fujitus全栈式缺陷自动定位与修复技术全栈式缺陷自动定位与修复技术整体方案整体方案采用基于生成并验证式修复方法,在算法设计阶段,富士通基于一组真实世界广泛、有差异的缺陷集训练了一个采用基于生成并验证式修复方法,在算法设计阶段,富士通基于一组真实世界广泛、有差异的缺陷集训练了一个Ranki

26、ng模型模型,以期更早地输出正确修复方案,以期更早地输出正确修复方案实用分析实用分析ELIXIR在富士通业务线最初集成时,得到的正确修复仅占在富士通业务线最初集成时,得到的正确修复仅占10%,效果很差,效果很差在完成对在完成对ELIXIR的失效分析后,新发布的修复工具正确率达到了的失效分析后,新发布的修复工具正确率达到了40%实现了实现了Eclipse ELIXIR插件插件观察观察目标程序的目标程序的测试用例测试用例与与运行环境运行环境可得时,动态缺陷修复是一种可行方案可得时,动态缺陷修复是一种可行方案动态缺陷修复是困难的,需要在动态缺陷修复是困难的,需要在E2E各个环节精细设计,针对不同的业

27、务需要专有的设计各个环节精细设计,针对不同的业务需要专有的设计Elixir:Effective object-oriented program repair,ASE-2017Harnessing evolution for multi-hunk program repair,ICSE-2019华为的软件缺陷自动修复探索与实践可解释的缺陷预测与定位可适配的缺陷自动修复大模型下软件缺陷自动修复的探索PART 04大模型对APR工具生成的补丁重排序缺陷定位补丁生成补丁验证重排5个APR工具生成Defects4J补丁的结果直接使用Codex修复QuixBugs的BugPrompt:#fix the b

28、ug in the following function#fixed function1.Code only:有Bug的函数.2.Code with hint:#提示Bug的行位置.3.Code with docstring:有Bug的代码和正确的功能描述QuixBugs基准数据集上的验证结果:未来方向:Fine-Tuning.零样本学习的缺陷修复完形填空的思维Defects4J基准集的验证结果QuixBugs基准集的验证结果基于大模型驱动科学解释的缺陷修复人工编写需要预先定义出Debugger无法识别出正确的断点。对话形式的缺陷自动修复QuixBugs基准数据集上的验证结果:总结与展望PAR

29、T 05基于大模型的缺陷修复:修复形式(2)正确代码的填空(1)完整正确功能函数的生成(3)(多个)单行代码的生成基于大模型的缺陷修复:对话Prompt形式基于大模型的缺陷修复:专业数据的微调1.知识强化的微调使用知识强化微调来生成更多使用项目特定变量、方法调用和结构的代码。2.面向修复的微调3.标识符相关的Prompting优化下游任务:缺陷修复。利用整形假说原理,补充上下文,去个性化。基于大模型的缺陷修复:现状与挑战1.即使没有微调,大模型呈现出了缺陷修复能力,但性能有限。2.虽然有了缺陷代码行的提示,大模型能修复一些缺陷,但当前的大模型仍未能很好地利用缺陷代码行信息。当给出缺陷代码行时,

30、大模型生成的可编译补丁较少,总体上修复的缺陷也较少。3.使用已有缺陷自动修复工具的数据进行微调能提高大模型修复缺陷的能力。4.需要解决对缺陷代码的过度依赖问题:使用缺陷代码数据微调大模型,会过度依赖缺陷代码行。可能导致模型出现偏差,倾向于少的代码变更改来修复缺陷,因为微调数据集中大多数缺陷的修复都是少的代码变更。5.更大参数的大模型在修复缺点问题上展现更好的时间效率和内存效率。开发人员实际修复缺陷场景DeveloperCommitter本地编码本地验证提交MRReviewer合入审核门禁检查合入代码代码reviewENDSTART收到需求/问题单创建本地分支不通过通过不通过通过完成代码合入不通过通过辅助工具可引入LLM的辅助,LLM对于缺陷修复还有很大的发挥空间。感谢聆听

友情提示

1、下载报告失败解决办法
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站报告下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。

本文(刘逵-基于大模型的程序修复-已修改.pdf)为本站 (2200) 主动上传,三个皮匠报告文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三个皮匠报告文库(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。
客服
商务合作
小程序
服务号
会员动态
会员动态 会员动态:

 139**27...  升级为至尊VIP  wei**n_... 升级为高级VIP 

wei**n_...  升级为高级VIP  188**66... 升级为标准VIP

 wei**n_...  升级为至尊VIP  wei**n_... 升级为高级VIP

wei**n_... 升级为至尊VIP  wei**n_...  升级为高级VIP

 wei**n_... 升级为高级VIP wei**n_...  升级为至尊VIP

177**81...  升级为标准VIP 185**22...  升级为标准VIP

138**26... 升级为至尊VIP  军歌 升级为至尊VIP

159**75...  升级为至尊VIP  wei**n_... 升级为标准VIP

 wei**n_... 升级为至尊VIP  wei**n_... 升级为高级VIP  

su2**62... 升级为至尊VIP  wei**n_...  升级为至尊VIP

wei**n_...  升级为至尊VIP  186**35... 升级为高级VIP 

186**21... 升级为标准VIP  wei**n_...  升级为标准VIP

 wei**n_... 升级为标准VIP wei**n_...  升级为标准VIP

 137**40... 升级为至尊VIP wei**n_...  升级为至尊VIP

 186**37...  升级为至尊VIP 177**05... 升级为至尊VIP 

wei**n_...  升级为高级VIP wei**n_...  升级为至尊VIP 

wei**n_... 升级为至尊VIP  wei**n_...  升级为标准VIP

 wei**n_... 升级为高级VIP   155**91... 升级为至尊VIP

 155**91... 升级为标准VIP 177**25... 升级为至尊VIP 

139**88...  升级为至尊VIP  wei**n_...  升级为至尊VIP

 wei**n_...  升级为高级VIP wei**n_... 升级为标准VIP 

135**30... 升级为标准VIP    wei**n_... 升级为高级VIP

138**62...  升级为标准VIP 洛宾   升级为高级VIP

 wei**n_...  升级为标准VIP wei**n_... 升级为高级VIP 

wei**n_... 升级为标准VIP   180**13...  升级为高级VIP

wei**n_... 升级为至尊VIP    152**69... 升级为标准VIP

152**69... 升级为标准VIP 小**...  升级为标准VIP

wei**n_... 升级为标准VIP 138**09... 升级为标准VIP

 wei**n_... 升级为至尊VIP  邓**  升级为标准VIP

wei**n_...  升级为标准VIP  wei**n_... 升级为至尊VIP 

186**22... 升级为标准VIP  微**... 升级为至尊VIP 

 wei**n_... 升级为至尊VIP zhh**_s...  升级为标准VIP

wei**n_...  升级为至尊VIP wei**n_...  升级为至尊VIP 

 wei**n_... 升级为高级VIP wei**n_...   升级为至尊VIP

 131**00... 升级为高级VIP wei**n_... 升级为高级VIP 

188**05... 升级为至尊VIP   139**80... 升级为至尊VIP

wei**n_...   升级为高级VIP   173**11... 升级为至尊VIP

  152**71... 升级为高级VIP  137**24... 升级为至尊VIP

wei**n_...  升级为高级VIP 185**31... 升级为至尊VIP

186**76... 升级为至尊VIP   wei**n_...  升级为标准VIP

 wei**n_...  升级为标准VIP 138**50...  升级为标准VIP 

wei**n_...  升级为高级VIP wei**n_... 升级为高级VIP 

 wei**n_... 升级为标准VIP wei**n_... 升级为至尊VIP

 Bry**-C... 升级为至尊VIP 151**85...  升级为至尊VIP

 136**28... 升级为至尊VIP 166**35...  升级为至尊VIP

狗**... 升级为至尊VIP    般若 升级为标准VIP

wei**n_...  升级为标准VIP  185**87...  升级为至尊VIP

 131**96... 升级为至尊VIP   琪** 升级为标准VIP

wei**n_...  升级为高级VIP  wei**n_... 升级为标准VIP

  186**76... 升级为标准VIP 微**... 升级为高级VIP