jev

   JDepend(http://www.clarkware.com/software/JDepend.html )是代码质量评价工具。遍历所有类生成每个包的依赖程度,稳定性,可靠度等报告。
    重点在三个方面: extensibility可扩展, reusability可重用, maintainability可维护。

主要根据Robert C. Martin氏提出的面向对象设计原则,JDepend生成的Java包的质量评价报告主要包括:
   Number of Classes and Interfaces :实现类与抽象接口的数目。The Stable Abstractions Principle (SAP):稳定抽象等价原则 指出了包的稳定程度与它的抽象程度(接口的数目)成正比,也就是说,一个包内包含的接口所占的比重越大,这个包就越稳定。
    Abstractness (A) :包的抽象度。指一个包内包含的抽象类或接口占整个包中的类的比重。该值处于0,1之间,若A=0,说明包内不包含任何抽象类或接口;若A=1,说明包内全部是抽象类或接口。包的抽象度与稳定性之间的关系上面已经作了说明。
    Afferent Couplings (Ca) :向心耦合。依赖该包(包含的类)的外部包(类)的数目,该数值越大,说明该包的担当的职责越大,也就越稳定。
    Efferent Couplings (Ce) :离心耦合。被该包依赖的外部包的数目,该数值越大,说明该包越不独立(因为依赖了别的包),也越不稳定。
    Instability (I) :衡量一个包的不稳定程度。I=Ce/(Ce+Ca)。(见我前面的博客(面向对象:稳定依赖原则(SDP) ))
    Distance from the Main Sequence (D) :该指标主要用来评价包的抽象程度与稳定程度的平衡关系,它可以用二维直线图 A + I = 1 来表示。D=abs((A + I) - 1),也就是说D为 一个包的抽象度 + 包的不稳定程度 - 1  的绝对值。一个理想的包是:完全抽象的(A=1),非常稳定的(I=0),这时D=0;或者是:完全具体类构成的包(A=0),非常不稳定的(I=1),这时同样也有D=0。D=0说明包的抽象程度与稳定程度是平衡的,反之D=1说明包的平衡程度被严重破坏。
    Package Dependency Cycles :包的循环依赖度。The Acyclic Dependencies Principle (ADP) - OO设计的无环依赖原则 要求包之间不能有循环依赖关系。

   安装官方网站的做法感觉有点麻烦,作为eclipse的插件来使用比较方便。下载地址(http://andrei.gmxhome.de/jdepend4eclipse/links.html )。
   下载后把jar文件放到eclipse的plugins目录下,重启eclipse。然后在工程中选择要出报告的包或者这个src文件夹,然后点击右键,然后点击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最大程度地偏离了理想标准。
即你的包要么全是接口,不调用任何其他包(完全是抽象类和稳定),要么是具体类,不被任何其他包调用。


你可能感兴趣的:(JE)