<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說的:無法控制的東西就不能管理,無法測量的東西就無法控制。
    軟件的度量對于設計者和開發者非常重要,之前只是對這些有一個簡單的了解。今天看來,了解的還遠遠不夠。
    • Cyclomatic Complexity (圈復雜性)
    • Response for Class (類的響應)
    • Weighted methods per class (每個類重量方法)
    一個系統中的所有類的這三個度量能夠說明這個系統的設計上的一些問題(不是全部),這三個度量越大越不好。
    如果一個類這三個度量很高,證明了這個類需要重構了。

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

    CC Value

    Risk

    1-10

    Low risk program

    11-20

    Moderate risk

    21-50

    High risk

    >50

    Most complex and highly unstable method


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

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

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

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

    • Afferent Couplings (Ca)
    依賴于被分析package的其他package的數量,用于衡量pacakge的職責。
    • Efferent Couplings (Ce)
    被分析package的類所依賴的其他package的數量,用于衡量package的獨立性。
    • Abstractness (A)
    被分析package中的抽象類和接口與所在package所有類數量的比例,取值范圍為0-1。
    A=Cc/N
    • Instability (I)
    用于衡量package的不穩定性,取值范圍為0-1。I=0表示最穩定,I=1表示最不穩定。
    I=Ce/(Ce+Ca)
    • Distance (D)
    ??? ??? ? 被分析package和理想曲線A+I=1的垂直距離,用于衡量package在穩定性和抽象性之間的平衡。理想??? ??? ? 的package要么完全是抽象類和穩定(x=0,y=1),要么完全是具體類和不穩定(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數值的減少來體現,反之就可以認為是設計和架構的退化。


    讀過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,依據是公式(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的參數和Uncle Bob的《
    Agile Software Development: Principles, Patterns, and Practices(敏捷軟件開發:原則、模式與實踐)
    posted on 2006-06-07 10:52 混沌中立 閱讀(1511) 評論(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永久无码久久| 亚洲精品乱码久久久久久中文字幕| 亚洲综合在线观看视频| 久久一区二区三区免费| 久久亚洲国产精品五月天婷| 成年网站免费入口在线观看| 亚洲高清无码专区视频| 一级毛片无遮挡免费全部| 亚洲人成网站观看在线播放| 精品一区二区三区免费毛片| 国产大片91精品免费观看男同| 国产亚洲欧美在线观看| 亚洲精品一级无码中文字幕| 9久久免费国产精品特黄| 亚洲精品午夜国产VA久久成人| 华人在线精品免费观看| 久久亚洲国产精品成人AV秋霞| 成人免费AA片在线观看| 亚洲色中文字幕在线播放| 免费国产美女爽到喷出水来视频| 免费一级毛suv好看的国产网站| 国产亚洲欧洲Aⅴ综合一区 | 精品免费AV一区二区三区| 免费一级毛片在级播放| 国产精品青草视频免费播放| 亚洲福利视频一区| 国产免费不卡v片在线观看| 羞羞漫画在线成人漫画阅读免费 | 亚洲区日韩精品中文字幕| 午夜国产大片免费观看| 中文字幕免费在线看| 亚洲综合一区二区精品久久| 国产麻豆剧传媒精品国产免费 | 99久久人妻精品免费二区| 亚洲精品GV天堂无码男同| 精品亚洲视频在线观看| 亚洲一级毛片免费在线观看| 在线观看亚洲网站| 亚洲邪恶天堂影院在线观看| 免费被黄网站在观看| 精品成人免费自拍视频|