2010-01-12 63 views
23

我一直在嘗試NDepend,一直在閱讀一些關於它的博客文章,甚至聽過播客。我認爲NDepend可能是一個非常有用的工具,但我仍然不知道我會在哪裏使用它。你使用NDepend嗎?

你如何使用它?你用它,爲什麼?爲什麼不?

我想聽聽一些腳踏實地的真實世界的例子。

+1

您可能需要添加一些標籤(例如平臺/語言/技術NDepend的是)的問題對人們的「最愛」的標籤出現。 – 2010-01-12 15:06:13

回答

28

我在過去幾年中廣泛使用了NDepend。基本上它是一個依賴分析工具,所以這可以幫助你解決很多與依賴相關的問題。

我使用它的一個主要事情是檢查我的程序集,類型和方法之間的依賴關係。這有助於我瞭解類型之間的耦合是否失控,並幫助我發現重構機會。

當開始大規模的重構時,提取.movi​​ng類型到其他程序集,這可以讓你看到什麼取決於什麼,所以你不必做舊的「將我的類型移動到另一個程序集,然後嘗試編譯並查看什麼是中斷點」。NDepend也有一個用於查看這類信息的良好視覺矩陣。

此外,它還有一個奇妙的查詢語言CQL,它允許您編寫自定義查詢。這些可以是簡單的事情,例如「顯示所有調用此方法的方法」,查詢以突出顯示死代碼,查詢環狀複雜性,耦合等等,以及更多。

反過來,它可以集成到構建過程中,因此您可以基於CQL查詢構建警告/失敗,例如「如果一個方法有超過100行代碼但沒有註釋,則構建失敗」(這是一個例子 - 我不建議這個特定的度量標準是一件好事)。

它還可以導入代碼覆蓋率數據,併爲您提供幾乎沒有代碼覆蓋的區域的可視化表示,以及允許您針對代碼覆蓋率信息運行CQL查詢(例如,向我展示代碼覆蓋率小於70%的方法)

您也可以加載當前構建你的項目,和以前的版本,並運行它們之間的查詢,如「顯示我的所有類型有< 70%的代碼覆蓋率」 - 這可以幫助您介紹更嚴格的規則在現有的代碼庫上。

這是一個神奇的工具,並不太難學。一開始就很可怕,只是因爲它提供的信息量很大,但強烈建議。

+2

+1您點擊使用該工具的所有要點。我將補充一點,依賴關係圖對於代碼結構的高級視圖非常有用。 – 2010-01-18 21:42:54

4

我發現可視化組件版本之間的變化很有用。即使對於給定版本中的更改快照...

我認爲它可以在持續集成環境中發光,您可以設置CQL查詢來測量您感興趣的代碼度量(Cyclomatic Complexity,Long Methods等。),然後你可以衡量你在這些領域的進步。

4

其實這個工具是有幫助的,如果你有,例如,由另一個由不同的人/供應商開發的應用程序的另一部分使用的接口。每次你想改變界面,你都必須找出誰在使用你的界面,以避免破壞它的代碼(彙編不會被編譯) 這適用於更大的項目。

8

我也覺得理解複雜的方法調用的結構非常寶貴的。例如,我可以使用特定方法或字段傳遞調用所有方法,並且可以查看是否存在循環調用可能存在的問題或不需要的依賴關係,或者路徑是否比所需的更復雜等。

依賴關係圖現在也是交互式的,所以我可以刪除我目前不感興趣的方法,並且移動其他方法以便對發生的事情進行良好的可視化。

2

這個工具是有用的,當你的應用程序組件的數量巨大。 它幫助我找到了釋放

2

之間的代碼依賴關係和以及我還使用NDepend的比較一些組件的兩個版本的變化。 NDepend具有這個卓越的功能。這讓我可以查看彙編中的更改和工作進度,添加的方法,刪除的方法等等。