<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-14  評論-25  文章-1  trackbacks-0
    如同Tom DeMacro說的:無法控制的東西就不能管理,無法測量的東西就無法控制。
    軟件的度量對于設計者和開發(fā)者非常重要,之前只是對這些有一個簡單的了解。今天看來,了解的還遠遠不夠。
    • Cyclomatic Complexity (圈復雜性)
    • Response for Class (類的響應)
    • Weighted methods per class (每個類重量方法)
    一個系統(tǒng)中的所有類的這三個度量能夠說明這個系統(tǒng)的設計上的一些問題(不是全部),這三個度量越大越不好。
    如果一個類這三個度量很高,證明了這個類需要重構了。

    以第一個度量來說,有下面的一個表格:

    CC Value

    Risk

    1-10

    Low risk program

    11-20

    Moderate risk

    21-50

    High risk

    >50

    Most complex and highly unstable method


    CC數(shù)值高,可以通過減少if else(switch case也算)判斷來達到目的;
    可以通過減少類與其他類的調用來減少RFC;
    通過分割大方法和大類來達到減少WMPC.

    而Uncle Bob和Jdepend的度量標準應該算是另一個度量系統(tǒng)。

    • 關系內聚性(H)
    用包中的每個類平均的內部關系數(shù)目作為包內聚性的一種表示方式。用于表示包和它的所有類之間的關系。
    H=(R+1)/N
    R:包內類的關系數(shù)目(與包外部的類沒有關系)
    N:包內類的數(shù)量

    • Number of Classes (Cc)
    被分析package的具體和抽象類(和接口)的數(shù)量,用于衡量package的可擴展性。

    • Afferent Couplings (Ca)
    依賴于被分析package的其他package的數(shù)量,用于衡量pacakge的職責。
    • Efferent Couplings (Ce)
    被分析package的類所依賴的其他package的數(shù)量,用于衡量package的獨立性。
    • Abstractness (A)
    被分析package中的抽象類和接口與所在package所有類數(shù)量的比例,取值范圍為0-1。
    A=Cc/N
    • Instability (I)
    用于衡量package的不穩(wěn)定性,取值范圍為0-1。I=0表示最穩(wěn)定,I=1表示最不穩(wěn)定。
    I=Ce/(Ce+Ca)
    • Distance (D)
    ??? ??? ? 被分析package和理想曲線A+I=1的垂直距離,用于衡量package在穩(wěn)定性和抽象性之間的平衡。理想??? ??? ? 的package要么完全是抽象類和穩(wěn)定(x=0,y=1),要么完全是具體類和不穩(wěn)定(x=1,y=0)。
    ??? ??? ? 取值范圍為0-1,D=0表示完全符合理想標準,D=1表示package最大程度地偏離了理想標準。
    ??? ?? ?? D = |A+I-1|/0.70710678
    ??? ?? ?? 注:0.70710678*0.70710678 =2,既為“根號2“

    我認為D是一個綜合的度量,架構和設計的改善可以通過D數(shù)值的減少來體現(xiàn),反之就可以認為是設計和架構的退化。


    讀過http://javaboutique.internet.com/tutorials/metrics/index.html之后的一些想法

    另一篇中文的內容相近的文章可以參考http://www.jdon.com/artichect/coupling.htm

    不過第二篇的中文文章中間關于Cyclomatic Complexity,有一個情況遺漏了
    public void findApplications(String id, String name){

    if(id!=null && name!=null) {
    //do something
    }else{
    //do something
    }
    }
    這種情況的CC不是2+1,而是2+1+1,依據(jù)是公式(1)。公式(2)應該是公式(1)的簡化版。
    Cyclomatic ComplexityCC) = no of decision points + no of logical operations +1        (1)

    Cyclomatic Complexity (CC) = number of decision points +1 (2)

    參考了JDepend的參數(shù)和Uncle Bob的《
    Agile Software Development: Principles, Patterns, and Practices(敏捷軟件開發(fā):原則、模式與實踐)
    posted on 2006-06-07 10:52 混沌中立 閱讀(1512) 評論(3)  編輯  收藏 所屬分類: 非技術

    評論:
    # re: OO設計中的度量 2006-06-07 18:29 | bayers
    有沒有直接計算的工具?  回復  更多評論
      
    # re: OO設計中的度量 2006-06-08 11:18 | BlueDavy
    Together or maven site goal  回復  更多評論
      
    # re: OO設計中的度量 2006-06-09 09:12 | 混沌中立
    eclipse+JDepend4Eclipse

    就可以了  回復  更多評論
      
    主站蜘蛛池模板: 老牛精品亚洲成av人片| 免费日本一区二区| 成年女人毛片免费视频| 亚洲av日韩av综合| 亚洲黄色免费电影| 亚洲成人福利在线| 五月婷婷综合免费| 亚洲精品无码国产片| 色播在线永久免费视频| 最新亚洲卡一卡二卡三新区| 成年男女男精品免费视频网站| 中文有码亚洲制服av片| 国产色婷婷精品免费视频| 午夜亚洲乱码伦小说区69堂| 国产麻豆剧传媒精品国产免费| 国产成人亚洲精品蜜芽影院| 亚洲一区二区三区在线视频| 国产精品99爱免费视频| 亚洲av无码一区二区三区不卡 | 亚洲精品无码久久久久APP | 四虎成人免费网址在线| 亚洲乱理伦片在线观看中字| 国产三级免费观看| 99久久99这里只有免费的精品| 亚洲国产a∨无码中文777| 免费无遮挡无码永久视频| 亚洲人成免费网站| 国产精品无码一二区免费| 一区二区免费电影| 亚洲国产人成在线观看69网站| 黄色片在线免费观看| 最新亚洲人成网站在线观看| 亚洲最大激情中文字幕| 4虎1515hh永久免费| 美女被吸屁股免费网站| 亚洲欧洲∨国产一区二区三区 | 无码国产精品一区二区免费3p| 涩涩色中文综合亚洲| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 国产成人免费全部网站| 在线观看片免费人成视频播放|