سؤال

مصطلح أراه بين الحين والآخر هو "تعقيد سيكلوماتي". هنا في ذلك، رأيت بعض الأسئلة حول "كيفية حساب CC باللغة X" أو "كيف يمكنني القيام ذ مع الحد الأدنى من مبلغ CC"، لكنني لست متأكدا من أنني أفهم حقا ما هو عليه.

على ال ndepend الموقع, لقد رأيت شرحا يقول أساسا "عدد القرارات في الأسلوب. كل ما إذا، && إلخ. يضيف +1 إلى CC" النتيجة "). هل هذا حقا؟ إذا كانت الإجابة بنعم، فلماذا هذا سيئا؟ أنا يمكن أن نرى أن المرء قد يرغب في الحفاظ على عدد إذا كانت البيانات منخفضة إلى حد ما للحفاظ على الكود سهلة الفهم، ولكن هل هذا حقا كل شيء له؟

أم أن هناك بعض مفهوم أعمق لذلك؟

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

المحلول

أنا لست على علم بمفهوم أعمق. أعتقد أنه يعتبر عموما في سياق مؤشر إمكانية الصيانة. كلما زاد عدد الفروع هناك ضمن طريقة معينة، فإن أكثر صعوبة في الحفاظ على نموذج عقلي لعملية هذه الطريقة (بشكل عام).

الأساليب ذات التعقيد السيكلومي الأعلى هي أيضا أكثر صعوبة في الحصول على تغطية الكود الكامل في اختبارات الوحدة. (شكرا مارك دبليو!)

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

نصائح أخرى

يقيس تعقيد السيكلوم عدد المرات التي يجب عليك تنفيذها كتلة من التعليمات البرمجية مع معلمات متفاوتة من أجل تنفيذ كل مسار من خلال تلك الكتلة. عدد أعلى سيء لأنه يزيد من فرص الأخطاء المنطقية التي تهرب من استراتيجية الاختبار الخاصة بك.

Cyclocmatic complexity = Number of decision points + 1

قد تكون نقاط القرار عباراتك الشرطية مثل، إذا ... آخر، فقم بالتبديل، أثناء الحلقة،

يصف المخطط التالي نوع التطبيق.

  • تكمن تعقيد Cyclomatic 1 - 10  لتعتبر التطبيق الطبيعي

  • تكمن تعقيد السيكلوميكيا 11 - 20  تطبيق معتدل

  • تكمن تعقيد Cyclomatic 21 - 50  تطبيق محفوف بالمخاطر

  • تكمن تعقيد السيكلوم أكثر من 50  تطبيق غير مستقر

ويكيبيديا قد يكون صديقك في هذا واحد: تعريف تعقيد السيكلوم

أساسا، عليك أن تتخيل برنامجك ك التحكم في التدفق الرسم البياني وثم

التعقيد (...) محددة على النحو التالي:

M = E − N + 2P

أين

  • م = تعقيد السيكلوم
  • E = عدد حواف الرسم البياني
  • ن = عدد العقد من الرسم البياني
  • ع = عدد المكونات المتصلة

CC هو مفهوم يحاول التقاط مدى تعقيد برنامجك وكيف من الصعب اختباره في عدد صحيح واحد.

نعم، هذا هو حقا. مزيد من مسارات التنفيذ يمكن أن يستغرق التعليمات البرمجية الخاصة بك، كلما زاد عدد الأشياء التي يجب اختبارها، والأحزمة المرتفعة للخطأ.

نقطة أخرى مثيرة للاهتمام سمعت:

يجب أن تحتوي الأماكن الموجودة في التعليمات البرمجية بأكبر المسافات البادئة على أعلى CC. هذه هي أهم المجالات الأكثر أهمية لضمان تغطية الاختبار لأنه من المتوقع أن يكون من الصعب القراءة / الحفاظ عليها. كما مذكرة إجابات أخرى، هذه هي أيضا المناطق الأكثر صعوبة في التعليمات البرمجية لضمان التغطية.

تعقيد Cyclomatic هو مجرد كلمة طنانة مخيفة. في الواقع، إنه مقياس لتعقيد التعليمات البرمجية المستخدمة في تطوير البرمجيات لإشراف أجزاء أكثر تعقيدا من التعليمات البرمجية (من المرجح أن تكون عربات التي تجرها الدواب، وبالتالي يجب اختبارها بعناية شديدة واختبارها جيدا). يمكنك حسابه باستخدام صيغة E-N + 2P، لكنني أقترح أن يكون لديك هذا محسوبا تلقائيا من خلال البرنامج المساعد. لقد سمعت عن قاعدة إبهام يجب أن تسعى جاهدة للحفاظ على CC أقل من 5 للحفاظ على قابلية قراءة جيدة وصيانة الكود الخاص بك.

لقد جربت مؤخرا مع Eclipse مقاييس البرنامج المساعد على مشاريع Java الخاصة بي، ولديها ملف تعليمات لطيفة وموجهة للغاية والتي ستكامل بالطبع بالطبع مع مساعدة Eclipse العادية الخاصة بك ويمكنك قراءة بعض التعريفات الأخرى لمختلف تدابير التعقيد والنصائح والحيل على تحسين التعليمات البرمجية.

هذا كل شيء، والفكرة هي أن الطريقة التي تحتوي على CC منخفضة لديها شوك أقل، والاستحواذ، إلخ، والتي تجعل جميعها طريقة أكثر تعقيدا. تخيل استعراض 500،000 خطوط من التعليمات البرمجية، مع محلل ورؤية طرق زوجين لها رائحة أعلى درجة CC. يتيح لك ذلك إذن التركيز على إعادة تكوين تلك الأساليب لفهم أفضل (من الشائع أيضا أن ارتفاع CC لديه معدل علة عالية)

يتلخص كل نقطة قرار في روتين (حلقة، التبديل، إذا، إلخ ...) بشكل أساسي إلى ما يعادل بيان. لكل شيء if لديك 2 codepaths التي يمكن اتخاذها. لذلك مع الفرع الأول هناك مسارات رمز 2، مع الثانية هناك 4 مسارات محتملة، مع 3 لا يوجد 8 وما إلى ذلك. لا يوجد ما لا يقل عن 2 ** مسارات رمز N حيث n هو عدد الفروع.

هذا يجعل من الصعب فهم سلوك التعليمات البرمجية واختباره عندما ينمو N يتجاوز عدد قليل من العدد.

الإجابات المقدمة حتى الآن لا تذكر ارتباط جودة البرمجيات إلى تعقيد السيكلوم. أظهرت الأبحاث أن وجود تقييدي أقل في تعقيد السيكلوم يجب أن يساعد في تطوير البرامج ذات جودة أعلى. يمكن أن يساعد في سمات جودة البرمجيات من قابلية القراءة والقدرة على الصياد والقابلية. بشكل عام، يجب على المرء أن يحاول الحصول على مقياس تعقيد سيكلوميا بين 5-10.

أحد أسباب استخدام مقاييس مثل التعقيد السيكلوم هو أنه بشكل عام يمكن للإنسان أن يتتبع فقط حوالي 7 (زائد أو ناقص 2) قطع من المعلومات في وقت واحد في عقلك. لذلك، إذا كان برنامجك معقدا مفرطا مع مسارات اتخاذ عدة مرات، فمن غير المرجح أن تتمكن من تصور كيفية التصرف برامجك (أي سيكون لها متري تعقيد كبير العالي). من المرجح أن يؤدي ذلك إلى تطوير برامج خاطئة أو علة. مزيد من المعلومات حول هذا يمكن العثور عليها هنا وأيضا كذلك ويكيبيديا.

يتم حساب تعقيد Cyclomatic باستخدام الرسم البياني لتدفق التحكم. يسمى عدد القياس الكمي للمسارات المستقلة الخطية من خلال شفرة مصدر البرنامج باعتباره تعقيدا سيكلوميا (إذا / إذا / إذا كان آخر / آخر)

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

هذا هو نوع منه. ومع ذلك، فإن كل فرع من عبارة "الحالة" أو "التبديل" يميل إلى الاعتماد على أنه 1. في الواقع، وهذا يعني CC يكره بيانات الحالة، وأي رمز يتطلب منهم (معالجات الأوامر، آلات الدولة، إلخ).

النظر في التحكم في التدفق الرسم البياني من وظيفتك، مع وجود حافة إضافية تعمل من الخروج إلى المدخل. تعد التعقيد السيكلوم هو الحد الأقصى لعدد التخفيضات التي يمكننا القيام بها دون فصل الرسم البياني إلى قطعتين.

علي سبيل المثال:

function F:
    if condition1:
       ...
    else:
       ...
    if condition2:
       ...
    else:
       ...

Control Flow Graph

التحكم في التدفق الرسم البياني

ربما يمكنك أن ترى بشكل حدسي لماذا يحتوي الرسم البياني المرتبط على تعقيد سيكلوميكي من 3.

يعد تعقيد Cyclomatric مقياسا لكيفية تعقيد وحدة البرامج. تقيس عدد المسارات المختلفة التي قد يتبعها البرنامج مع بنيات المنطق الشرطية (إذا، في حين، للتبديل والحالات، إلخ ....). إذا كنت ترغب في معرفة المزيد حول حسابه هنا هو فيديو رائع Youtube يمكنك مشاهدته https://www.youtube.com/watch؟v=plcgomvu-nm.

من المهم في تصميم حالات الاختبار لأنه يكشف عن المسارات أو السيناريوهات المختلفة التي يمكن أن يستغرق فيها البرنامج. "إن الحصول على اختبار جيد وصيانة جيدة، توصي مكابي بأن لا ينبغي أن تتجاوز وحدة البرنامج تعقيدا سيكلوميا من 10 بوصات (مارسسي، 2012، ص 232).

المرجع: المرسيك.، I. (2012، سبتمبر). هندسة البرمجيات. وبعد جامعة روتجرز. تم استرجاعها من www.ece.rutgers.edu/~marsic/books/se/book-se_marsic.pdf.

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