مشاركة عبر


إنشاء a بيانات-Driven اختبار وحدة Anatomy of a اختبار وحدة

TypeName

AvoidExcessiveComplexity

CheckId

ca1502

Category

Microsoft.Maintainability

تعطيل تغيير

غير فاصلة

السبب

أسلوب له تعقيد cyclomatic زائد.

وصف القاعدة

تعقيد Cyclomatic يقيس عدد مسارات مستقلة خطيا من خلال الأسلوب، الذي هو يفرضها عدد وتعقيد فروع شرطية. يشير تعقيد cyclomatic منخفضة بشكل عام إلى أسلوب التي هو سهلة الفهم واختبارها وصيانتها. تعقيد cyclomatic هو حساب من رسم عنصر تحكم تدفق الأسلوب و هو إعطاء كما يلي:

تعقيد cyclomatic = رقم من الحواف-رقم من العقد + 1

الموقع يمثل عقدة يؤشر فرع منطق و حافة يمثل خط بين العقد.

تقارير بانتهاك قاعدة عند تعقيد cyclomatic هو المزيد 25.

كيف إلى الإصلاح انتهاكات

لإصلاح انتهاكا لهذه قاعدة، إعادة بناء التعليمات البرمجية الأسلوب لتقليل التعقيد cyclomatic الخاص به.

عند إلى منع التحذيرات

هو آمن لمنع ظهور تحذير من القيم بالموضع هو قاعدة في حالة لا يتم تخفيض التعقيد بسهولة والأسلوب هو سهلة الفهم واختبارها وصيانتها. في محدد، وأسلوب الذي يحتوي على عبارة switch(Selectفي Vهوual أساسى) كبير هو ترشيحه للاستبعاد. فقد تفوق خطورة destabilizing التعليمة البرمجية الأساسية متأخر في دورة تطوير أو تغيير غير متوقع في سلوك وقت التشغيل في تعليمات برمجية قبل الشحن تقديم maintainability فوائد إعادة بناء تعليمات برمجية التعليمة البرمجية.

مدى تعقيد Cyclomatic هو محسوبة

بشكل أساسي، تعقيد cyclomatic هو حسابها بواسطة إضافة 1 إلى ما يلي:

  • رقم of branches (such كـif,while, anddo)

  • عدد caseعبارات داخلswitch

تبين الأمثلة التالية الأساليب مع تباين cyclomatic complexities.

مثال

تعقيد Cyclomatic 1

Public Sub Method()
    Console.WriteLine("Hello World!")
End Sub
public void Method()
{
    Console.WriteLine("Hello World!");
}
void Method()
{
    Console::WriteLine("Hello World!");
}

تعقيد Cyclomatic 2

Public Sub Method(ByVal condition As Boolean)
    If (condition) Then
        Console.WriteLine("Hello World!")
    End If
End Sub


void Method(bool condition)
{
    if (condition)
    {
        Console.WriteLine("Hello World!");
    }
}
void Method(bool condition)
{ 
  if (condition)
    { 
        Console::WriteLine("Hello World!"); 
    } 
}

تعقيد Cyclomatic 3


Public Sub Method(ByVal condition1 As Boolean, ByVal condition2 As Boolean)
    If (condition1 OrElse condition2) Then
        Console.WriteLine("Hello World!")
    End If
End Sub
public void Method(bool condition1, bool condition2)
{
    if (condition1 || condition2)
    {
        Console.WriteLine("Hello World!");
    }
}
void Method(bool condition1, bool condition2)
{
    if (condition1 || condition2)
    {
        Console::WriteLine("Hello World!");
    }
}

تعقيد Cyclomatic 8


    Public Sub Method(ByVal day As DayOfWeek)
        Select Case day
            Case DayOfWeek.Monday
                Console.WriteLine("Today is Monday!")
            Case DayOfWeek.Tuesday
                Console.WriteLine("Today is Tuesday!")
            Case DayOfWeek.Wednesday
                Console.WriteLine("Today is Wednesday!")
            Case DayOfWeek.Thursday
                Console.WriteLine("Today is Thursday!")
            Case DayOfWeek.Friday
                Console.WriteLine("Today is Friday!")
            Case DayOfWeek.Saturday
                Console.WriteLine("Today is Saturday!")
            Case DayOfWeek.Sunday
                Console.WriteLine("Today is Sunday!")
        End Select
    End Sub

    public void Method(DayOfWeek day)
    {

        switch (day)
        {
            case DayOfWeek.Monday:
                Console.WriteLine("Today is Monday!");
                break;
            case DayOfWeek.Tuesday:
                Console.WriteLine("Today is Tuesday!");
                break;
            case DayOfWeek.Wednesday:
                Console.WriteLine("Today is Wednesday!");
                break;
            case DayOfWeek.Thursday:
                Console.WriteLine("Today is Thursday!");
                break;
            case DayOfWeek.Friday:
                Console.WriteLine("Today is Friday!");
                break;
            case DayOfWeek.Saturday:
                Console.WriteLine("Today is Saturday!");
                break;
            case DayOfWeek.Sunday:
                Console.WriteLine("Today is Sunday!");
                break;
        }
    }

}
void Method(DayOfWeek day)
{
    switch (day)
    {
        case DayOfWeek::Monday:
            Console::WriteLine("Today is Monday!");
            break;
        case DayOfWeek::Tuesday:
            Console::WriteLine("Today is Tuesday!");
        break;
        case DayOfWeek::Wednesday:
            Console::WriteLine("Today is Wednesday!");
        break;
        case DayOfWeek::Thursday:
            Console::WriteLine("Today is Thursday!");
        break;
        case DayOfWeek::Friday:
            Console::WriteLine("Today is Friday!");
        break;
        case DayOfWeek::Saturday:
            Console::WriteLine("Today is Saturday!");
        break;
        case DayOfWeek::Sunday:
            Console::WriteLine("Today is Sunday!");
        break;
    }
}

القواعد ذات الصلة

CA1501: Avoid excessive inheritance