代码缺陷检测探索与技术实践_第1页
代码缺陷检测探索与技术实践_第2页
代码缺陷检测探索与技术实践_第3页
代码缺陷检测探索与技术实践_第4页
代码缺陷检测探索与技术实践_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、代码缺陷检测探索与技术实践技术创新,变革未来01 背景介绍代码智能化计划编码打包测试部署运维监控代码托管代码搜索WebIDE代码评审代码图谱AGit质量数据 支撑智能 赋能平台 业务缺陷检测代码推荐敏感信息代码克隆代码质量代码生成敏感行为智能调度效率安全运维离线数仓缺陷检测挑战业务种类丰富缺陷类型不定代码质量参差复杂的业务环境测试用例不全缺陷报告不足自动打标困难有限的辅助资源检测过程高效误报率足够低提供补丁方案产品的落地要求02 缺陷检测简介相关研究进展缺陷定位补丁推荐其他应用缺陷定位技术Fault LocalizationSpectrum-Based Fault LocalizationSt

2、ack Trace AnalysisIR-Based Fault LocalizationMutation-Based Fault LocalizationPredicate SwitchingHistory-Based Fault Localization局限性:关注特定缺陷,泛化能力不强误报率较高仅能够定位,无补丁信息补丁推荐技术Generate-and-validate Approach局限性:准确率不够高,存在假解决耗时长,计算资源消耗多测试用例完备性要求高Test case failedGenerate mutationsValidateTest caseGeneratefailed

3、mutationsValidateSolvedLoop if failed其他应用技术基于代码克隆的补丁生成:SimFix, CBCDCLEVER from UbisoftBugram: Ngram on tokensInfer, Getafix, Sapfix from FacebookTricorder, Findbugs等缺陷检测定制器03 解决方案探索Commit级缺陷检测规模变更增加、减少的代码行数量Mockus and Weiss (2000)变更增加、减少的代码段数量Shihab et al. (2012)变更相关文件在变更提交前的代码行数量Mockus and Weiss (2

4、000)代码分布变更修改的子系统数量Mockus and Weiss (2000)变更修改的代码目录数量Kamei et al. (2013)变更修改的文件数量Mockus and Weiss (2000)修改代码在修改文件中的分布(用信息熵计算)Hassan (2009)目的该变更是否修复缺陷Mockus and Weiss (2000)经验开发者已提交的变更数量Mockus and Weiss (2000)开发者近期提交的变更数量Mockus and Weiss (2000)开发者已提交变更中影响到该变更相关子系统的数量Mockus and Weiss (2000)文件修改对该变更相关文件

5、进行过修改的开发者数量Shihab et al. (2012)已提交变更中,对该变更相关文件进行过修改的变更数量Shihab et al. (2012)修改过该变更相关文件的最近变更与该变更时间差平均值Shihab et al. (2012)行级缺陷检测Model Input Tensor Shape:Start: (Batch Size, Tuples Size)End: (Batch Size, Tuples Size)Path: (Batch Size, Tuples Size)Code2vec (PathAttention)修复行为观察开发者往往在commit message中记录了修

6、复意图75%的修复提交包含删除缺陷代码和新增修复代码的模式修复相关文件数往往少于三个,commit会引入修复无关文件常见的修复缺陷:故障点,重构点,代码风格问题,性能问题PRECFIXPRECFIX:Patch Recommendation by Empirically Clustering缺陷修复对提取缺陷行源自多个文件60%47%Commit包含SZZ算法标注 1-2个文件代码无关缺陷25%diffsource codepublic String renameBU() +String name = null;+name = bu.fetchName();-String hqName = “

7、HQ”;+String hqName = null;+if (name.equals(headName) +hqName = name;+return hqName;12Defect slice:String hqName = “HQ”;Patch slice:String name = null; name = bu.fetchName(); String hqName = null;if (name.equals(headName) hqName = name;Distributions of the number of bug-inducing commits (BC).缺陷行源自多个文

8、件1-2个文件代码无关缺陷60%47%25%Distribution of the number of changed files perCommkeyiwt包ord含-matched commitS(FZ/CZ). 算法标注减少修复行为稀释 加入文件数量限制缺陷修复对提取缺陷行源自多个文件Commit包含 1-2个文件SZZ算法标注 代码无关缺陷60%47%25%缺陷修复对提取缺陷修复对聚类聚类算法:DBSCAN,Pairwise Comparing聚类方式:只聚缺陷片段,同时聚缺陷和补丁片段 优化算法:KDTree,APISEQ,Parallel DBSCAN 比较方式:编辑距离,Jacc

9、ard,Cosine Similarity聚类算法耗时类簇损失率Raw DBSCAN70 hours0%KDTree16.5 hours6%APISEQ+KDTree4.5 hours8%Parallel DBSCAN4 minutes22%模板提取与匹配 sb2.deleteCharAt(sb2.length()-1);匹配模板sb2.deleteCharAt(sb2.length()-1);生成修复if (sb2.length() 1) sb2.deleteCharAt(sb2.length()-1);PRECFIX模板例子合理性检查PRECFIX模板例子API 变更PRECFIX模板例子API 封装PRECFIX模板例子性能优化PRECFIX模板分类Distribution of patches in each category.只能检测历史重复修正过的缺陷部分代码时间久远,停止维护 API的底层已经修复了某个问题本地和线上配置不同,补丁不适用 模板数量和误报率需要持续维护PRECFIX效果3,000+模板提取出3,000+模板, 含有13,00

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论