<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 混沌中立 閱讀(1513) 評論(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

    就可以了  回復  更多評論
      
    主站蜘蛛池模板: 亚洲精品免费在线观看| 久久国产乱子精品免费女| 国产成人A在线观看视频免费 | 日韩精品免费一线在线观看| 无码永久免费AV网站| 亚洲欧洲另类春色校园网站| 24小时免费看片| 亚洲国产成人久久三区| 国产福利在线观看免费第一福利| 亚洲av日韩av无码av| 无码中文在线二区免费| 亚洲av无码一区二区三区天堂 | 免费a级毛片无码av| 老妇激情毛片免费| 在线观看永久免费| 亚洲午夜国产精品| 成人影片麻豆国产影片免费观看| 亚洲色无码专区一区| 国产免费资源高清小视频在线观看| 人禽伦免费交视频播放| 亚洲AV无码一区二区二三区入口 | 国产亚洲精品美女久久久| 久久这里只精品国产免费10| 亚洲精品成人久久| 精品国产免费一区二区| 和老外3p爽粗大免费视频| 亚洲一区精品中文字幕| 韩国免费一级成人毛片| 色费女人18女人毛片免费视频| 国产亚洲AV夜间福利香蕉149 | 成全在线观看免费观看大全 | 亚洲AV无码乱码在线观看富二代 | 久久99精品免费视频| 亚洲人精品亚洲人成在线| 国产精成人品日日拍夜夜免费| 亚洲一区二区三区高清视频| 在线播放免费播放av片| 国产又黄又爽又大的免费视频| 亚洲成电影在线观看青青| 亚洲国产高清在线一区二区三区 | 免费a级毛片无码a∨蜜芽试看|