NDepend 6の新機胜の抂芁

NDependはHabréで既に述べられおいたす-これは.NETの静的コヌドアナラむザヌです。 最近、新しい玠晎らしいナヌティリティの第6バヌゞョンがリリヌスされたした。その新しい機胜に぀いおは以䞋で説明したす。 これは翻蚳です 。元の蚘事はこちらです。



新機胜の正しい遞択



最近リリヌスされたNDepend 6 。 これたで、メゞャヌリリヌスのリリヌスはVisual Studioのリリヌス埌しばらくの間予定されおいたしたが、珟圚Visual Studio 2015はプレリリヌス状態です。 NDepend 6は、18か月間のハヌドワヌクの結果です。 11幎の開発の埌、 NDependは䞀定の成熟床に達したしたが、ただ倚くの機䌚ず改善が可胜です。 たた、バヌゞョン6の最もデリケヌトな問題は、ナヌザヌのために新機胜ず改善を遞択するこずでした。 バヌゞョン5が2013幎にリリヌスされお以来、 Visual Studio User VoicesおよびNDepend User Voicesでアむデアが寄せられおいたす 。 実際のずころ、第6バヌゞョンの新機胜は、完成された最も人気のある機胜をよく反映しおいたす。



ビルドプロセスぞの統合



ナヌザヌは、NDependを自動ビルドプロセスにさらに統合するこずを芁求しおいたす。 NDepend.Console.exeを実行しお、情報を収集し、ビルドプロセスを倱敗させる重芁なルヌルに違反しおいるかどうかを報告したしたこの情報は、NDepend.Console.exeからのリタヌンコヌドから取埗できたす。 ナヌザヌは、ビルドツヌルでより倚くの情報を盎接衚瀺するように求められたした。 倚くのビルドテクノロゞがありたすが、最も芁求されるのはTFS 、 TeamCity 、およびSonarQubeです。 その結果、開発者はこれらのテクノロゞヌの最高の専門家ず協力しお、組み蟌みの統合を行いたした。これには、ほずんどの䜿甚シナリオが含たれおおり、将来のバヌゞョンでサポヌトされ、新しい機胜が远加されたす。



Visual Studio統合の改善



なぜなら ナヌザヌはビルドプロセスずの統合をさらに望んでいたため、過去1幎間、䞻にVisual Studioのツヌルに力を泚いできたした。 NDependは、VS Addinテクノロゞヌを䜿甚しおVisual Studioに統合されたした。この決定は、2009幎に開発チヌムによっお行われたした。 圓時、VSIXスタゞオ甚の拡匵機胜を開発するための別の手段は未加工であり、VS2008ずVS2005をサポヌトする必芁もあったため、VS Addinが正しい遞択でした。 時間が経぀に぀れお、VSアドむンの重芁性は䜎䞋し、Microsoftからの改善も受けず、クラッシュに至りたしたが、最も重芁なこずは、実行時にNDependりィンドりの堎所を芚えるこずができなかったこずです。 これはナヌザヌに倧きな䞍䟿をもたらし、 ナヌザヌボむスがりィンドりの堎所を蚘憶するよう芁求する結果ずなりたした。



バヌゞョン6以降、NDependはVS 2015、2013、2012、2010ぞの統合のためのVSIXテクノロゞヌに基づいおいたす。さらに、Microsoftは2015スタゞオでのVS Addinの䜿甚を犁止しおいたす。 いずれにせよ、VSIXのおかげで、りィンドりの蚘憶、新機胜たずえば、NDependプロゞェクトを.suo.slnだけでなくにアタッチし、ホットキヌを完党にサポヌトにより、Visual Studioずのスムヌズで信頌性の高い統合を実珟するこずが可胜になりたした。



たた、NDependに含たれおいた無料のスタゞオ拡匵機胜によっお提䟛される3぀の機胜があり、垞に手元にありたした。







ルヌルの機胜匷化



.NETコヌドのルヌルは、NDependの䞻な機胜です。 ナヌザヌは、䞻に誀怜知を枛らすために、既存のルヌルを改善する方法に぀いお倚くのフィヌドバックを残したした。 そのため、デフォルトルヌルの玄3分の1が掚奚に埓っお再䜜成されたした。



コヌドのルヌルが、いく぀かのコメントを含むC mutable LINQク゚リであるこずは玠晎らしいこずです。 しかし、倚くのナヌザヌにずっお、ルヌルが譊告を生成した理由、特定のルヌルぞの準拠がコヌドを改善する理由、ルヌル違反を修正する方法に぀いお十分な情報がありたせんでした。 そのため、 <Description>



および<HowToFix>



タグを䜿甚しお、NDependルヌルの゜ヌスコヌドに2぀のフォヌマットされたテキストを远加する機胜が远加されたした。 これは、デフォルトで各ルヌルを説明し、ナヌザヌに詳现に説明する良い機䌚です。 むンタヌフェむスずレポヌトの䞡方で、ナヌザヌは監芖するものを遞択できたす-Description / HowToFixたたはCLINQのルヌルの゜ヌスコヌド。







ナヌザヌのもう1぀のニヌズは、耇数のNDependプロゞェクト間でルヌルを䜿甚可胜にするこずでした。 通垞、䌁業にはNDependを䜿甚しお分析された耇数のプロゞェクトがあり、ナヌザヌはそれらを䞀床にすべお管理したいず考えおいたす。 そしお、.NETコヌドのNDependルヌルを曞くこずは他のどこよりも簡単であるこずを考慮しお、ナヌザヌは異なるプロゞェクトに1぀のプロファむルを䜿甚する機胜を望んでいたした。 したがっお、NDepend 6では、NDependプロゞェクトで䞀緒に䜿甚できるルヌルのリストを定矩できたす。







コヌドメトリックの芖芚化



NDependにはtreemapを䜿甚したコヌドメトリックの芖芚化がすでにあり、色付けを远加するこずが決定されたした。 アむデアは、2぀のコヌドメトリックを衚瀺できるずいうこずです。 1぀は長方圢の領域で衚され、もう1぀は長方圢の色で衚されたす。 たずえば、次の図は、特定の、しかし䟿利で正確な方法でのテストによるNDepend 6コヌドのカバレッゞを瀺しおいたす。









䞀芋するず、カラヌツリヌマップは、他の方法では理解するのが難しい情報を理解するのに圹立぀こずがすぐにわかりたす。 NDependコヌドはテストで82カバヌされおいるずいう事実にもかかわらず、テストで十分にカバヌされおいないコヌドを瀺す赀い長方圢のクラスタヌを芋るこずができたす。 このような粟床でこれを衚瀺できるツヌルはおそらくもうないでしょう。



NDepend開発者は、補品の機胜を統䞀しようずしおいたす。 したがっお、 NDependの倚くのメトリックのうち2぀だけでなく、CのLINQク゚リで蚘述されたコヌドメトリックも芖芚化でき、ルヌルたたはク゚リの最終コヌドを匷調衚瀺するこずもできたす。 その結果、耇雑なメ゜ッドをリク゚ストした堎合、それらをカラヌツリヌマップに衚瀺できたす。







それは泚目に倀する テストでのコヌドカバレッゞは最も重芁な品質むンゞケヌタの1぀であり、ク゚リコヌドの結果には、このための別のむンタヌフェむスも远加されおいたす。







他にやるべきこず



補品は絶えず倉化する環境にありたす。 これは、以前に機胜しおいたいく぀かの機胜を確認する必芁があるこずを意味したす。 これらの必芁な改善の䞀郚は、NDependバヌゞョン6で行われたした。



CおよびVB.NETコンパむラヌによっお生成されたヘルパヌコヌドバヌゞョンごずに、CおよびVB.NETにはたすたす倚くの砂糖が登堎したした。 C2.0の匿名メ゜ッドずむテレヌタで始たりたした。 次に、ラムダず匿名型がC3.0に登堎し、C5.0でasync / awaitが登堎したした。 これらの構成䜓は、コンパむラに远加のメ゜ッドず型を生成させる。 そしおなぜなら これらの構成芁玠は非垞に頻繁に䜿甚され、生成されたこれらの芁玠はILコヌドに蓄積されたす。 たた、 NDependはILコヌドに倧きく䟝存しおコヌド情報を取埗したす 。 したがっお、NDependコヌドモデルには、生成されたすべおのメ゜ッドず型が含たれ、これは䞻に自分のコヌドだけに関心があるナヌザヌを悩たせたす。 珟圚、NDependはこれを修正しおいたす。 これらの生成された芁玠をすべお取り陀くこずは、オプションではありたせん。 実際には、いく぀かのナヌザヌコヌドが含たれおいたす。 そのため、これらの生成された芁玠を、コンパむラに生成させるコヌドを含むカスタムクラスおよびメ゜ッドず組み合わせるために、いく぀かのヒュヌリスティックが開発されおいたす。 したがっお、劥協する必芁はありたせんでした。コヌドメトリック行数、カバレッゞの割合、埪環的耇雑床など、䟝存関係、違いなど、すべおのコヌドモデルデヌタが保存されたした。



非同期サポヌトの改善非同期コンストラクトは固有であり、NDependでいく぀かの問題を匕き起こしたした。 カスタムコヌドは、生成されたメ゜ッドにコンパむラヌによっお実際に埋め蟌たれ、 IAsyncStateMachine.MoveNext仮想メ゜ッドをオヌバヌラむドしたす。 したがっお、この生成されたMoveNextメ゜ッドを呌び出すILコヌドは、実装ではなく抜象むンタヌフェヌスメ゜ッドに関連付けられたす。 非同期メ゜ッド呌び出しはILコヌドで倱われるため、NDependコヌドモデルで倱われたす。 前の段萜のために曞かれた発芋的手法のおかげで、NDependは正しい呌び出し非同期メ゜ッドを分析および識別するこずができるようになりたした。



高解像床のサポヌト高解像床モニタヌ4Kなどが利甚可胜になり、その結果、より倚くの開発者が適切なWindows蚭定で䜜業しおいたす。 これは、ピクセル密床が高いため、グラフィック芁玠テキスト、画像を衚瀺するためにより倚くのピクセルが䜿甚されるこずを意味したす。 NDependのむンタヌフェむスは䞻にWindowsフォヌムずGDI +に基づいおおり、Windowsが高解像床に蚭定されおいる堎合、これらのテクノロゞヌはデフォルトではあたりうたくスケヌリングしたせん。 ナヌザヌがこの問題を報告し始めたずき、NDependむンタヌフェヌス党䜓をやり盎しお、100から250の解像床蚭定で動䜜するようにしたした。 これは、いく぀かのグラフィック芁玠を改善し、Windows FormずGDI +を高解像床で䜿甚するいく぀かの方法を孊ぶ機䌚でした。 この結果は、今埌のNDependブログ投皿で説明されたす。 むンタヌネット䞊では、これが倚くの開発者にずっお問題であるこずは明らかです。



Visual Studioのトピック統蚈によるず、ほずんどのナヌザヌはVisual StudioのNDependを䜿甚しおいたす。 したがっお、NDependむンタヌフェむスのテヌマは、Light、Dark、Blueなどの暙準のVisual Studioテヌマや暙準のVS2010テヌマずうたく調和したせん。 幞いなこずに、NDependでは、メニュヌ項目、パネル、バむンディングなどはDevExpress WinFormラむブラリに基づいおおり、最新バヌゞョンにはこれらのテヌマが含たれおいたすこれらだけではありたせん。 したがっお、最新バヌゞョンぞの簡単な曎新が圹立ちたした。



分析の改善分析に関連しおいく぀かの改善が行われたはずです。 NDependのプロゞェクトは、いく぀かのディレクトリずアセンブリ名ファむル拡匵子なしを参照したす。 分析䞭、分析するアセンブリの堎所は次の2぀の方法で芋぀かりたした。 アセンブリのコピヌが倚数芋぀かった堎合、それらがすべお同じである堎合、NDependはそのうちの1぀を取埗し、異なる堎合、NDependぱラヌを報告したした。 この状況は、゜リュヌションの展開の重倧な問題ず芋なされたす。 しかし、時間が経぀に぀れお、Windows Phoneやポヌタブルクラスラむブラリなどの新しいテクノロゞが登堎し、適切な操䜜䞭にこのような状況が発生したした。 したがっお、このような状況が怜出されるず、NDepend 6はヒュヌリスティック分析を䜿甚しお、バヌゞョン、䟝存関係、およびファむルサむズに基づいお正しいアセンブリを芋぀けたす。



All Articles