تعقيد البرمجة
تعقيد البرمجة (أو تعقيد البرمجيات ) مصطلح يشمل خصائص البرمجيات التي تؤثر على التفاعلات الداخلية. يميز العديد من المعلقين بين مصطلحي "معقد" و"متشابك". يشير المتشابك إلى صعوبة الفهم، ولكنه قابل للمعرفة في نهاية المطاف. أما المعقد، فيصف التفاعلات بين الكيانات. فمع ازدياد عدد الكيانات، يزداد عدد التفاعلات بينها بشكل كبير، مما يجعل معرفتها وفهمها جميعًا أمرًا مستحيلاً. وبالمثل، فإن المستويات الأعلى من التعقيد في البرمجيات تزيد من خطر التداخل غير المقصود مع التفاعلات، وبالتالي تزيد من خطر إدخال عيوب عند تغيير البرمجيات. وفي الحالات القصوى، قد يجعل ذلك تعديل البرمجيات شبه مستحيل.
لقد استكشف البروفيسور ماني ليمان ، الذي وضع قوانين تطور البرمجيات ، فكرة ربط تعقيد البرمجيات بسهولة صيانتها بشكل موسع. وقد قام هو ومؤلفه المشارك ليس بيلادي باستكشاف العديد من مقاييس البرمجيات التي يمكن استخدامها لقياس حالة البرمجيات، وخلصا في النهاية إلى أن الحل العملي الوحيد هو استخدام نماذج التعقيد الحتمية. [ 1 ]
الأنواع
تحدد درجة تعقيد البرنامج الحالي مدى صعوبة تغييره. ويمكن تقسيم تعقيد المشكلة إلى فئتين: [ 2 ]
- يرتبط التعقيد العرضي بالصعوبات التي يواجهها المبرمج بسبب أدوات هندسة البرمجيات. ويمكن تقليله باختيار مجموعة أدوات أفضل أو لغة برمجة عالية المستوى . وينتج التعقيد العرضي غالبًا عن عدم استخدام المجال لتحديد شكل الحل. ويمكن لتصميم البرمجيات الموجه بالمجال أن يساعد في تقليل التعقيد العرضي.
- إن التعقيد الجوهري ناتج عن خصائص المشكلة المراد حلها ولا يمكن تقليله.
مقاسات
تم اقتراح العديد من مقاييس تعقيد البرمجيات. ورغم أن الكثير منها يقدم تمثيلاً جيداً للتعقيد، إلا أنه لا يسهل قياسه. ومن بين المقاييس الأكثر شيوعاً:
- مقياس التعقيد الحلقي لماكابي
- مقاييس هالستيد لعلوم البرمجيات
- قدّم هنري وكافورا "مقاييس بنية البرمجيات القائمة على تدفق المعلومات" عام 1981، [ 3 ] والتي تقيس التعقيد كدالة لـ " عدد المدخلات " و"عدد المخرجات". عرّفا عدد المدخلات لإجراء ما بأنه عدد التدفقات المحلية الداخلة إلى ذلك الإجراء بالإضافة إلى عدد هياكل البيانات التي يسترجع منها ذلك الإجراء المعلومات. أما عدد المخرجات، فيُعرّف بأنه عدد التدفقات المحلية الخارجة من ذلك الإجراء بالإضافة إلى عدد هياكل البيانات التي يُحدّثها ذلك الإجراء. تتعلق التدفقات المحلية بالبيانات التي تُمرّر إلى الإجراءات التي تستدعي الإجراء المعني أو التي تُستدعى منه. تُعرّف قيمة التعقيد لهنري وكافورا بأنها "طول الإجراء مضروبًا في مربع عدد المدخلات مضروبًا في عدد المخرجات" (الطول × (عدد المدخلات × عدد المخرجات)²).
- قدّم تشيدامبر وكيميرر "مجموعة مقاييس لتصميم البرمجيات الموجهة للكائنات" عام 1994، [ 4 ] مع التركيز على مقاييس الشيفرة البرمجية الموجهة للكائنات. وقدّما ستة مقاييس لتعقيد البرمجة الموجهة للكائنات: (1) عدد الطرق الموزونة لكل فئة؛ (2) الترابط بين فئات الكائنات؛ (3) استجابة الفئة؛ (4) عدد الفئات الفرعية؛ (5) عمق شجرة الوراثة؛ و(6) عدم تماسك الطرق.
يمكن استخدام العديد من المقاييس الأخرى لقياس مدى تعقيد البرمجة:
- تعقيد التفرع (مقياس سنيد)
- تعقيد الوصول إلى البيانات (مقياس البطاقة)
- تعقيد البيانات (مقياس تشابين)
- تعقيد تدفق البيانات (مقياس إيلشوف)
- تعقيد اتخاذ القرار (مقياس ماكلور)
- تعقيد المسار (مقياس بانج)
قانون تيسلر هو حكمة شائعة في مجال التفاعل بين الإنسان والحاسوب تنص على أن كل تطبيق يحتوي على قدر متأصل من التعقيد لا يمكن إزالته أو إخفاؤه.
مقاييس تشيدامبر وكيميرر
اقترح تشيدامبر وكيميرر [ 4 ] مجموعة من مقاييس تعقيد البرمجة المستخدمة على نطاق واسع في القياسات والمقالات الأكاديمية: الأساليب المرجحة لكل فئة، والترابط بين فئات الكائنات، والاستجابة لفئة، وعدد الأبناء، وعمق شجرة الوراثة، وعدم تماسك الأساليب، كما هو موضح أدناه:
- الأساليب المرجحة لكل فئة ("WMC")
- يمثل n عدد الطرق الموجودة في الفئة
- تكمن الصعوبة في الطريقة
- الربط بين فئات الكائنات ("CBO")
- عدد الفئات الأخرى المرتبطة (باستخدام أو يجري استخدامها)
- رد على طلب فئة ("RFC")
- أين
- هي مجموعة من الطرق التي يتم استدعاؤها بواسطة الطريقة i
- هي مجموعة الطرق في الفئة
- عدد الأطفال ("NOC")
- مجموع جميع الفئات التي ترث هذه الفئة أو إحدى الفئات المنحدرة منها
- عمق شجرة الميراث ("DIT")
- أقصى عمق لشجرة الوراثة لهذه الفئة
- عدم تماسك الأساليب ("LCOM")
- يقيس تقاطع السمات المستخدمة بشكل مشترك بواسطة أساليب الفئة
- أين
- و
- معهي مجموعة السمات (متغيرات النسخة) التي يتم الوصول إليها (القراءة منها أو الكتابة إليها) بواسطةالطريقة رقم -th من الفئة
انظر أيضاً
مراجع
- ↑ إم إم ليهام إل إيه بلادي؛ تطور البرامج - عمليات تغيير البرمجيات 1985
- ↑ في هندسة البرمجيات، يمكن تقسيم المشكلة إلى تعقيدها العرضي وتعقيدها الأساسي [1].
- ↑ هنري، س.؛ كافورا، د. معاملات IEEE في هندسة البرمجيات، المجلد SE-7، العدد 5، سبتمبر 1981، الصفحات: 510 - 518
- 1 2 تشيدامبر، إس آر؛ كيميرر، سي إف. معاملات IEEE في هندسة البرمجيات، المجلد 20، العدد 6، يونيو 1994، الصفحات: 476 - 493
- مقاييس البرمجيات
- نظرية الأنظمة المعقدة
