复旦CodeWisdom团队发布代码大数据分析平台“祝融”

点击蓝字 关注我们

汇聚软件开发数据

洞察软件开发过程

持续提升质量效能

ce1907fd7043bb4bb96ad271fa186eb0.png

软件开发质量和效能受到越来越多的软件研发企业的关注。尽管很多企业采用了诸如任务看板等敏捷开发技术以及基于DevOps的过程数据分析技术对研发过程进行管理,但直接反映代码生产的客观数据如何收集、融合,如何支撑对软件开发过程的洞察,进而在这些数据支撑下持续提升软件质量和开发效能,构建可信的开发过程,仍是软件开发的难点。

面向软件开发质量与效能的CodeWisdom代码大数据平台,以代码及其演化过程为核心、以程序分析、演化分析、依赖分析、开发任务关联等多种来源数据汇聚融合为抓手,避免单一或者少量数据度量的片面性,使软件开发过程可见可控,是支撑软件开发质量和效能持续提升的一种新尝试。

该平台在代码版本管理的基础上,为软件开发过程洞察和质效提升建立分析能力底座,将逐步支撑对软件开发过程的全面洞察,进而帮助提升软件质量、构建可信过程。

我们将CodeWisdom代码大数据平台命名为“祝融”——中国上古神话的火神,希望它能像火焰的熔炉融合软件开发中的多源数据,并提炼出对洞察软件开发过程有用的信息,进而逐步发掘更多的价值。

“祝融”的能力仍在持续完善和扩展中。欢迎各位专家提出宝贵的意见和建议(服务邮箱zhurongbigcode@163.com)。

祝融网址:zhurong.codewisdom.net(请用电脑浏览器访问)。即日开放预览,预览账号密码zhurong/zhurong。

若需添加开源代码仓进行试用,可联系zhurongbigcode@163.com申请添加代码仓。试用代码仓对其他预览用户都可见。

企业本地部署试用也可联系zhurongbigcode@163.com。

410f0959d2f5809149300ac28d0695fe.png

主要功能

祝融平台是一个正在扩展和接入更多软件研发数据来源的能力基座,面向开发团队,提供精细化的质量洞察和人员分析;面向开发个人,提供可执行的软件开发维护行动指导。

一、面向开发团队——精细化的质量洞察和效能分析

1、代码质量洞察 之 静态缺陷分析——聚焦于可能造成实际bug的静态缺陷

项目整体,基于开源项目调研和当前项目的静态缺陷留存情况分析,对最有可能造成实际bug的缺陷数量进行监控,同时对其他各级静态缺陷的引入和修复情况进行全局掌控。

以开源项目pdfbox代码仓(Apache Software Foundation的PDF处理开源项目)近几年的留存静态缺陷数据为例。2020-2021年整体静态缺陷处于快速下降阶段,进入2022年后,静态缺陷数量持续保持稳定,初步可以判定留存的缺陷并不对软件整体质量产生明显影响。祝融平台还能够通过修复方式分析,识别因代码重构或删除消失的缺陷,从而精细化区分针对性的修复和顺带消除行为,为进一步识别受开发人员关注的缺陷提供客观数据支撑。

76b1e42bb28abfe3a63f6edb5147aaf7.png

图 1:pdfbox近3年留存缺陷趋势图

2、代码质量洞察 之 重复代码分析——把控重复代码的潜在风险

重复代码也称克隆代码,一般指文本或语法结构上相似的代码片段。

平台对代码重复度进行持续监控,并再此基础上,聚焦新近引入质量风险较高(比如发生修改或同步修改)的代码克隆,进行警示,以便落实到开发人员进行具体分析处理。同时,对项目引入和消除重复代码都有全局掌控。

祝融平台对被扫描过的代码仓进行克隆信息汇总,展示每个代码仓最新版本中的克隆比等克隆总览情况。

df17f8abd55a47b08fc799bb529dbaad.gif

图 2:代码库的克隆信息汇总展示

76703555f984e5a4ab6d4d24f0b15882.gif

图 3:具体某代码库的克隆总体情况和变化情况

平台还将进一步接入留存克隆代码的危害风险分析能力,以便开发团队进一步对留存克隆代码进行有针对性的监控和治理;并将推出开发人员引入重复代码的分析能力,以便发现开发人员在编码过程中的“欠设计”开发行为,为提升代码质量提供基础数据支持。

3、开发过程回顾与效能分析

回顾过去一段时间开发人员的代码质量与产出,一方面分析开发人员代码质量情况,另一方面综合评估语句增删改,对于客观展示开发人员的工作质量、总结可能的工作优化点,具有重要的参考价值。

在项目进度遇到问题时,开发团队往往会思考这些问题:

——开发过程是否合理?因何产生了进度延期?

——开发人员写的代码质量怎么样?为何反反复复修改或者问题不断?

① 平台能对开发人员代码的质量情况进行分析,识别开发人员引入缺陷的类别、数量,计算开发人员代码质量系数,有助于形成具有针对性的质量提升建议。

下图展示了某私有代码仓从2023年7月1日至2023年7月31日期间开发者时间段内引入、留存、修复缺陷的数量以及工作量情况,并计算出代码质量系数,对开发者代码质量进行评级,并用颜色标注,越绿质量相对越高,越红质量相对越低,可以供开发管理人员参考。

72733454c3400d911758e08328756d45.png

图 4:开发人员代码质量系数

代码质量系数是我们提出的一种综合考虑在给定时间段内,开发人员的代码静态缺陷引入、消除、留存数量及缺陷严重程度,以及该时间段内代码量(以标准行计算,含新写代码、修改代码、删除代码)的综合评估方式。基准值为1,表示没有引入也没有消除静态缺陷。数值大于1则偏正面,数值小于1则偏负面;理论上数值下界为0,上界为+∞。对于代码综合贡献过低的人员,不计算代码质量系数。因此实际计算中一般在0.5~1.5之间,能较好反映质量总体情况。代码质量系数标准行的具体计算方式将在我们的技术报告中详细描述。

下图展示了三个不同的开发者,代码质量系数约1年的变化情况。可以看到开发者A早期少量代码维护时,呈现较高的质量系数(1.258),但后续由较大开发工作量时,其代码质量较低的特点呈现出来(0.69~0.85波动)。开发者C则从早期不关注代码质量(0.5-0.7左右),通过团队内部质量建设要求,逐步提升了代码质量(0.9以上)。开发者D则一直有使用SonarQube的习惯,总体保持着相对较高的质量系数(基本在0.9以上波动)。

c9339351de05d5da589ffa829c05e3c4.png

ebbe9a3461c615ab31d11bafe7e88cca.png

6b516f46438683f80d07461a52751bde.png

左右滑动 查看更多

对于每个开发者,还可从不同的维度对他相关的缺陷进行下钻观察。例如,可对开发者引入的缺陷从类别(分bug、code smell等)、类型(type)、修复状态标签等进行下钻,也可对修复的缺陷从以上分类以及引入者、引入时间进行下钻,并可以在任何下钻过程中查看每个缺陷的具体情况。

26e237728d7c1398806ddbc4658c5bea.gif

图 5:开发者缺陷下钻图

② 为了对开发人员过去一段时间的开发历史进行回顾,平台将每次commit归类成“新功能”“修复”“重构”“优化”等7类,并利用代码的语句级追溯能力为代码变动进行原因分析,利用代码存活代码损耗来表明开发过程中可能产生的额外工作量,对于进一步回答“开发过程中程序员干了什么”都有帮助。

下图是某代码仓最近一年的代码损耗百分比以及损耗的具体原因分析,可见最近一年该仓有效代码占总编写代码量的约90%,而约10%是损耗,其中修复缺陷带来的损耗占了一半以上。此时可能提示需要对缺陷原因进行进一步分析以提升代码质量。

9ca04fca31174e871fb588eda92181a7.png

图 6:某代码仓最近一年的代码存活率

86d6274e908ef35b3f7325f698ad037b.gif

图 7:某代码仓代码损耗原因分布

而对于另外一些情况,例如由于需求变化带来的损耗,则需要反思是否需求分析存在不足,而对于重构或优化结构带来的损耗,只要没有新的缺陷引入,则无需多虑。这对于开发过程精细化分析和过程优化,都将具有参考价值。

二、面向开发个人——软件开发维护的行动指导

1、代码静态缺陷关注优先级分析

代码静态分析是发现代码潜在质量问题的重要手段。然而在一些开发团队中,代码静态分析的结果往往难以得到有效的利用。其原因除了静态分析本身存在误报的情况以外,很大程度上源于其数量巨大,但只有少量是开发人员真正关心和需要优先修复的。

静态缺陷关注优先级分析根据开源项目调研和当前项目静态缺陷的历史修复及实际关联Bug的情况,给出不同的关注优先级。开发人员根据关注优先级聚焦到需要优先关注的问题。对每个缺陷可以进行相应的标注,在下一次扫描时,平台会准确识别同一缺陷,自动应用前一次的标注,减少对开发人员的打扰。

祝融平台基于启发式规则将静态缺陷的关注优先级分为“紧急”“严重”“一般”“轻微”四级,并且默认会仅报告高优先级(紧急+严重)的缺陷,让开发人员重点分析。

be8b8b3c4f0cc52c75b9e50af73df2c6.gif

图 8:筛选需要关注的优先级

开发人员可进一步查看静态缺陷所在的commit id、起止行、路径位置、具体代码等信息。

2e2ce51a2a1de85289c40b9a6be01a1b.gif

图 9 :查看缺陷信息

如果确认所报缺陷为误报,则可人工标记为“忽略”。如果认为所报缺陷虽然是问题,但确实在当前上下文中不需要修复,则可标记为“暂不修复”。被标注或忽略的静态缺陷在今后的扫描和统计中将不会被计入。而且,得益于祝融平台准确的追溯能力,在后续代码维护中,这些缺陷的标记将被准确地延续下来,以免开发人员重复复核或标记。

6a11be86358e467c2850a922c7f4dfd6.gif

图 10 :标记缺陷

2、代码克隆关注优先级分析和危害分析

在软件开发中引入代码克隆一定程度上提升了开发效率,但也可能给代码质量埋下隐患。新引入克隆组或者克隆实例,往往是局部设计不足而带来的次优设计选择,需要予以关注。

开发人员可点击相关数字详细展开克隆组的详情,查看克隆代码的具体情况。这些功能将来会以集成开发环境插件的形式逐步转移到开发人员的开发过程中,通过平台API将能力推送到开发现场。

a37f30498e3603709a29db234875d290.gif

图 11:issueTracker仓新增克隆数量

对于遗留系统,历史上积累的重复代码并不总是带来维护和质量问题,仅仅只有一小部分可能会带来维护开销和质量风险。结合这些克隆代码的维护历史,对克隆代码的危害度进行评估,进而给出需要优先消除、保持监控等不同的处理决策。另外,克隆组中多个代码副本的同步修改不仅带来额外的工作量,还可能由于漏改、错改而造成bug。因此对于发生一致性修改的克隆组也需要予以关注。相关功能将逐步集成上线。

05b34c2c3731eedaba20d5169cb6fa1d.png

核心能力

祝融平台的主要应用价值源于其底层的核心能力。

▪ 代码语句级追溯

对代码进行语法解析,识别出语句,并以增量方式对每个语句的每次变化进行追踪,从而准确获得开发人员的代码增删改行为,并合理处理了分支、合并等特殊的演化情况。

代码静态缺陷追溯和生命周期分析

基于语句级追溯,对代码静态缺陷的变化情况进行精准跟踪,不仅识别其引入和消除,还能识别其消除的方式(比如整体删除还是精准修复),为准确分析静态缺陷的生命周期,并指导开发人员评估静态缺陷的关注优先级提供基准数据支撑。

克隆代码检测和克隆谱系构建

平台集成了CodeWisdom团队自研的SAGA代码克隆检测工具,并进一步集成了代码克隆谱系构建能力,从而能识别新增或消除的克隆组,以及在现有克隆组中新增或消除克隆实例。这是重复代码治理的重要技术基础。

aa3f3f6cfe280b103b97f7dee596a8fc.png

版本发布计划

祝融平台还处于持续的开发和完善中。

更多能力敬请期待。

18ab4da323c88c145dcaf6050f11aef5.png

致谢

CodeWisdom代码大数据平台“祝融”的发布离不开过去五年来以及目前仍在和CodeWisdom团队开展技术合作的企业团队,是你们的需求激励和鞭策着团队持续推进科学研究和工程改进。

特别感谢张刚为平台早期规划、架构设计以及后续研制、验证提供的极有价值和洞见的意见和建议。

感谢复旦大学CodeWisdom团队软件开发数据分析与挖掘研究组余平、黄正宇、彭佳汉、肖泉彬、谢沛成、曹雨菲、张健、王锦策、孙宇杰、孙婕、康明祥、曾侯陆、邰荟媛等各位同学的辛勤工作,以及汪朱赢、毛浩楠、宋瑞、何越、周振涛、何思聪、刘霜、周玮杰、王贵成、朱睿琪、邵熙、林圣旺、张宇辉、陈媛、张京富、邵熙、徐喆民、比克等各位已经毕业的同学为平台打下的坚实基础。

ffcf41850a5a6a8405dc1dec47e566b5.png

作者:吴毅坚,周捷,彭鑫

编辑:孙婕

审核:吴毅坚

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值