基于代码大数据的软件开发质量与效能分析

2021-09-04 78浏览

  • 1. 2020阿里巴巴质量创新大会 2020 TEST INNOVATION CONFERENCE OF ALIBABA
  • 2. 基于代码大数据的软件开发质量与效能分析 演讲人:彭鑫 复旦大学计算机科学技术学院 pengxin@fudan.edu.cn https://cspengxin.github.io http://www.se.fudan.edu.cn
  • 3. 01 传统分析度量的困境 目录 02 基于代码大数据的新思路 CONTENTS 03 实践探索 04 总结与展望
  • 4. 01 传统分析度量的困境
  • 5. 软件开发中的几个普遍问题 软件维护的冰山 随风消逝的知识 开发过程不透明 脆弱的软件供应链 冰冻三尺非一日之寒 代码中的“神秘主义” 程序员工作难以评价 失控的代码拷贝 击鼓传花、法不责众 重新发明轮子 能力基线难以建立 脆弱的第三方库依赖链 根本问题:软件制品及开发过程的不可见性
  • 6. 代码分析与度量 静态缺陷扫描 代码克隆检测 代码度量 — 规模 — 复杂度 — 内聚/耦合度 如果你不能度量它,就无法改进它 — Peter Drucker —…
  • 7. 传统分析与度量的困境 无差别攻击? 揭示问题能力弱 容易误报、误读、误用 良药? 毒药? 度量成为教条主义 • 忽略了软件开发上下文差异的影响 • 以度量为指挥棒,忘记度量的初心 开发人员趋利避害 • 你衡量什么,你就会得到什么 • 一抓就死,一放就乱
  • 8. 02 基于代码大数据的新思路
  • 9. 机会:企业软件开发的云化和流水线化 DevOps:开发运维一体化 软件工具高度集成化、流水线化、云化 覆盖软件开发运维全过程的丰富数据
  • 10. 代码大数据平台内容 代码 快照 代码成分:类、 方法、API等代码 元素及其关系 演化 过程 演化分析:代码 差异理解、代码 演化过程追溯 质量分析:代码 度量、缺陷与漏 洞、代码克隆、 过程追踪:开发 任务、代码修改 与测试、评审、 代码坏味等 持续集成等 外部 依赖 制品与过程数据的全面链接与追踪 系统实现软件开发知识的反馈、收集和凝练 第三方库:第三 方库版本、依赖 链及其版本等 拷贝代码:拷贝 代码来源及其副 本分布情况
  • 11. 基于演化追溯实现深层分析 需 求 feature 编码 bug 设计 设计 编码 编码 持续跟踪代码发展变化 通过代码提交追溯变化原因 深层代码质量及开 发效能分析 refactor enhance — 长期危害评估 — 代码生存期 ? … — 分类损耗率 — 程序员画像 — 协作关系分析 —…
  • 12. 大数据视角的代码度量和质量分析 纵向追踪 基于代码演化历史持续追踪代码 的发展变化及其多方面影响 01 回归本源 从问题的实际影响而非表象 出发确定并使用度量指标 关联分析 02 04 融合多种不同分析手段和度量指标 并结合代码修改意图等上下文信息 进行深入分析 03 横向比对 将大量项目中的相似问题综合在 一起相互映证,抽取共性规律
  • 13. 03 实践探索
  • 14. 代码缺陷跟踪 演化过程追溯 代码资产抽取 第三方库版本管理 静态 分析 演化 分析 克隆 检测 依赖 分析 SonarQube等工具 代码度量、坏味道等 能力基线分析 代码逻辑差异比较 高性能代码克隆检测 演化历史切片 多粒度、多形态克隆 克隆危害分析 设计影响评价 代码内部依赖分析 第三方库依赖分析 第三方库影响分析
  • 15. 代码克隆分析 程序员画像
  • 16. 亿级代码高效克隆检测 多粒度:文件、方法、片段 多形态:Type-1/2/3 准确性高:95%以上 如何去掉无意义的代码克隆? 哪些代码克隆风险更高?哪些需要尽快干预? 哪些代码克隆是抽取可复用资产的合适候选?
  • 17. 克隆副本无修改 无害 无害?有害? 额外的克隆副本维 护开销 遗漏修改导致的克 隆副本缺陷残留 克隆副本无需 一致性修改 克隆副本能保 证同步一致性 修改 克隆副本一致 性修改有时延 克隆副本时延 导致缺陷残留 无害 轻微 中等 严重 代码数据分析指标 ü 克隆代码修改率 ü 一致性修改率 ü 一致性修改时间差 ü 一致性修改延迟导 致缺陷数
  • 18. 针对4个开源项目(Redis/SQLite/ArgoUML/Tomcat)和3个企业软件系统的案例研究 代码总行数约1700万行,其中克隆代码行约357万行(21%),共包含23,560个克隆组 每实例修改次数累计 一致性修改时间差分布 各项目55%-72%的克隆组从未修改过 一致性修改要么很容易保持(2天以内),要么很困难(1周以上)
  • 19. 1. 代码规模 — 代码长度 — token数 2. 代码差异度 代码克隆分析 指标体系 3. 实例分布 — 实例数 — 涉及文件数 — 分散度 4. 实例变化 — 存活时间 — 实例增减趋势 — 变更活跃度 5. 一致性修改 — 一致性修改率 — 一致性修改时间差 — 一致性修改缺陷数
  • 20. 代码克隆画像 稳定的通用功能代码 集中维护的相似功能 持续扩散的高风险克隆
  • 21. 1. 设计贡献 2. 新增代码 3. 修改代码 程序员效能分析 指标体系 6. 代码重复率 — 与他人重复 — 与自己重复 — 修改自己 — 修改他人 7. 代码特异 4. 删除代码 8. 缺陷引入 — 删除自己 — 删除他人 5. 代码存活率 9. 缺陷消除 — 自己引入 — 他人引入
  • 22. 程序员画像 架构奠基者 核心功能实现者 代码问题清理者 主要代码贡献者 简单功能实现者 修改存量代码 大量零散修改 新手上路 代码贡献少 代码问题多
  • 23. 04 总结与展望
  • 24. 来源可溯 去向可查 责任可追 质量可控 https://www.mmh.com/wp_content/barcoding_wp_traceability_030513.pdf DevOps与云化开发平台提供了全过程软件开发数据 通过有追溯的代码大数据分析实现有效度量和分析
  • 25. 代码视角 程序员视角 基于代码大数据实现质量问题的持续追溯和有效管控
  • 26. THANKS