こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

解決済みの質問

C#の静的コード解析ツール

C#の静的コード解析ツールについて調査しています。
そこで一点疑問なのですが、これらのツールでは何が検知できるのでしょうか。
例えば到達不可能なコードパスや、未初期化変数の参照等、
解析ツールの紹介でよく見られる「検知できること」は、
そもそもVisual Studioがビルド時にエラーや警告として教えてくれます。

C#の静的コード解析ツールは、こういったIDEが検知するバグ以外に、
どういったものを見つけてくれるのでしょうか。
製品によって異なるということは承知していますが、
何かご存知の方いらっしゃいましたら、一例だけでも教えて頂けるとありがたいです。

投稿日時 - 2011-05-24 09:38:20

QNo.6759755

困ってます

質問者が選んだベストアンサー

*有償版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がないとかとも言われる。前者はともかく後者にはあまり肯定的じゃないんだけどなあ

投稿日時 - 2011-05-24 10:42:16

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(1)

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-