التحكم في التدفق الرسم البياني والتعقيد السيكلومي للإجراء التالي
-
28-09-2019 - |
سؤال
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 يصبح بسيطًا.
الآن ، لحساب التعقيد السيكلومي ، تستخدم إحدى الطرق الثلاث:
- عد عدد المناطق على الرسم البياني: 4
- عدد المستحقات (الأحمر على الرسم البياني) + 1: 3 + 1 = 4
- لا من الحواف - لا. من العقد + 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
لا تنتمي إلى StackOverflow