java复杂性_如何衡量C或Java文件的复杂性?
我想開(kāi)始測(cè)量Michael Feathers所稱(chēng)的代碼紊亂,即
churn vs. complexity.
為此,我需要測(cè)量C或Java文件的復(fù)雜性.所以我發(fā)現(xiàn)了一些測(cè)量圈復(fù)雜度(CC)的工具.它們各自在功能或方法級(jí)別上很好地測(cè)量CC.但是,我需要一個(gè)文件級(jí)別的度量標(biāo)準(zhǔn),并且它們?cè)谀抢镒龅貌缓?一個(gè)工具只返回文件中所有方法復(fù)雜度的平均值,另一個(gè)工具將整個(gè)文件視為一個(gè)巨大的方法,即它計(jì)算整個(gè)文件中的所有決策點(diǎn).
所以我做了一些研究,發(fā)現(xiàn)McCabe僅在模塊方面定義CC – 并且它們將模塊定義為函數(shù) – 而不是文件(參見(jiàn)this presentation的幻燈片20和30).而且我認(rèn)為這是有道理的.
所以現(xiàn)在我只想弄清楚如何表示文件的復(fù)雜性.我的想法是我應(yīng)該使用該文件的最大方法CC.
有關(guān)該方法或任何其他建議的任何想法?
謝謝!
肯
最佳答案 幾年前我有同樣的問(wèn)題.我用以下方式回答了它并且它完美地起作用并且對(duì)我有用:
最小化復(fù)雜性的目的是提高可維護(hù)性.循環(huán)復(fù)雜性是邏輯復(fù)雜性的指標(biāo),你是對(duì)的 – 它適用于最小的“單位”,即功能.可以推導(dǎo)出“總結(jié)”指標(biāo),例如總計(jì)/最大/最小/等,但是當(dāng)涉及圈復(fù)雜度時(shí),它們很少顯示有用的東西.我嘗試使用’summary’指標(biāo)來(lái)比較2個(gè)代碼庫(kù),但得出的結(jié)論是,只有圈復(fù)雜度的分布圖才真正有用.
那么,什么可以用于表示更大單位/抽象級(jí)別(如文件/組件/子系統(tǒng))的可維護(hù)性級(jí)別?我發(fā)現(xiàn)第一個(gè)指標(biāo)是代碼行中單位的大小.如果限制文件的大小(如1000行)并限制文件中每個(gè)函數(shù)的圈復(fù)雜度,則會(huì)有相對(duì)“簡(jiǎn)單”的文件,因?yàn)樗昂苄 辈⑶抑话昂?jiǎn)單”函數(shù).您可以包含或排除注釋/空白行或僅計(jì)算語(yǔ)句或僅計(jì)算可執(zhí)行行…
但是,我的結(jié)論是,在這個(gè)特定的應(yīng)用程序中并不重要.只是限制一些“大小”指標(biāo),它在大多數(shù)情況下都可以達(dá)到目的.稍后您可以考慮限制每個(gè)組件/子系統(tǒng)的代碼行總數(shù).它將具有相同的效果 – 組件“簡(jiǎn)單”,因?yàn)樗靶 睌?shù)量的“簡(jiǎn)單”文件.
你提到的帖子非常好.它可以擴(kuò)展到更廣泛的度量,通常被稱(chēng)為“可維護(hù)性指數(shù)”.如果函數(shù)很復(fù)雜,文件很大并且頻繁更改,測(cè)試覆蓋率很小等等(在此處添加您認(rèn)為定義的可維護(hù)性),索引非常高.我知道,這是找到重新分解熱點(diǎn)的最好方法……
免責(zé)聲明:我正在尋找執(zhí)行用例場(chǎng)景的Metrix++工具,我在上面解釋過(guò).
總結(jié)
以上是生活随笔為你收集整理的java复杂性_如何衡量C或Java文件的复杂性?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 归并排序改良 java_Java 八种排
- 下一篇: 我的世界boat运行库JAVA10_我的