سؤال

لقد كنت ألعب مع قياس التعقيد السيكلوماتي لقاعدة رمز كبيرة.

تعقيد السيكلوم هو عدد المسارات المستقلة الخطية من خلال شفرة مصدر البرنامج وهناك الكثير من الأدوات المجانية لغتك المفضلة.

النتائج مثيرة للاهتمام ولكن ليس مفاجئا. وهذا هو، الأجزاء التي أعرفها هي الأكثر حدة كانت في الواقع الأكثر تعقيدا (مع تصنيف> 50). ولكن ما أجده مفيدا هو أن رقم "سيئة" ملموس يتم تعيينه لكل طريقة كشيء يمكنني الإشارة إليه عند تحديد مكان بدء إعادة الإنفاق.

هل تستخدم التعقيد السيكلوم؟ ما هو الشيء الأكثر تعقيدا من الكود الذي وجدته؟

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

المحلول

نحن REFICTOR بلا رحمة، واستخدام التعقيد السيكلوم كواحد من المقاييس التي تحصل على رمز على "قائمتنا". 1-6 نحن لا نعلم عن التعقيد (على الرغم من أنه قد يتم استجوابه لأسباب أخرى)، 7-9 مشكوك فيه، وأي طريقة أكثر من 10 يفترض أنها سيئة ما لم يثبت خلاف ذلك.

كان الأسوأ الذي رأيناه 87 من سلسلة حشية إذا كانت في بعض الرموز القديمة التي كان علينا توليها.

نصائح أخرى

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

نحن بحاجة إلى متري لا يتحول إلى اللون الأخضر من مجرد تحلل طريقة. أنا أسمي هذا CC100..

CC100 = 100 * (التعقيد الكلي السيكلوماتيكي من CodeBase) / (مجموع خطوط التعليمات البرمجية)

من المفيد بالنسبة لي بنفس الطريقة التي مفيدة جدا أن Big-o مفيدة: أعرف ما هو عليه، ويمكنه استخدامه للحصول على شعور بالأمعاء لمعرفة ما إذا كانت الطريقة جيدة أو سيئة، لكنني لا أحتاج إلى حسابها لكل وظيفة كتبتها.

أعتقد أن المقاييس أبسط، مثل LOC، هي جيدة على الأقل في معظم الحالات. إذا لم تناسب الوظيفة على شاشة واحدة، فهذا لا يهم تقريبا كم هو بسيط. إذا كانت الدالة تأخذ 20 معلمات ويجعل 40 متغيرات محلية، فلا يهم إذا كان تعقيده السيكلوميكي هو 1.

بدأنا مؤخرا في استخدامه. نحن نستخدم Ndepend للقيام ببعض تحليل رمز ثابت، ويقيس تعقيد السيكلوم. أوافق، إنها طريقة لائحة لتحديد طرق إعادة تكوينها.

للأسف، لقد رأينا # أعلى من 200 لبعض الطرق التي أنشأتها مطورنا في الخارج.

حتى تكون هناك أداة يمكن أن تعمل بشكل جيد مع قوالب C ++، وتقنيات البرمجة التلوي، فإنها ليست مساعدة كبيرة في وضعي. على أي حال فقط تذكر ذلك

"ليس كل الأشياء التي يمكن قياسها، وليس كل الأشياء التي يمكن قياسها" آينشتاين "

لذا تذكر أن تمر بأي معلومات عن هذا النوع من خلال تصفية الإنسان أيضا.

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

أنا في كثير من الأحيان قياس التعقيد السيكلوم للكود. لقد وجدت أنها تساعدني على بقعة مناطق التعليمات البرمجية التي تفعل الكثير. إن وجود أداة تشير إلى المواقع الساخنة في التعليمات البرمجية أقل استهلاكا لفترة أقل من الاضطرار إلى القراءة من خلال الآلاف من خطوط التعليمات البرمجية في محاولة لمعرفة الطرق التي لا تتبعها SRP.

ومع ذلك، فقد وجدت أنه عندما أقوم بتحليل تعقيد دوري السيكلوم حول رمز الآخرين، فإنه عادة ما يؤدي إلى مشاعر الإحباط والوقيف والغضب العام عندما أجد كود مع تعقيد سيكلومي في 100. ما الذي يجبر الناس على كتابة الأساليب التي لديها عدة آلاف من خطوط التعليمات البرمجية فيها؟!

إنه لأمر رائع أن تساعد في تحديد المرشحين لإعادة تكوينه، لكن من المهم أن تبقي حكمك حولها. كنت أدعم نطاقات Kenj0418 لأدلة تشذيب.

هناك متري جافا يسمى crap4j. أن تجمع تجريبيا بين تعقيد سيكلوماتي وتغطية اختبار Junit للتوصل إلى متري واحد. لقد كان يبحث عن بحث لمحاولة تحسين صيغة تجريبية له. لست متأكدا من مدى انتشاره.

لم أستخدمها منذ فترة، ولكن في مشروع سابق ساعد بالفعل في تحديد المواقع المشاكل المحتملة في رمز alses (لن يكون لي بالطبع!)

عند العثور على المنطقة للتحقق من ذلك، وجدت بسرعة مشاكل عدلية (أيضا الكثير من Gotos هل تصدق!) مع المنطق وبعض رمز WTF غريب حقا.

تعقيد Cyclomatic رائع لإظهار المناطق التي تقوم بفعلها كثيرا وبالتالي كسر المسؤوليات الفردية Prinicpal. يجب أن تنفصل هذه مثالية في وظائف Mulitple

أخشى أن تكون لغات المشروع التي أحب أن أعظم مقاييس مثل هذا، LPC., ، ليس هناك، في الواقع، الكثير من الأدوات المجانية لإنتاج تكنولوجيا المعلومات المتاحة. لذلك لا، ليس مفيدا جدا بالنسبة لي.

+1 لقيم قائمة HIT في Kenj0418.

وكان الأسوأ الذي رأيته هو 275. كان هناك زوجين آخرين أكثر من 200 من أننا قادرون على إعادة النمو إلى CCS أصغر بكثير؛ كانوا لا يزالون مرتفعا ولكن حصلت عليهم دفعوا مرة أخرى في الخط. لم يكن لدينا الكثير من الحظ في الوحش 275 - ربما كان (ربما لا يزال هو) على شبكة من تصريحات IF- والتبديل التي كانت معقدة للغاية. إنها قيمة حقيقية فقط هي كخطوة عندما يقررون إعادة بناء النظام.

الاستثناءات إلى ارتفاع CC الذي كنت مرتاحا مع المصانع؛ IMO، من المفترض أن يكون لديهم سم مكعب مرتفع ولكن فقط إذا كانوا يفعلون فقط إنشاء كائن بسيط وعودة.

بعد فهم ما يعنيه، لقد بدأت الآن في استخدامه على أساس "محاكمة". حتى الآن لقد وجدت أنه مفيد، لأنه عادة ما تسير CC عالية في اليد مع سهم مكافحة النمط, ، مما يجعل الرمز أكثر صعوبة في القراءة والفهم. ليس لدي رقم ثابت بعد، لكن ndepend تنبيه إلى كل شيء أعلى من 5، والذي يبدو أن بداية جيدة للتحقيق في الأساليب.

نعم، نحن نستخدمه وقد وجدت أنه مفيد أيضا. لدينا قاعدة الكود القديمة الكبيرة لتدريس ووجدنا تعقيدا مرتفعا للنفط. (387 بطريقة واحدة!). يشير إليكم CC مباشرة إلى المناطق التي تستحق عدلها. نستخدم CCCC على رمز C ++.

تعقيد Cyclomatic هو مجرد مؤلف واحد لما يمكن أن يسمى تعقيد ملفقة. منذ فترة رجوع، كتبت مقالا لتلخيص عدة أبعاد تعقيد التعليمات البرمجية:قتال تعقيد ملفقة

هناك حاجة إلى الأدوات لتكون فعالة في التعامل مع تعقيد التعليمات البرمجية. الأداة ndepend. ل. NENT Code سوف تتيح لك تحليل العديد من أبعاد تعقيد التعليمات البرمجية بما في ذلك مقاييس التعليمات البرمجية مثل: تعقيد Cyclomatic، عمق التعشيش، عدم التماسك من الطرق، التغطية عن طريق الاختبارات ...

بما في ذلك تحليل التبعيات بما في ذلك اللغة (لغة رمز الاستعلام) مخصص لنسأل، ما هو معقد في التعليمات البرمجية الخاصة بي، وكتب القاعدة؟

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