- ベストアンサー
C#の静的コード解析ツール
C#の静的コード解析ツールについて調査しています。 そこで一点疑問なのですが、これらのツールでは何が検知できるのでしょうか。 例えば到達不可能なコードパスや、未初期化変数の参照等、 解析ツールの紹介でよく見られる「検知できること」は、 そもそもVisual Studioがビルド時にエラーや警告として教えてくれます。 C#の静的コード解析ツールは、こういったIDEが検知するバグ以外に、 どういったものを見つけてくれるのでしょうか。 製品によって異なるということは承知していますが、 何かご存知の方いらっしゃいましたら、一例だけでも教えて頂けるとありがたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
*有償版Visual Studio持ってません(昔MSが公開していた、FxCopが有償版にしかつかなくなったらしい) *ってことで、Monoの「コンパイラ」と、付属する「静的分析ツール」であるGendarme( http://www.mono-project.com/Gendarme )を使って比較してみました。コンパイラがエラー・警告を出さなかったコードです。ちなみにコンパイラさんはreturn falseがないときに叱ってくれました。 using System; namespace Q6759755 { class MainClass { public static void Main (string[] args) { hoge(); } public static bool hoge(){ int i = 5; if(i % 2 == 1){ return true; } return false; } } } ========================= 静的コード分析ツールは、こんなことにまで口を出してきました。(ちなみに、コードじゃなくて引数に渡すのはアセンブリ) >This type contains only static fields and methods and should be static. この型はstaticなフィールドとメソッドしか含まれていないのでstatic classとして宣言すべきです とか >This identifier (namespace, type, or method) violates the .NET naming conventions. この識別子名(名前空間名とか型名とかメソッド名とか)が.NETの命名規則に違反しています >By existing naming conventions, all the method and property names should all be pascal-cased (e.g. MyOperation). Rename 'hoge' to 'Hoge'. 命名規則によれば、メソッド名やプロパティ名はcamel-caseなんだからhogeじゃなくてHogeだろ とか >The method contains one or more unused parameters. 使ってない引数あるじゃないか。関数の定義からそもそも引数を取っ払うように設計見直したら?とか(Mainメソッドの仮引数argsを使ってないから。ちなみにMainメソッドは引数なしや戻り値intでもOK) #他に書かなかったけど、ログによると、なんかクラス名も悪いらしい。staticにすれば詳しい分析見られるらしいけど、面倒。 #CLSCompliantがないとかComVisibleがないとかとも言われる。前者はともかく後者にはあまり肯定的じゃないんだけどなあ