ABC Software Metric
معیار نرم افزار ABC توسط جری فیتزپاتریک در سال 1997 برای غلبه بر کاستی های LOC معرفی شد. [۱] این معیار نمره ی ABC را به عنوان یک متغیر سه گانه تعریف می کند که اندازه ی مجموعه ای از دستورات کد منبع (source code) را نشان می دهد. نمره ABC با شمارش تعداد انتساب ها (حرف A) ، تعداد نکالیف (Bحرف ) و تعداد شرطی ها (حرف C) در یک برنامه محاسبه می شود. نمره ABC را می توان برای روش ها، توابع، کلاس ها، ماژول ها یا پرونده های جداگانه در یک برنامه اعمال کرد.
نمره ABC با بردار سه بعدی <تکالیف (A) ، شاخه ها (B) ، شرطی ها (C)> نشان داده می شود. همچنین می تواند به عنوان یک متغیر اسکالر (scalar) معرفی شود، که اندازه ای برداری است، و به صورت زیر محاسبه میشود:
طبق قرارداد ، مقدار ABC به نزدیکترین دهم گرد می شود.
تاریخ[ویرایش]
مفهوم اندازه گیری حجم یک نرم افزار برای اولین بار توسط موریس هالستید از دانشگاه پردو در سال 1975 مطرح شد. او پیشنهاد کرد که هر برنامه ی کامپیوتری عمدتا از نشانه ها یاtokens تشکیل شده است: عملگر ها (operators) و عملوندها. او به این نتیجه رسید که تعداد عملگر و عملوند های متحصر به فرد میتواند ابزاری برای اندازه گیری حجم برنامه باشد. با این حال، این رویکرد برای اندازه گیری حجم برنامه مورد استفاده قرار نگرفت.
تعداد خطوط کد (Lines of code) یا LOC یکی دیگر از معیار های محبوب حجم برنامه بود ولی به عنوان اندازه گیری دقیق اندازه برنامه در نظر گرفته نشده بود، زیرا وابسته به نوع و استایل کدزنی بود. [۲]
معیار دیگری به نام معیار عملکرد یا Function Point نیز برای محاسبه تعداد مبادلات ورودی و خروجی کاربر معرفی شد. اما محاسبات این روش نه در مورد عملکرد برنامه و نه در مورد روال هایی که در برنامه دخیل بودند اطلاعاتی ارائه نمی داد. [۳]
معیار ABC برای غلبه بر کاستی های روش هایی که در بالا اشاره شده تدوین شد. با این حال ، از نمره معیار عملکرد می توان برای تکمیل نمره ABC نیز استفاده کرد.
گرچه مولف ادعا می کند که این معیار حجم را اندازه گیری می کند، برخی معتقدند که معیاری برای سنجش پیچیدگی است. البته توانایی معیار ABC برای سنجش پیچیدگی وابسته به تعریف ما از پیچیدگی دارد.
تعریف[ویرایش]
سه بخش زیر نمره ی معیار ABC را تعریف میکنند:
- انتساب: ذخیره یا انتقال داده ها به یک متغیر.
- شاخه ها: یک شاخه ی صریح و روشن که خارج از محدوده است.
- شرطی: آزمون بولی یا منطقی.
از آنجا که زبانهای پایه مانند java ،C++ ،C و غیره فقط عملیاتی مانند انتساب متغیرها ، فراخوانی توابع و شرایط آزمایش دارند، نمره ی ABC با این سولفه تعیین میشود. [۱]
اگربرای یک زیرروال بردار ABC به عنوان <5،11،9> نشان داده شود ، به این معنی است که زیرروال دارای 5 انتساب، 11 شاخه و 9 شرط است. برای استاندارد سازی، شمارش ها باید در براکت های زاویه ای یا <> محصور شده و با همان ترتیب در نمادهای <A, B, C> نوشته شوند.
معمولاً مقایسه اندازه کد منبع با استفاده از مقدار اسکالر راحت تر است. تعداد هر معیار ABC مشخص است، بنابراین طبق سخن جری فیتزپاتریک ما این سه بخش را متعامد میدانیم که اجازه می دهد اندازه ABC مقیاسی همانطور که در بالا نشان داده شده محاسبه شود.
نمرات مقیاس ABC برخی از مزایای بردار را از دست می دهد. به جای محاسبه ی اندازه ی بردار، مجموع وزن بردارها می تواند مقایسه دقیق تری از حجم برنامه ارائه دهد. با این حال نمرات مقیاس ABC نباید بدون بردارهای همراه ABC ارائه شود، زیرا مقادیر اسکالر نمایانگر اندازه نیستند.
تئوری[ویرایش]
قواعد خاص برای شمارش مقادیر بردار ABC به دلیل تفاوت معنایی بین آنها، باید برای زبانهای مختلف متفاوت تفسیر شود.
بنابراین، قوانین محاسبه ی بردار ABC بر اساس زبان کمی متفاوت است. ما در زیر قواعد محاسبه ی متریک ABC را برای C++ ،C و java تعریف می کنیم. بر اساس این قواعد می توان قوانین سایر زبانهای ضروری را تفسیر کرد. [۱]
قواعد ABC برای C[ویرایش]
قواعد زیر تعداد انتساب ها، شاخه ها و شرایط را در معیار ABC برای زبان C نشان میدهد:
- افزایش شمارنده ی انتساب هنگام:
- وقوع یک اپراتور انتساب ( = ، * = ، / = ، ٪ = ، + = ، << = ، >> = ، & = ، ! = ، ^ = ).
- وقوع کاهش یا افزایش متغیر ( ++ ، -- ).
- افزایش شمارنده ی شاخه هنگام:
- وقوع فراخوانی عملکرد
- وقوع هر عبارت goto که در سطح لانه سازی یا nesting هدفی عمیق تر از سطحی که به آن ارجاع شده داشته باشد.
- افزایش شمارنده ی شرطی هنگام:
- وقوع یک عملگر شرطی یا conditional operator ( <،> ، <= ،> = ، == ، ! = )
- وقوع کلمات کلیدی رو به رو (" دیگری " ، " مورد " ، " پیش فرض " ، " ؟ ")
- وقوع یک عملگر شرطی تکی یا unary.
قواعد ABC برای ++C[ویرایش]
قواعد زیر تعداد انتساب ها ، شاخه ها ، شرایط را در معیار ABC برای زبان C++ نشان میدهد:
- افزایش شمارنده ی انتساب هنگام:
- وقوع یک اپراتور انتساب ( منحصر کردن تعریف یک متغیر ثابت و انتساب پارامترها یا parameter assignments پیش فرض ) ( = ، * = ، / = ، ٪ = ، + = ، << = ، >> = ، & = ، ! = ، ^ = ).
- وقوع یک عملگر افزایش یا یک عملگر کاهش (پیشوند یا پسوند) ( ++ ، -- ).
- مقداردهی اولیه یک متغیر یا یک عضو غیر ثابت کلاس یا class member.
- افزایش شمارنده ی شاخه هنگام:
- وقوع تماس تابع یا فراخوانی متد کلاس.
- وقوع هر عبارت goto که هدفی عمیق تر از سطح لانه سازی داشته باشد.
- اپراتور های "جدید" یا "حذف".
- افزایش شمارنده ی شرطی هنگام:
- وقوع یک عملگر شرطی ( <،> ، <= ،> = ، == ، ! = )
- وقوع کلمات کلیدی زیر (" دیگری " ، " مورد " ، " پیش فرض " ، " ؟ " ، " سعی کنید " ، " گرفتن ").
- وقوع یک عملگر شرطی تکی.
قواعد ABC برای Java[ویرایش]
قواعد زیر تعداد انتساب ها ، شاخه ها و شرط ها را در معیار ABC برای زبان Java نشان میدهد :
- افزایش شمارنده ی انتساب هنگام:
- وقوع یک اپراتور انتساب (منحصر کردن تعریف یک متغیر ثابت و انتساب پارامترهای پیش فرض) ( = ، * = ، / = ، ٪ = ، + = ، << = ، >> = ، & = ، ! = ، ^ = ، >>> = ).
- وقوع یک عملگر افزایش یا یک عملگر کاهش (پیشوند یا پسوند) ( ++ ، -- ).
- افزایش شمارنده ی شاخه هنگام:
- وقوع تماس تابع یا فراخوانی متد کلاس.
- وقایع یک اپراتور 'جدید'.
- افزایش شمارنده ی شرطی هنگام:
- وقوع یک عملگر شرطی ( <،> ، <= ،> = ، == ، ! = )
- وقوع کلمات کلیدی زیر (" دیگری " ، " مورد " ، " پیش فرض " ، " ؟ " ، " سعی کنید " ، " گرفتن ").
- وقوع یک عملگر شرطی تکی.
برنامه های کاربردی[ویرایش]
استقلال از سبک کدزنی[ویرایش]
از آنجا که معیار نمره ABC بر اساس این ایده ساخته شده است که وظایفی مانند ذخیره داده ، انشعاب و آزمایش شرطی در آن موجود باشند، این معیار مستقل از سبک برنامه نویسی کاربر است.
تخمین زمان پروژه[ویرایش]
محاسبه ی نمره ی ABC در تخمین زمان مورد نیاز برای تکمیل پروژه کمک می کند. این می تواند با تخمین تقریبی نمره ABC برای پروژه و با محاسبه ی نمره ی ABC برنامه در یک روز خاص انجام شود. با تقسیم نمره ی ABC پروژه بر نمره ی ABC حاصل در یک روز، می توان مدت زمان لازم برای اتمام پروژه را بدست آورد.
محاسبه ی نرخ اشکال[ویرایش]
نرخ اشکال در ابتدا به صورت تعداد مشکل تفسیم بر خطوط کد محاسبه میشد . با این حال، LOC معیار قابل اعتمادی برای اندازه برنامه نیست زیرا به سبک کدگذاری بستگی دارد. یک روش دقیق تر برای اندازه گیری میزان اشکال و شمارش تعداد اشکال تقسیم بر نمره ی ABC است .
مقایسه ی برنامه[ویرایش]
برنامه های نوشته شده به زبان های مختلف را می توان با کمک نمرات ABC مقایسه کرد زیرا بیشتر زبان ها از انتساب ها، شاخه ها و عبارات شرطی استفاده می کنند.
اطلاعات مربوط به شمارش پارامترهای منفرد (تعداد تخصیص ها ، شاخه ها و شرایط) می تواند به طبقه بندی برنامه به عنوان "داده قوی" یا "عملکرد قوی" یا "منطق قوی" کمک کند. فرم برداری از نمره ABC می تواند بینشی در مورد اصول رانندگی در پشت برنامه ایجاد کند ، در حالی که جزئیات در فرم اسکالر نمره گم می شوند.
معیار خطی[ویرایش]
نمرات ABC خطی هستند ، بنابراین می توان هر پرونده، ماژول، کلاس و عملکرد یا روش را نمره گذاری کرد. به عنوان مثال، نمره ی ABC (حالت برداری) برای یک ماژول مجموع نمرات زیر ماژول های آن است. با این حال، نمرات مقیاس ABC غیر خطی هستند.
همچنین ببینید[ویرایش]
- پیچیدگی نرم افزار یا Software complexity
- ابزار محسابه ی پیچیدگی هالستید یا Halstead complexity measures
- پیچیدگی سیکلوماتیک
- پیچیدگی همگام سازی
- معیار نرم افزار
منابع[ویرایش]
- 1 2 3 جری فیتزپاتریک (1997). "Applying the ABC metric to C, C++ and Java". گزارش ++C.
- ↑ نرمن ای. فنتون (1991) "Software Metrics: Successes, Failures and New Directions". چپمن و هال.
- ↑ باربارا کیچنهام (دسامبر 1995) "Towards a Framework for Software Measurement Validation". مبادلات IEEE بر مهندسی نرم افزار. 21 (12): 929–944. doi:10.1109/32.489070. S2CID 8608582.
لینک های خارجی[ویرایش]
- استفاده از ABC Metric در C، ++C و Java
- ABC متریک
- قوانین اندازه و پیچیدگی
- رمزگشایی معیارهای کد روبی
- معیار ABC
This article "ABC Software Metric" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:ABC Software Metric. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.
- ↑ ۱٫۰ ۱٫۱ ۱٫۲ ۱٫۳ Fitzpatrick, Jerry (1997). "Applying the ABC metric to C, C++ and Java" (PDF). C++ Report.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ Fenton, Norman E. (1991). "Software Metrics: Successes, Failures and New Directions" (PDF). Chapman & Hall.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ خطای لوآ در پودمان:Citation/CS1/en/Identifiers در خط 47: attempt to index field 'wikibase' (a nil value).