优质博文:IT-BLOG-CN
一、What is Codescene
Codescene是一种代码分析工具,它通过分析代码库的版本控制历史记录和代码结构,提供有关代码复杂性、可维护性和演化模式的信息。
Codescene帮助团队识别潜在的问题和改进机会,并提供可视化报告和建议,以改善代码质量和可维护性。
Codescene的独特之处在于其Hotspots分析技术,它可以识别代码库中的热点区域,即对代码质量和可维护性有重要影响的区域。
Hotspots分析基于代码复杂性、可维护性和演化模式等方面进行评估,帮助团队了解代码库的健康程度,并提供相应的改进建议。
二、Introduction
Codescene,SonarQube,Arex本质上都是为保证代码质量产生的工具。
Arex主要是通过自动化的回归测试,在代码业务功能方面对代码质量做保证,而前2者更多的是对代码的规范性和可维护性做保证。
目前我们在CI/CD中已经集成了SonarQube,下面分析一下工具的不同功能和侧重点
Codescene | SonarQube | |
---|---|---|
功能 | 1、Hotspots分析:Codescene的独特之处在于其Hotspots分析技术,它可以识别代码库中的热点区域,即对代码质量和可维护性有重要影响的区域。 2、可维护性评估:Codescene分析代码库的结构和依赖关系,识别出可能导致维护困难的模块和文件,并提供改进建议。 3、代码演化分析:Codescene分析代码库的版本控制历史记录,识别代码的变化模式和趋势,帮助团队了解代码的演进情况。 4、团队协作支持:Codescene提供团队协作功能,可以共享代码分析结果、讨论改进机会,并跟踪改进进展。 | 1、静态代码分析:SonarQube支持多种静态代码分析工具,可以检测代码中的各种问题,如代码重复、代码规范违规、安全漏洞等。 2、代码质量评估:SonarQube提供全面的代码质量评估功能,帮助团队了解代码的质量状况,并提供报告和仪表盘进行跟踪和管理。 3、安全漏洞检测:SonarQube可以检测代码中的安全漏洞,并提供相应的建议和修复措施。 4、持续集成集成:SonarQube可以与持续集成工具(如Jenkins)集成,实现自动化的代码分析和质量管理。 |
目标 | 帮助团队识别代码库中的热点区域,即对代码质量和可维护性有重要影响的区域。 Codescene的重点是提供深入的洞察力,帮助团队优先处理最重要的问题和改进机会。 | 全面的代码质量管理和静态代码分析。 SonarQube的重点是提供全面的代码质量管理和评估,帮助团队发现和解决各种代码问题。 |
优势 | 1、行为分析:CodeScene可以分析代码库中的开发人员行为,例如代码提交频率、代码审查质量和代码重构频率。以热点代码的方式帮助开发团队了解开发人员的工作方式,并提供改进建议。 2、可视化报告:Codescene提供可视化报告,以图表和图形的形式展示代码分析结果。报告包括热点区域的可视化图表、代码质量指标和建议等信息。 3、代码演化分析:Codescene分析代码库的版本控制历史记录,识别代码的变化模式和趋势,帮助团队了解代码的演进情况。 | 1、静态代码分析:SonarQube集成了多种静态代码分析工具,如FindBugs、Checkstyle、PMD等,可以检测代码中的各种问题,如代码重复、代码规范违规、安全漏洞等。 2、全面的代码质量评估:SonarQube提供全面的代码质量评估和报告,包括代码质量指标、问题列表、可视化图表等。这样团队可以全面了解代码的质量状况,并采取相应的措施来改进。 3、团队协作和持续集成:SonarQube支持团队协作和持续集成,可以与常用的持续集成工具集成,如Jenkins,以便在代码构建过程中自动运行代码分析,并将结果集成到持续集成流水线中。 |
劣势 | 静态代码分析的全面性:相对于SonarQube来说,Codescene的静态代码分析功能可能相对较弱 | 代码分析的单一性:SonarQube可能无法像Codescene一样深入识别代码库中的热点区域,也无法对代码的整个演化过程进行分析。 |
三、Four key factors behind high-performing software
1、Code Health:代码健康状况是一个基于从源代码扫描的 25 个因素的聚合指标。 不健康的代码预示着维护成本的增加和更多的缺陷。2、Knowledge Distribution:成功的软件开发很大程度上取决于有效内部知识共享。开发之间应该有一个共享的知识库。
3、Team-Code Alignment将软件的组织方面处理好与代码的任何特性一样重要。软件设计的模块化需要与开发团队的责任相一致。
4、Delivery交付是能充分反映整个开发流程效率的指标,同时也被上面三个关键因素所影响
四、FOCUS AREAS
The 4 factors identifies the areas that require attention. The focus areas let you explore the details and plan the necessary actions.
HOTSPOT
WHAT IS IT?
热点是指代码活动最频繁的点。
WHY FOCUS ON?
大多数开发活动往往位于相对较少的模块中。热点分析可帮助您识别花费大部分开发时间的模块。
HOW TO USE?
提示开发系统的重要领域和其关联的影响范围,往往热点代码是复杂且难以维护的。
向开发提示code reviewer。
标识测试的重点,改动量大的区域往往是测试最需要关注的重点。
Code Health
WHAT IS IT?
代码维护和发展的难易程度
WHY FOCUS ON?
代码健康状况识别已知影响维护成本和交付风险的因素
下图是代码健康指标的一个简易计算过程:代码健康状况是通过ML扫描并分析源码 25 多个因素的聚合指标。代码健康因素与维护成本增加和缺陷风险增加相关。
我们列举其中最常见的一个Code Smell
Bumpy Road (坎坷之路是指未能封装其职责的函数,导致代码包含多个逻辑块。就像崎岖不平的道路会减慢你的驾驶速度一样,代码中的崎岖不平的道路也会给理解带来障碍)
其与我们日常理解的Cyclomatic Complexity(循环复杂度) 有所不同,如下的例子传统的复杂度计算认为每个 if 语句、每个控制结构(例如 for 或 while 循环)都会增加复杂性,如下2个case实际都拥有3个branch。
但是实际理解上右侧的代码会比左侧复杂的多。下面我们来看一下Bumpy Road 是怎么计算的
其原理就是在于分析嵌套条件逻辑的深度,对于一个开发来说越深的嵌套逻辑就越难以理解,人脑是我们编程中最大的限制因素,越深的嵌套会越影响工作记忆。
COMPLEXITY TRENDS
WHAT IS IT?
复杂性趋势用于获取有关我们热点的更多信息。
WHY FOCUS ON?
一旦我们确定了一些热点,我们就需要了解它们是如何演变的:它们是热点,因为它们随着时间的推移变得越来越复杂吗?或者更多的是对稳定代码结构进行微小更改的问题?
复杂性趋势可以帮助您回答这些问题。复杂度趋势是通过获取热点的每个历史版本并计算这些历史版本的代码复杂度来计算的。
X-Ray
WHAT IS IT?
X-Ray 是一种在代码的函数/方法级别上运行的分析方法。因此,X-Ray 能够提供有关热点内部发生情况的深入而详细的信息。
WHY FOCUS ON?
X-Ray可以帮助您理解大型文件,并提供有关需要改进的部分的具体建议,其会给予你具体的建议。
REFACTORING
当我们发现代码存在一定的问题的时候,重构是一个有效的解决方案。Codescene中包含了简单的重构提示功能。
目前我们公司已经使用了copilot,其一重要功能就可以帮助开发进行代码重构,但是分析发现ai重构复杂的代码往往容易出现业务逻辑漏洞,开发还需要进一步排查。其原因就是ai模型基本都是基于语意分析模型,难以完全理解代码的上下文。
目前,我使用copilot对代码进行重构如果方法中包含难以理解的业务逻辑,简单的重构指令往往难以达到我们对预期,往往我们还需要对ai进行语义引导,或者给出一个详细的例子或者样本。
Codescene正在做一种fact-checking model模型替代人工去检测ai的准确性
可以在https://codescene.com/campaigns/ai进行beta测试
Knowledge Distribution
WHAT IS IT?
Knowledge Distribution板块主要是提供开发团队TO了解目前代码仓库中的逻辑,业务知识分布是否健康,是否存在如下不健康的一些情况
1、Knowledge Islands: 相关的代码长期都是由一个人维护,如果该人员流失可能会有潜在的风险
2、Knowledge Loss: 相关的代码大部分是由之前的开发人员维护,后续如果需要改动这部分代码会有潜在的风险
3、High Coordination Needs: 相关的代码频繁的由多个人员改动,可能存在较多的Merge Conflict和职责不清晰的问题
Demon
首页是一个high-level的视图面板,适用于观察所属开发各团队整体的一个代码仓库健康状况,例如有多少仓库是属于质量高风险的,有多少仓库可能存在知识孤岛的问题以及每个团队健康数据的Overview
Code Health板块
CodeHealth板块,主要有热点代码健康分数,平均健康分数,最差部分健康分数3方面。
下面的看板列举了时间范围内哪些提交提升了代码健康程度,哪些对象的健康指数上升了。
下图展示了存在健康问题的热点代码(Hotspot),这部分代码往往是最需要引起开发人员关注,进行相应优化重构的
点击存在健康风险对象的X-ray选项,会进行方法级别的问题扫描,这个功能可以让开发人员聚焦到最需要进行重构的类方法,如图的方法会提示存在健康风险的方法有哪些代码问题。
如下图可以进一步通过点击Virtual Code Review,进行具体代码的review
这里介绍一个简单的review和验证的方法。
如上图中的handleRequest方法提示有3种Code Smell,我们按提示对代码进行简单重构提交到一个新的分支,先重新执行分析,然后切换到重构后的分支查看效果。
另外这里推荐如Bumpy Road(嵌套过多)类型的问题,可以使用copilot协助解决,日常使用/test /explain /simplify 等基础指令就可以解决。如果有特殊需求还可以指定其对代码进行指导。
Virtual Code Review中的Complexity Trends可以观察相关代码文件的复杂度变化趋势,同时可以结合代码行数的增长进行分析
点击图像上的某个转折点,可以具体查看做了哪些commit如图发现是因为升级dal组建点时候移除了一部分无用的代码,导致复杂度降低。
点击dashboard上的Explore codebase或者左侧菜单栏选择code可以对代码的整体热点,整体健康程度等进行查看
点击code下的Performed refactorings和 Code Health decline ,还可以选择查看最近的提交哪些提升了健康指数,哪些降低了。
如图的方法对一个复杂循环进行了重构,会提示解决了Bumpy Road问题
Knowledge Distribution 板块
Knowledge Distribution板块主要是提供开发团队TO了解目前代码仓库中的逻辑,业务知识分布是否健康,是否存在如下不健康的一些情况
1、Knowledge Islands: 相关的代码长期都是由一个人维护,如果该人员流失可能会有潜在的风险
2、Knowledge Loss: 相关的代码大部分是由之前的开发人员维护,后续如果需要改动这部分代码会有潜在的风险
3、High Coordination Needs: 相关的代码频繁的由多个人员改动,可能存在较多的Merge Conflict和职责不清晰的问题
下图中,蓝色部分表示大部分代码都是由当前的开发人员维护,红色部分表示大部分是由前开发人员维护下图中,蓝色部分表示大部分代码都是由当前的开发人员维护,红色部分表示大部分是由前开发人员维护
下图中,可以观察到黄色的圆圈代表的是知识孤岛
选择左侧Simulations(模拟)功能: Off-boarding Simulation。这个功能可以模拟当团队中某一个开发人员离职或者转岗后,会对团队开发工作的哪些代码部分造成影响,下图是模拟了当团队一位开发人员离开后影响的情况,图中红色部分是我们需要关注的内容,所涉及的相关代码需要进行交接
Team-Code Alignment 板块
这部分主要是根据Conway's Law作为指导原则,尝试发现多个团队工作在同一代码仓库且有互相依赖的问题。缩放该图片可以查看开发团队之间每个开发的依赖性。