التحكم في التدفق الرسم البياني والتعقيد السيكلومي للإجراء التالي

StackOverflow https://stackoverflow.com/questions/2669977

سؤال

insertion_procedure (int a[], int p [], int N)
{
    int i,j,k;
    for (i=0; i<=N; i++) p[i] = i;
    for (i=2; i<=N; i++)
    {
        k = p[i];
        j = 1;
        while (a[p[j-1]] > a[k]) {p[j] = p[j-1]; j--}
        p[j] = k;
    }
}

لا بد لي من العثور على التعقيد السيكلومي لهذا الرمز ثم اقترح بعض حالات اختبار الصندوق الأبيض وحالات اختبار الصندوق الأسود. لكنني أواجه مشكلة في صنع CFG للرمز.

سوف نقدر بعض المساعدة في حالات الاختبار كذلك.

هل كانت مفيدة؟

المحلول

ابدأ بترقيم العبارات:

 insertion_procedure (int a[], int p [], int N)
 {
(1)    Int i,j,k;
(2)    for ((2a)i=0; (2b)i<=N; (2c)i++) 
(3)        p[i] = i;
(4)    for ((4a)i=2; (4b)i<=N; (4c)i++)
       {
(5)       k=p[i];j=1;
(6)       while (a[p[j-1]] > a[k]) {
(7)           p[j] = p[j-1]; 
(8)           j--
          }
(9)          p[j] = k;
       }

الآن يمكنك أن ترى بوضوح العبارة التي تنفذ أولاً وأيها وما إلى ذلك ، لذا فإن رسم CFG يصبح بسيطًا.

CFG

الآن ، لحساب التعقيد السيكلومي ، تستخدم إحدى الطرق الثلاث:

  1. عد عدد المناطق على الرسم البياني: 4
  2. عدد المستحقات (الأحمر على الرسم البياني) + 1: 3 + 1 = 4
  3. لا من الحواف - لا. من العقد + 2: 14 - 12 + 2 = 4.

نصائح أخرى

التعقيد السيكلومي هو 4.

1 للإجراء +1 لـ LOOP +1 للحلقة أثناء وجودك لشرط IF للحلقة.

يمكنك أيضًا استخدام صيغة مكابي M = E-N + 2C
ه = الحواف
ن = العقد
ج = المكونات
M = التعقيد السيكلومي

E = 14
N = 12
C = 1

M = 14-12 + 2*1 = 4

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top