# مقياس برمجيات ABC

تم تقديم مقياس برمجيات ABC بواسطة جيري فيتزباتريك في عام 1997 للتغلب على عيوب LOC. يحدد المقياس درجة ABC على أنها ثلاثية القيم التي تمثل حجم مجموعة من عبارات التعليمات البرمجية المصدر. يتم حساب درجة ABC عن طريق حساب عدد التعيينات (A)، وعدد الفروع (B)، وعدد الشروط (C) في البرنامج. يمكن تطبيق درجة ABC على الطرق أو الوظائف أو الدالات أو الأصناف أو البرمجة التركيبية داخل البرنامج.
يتم تمثيل نقاط ABC بواسطة متجه ثلاثي الأبعاد <التعيينات (A)، الفروع (B)، الشروط (C)>. يمكن أيضًا تمثيلها كمقدار تدريجي، وهي حجم المتجه <التعيينات (A)، الفروع (B)، الشروط (C)>، ويتم حسابها على النحو التالي:
$|<ABCvector>|=\surd (A^{2}+B^{2}+C^{2})$
حسب التقاليد، يتم تقريب قيمة حجم ABC إلى أقرب عشر.

## تاريخ

تم تقديم مفهوم قياس حجم البرمجيات لأول مرة من قبل موريس هالستيد من جامعة بوردو في عام 1975. واقترح أن كل برنامج حاسوب يتكون بشكل رئيسي من الرموز: المشغلين والمعاملات. وخلص إلى أن إحصاء عدد المشغلين والمعاملات الفريدة يعطينا قياسًا لحجم البرنامج. ومع ذلك، لم يتم اعتماد هذا كمقياس لحجم البرنامج. كانت عدد أسطر الشيفرة مقياسًا شائعًا آخر لحجم البرنامج. لم يتم اعتبار عدد أسطر الشيفرة مقياسًا دقيقًا لحجم البرنامج لأنه حتى البرنامج ذي الوظائف المتطابقة قد يحتوي على عدد مختلف من الأسطر اعتمادًا على أسلوب الترميز.
* تم إدخال مقياس آخر يسمى مقياس نقطة الوظيفة لحساب عدد معاملات إدخال وإخراج المستخدم. لم تقدم حسابات نقطة الوظيفة معلومات حول كل من وظائف البرنامج وعن الإجراءات التي تم تضمينها في البرنامج. نظرًا لأن اللغات الأساسية مثل سي وسي ++ وجافا وما إلى ذلك.
يهدف مقياس برمجيات ABC إلى التغلب على عيوب عدد أسطر الشيفرة ونقطة الوظيفة والرموز المميزة (التشغيل والمعامل). ومع ذلك، يمكن أيضًا استخدام درجة نقطة الوظيفة لتكملة درجة ABC.
على الرغم من أن المؤلف يؤكد أن مقياس ABC يقيس الحجم، يعتقد البعض أنه يقيس التعقيد. تعتمد قدرة مقياس ABC على قياس التعقيد على كيفية تعريف التعقيد.

## تعريف

يتم تعريف المكونات الثلاثة لدرجة ABC على النحو التالي:
* التعيينات: تخزين أو نقل البيانات إلى متغير.
* الفروع: فرع برنامج إلى الأمام صريح خارج النطاق.
* الشروط: اختبار منطقي أو نوع البيانات المنطقية.
نظرًا لأن اللغات الأساسية مثل سي وسي++ وجافا وما إلى ذلك. عمليات مثل تعيينات المتغيرات واستدعاءات الوظائف وظروف الاختبار فقط، درجة ABC لديها هذه المكونات الثلاثة.
إذا تم تحديد متجه ABC كـ <5، 11، 9> للدالة الفرعية، فهذا يعني أن الدالة الفرعية تحتوي على 5 تعييينات و11 فرعاً و9 شروط. لأغراض التوحيد القياسي، يجب وضع الأعداد في أقواس زاوية وكتابتها بنفس الترتيب وفقًا للرمز <C ،B ،A>.
غالبًا ما يكون من الأسهل مقارنة أحجام شيفرة المصدر باستخدام قيمة قياسية. تعداد ABC الفردي مميز لذلك، وفقًا لجيري فيتزباتريك، نعتبر المكونات الثلاثة متعامدة، مما يسمح بحساب حجم ABC العددي كما هو موضح أعلاه.
تخسر عشرات مدرجات ABC بعض فوائد الناقل. بدلاً من حساب حجم المتجه، قد يدعم المجموع المرجح للمتجهات مقارنة أكثر دقة للحجم. لا يجب تقديم نتائج ABC العددية بدون ناقلات ABC المصاحبة، لأن القيم العددية ليست التمثيل الكامل للحجم.

## نظرية

يجب تفسير القواعد المحددة لحساب قيم متجه ABC بشكل مختلف للغات المختلفة بسبب الاختلافات الدلالية بينها.
لذلك، تختلف قواعد حساب متجه ABC قليلاً بناءً على اللغة. نحدد قواعد حساب مقياس ABC لسي وسي++ وجافا أدناه. وبناءً على هذه القواعد، يمكن تفسير قواعد اللغات الحتمية الأخرى.

### قواعد ABC لسي

توضح القواعد التالية عدد التعيينات والفروع والشروطات في مقياس ABC لـسي:
* أضف واحدًا إلى عدد التعيينات عندما:
** حدوث عامل التعيين (=، *=، /=، %=، +=، <<=، >>=، &=، !=، ^=).
** حدوث عامل زيادة أو إنقاص (++، --).
* أضف واحدًا إلى عدد الفروع عندما:
** حدوث دالة استدعاء.
** حدوث أي عبارة goto لها هدف في مستوى تداخل أعمق من مستوى goto.
* أضف واحدًا إلى حساب الشرط عندما:
** حدوث عامل شرطي (<، >، <=، >=، ==، !=).
** حدوث الكلمات المفتاحية التالية (‘else’ ،‘case’ ،‘default’، ‘?’).
** حدوث عملية شرطية أحادية.

### قواعد ABC لسي++

توضح القواعد التالية عدد التعيينات والفروع والشروطات في مقياس ABC لسي++:
* أضف واحدًا إلى عدد التعيينات عندما:
** أضف واحد إلى حدوث عدد شروط عامل التخصيص عندما: (استبعاد الإعلانات الثابتة وتخصيصات الوسيط الافتراضي) (=، *=، /=، %=، +=، <<=، >>=، &=، !=، ^=).
** حدوث عامل زيادة أو إنقاص (بادئة أو postfix) (++، --).
** تهيئة متغير أو عضو فئة غير ثابت.
* أضف واحدًا إلى عدد الفروع عندما:
** حدوث استدعاء دالة أو استدعاء طريقة فئة.
** حدوث أي عبارة goto لها هدف على مستوى تداخل أعمق من مستوى goto.
** حدوث عوامل تشغيل «جديدة» أو «حذف».
* أضف واحدًا إلى حساب الشرط عندما:
** حدوث عامل شرطي (<، >، <=، >=، ==، !=).
** حدوث الكلمات الأساسية التالية («آخر»، «حالة»، «افتراضي»، "؟"، «حاول»، «صيد»).
** حدوث عملية شرطية أحادية.

### قواعد ABC لجافا

توضح القواعد التالية عدد التعيينات والفروع والشروط في مقياس ABC لجافا:
* أضف واحدًا إلى عدد التعيينات عندما:
** حدوث عامل التعيين (استبعاد الإعلانات الثابتة وتخصيصات المعلمات الافتراضية) (=، *=، /=، %=، +=، <<=، >>=، &=، !=، ^=، >>>=).
** حدوث عامل زيادة أو إنقاص (بادئة أو postfix) (++، --).
* أضف واحد إلى عدد الفروع عندما:
** حدوث استدعاء دالة أو استدعاء طريقة فئة.
** حدوث عامل تشغيل «جديد».
* أضف واحدًا إلى حساب الشرط عندما:
** حدوث عامل شرطي (<، >، <=، >=، ==، !=).
** حدوث الكلمات الأساسية التالية («آخر»، «حالة»، «افتراضي»، "؟"، «حاول»، «صيد»).
** حدوث عملية شرطية أحادية.

## تطبيقات
### مستقل عن أسلوب الترميز

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

### تقدير وقت المشروع

يساعد حساب نقاط ABC في تقدير مقدار الوقت اللازم لإكمال المشروع. يمكن القيام بذلك عن طريق تقدير درجة ABC للمشروع تقريبًا، وحساب درجة ABC للبرنامج في يوم معين. يمكن الحصول على مقدار الوقت المستغرق لإنجاز المشروع عن طريق قسمة درجة ABC للمشروع على درجة ABC التي تحققت في يوم واحد.

### حساب معدل الأخطاء

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

### مقارنة البرنامج

يمكن مقارنة البرامج المكتوبة بلغات مختلفة بمساعدة درجات ABC لأن معظم اللغات تستخدم التعيينات والفروع والبيانات الشرطية.
معلومات عن عدد المعلمات الفردية (عدد التعيينات والفروع والشروط) يمكن أن يساعد في تصنيف البرنامج على أنه «بيانات قوية» أو «وظائف قوية» أو «قوية المنطق». يمكن أن يوفر الشكل المتجهي لدرجة ABC نظرة ثاقبة على مبادئ القيادة وراء التطبيق، في حين يتم فقدان التفاصيل في الشكل القياسي للنتيجة.

### قياس خطي

درجات ABC خطية، لذلك يمكن تسجيل أي ملف أو وحدة أو فئة أو وظيفة أو طريقة. على سبيل المثال، درجة ABC (المتجه) للوحدة النمطية هي مجموع درجات وحداتها الفرعية. درجات ABC العددية، مع ذلك، غير خطية.