zoukankan      html  css  js  c++  java
  • 提高代码质量的Eclipse插件之JDepend


    2007-01-30 
     
    我们在开发Java项目时经常会遇到关于包混乱的问题,特别是在架构更改后,这样的问题尤为突出,JDepend工具可以帮助你在开发过程中随时跟踪每个包的依赖性(引用/被引用),从而设计高维护性的架构,不论是在打包发布还是版本升级都会更加轻松。
    本文引自http://starrynight.blogdriver.com/starrynight/606590.html,并增加了些自己的见解,感谢starrynight
     
    JDepend是一个开源的工具,并配有Eclipse插件,在实际应用中,JDepend遍历所有的Java代码目录,自动生成每个Package的依赖性度量。对于可扩展性、可重用性和可管理性,JDepend可自动度量一个设计在以上三个方面的质量。
     
    Eclipse插件的下载地址为:http://andrei.gmxhome.de/eclipse/
     
    运行方法是右键选择需要分析的包,选择 Run JDepend Analysis
     
    于是会出现如下分析结果
     
    JDepend为每个Package自动生成的依赖性度量指标,包括:
    Number of Classes (Cc)
    被分析package的具体和抽象类(和接口)的数量,用于衡量package的可扩展性。
    如果一个类中实现了其他类,如实现了监听类,则监听类的数目也记录在此。
    例如:
        private IPartListener partListener = new IPartListener() {
            public void partActivated(IWorkbenchPart part) {
                if (part instanceof IEditorPart)
                    editorActivated((IEditorPart) part);
            }
            public void partBroughtToTop(IWorkbenchPart part) {
            }
            public void partClosed(IWorkbenchPart part) {
            }
            public void partDeactivated(IWorkbenchPart part) {
            }
            public void partOpened(IWorkbenchPart part) {
            }
        };
    Afferent Couplings (Ca)
    依赖于被分析package的其他package的数量,用于衡量pacakge的职责。
    即有多少包调用了它。
     
    Efferent Couplings (Ce)
    被分析package的类所依赖的其他package的数量,用于衡量package的独立性。
    即它调用了多少其他包。
    Abstractness (A)
    被分析package中的抽象类和接口与所在package所有类数量的比例,取值范围为0-1。
    Instability (I)
    I=Ce/(Ce+Ca),用于衡量package的不稳定性,取值范围为0-1。I=0表示最稳定,I=1表示最不稳定。
    即如果这个类不调用任何其他包,则它是最稳定的。
    Distance (D)
    被分析package和理想曲线A+I=1的垂直距离,用于衡量package在稳定性和抽象性之间的平衡。理想的package要么完全是抽象类和稳定(x=0,y=1),要么完全是具体类和不稳定(x=1,y=0)。
    取值范围为0-1,D=0表示完全符合理想标准,D=1表示package最大程度地偏离了理想标准。
    即你的包要么全是接口,不调用任何其他包(完全是抽象类和稳定),要么是具体类,不被任何其他包调用。
     
     
    为什么使用JDepend
    评价设计质量 
    翻转依赖性 
    支持并行开发和极限编程 
    独立的发布模块 
    识别package的循环依赖
     
     
    安装JDepend
     
    安装JDepend很简单,只需下载jdepend-.zip并解压缩,然后把jdepend-.jar加入系统类路径。
     
     
    和Ant集成
    设置JDepend报告目录
    <property name="jdepend.log.dir" value="${tomcat.home}/webapps/cruisecontrol/jdepend" />
    定义jdepend task
    <taskdef name="jdepend" classname="org.apache.tools.ant.taskdefs.optional.jdepend.JDependTask">
           <classpath refid="classpath.lib" />
    </taskdef>
    生成jdepend报告
    <target name="jdepend" depends="compile">
        <jdepend format="xml" outputfile="${jdepend.log.dir}/jdepend-report.xml">
            <exclude name="java.*"/>
            <exclude name="javax.*"/>
            <exclude name="org.*"/>
            <exclude name="junit.*"/>
            <exclude name="net.*"/>
            <exclude name="mx4j.*"/>
            <exclude name="com.anmeng.*"/>
            <exclude name="testdomain.*"/>
            <exclude name="thinlet.*"/>
            <exclude name="**/*Test*"/>
            <classpath refid="classpath.lib" />
            <classespath location="${classes.main}" />
        </jdepend>
        <style basedir="${jdepend.log.dir}" destdir="${jdepend.log.dir}"
                includes="jdepend-report.xml"
                style="${jdepend.log.dir}/jdepend.xsl">
            <classpath refid="ant.lib" />
        </style>
    </target>
     
    集成CruiseControl
    在CruiseControl的buildresults.jsp文件中加入:
    <cruisecontrol:xsl xslFile="/xsl/jdepend.xsl"/>
  • 相关阅读:
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第50章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第49章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第48章 读书笔记(待更新)
    Spring Boot 中使用 Quartz 实现任务调度
    实战 FastDFS Java 客户端上传文件
    分布式文件系统之 FastDFS
    Java 持久层框架之 MyBatis
    C语言实现贪吃蛇
    [转载]分享三篇非常好的学习心得
    selenium加载cookie报错问题:selenium.common.exceptions.InvalidCookieDomainException: Message: invalid cookie domain
  • 原文地址:https://www.cnblogs.com/huapox/p/3519914.html
Copyright © 2011-2022 走看看