hengheng123456789

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  297 Posts :: 68 Stories :: 144 Comments :: 0 Trackbacks
我们在开发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
Analyzing code using JDepend Analysis

于是会出现如下分析结果
Package dependencies for project within Eclipse

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"/>
posted on 2007-01-30 10:08 哼哼 阅读(5253) 评论(2)  编辑  收藏 所属分类: JAVA-Eclipse

Feedback

# re: 提高代码质量的Eclipse插件之JDepend 2007-01-30 12:43 交口称赞
这个是好东西啊,
呵呵
  回复  更多评论
  

# re: 提高代码质量的Eclipse插件之JDepend 2007-01-30 13:34 交口称赞
相关工具的eclipse插件下载地址:
http://www.blogjava.net/vip01/archive/2007/01/30/96708.html  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: