-4

プログラミングにまだ慣れていないので、以下に示す問題に手を貸してください。

コードビュー用のテキストボックスと、以下の各問題の結果を表示するためのラベル、および機能を実行するためのボタンで構成されるプログラムがあります。これはプロジェクトの単純なビューです。

解決すべき問題:

  1. テキストボックス内のコードを読み取り、コードの複雑さを計算するボタンを押したときに関数が必要です。
  2. コード内の属性とオブジェクトの数を知る必要があります。
  3. 継承クラスはどこにありますか。
  4. 遠結合クラスとは何ですか。

実際、私は長い間コードを作成しようとしてきましたが、正しい結果が得られませんでした。私が終えたもの:

  1. .Cs ファイルからサンプル コードを開きます。
  2. コードを string Builder に読み取ります。
  3. 以下のコードで複雑になりますが、結果は完全に間違っています。

これは私のコードです(配列の一致に依存するようにしました):

    public int Get_complexity(string SourceCode)
    {
        int result = 0;
        try
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(SourceCode);

            char[] delimiterChars = { ' ', '.', '{', '}', '(', ')', ';' };

            string SourceCodeText = sb.ToString();

            string[] words = SourceCodeText.Split(delimiterChars, StringSplitOptions.RemoveEmptyEntries);

            int No_if = FindMatchesInStringArray("if", words);
            int No_elseIf  = FindMatchesInStringArray("elseIf", words);
            int No_while = FindMatchesInStringArray("while", words);
            int No_for = FindMatchesInStringArray("for", words);
            int No_foreach = FindMatchesInStringArray("foreach", words);
            int No_case = FindMatchesInStringArray("case", words);

            int No_default = FindMatchesInStringArray("default", words);
            int No_finaly = FindMatchesInStringArray("finaly", words);
            int No_continue = FindMatchesInStringArray("continue", words);
            int No_continues = FindMatchesInStringArray("continues", words);

            int No_try = FindMatchesInStringArray("try", words);
            int No_catch = FindMatchesInStringArray("catch", words);
            int No_and_op = FindMatchesInStringArray("&", words);
            int No_or_op = FindMatchesInStringArray("||", words);
            int No_words = words.Length;

            result = No_if + No_elseIf + No_while + No_for + No_foreach + No_case + No_default + No_finaly + No_continue + No_continues + No_try + No_catch + No_and_op + No_or_op;
        }
        catch { throw; }
        return result;
    }

    public int FindMatchesInStringArray(string markup, string[] strArray)
    {
        int result = 0;
        try
        {
            for (int i = 0; i < strArray.Length; i++)
            {
                if (markup.ToLower() == strArray[i].ToLower())
                {
                    result += 1;
                }
            }
        }
        catch
        {
            throw;
        }
        return result;
    }
4

1 に答える 1

1

NDepend サイトの定義を確認し、実行していることをエミュレートしてみてください。

http://www.ndepend.com/Metrics.aspx#CC

Cyclomatic Complexity (CC): (型、メソッドに対して定義) (C# コードでのみ利用可能、VB.NET バージョンは現在開発中)手順。具体的には、C# では、メソッドの CC は 1 + {メソッドの本体で見つかった次の式の数} です。

|場合 | ながら | |のための foreach | ケース | デフォルト | 続ける | 後藤 | && | || | | キャッチ | 三項演算子 ?: | ??

次の式は、CC の計算にはカウントされません。

そうでなければ| する | スイッチ | 試してみてください | |を使用して 投げる | 最終的に | 戻る | オブジェクトの作成 | メソッド呼び出し | フィールドアクセス

Cyclomatic Complexity メトリックはメソッドで定義されます。OO の世界に適応したこのメトリックは、メソッド CC の合計として、クラスと構造に対しても定義されます。外部メソッドの CC を計算する場合、無名メソッドの CC はカウントされないことに注意してください。

于 2013-03-28T05:04:33.087 に答える