重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

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

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

A 回答 (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がないとかとも言われる。前者はともかく後者にはあまり肯定的じゃないんだけどなあ
「C#の静的コード解析ツール」の回答画像1
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!