تحلیل و محاسبه نقاط کارکردی (Functional Point - FP) و تفاوتهای آن با معیار خطوط کد (Lines of Code - LOC)
تحلیل نقاط کارکردی (FPA) چیست؟
تحلیل نقاط کارکردی (FPA) یک تکنیک اندازهگیری نرمافزار است که برای ارزیابی اندازه و پیچیدگی یک سیستم نرمافزاری بر اساس قابلیتهای آن استفاده میشود. این روش شامل دستهبندی عملکردهای نرمافزار (مانند صفحات ورودی، گزارشهای خروجی، پرسوجوها، فایلها و رابطها) و تخصیص وزن به هرکدام بر اساس پیچیدگی آنها است. با کمّیسازی این عملکردها و وزنهای مربوطه، FPA یک معیار عینی از اندازه و پیچیدگی نرمافزار ارائه میدهد.
تاریخچه تحلیل نقاط کارکردی
این روش در سال ۱۹۷۹ توسط آلن جی. آلبرشت در شرکت IBM توسعه داده شد. در سال ۱۹۸۴، گروه بینالمللی کاربران نقاط کارکردی (IFPUG) این روش را برای روشنتر کردن قوانین، ایجاد استانداردها، و تشویق به استفاده و توسعه آن اصلاح کرد.
آلبرشت تحلیل نقاط کارکردی را به این صورت تعریف کرد: «تحلیل نقاط کارکردی عددی بدون بعد ارائه میدهد که معیاری مؤثر برای ارزش نسبی عملکرد ارائهشده به مشتریان ما است.» FPA یک روش سیستماتیک برای اندازهگیری عملکردهای مختلف یک نرمافزار از دیدگاه کاربر است، یعنی بر اساس درخواستها و پاسخهایی که دریافت میکند.
اهداف تحلیل نقاط کارکردی
کمک به برآورد هزینه و زمان FPA امکان تخمین کار، زمان و منابع موردنیاز برای توسعه یک پروژه نرمافزاری را فراهم میکند. این روش به سازمانها کمک میکند پروژهها را دقیقتر برنامهریزی و مدیریت کنند.
کمک به مدیریت پروژه مدیران پروژه میتوانند با استفاده از FPA بهرهوری را ارزیابی کرده، پیشرفت پروژه را نظارت کنند و تصمیمات آگاهانهتری درباره تخصیص منابع و زمانبندی پروژهها بگیرند.
تحلیل مقایسهای این روش امکان ارزیابی پروژههای نرمافزاری با استانداردها یا بهترین روشهای صنعتی را فراهم میکند. این موضوع به شناسایی نقاط ضعف و بهبود روشهای توسعه کمک میکند.
ارتقای تحلیل هزینه-فایده با ارائه یک پایه برای ارزیابی ارزش نرمافزار نسبت به اندازه و پیچیدگی آن، FPA به تصمیمگیریهای آگاهانه در مورد سرمایهگذاریها و تخصیص منابع کمک میکند.
همسویی با اهداف کسبوکار این روش تضمین میکند که فعالیتهای توسعه نرمافزار در راستای ارائه ارزش به کاربران نهایی باشد و بر عملکردهای کاربرمحور تمرکز دارد.
ورودیهای خارجی (EI): پردازش دادهها یا اطلاعات کنترلی که از خارج از مرز برنامه وارد میشوند.
خروجیهای خارجی (EO): فرایندی که دادهها یا اطلاعات کنترلی را به خارج از مرز برنامه ارسال میکند.
پرسوجوهای خارجی (EQ): ترکیبی از ورودی و خروجی که منجر به بازیابی دادهها میشود.
2. عملکردهای دادهای (Data Functional Type)
فایلهای منطقی داخلی (ILF): گروهی از دادهها یا اطلاعات کنترلی که در داخل مرز برنامه نگهداری میشوند.
فایلهای رابط خارجی (EIF): گروهی از دادهها که در داخل مرز نرمافزار دیگر نگهداری میشوند و به آن ارجاع داده میشوند.
تحلیل نقاط کارکردی
مزایای تحلیل نقاط کارکردی
استقلال تکنولوژیکی این روش اندازه سیستم نرمافزاری را مستقل از تکنولوژی یا زبان برنامهنویسی محاسبه میکند.
دقت بیشتر در برآورد پروژه اندازهگیری نیازهای عملکردی و تعاملات کاربر به برنامهریزان کمک میکند تا زمان، تلاش و منابع موردنیاز را بهتر برآورد کنند.
ارتقای تعاملات تیمی FPA یک زبان مشترک بین تحلیلگران، توسعهدهندگان، مدیران پروژه و سایر ذینفعان فراهم میکند.
تصمیمگیری آگاهانه نتایج FPA به تصمیمگیری درباره تخصیص منابع، اولویتبندی پروژهها و انتخاب تکنولوژی کمک میکند.
شناسایی زودهنگام تغییرات در محدوده پروژه با اندازهگیری نیازهای عملکردی، مدیریت تغییرات در محدوده پروژه سادهتر میشود.
معایب تحلیل نقاط کارکردی
وابستگی به قضاوتهای ذهنی این روش به تفسیرها و نظرات شخصی وابسته است که میتواند دقت را کاهش دهد.
پایین بودن دقت وابستگی به قضاوتهای ذهنی ممکن است به تخمینهای نادقیق منجر شود.
زمانبر بودن اجرای این روش، بهویژه در مراحل اولیه، میتواند زمانبر باشد.
پیچیدگی یادگیری یادگیری FPA به دلیل پیچیدگی آن و زمانبر بودن فرایند تسلط، دشوار است.
هزینه بالا تحلیل جامع و دقیق نیازمند زمان و هزینههای بیشتری است.
ویژگیهای تحلیل نقاط کارکردی (FPA)
نقاط کارکردی را میتوان با استفاده از تعداد و انواع عملکردهای استفادهشده در برنامهها محاسبه کرد. این عملکردها به پنج دسته تقسیم میشوند:
ورودیهای خارجی (EI): مانند صفحات ورودی و جداول.
خروجیهای خارجی (EO): مانند صفحات خروجی و گزارشها.
پرسوجوهای خارجی (EQ): مانند پیامها و وقفهها.
فایلهای داخلی (ILF): مانند پایگاه دادهها و فهرستها.
رابطهای خارجی (EIF): مانند پایگاه دادههای مشترک و توابع مشترک.
نکات مهم درباره نقاط کارکردی
نقاط کارکردی به توصیف پیچیدگی سیستم و همچنین زمانبندی پروژه کمک میکنند.
این روش عمدتاً برای سیستمهای تجاری مانند سیستمهای اطلاعاتی مورد استفاده قرار میگیرد.
نقاط کارکردی مستقل از زبان و فناوری هستند، به این معنا که میتوان آن را برای سیستمهای توسعهیافته با هر زبان یا فناوری به کار برد.
وزندهی ویژگیهای نقاط کارکردی
ویژگیهای تحلیل نقاط کارکردی به سه دسته پیچیدگی (کم، متوسط و زیاد) تقسیم میشوند و برای هر دسته وزن خاصی در نظر گرفته میشود:
ورودیهای خارجی (EI): وزن ۳ برای پیچیدگی کم، ۴ برای متوسط و ۶ برای زیاد.
خروجیهای خارجی (EO): وزن ۴ برای پیچیدگی کم، ۵ برای متوسط و ۷ برای زیاد.
پرسوجوهای خارجی (EQ): وزن ۳ برای پیچیدگی کم، ۴ برای متوسط و ۶ برای زیاد.
فایلهای داخلی (ILF): وزن ۷ برای پیچیدگی کم، ۱۰ برای متوسط و ۱۵ برای زیاد.
رابطهای خارجی (EIF): وزن ۵ برای پیچیدگی کم، ۷ برای متوسط و ۱۰ برای زیاد.
محاسبه نقاط کارکردی بدون تنظیم (UFp)
برای محاسبه نقاط کارکردی بدون تنظیم (UFp)، تعداد عملکردها و وزنهای مربوط به پیچیدگی متوسط در نظر گرفته میشود. این محاسبه به صورت زیر انجام میشود:
اگر تعداد ورودیهای خارجی (EI) برابر با ۳۲ باشد و وزن مربوط به پیچیدگی متوسط ۴ در نظر گرفته شود، مقدار محاسبهشده به این صورت است:
128 = 4 × 32
اگر تعداد خروجیهای خارجی (EO) برابر با ۶۰ باشد و وزن مربوط به پیچیدگی متوسط ۵ باشد، مقدار محاسبهشده به این صورت است:
300 = 5 × 60
اگر تعداد پرسوجوهای خارجی (EQ) برابر با ۲۴ باشد و وزن مربوط به پیچیدگی متوسط ۴ باشد، مقدار محاسبهشده به این صورت است:
96 = 4 × 24
اگر تعداد فایلهای داخلی (ILF) برابر با ۸ باشد و وزن مربوط به پیچیدگی متوسط ۱۰ باشد، مقدار محاسبهشده به این صورت است:
80 = 10 × 8
اگر تعداد رابطهای خارجی (EIF) برابر با ۲ باشد و وزن مربوط به پیچیدگی متوسط ۷ باشد، مقدار محاسبهشده به این صورت است:
14 = 7 × 2
با جمعبندی مقادیر محاسبهشده برای تمامی دستهها، مجموع کل برابر با:
618 = 14 + 80 + 96 + 300 + 128
بنابراین، نقاط کارکردی بدون تنظیم (UFp) برای این سیستم برابر با ۶۱۸ است.
فرمول محاسبه نقاط کارکردی (FP)
فرمول نهایی برای محاسبه نقاط کارکردی به صورت زیر است:
FP = Count-Total × [0.65 + 0.01 * ⅀(fi)]
= Count × CAF
Count-Total: مجموع کل محاسبات (در اینجا ۶۱۸).
Σ(fi): مجموع ۱۴ سوال مربوط به پیچیدگی، که مقادیر آن بین ۰ تا ۷۰ است
CAF (Complexity Adjustment Factor): فاکتور تنظیم پیچیدگی، که بین ۰.۶۵ تا ۱.۳۵ متغیر است
همانطور که میبینید در عبارت بالا CAF برابر با عبارت زیر است:
CAF = [0.65 + 0.01 * ⅀(fi)]
اگر Σ(fi)=0، مقدار CAF برابر با ۰.۶۵ است.
اگر Σ(fi)=۷۰، مقدار CAF برابر با ۱.۳۵ خواهد بود.
تفاوت خطوط کد (Lines of Code - LOC) و نقاط کارکردی (Functional Points - FP)
خطوط کد (Lines of Code - LOC)
خطوط کد (LOC) معیاری است که به هر خط متنی در کد اشاره دارد که کامنت یا خط خالی نباشد، بدون در نظر گرفتن تعداد دستورات یا قطعات دستورات موجود در آن خط. LOC شامل تمام خطوطی است که فایلهای هدر برنامه، اعلان متغیرها، و دستورات اجرایی و غیر اجرایی را شامل میشود.
از آنجا که LOC فقط به شمارش مقدار کد میپردازد، میتوان از آن تنها برای مقایسه یا برآورد پروژههایی استفاده کرد که از یک زبان برنامهنویسی مشابه و استانداردهای کدنویسی یکسان استفاده میکنند.
مثال از خطوط کد (LOC):
cppCopy codevoid selSort(int x[], int n) {
// این تابع یک آرایه را به ترتیب صعودی مرتب میکند
int i, j, min, temp;
for (i = 0; i < n - 1; i++) {
min = i;
for (j = i + 1; j < n; j++)
if (x[j] < x[min])
min = j;
temp = x[i];
x[i] = x[min];
x[min] = temp;
}
}
اگر خطوط کد را به صورت ساده شمارش کنیم، این تابع شامل 13 خط کد است. اما اگر کامنتها و خطوط خالی را نادیده بگیریم، این تابع شامل 12 خط کد میشود.
نقاط کارکردی (Function Point - FP)
در معیار نقاط کارکردی (FP)، تعداد و نوع عملکردهایی که نرمافزار پشتیبانی میکند برای محاسبه تعداد نقاط کارکردی استفاده میشود.
تفاوتهای کلیدی بین LOC و FP:
مبنای اندازهگیری: نقاط کارکردی (FP) بر اساس مشخصات نرمافزار تعریف میشود. خطوط کد (LOC) بر اساس شباهت و مقایسه اندازهگیری میشود.
وابستگی به زبان برنامهنویسی: نقاط کارکردی مستقل از زبان برنامهنویسی هستند و میتوانند برای هر زبان یا فناوری استفاده شوند. خطوط کد وابسته به زبان برنامهنویسی است، زیرا میزان کد نوشتهشده در زبانهای مختلف متفاوت است.
رویکرد کاربرمحور یا طراحیمحور: نقاط کارکردی رویکردی کاربرمحور دارند و بیشتر بر تعاملات و نیازهای کاربر متمرکز هستند. خطوط کد بیشتر طراحیمحور هستند و به ساختار کد توجه دارند.
قابلیت تبدیل: نقاط کارکردی میتوانند به خطوط کد تبدیل شوند. خطوط کد نیز میتوانند به نقاط کارکردی تبدیل شوند، فرایندی که به آن Backfiring میگویند.
موارد استفاده: نقاط کارکردی بیشتر برای سیستمهای پردازش داده استفاده میشوند. خطوط کد برای محاسبه اندازه برنامههای کامپیوتری استفاده میشوند.
نمایش زمان پروژه: نقاط کارکردی میتوانند زمان پروژه را نمایش دهند. خطوط کد برای مقایسه بهرهوری برنامهنویسان و محاسبه کارایی استفاده میشوند.
مزیت اصلی نقاط کارکردی:
به طور کلی، اندازه نرمافزار که با استفاده از نقاط کارکردی بیان میشود، به دلایل زیر بیشتر ترجیح داده میشود:
اندازه نرمافزاری که با نقاط کارکردی بیان میشود، ثابت باقی میماند، صرفنظر از اینکه از چه زبان یا زبانهایی برای توسعه نرمافزار استفاده شود. این ویژگی باعث میشود نقاط کارکردی ابزاری قدرتمند برای تخمین و مدیریت پروژه باشند.
جمعبندی
تحلیل نقاط کارکردی (FPA) و خطوط کد (LOC) دو روش رایج برای اندازهگیری اندازه و پیچیدگی نرمافزار هستند که هر یک کاربردهای متفاوتی دارند. تحلیل نقاط کارکردی (FPA) روشی مستقل از زبان برنامهنویسی و فناوری است که بر تعاملات کاربر و نیازهای عملکردی تمرکز دارد و برای تخمین دقیق زمان، هزینه و منابع پروژه بسیار مؤثر است. این روش بهویژه برای سیستمهای پردازش داده و ارزیابی پیچیدگی پروژههای نرمافزاری مناسب است.
در مقابل، خطوط کد (LOC) بر مبنای حجم کد نوشتهشده در یک زبان خاص عمل میکند و بیشتر برای ارزیابی بهرهوری برنامهنویسان و مقایسه اندازه کد در پروژههای مشابه استفاده میشود. با این حال، وابستگی LOC به زبان و استانداردهای کدنویسی ممکن است دقت مقایسه میان پروژههای مختلف را محدود کند.
به طور کلی، FPA با ارائه اندازهای ثابت و مستقل از زبان برای برآورد عملکرد و پیچیدگی سیستم مناسبتر است، در حالی که LOC ابزاری مفید برای تحلیل حجم کد و بهرهوری تیمهای برنامهنویسی است. ترکیب این دو روش میتواند دیدگاهی جامعتر از پروژههای نرمافزاری ارائه دهد.