-4

编程还是新手希望你们帮我解决下面提到的问题。

我有一个程序,由用于代码视图的文本框和用于查看下面每个问题的结果的标签和执行功能的按钮组成。这是项目的简单视图。

要解决的问题:

  1. 当我按下读取文本框中代码并计算代码复杂度的按钮时,我想要函数。
  2. 我需要知道代码中有多少属性和对象。
  3. 继承类在哪里。
  4. 什么是远耦合类。

实际上我一直在尝试编写代码很长时间,但我没有得到正确的结果。我完成了什么:

  1. 从 .Cs 文件中打开示例代码。
  2. 将代码读取到字符串生成器。
  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

圈复杂度 (CC):(为类型、方法定义)(仅适用于 C# 代码,VB.NET 版本目前正在开发中)圈复杂度是一种流行的程序软件度量,等于可以在一个程序中做出的决策数量程序。具体来说,在 C# 中,方法的 CC 是 1 + {在方法主体中找到的以下表达式的数量}:

如果 | 而| 为| 前锋 | 案例 | 默认 | 继续 | 转到 | && | || | 抓住| 三元运算符 ?: | ??

以下表达式不计入 CC 计算:

否则 | 做 | 开关 | 试试 | 使用 | 扔| 最后 | 返回 | 对象创建 | 方法调用 | 现场访问

圈复杂度度量是在方法上定义的。适应 OO 世界,这个度量也被定义为类和结构作为其方法 CC 的总和。请注意,匿名方法的 CC 在计算其外部方法的 CC 时不计算在内。

于 2013-03-28T05:04:33.087 回答