首页 > 其他分享 >Eclipse插件之JDepend(分析代码依赖关系)

Eclipse插件之JDepend(分析代码依赖关系)

时间:2024-08-10 22:57:25浏览次数:15  
标签:AC 依赖 JDepend Eclipse 插件 或类

JDepend - 分析Java项目的包依赖关系

Eclipse JDepend插件是一个专为Eclipse IDE设计的工具,用于分析Java项目的包依赖关系,从而帮助开发者评估代码的可扩展性、可重用性和可维护性。

  • 功能定位:JDepend是一个开源工具,通过为包依赖项提供面向对象的度量值,来指明代码库的弹性,即测量一个架构的健壮性或脆弱性。
  • 适用场景:在Java项目开发过程中,特别是在架构更改或代码重构时,JDepend插件能够帮助开发者跟踪每个包的依赖性,从而设计高维护性的架构。

安装方式

方法1 : 直接下载包含JDepend 插件的Eclipse

直接下载包含Java Dependency Viewer 插件的Eclipse , 下载完成后启动Eclipse 就可以使用。
下载地址:
https://download.csdn.net/download/oscar999/89621930

方法2 在线安装

进入Eclipse 的插件市场: https://marketplace.eclipse.org/content/jdepend4eclipse, 将 Install 按钮直接拖到Eclipse中就可以安装了。
在这里插入图片描述

方法3 在线安装

在Eclipse中在线安装JDepend插件的步骤如下:

  1. 打开Eclipse,选择“Help”菜单下的“Install New Software”选项。
  2. 点击“Add”按钮,添加新的软件仓库。在“Name”字段中输入“JDepend”,在“Location”字段中输入插件的下载地址,如http://andrei.gmxhome.de/eclipse/(注意:此地址可能随时间变化,请以官方或最新信息为准)。
  3. 点击“OK”按钮,Eclipse将连接到指定的仓库并列出可用的插件。
  4. 选择JDepend插件,然后点击“Next”按照向导完成安装过程。

方法3:下载插件包复制到 features 和 plugins 目录

下载包含 features 和 plugins的插件的压缩包, 解压之后将 features 和 plugins 目录复制到本地Eclipse 安装路径对应的目录中,压缩包下载地址:https://download.csdn.net/download/oscar999/89628376

使用方法

使用JDepend插件分析源代码的步骤如下:

  1. 在Eclipse中打开需要分析的Java项目。

  2. 右键点击包含源代码的源文件夹或包,选择“Run JDepend Analysis”选项。
    在这里插入图片描述

  3. 等待分析完成,Eclipse将显示分析结果。分析结果通常包括以下几个关键指标:
    在这里插入图片描述

以下是JDepend中CC、AC、Ca、Ce、A、I、D、Cycle指标的详细介绍:

  1. Cyclomatic Complexity (CC)

定义:衡量代码复杂性的指标。

描述:Cyclomatic Complexity是衡量程序控制流复杂性的一个指标,由Thomas J. McCabe, Sr.提出。在JDepend的上下文中,虽然它可能不是直接由JDepend计算的核心指标之一,但它是评估代码质量时常用的一个复杂性度量。数值越高,表示代码越复杂,理解和维护的难度也越大。

注意:并非所有JDepend的描述中都明确提及CC,但它是软件开发中广泛使用的复杂性度量标准。

  1. Afferent Couplings (AC)

定义:向心耦合。

描述:表示有多少其他包(或类)依赖于当前包(或类)。即依赖该包(或类)的外部包(或类)的数目。AC值越大,说明该包(或类)的担当的职责越大,也就越稳定。高AC值可能表示该类或包是核心组件,但需要小心维护以保持其稳定性。

  1. Ca(等同于AC)

定义:向心耦合(与AC相同)。

描述:在某些上下文中,Ca被用作Afferent Couplings的缩写,与AC含义相同。

  1. Efferent Couplings (EC) 或 Ce

定义:离心耦合。

描述:表示当前包(或类)对外部包(或类)的依赖数量。即被该包(或类)依赖的外部包(或类)的数目。EC(或Ce)值越大,说明该包(或类)越不独立(因为依赖了别的包),也越不稳定。高EC值可能表示该类或包与其他部分紧密耦合,可能导致维护困难。

  1. Abstractness (A)

定义:包的抽象度。

描述:指一个包内包含的抽象类或接口占整个包中的类的比重。该值处于0,1之间,若A=0,说明包内不包含任何抽象类或接口;若A=1,说明包内全部是抽象类或接口。包的抽象度与稳定性之间的关系密切相关,一般来说,抽象度高的包更稳定。

  1. Instability (I)

定义:衡量一个包(或类)的不稳定程度。

描述:计算公式为I=Ce/(Ce+Ca),其中Ce表示离心耦合,Ca表示向心耦合。I的值处于[0,1]之间,I=0时说明包是最稳定的,反之I=1则说明包极不稳定。不稳定性高的包更容易发生变化,因为它们高度依赖于其他包(或类)。

  1. Distance from the Main Sequence (D)

定义:评估包在设计上的健康度。

描述:该指标主要用来评价包的抽象程度与稳定程度的平衡关系。它可以用二维直线图A + I = 1来表示,D=abs((A + I) - 1),也就是说D为一个包的抽象度+包的不稳定程度-1的绝对值。D=0表示包的抽象程度与稳定程度是平衡的,是理想的设计状态;D=1则表示包的平衡程度被严重破坏。

  1. Cycle(循环依赖)

定义:包的循环依赖度。

描述:面向对象的设计原则之一是无环依赖原则(The Acyclic Dependencies Principle, ADP),它要求包之间不能有循环依赖关系。JDepend可以帮助识别出这些循环依赖,从而帮助开发者优化项目结构,避免潜在的维护问题。

如果存在循环依赖,这里就会给出警告

在这里插入图片描述

Metrics 图

Metrics图通常包含以下几个部分:

  1. 包依赖关系图:以图形的形式展示项目中各个包之间的依赖关系。包之间的依赖通过箭头表示,箭头从依赖方指向被依赖方。

  2. 度量指标表:列出各个包的定量度量指标,如抽象度(A)、不稳定度(I)、与主序列的距离(D)、向心耦合(AC)和离心耦合(EC)等。

如何解读Metrics图

  1. 观察包依赖关系
    • 识别关键包:观察哪些包被大量其他包所依赖(高AC值),这些包往往是项目的核心组件。
    • 检查循环依赖:注意是否存在包之间的循环依赖关系,循环依赖是设计上的不良实践,应尽量避免。
  2. 分析度量指标
    • 抽象度(A):高抽象度(接近1)的包通常包含大量抽象类或接口,表明该包的设计具有较高的灵活性和可扩展性。
    • 不稳定度(I):不稳定度(接近1)高的包可能经常发生变化,需要谨慎处理。同时,也要注意不稳定度低(接近0)但抽象度也低的包,这些包可能过于具体且难以复用。
    • 与主序列的距离(D):D值越接近0,表示包的抽象度和不稳定度之间的平衡越好。D值较大可能意味着包的设计存在问题,需要进一步优化。
    • 向心耦合(AC)和离心耦合(EC):高AC值表示包被其他包广泛依赖,是项目的关键部分;高EC值表示包依赖于大量其他包,可能增加了维护的复杂性和风险。
  3. 识别问题区域
    • 高不稳定度且高抽象度的包可能是项目中的“热点”,需要特别关注其设计和实现。
    • 存在循环依赖的包需要评估其必要性,并考虑重构以消除循环依赖。
    • 离心耦合高的包可能需要减少其对外部包的依赖,以提高其独立性和可维护性。
  4. 制定改进计划
    • 根据Metrics图的分析结果,制定针对性的改进计划。例如,重构高不稳定度的包以降低其变化频率;优化循环依赖以改善项目结构;减少离心耦合以提高包的独立性等。

JDepend优势与应用

  • 优势
    • 自动化分析:自动遍历Java代码目录,生成每个Package的依赖性度量。
    • 实时监控:在编码过程中即可看到依赖关系的变化,有助于及时调整架构。
    • 提高代码质量:通过度量指标评估代码的可维护性,帮助开发者改进代码质量。
  • 应用
    • 适用于大型Java项目,特别是在项目重构或版本升级时。
    • 可用于并行开发和极限编程环境,支持团队协作和代码共享。

参考



标签:AC,依赖,JDepend,Eclipse,插件,或类
From: https://blog.csdn.net/oscar999/article/details/141097955

相关文章

  • 插件管理系统设计
    插件管理系统设计前言插件管理系统开发插件管理系统框图插件列表插件自定义UI第1部分UI:为分散嵌入各主界面的UI窗体;第2部分UI:选择某一插件时出现的设置UI界面;插件安装插件卸载插件的配置插件维护内部开发外部开发总结前言在谈插件前......
  • pinia-plugin-persistedstate 插件不生效
    引入使用该插件使用时发现不生效原因:pinia实例调用顺序不当将://import'./assets/main.css'import{createApp}from'vue'import{createPinia}from'pinia'importpiniaPluginPersistedstatefrom'pinia-plugin-persistedstate'importAppfr......
  • 开源图片编辑器的插件化架构
    大家好,我是开源图片编辑器的作者,在开发图片编辑器的过程中,因为一些功能无法扩展,出现过一次较大的重构,将整个编辑器改为了插件化的架构,经历过这次重构,规范了编辑器功能的扩展方式,解决了项目里很多重要的问题。如果你也在做类似的项目,或者对图片编辑器架构比较感兴趣,希望我的经验能......
  • 『SD』Stable Diffusion WebUI 安装插件(以汉化为例)
    前言本文简介StableDiffusionWebUI是允许用户自行安装插件的,插件的种类有很多,有将页面翻译成中文的插件,也有提示词补全插件,也有精细控制出图的插件。以汉化为例,StableDiffusionWebUI默认是英文的,我们只需装个汉化插件然后重启一下项目就能把页面变成中文了。安装......
  • 谷粒商城实战笔记-145-性能压测-性能监控-jvisualvm使用-解决插件不能安装
    文章目录jvisualvm的作用安装查看gc相关信息的插件解决jvisualvm不能正常安装插件的问题1,查看java版本2,打开网址3,修改jvisualvm的设置jvisualvm的作用JVisualVM是一个集成在JavaDevelopmentKit(JDK)中的多功能工具,它提供了一种可视化的方式来监控和分析Java应用......
  • Cacti安装插件之thold
    Cacti安装插件之thold 基本环境os:rhel5.5i386rpm:lampcacti:0.8.8arrdtool:1.4.5 1,安装settings插件#wgethttp://docs.cacti.net/_media/plugin:settings-v0.7-1.tgz#mvplugin\:settings-v0.7-1.tgzsettings-v0.7-1.tgz#tar zxvfsettings-v0.7-1.tgz-......
  • 【VSCode】《VSCode安装本地历史记录插件并配置搜索忽略》
    前言VSCode本地会记录修改和保存的历史文件信息,当没有使用git管理的时候,就可以通过本地历史搜索快速比对还原历史代码。插件安装目前最新版本停留在1.8.1更新时间为2020/3/4号;估计作者后续也没有更新计划了。安装后会在左下角和左上角出现LOCALHISTORY和./history两个......
  • edge浏览器加载java插件的方法
    在MicrosoftEdge浏览器中直接加载Java插件并不是一个直接支持的功能,因为Edge是基于Chromium内核的浏览器,主要支持Web技术如HTML、CSS和JavaScript。Java插件(通常指的是Java小程序,使用Java编程语言编写的应用程序)主要用于在早期的InternetExplorer浏览器中运行,但在现代浏览器中已......
  • ComfyUI插件:ComfyUI_Noise节点
    前言:学习ComfyUI是一场持久战,ComfyUI_Noise是对ComfyUI中的噪声进行控制的一个插件库,该库可以完成图像噪声的反推,并通过采样再以几乎无损的方式返回原图,通过该库的使用可以更好的帮助图像恢复原始的相貌,非常适合在生成视频领域用作人物转绘使用。祝大家学习顺利,早日成为ComfyUI的......
  • gradle 插件版本 4.2.2对应gradle 发行版本以及支持的 kotlin版本
    gradle插件版本4.2.2对应gradle发行版本以及支持的kotlin版本如下:项目build.gradle文件中:buildscript{dependencies{classpath"com.android.tools.build:gradle:4.2.2"classpath'org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.20'}}gradle......