تخمین هزینه های نرم افزار

مقدمه :
در نخستين روزهاي كار با كامپيوتر ، تعداد كامپيوتر ها كم و برنامه هاي كاربردي اغلب پروژه هاي كوچك و يك نفره بود . از طرفي هزينه هاي نرم افزاري درصد كوچكي از كل هزينه سيستم كامپيوتري را تشكيل مي داد و قدري خطا در تخمين هزينه هاي نرم افزاري ، تاثير اندكي برجاي مي گذاشت . به تدريج تعداد ، اندازه و اهميت برنامه هاي كاربردي و از طرف ديگر هزينه هاي ايجاد نرم افزارشروع به رشد نمود ، به گونه اي كه امروزه نرم افزار گران ترين عنصر هر سيستم كامپيوتري به شمار مي آيد و افزايش بيش از حد هزينه ها براي سازنده نرم افزار مصيبت بار خواهد بود .

در نتيجه اين رشد ، تاثير خطاها در تخمين هزينه نرم افزار بيشتر و بدتر شد . در نتيجه امروزه تخمين هزينه پروژه هاي نرم افزاري اهميت زيادي پيداكرده است, در این مقاله بعداز تعریف تخمین هزینه و انواع تخمین به تعریف ومقایسه سه روش از روشهای تخمین هزینه های نرم افزاری یعنی روش امتیاز کارکردی (FUNCTION POINT =FP) ,روش COCOMO و روش FPROM می پردازیم .

تعريف تخمين هزينه :
تهيه يك تقريب با برآوري از هزينه هاي مورد نياز براي انجام يك پروژه را تخمين هزينه گويند . مهمترين خروجي اين فعاليت را تخمين هزينه جزئيات آنها و طراح مديريت هزينه تشكيل مي روند .

انواع تخمين :
۱ ـ تخمين ساخت يافته : (structured estimating )
تخمين احتمالاً ابتداي ترين روش « اندازه گيري » مي باشد . مردم هميشه از تجربه گذشته خود براي پيش بيني حوادث آينده استفاده مي كنند . هرچند طبيعي است . تخمين هاي ساده جهت برنامه ريزي و كنترل موثر نمي توانند قابل اطمينان باشند . دقت تخمين به تجربه تخمين زننده در زمينه اي كه او در حال تخمين است بستگي دارد .

روش هاي تخمين ساخت يافته ، تلاشي براي استفاده از اين واقعيت و در عين حال وارد نمودن ساختارو انضباط برفرآيند تخمين مي باشد به نحوي كه نتايج حاصله از آن را بتوان با اطمينان استفاده نمود . مزاياي تخمين به قرار زير مي باشد .
۱ ـ روشي ارزان است و بنابراين تنها روشي است كه براي مشاغل يك بار تكرار مناسب مي باشد .
۲ ـ اين روش مي تواند براي پيش بيني زمان هاي كاري كه ديده نشده است و بنابراين به عنوان مبنايي براي تخمين قيمت براي كارهاي يك بار تكرار بزرگ استفاده شود .

به طورطبيعي در مواردي كه مقاديرزماني با جزئيات زياد مورد نياز نمي باشند . تخمين قابل استفاده مي باشد . بنابراين چنين روش هايي براي كار با سيكل طولاني و در موقعيت هايي كه داده زماني انباشته براي برنامه ريزي ، كنترل يا پرداخت در طول پريودهاي طولاني مدت مورد نياز است . مفيد مي باشد .

۲ ـ تخمين تحليلي ( Analytical estmating )
تخمين تحليلي ، مجموعه تخمين ترتيب داده استاندارد مي باشد . اين تكنيك براين واقعيت استوار است كه مشاغل را مي توان به جزء متشكله آن تقسيم نمود و عناصر به طور مجزاقابل اندازه گيري يا تخمين مي باشند خطاي اين زمان هاي منفصله تصادفي بوده و همديگر را جبران مي كنند به نحوي كه زمان كل در محيط قابل قبول قرار خواهد گرفت .

به طور مشابه هنگامي كه تعدادي كار در طول يك زمان بزرگترترتيب مي شوند ( مانند ميزان كار يك هفته ) خطاهاي منفصله در زمان هاي مشاغل ، تصادفي خواهد بود و همديگر را جبران خواهند كرد به نحوي كه زمان كل قابل قبول مي باشد .
بديهي است تخمين توسط كارگري كه درمحدوده كار مورد اندازه گيري با تجربه مي باشد و در زمينه روش هاي كار آموزش ديده است صورت مي پذيرد بنابراين تخمين زننده به صورت زير عمل مي كند .

۱ ـ كار را به عناصر تقسيم مي كند .
۲ ـ داده استاندارد يا تركيبي ( Symetic )را به كار مي گيرد .
۳ ـ عناصري كه ارزش تلاش و صرف وقت دارند را مورد اندازه گيري قرار مي دهد .
۴ ـ مابقي عناصر را با استفاده از تجربه خود و اطلاعات مربوط به شرايط كاري عوامل ايمني و مانند آن تخمين مي زند .
ممكن است زمان هاي عناصري كه تخمين زده شده اند براي استفاده بعدي به صورت داده استاندارد نگهداري شوند البته دراين حالت لازم است در فواصل مشخصي آنها را از نظر قابل قبول بودن مورد بررسي قرار داد .

۳ ـ تخمين مقايسه اي (Comparative estimating )
تخمين مقايسه اي براساس شناسايي و اندازه گيري كارهاي « شاخص » ( Bench mark ) با محتوي كاري معين كه سايركارها را بتوان در مقايسه با آن اندازه گيري نمود استواراست كارهاي شاخص به نحوي انتخاب مي شوند كه نماينده كل محدوده كاري مورد نظر بوده و نشانگر نقاط متوسط مقياس كل كار باشد . اين مشاغل شاخص با دقت قابل قبولي توسط تكنيك هاي اندازه گيري زمان سنجي مي شوند .

مرحله بعدي شناسايي نوارهايا شيارهاي زماني است كه به كمك تحليل آماري تعيين مي شوند.
حال شاید این سوال مطرح شود که در پروژه های نرم افزاری کدام نوع تخمین استفاده می شود .در پاسخ به این سوال باید گفت که روش تخمین تحلیلی در پروژه های ذکر شده کاربرد بیشتری دارد.
روش امتیاز کارکردی:
تعریف : این روش بر این فرض استوار است میزان نیروی انسانی مصرف شده در هر پروژه نرم افزاری و به تبع آن هزینه آن به مقیاس پروژه بستگی دارد ,در این روش اساس محاسبه امتیاز کارکردی بصورت ذیل است :

=UFC*TCFامتیاز کارکردی
که در آن UFC(1)تعداد امتیازات خالص است که از مجموع تعداد ورودیها, خروجیها, فایلهای منطقی, فایلهای واسطه و پرس و جو ها بدست می آید و TCF (2 )ضریب پیچیدگی فنی است که انجام این مطالعه آنرا بین ۶۵/۰و ۳۵/۱ برآورد کرده اند.

روش COCOMO :
COCOMO از دو حرف اول سه کلمه CONSTRUCTION COST MODEL ساخته شده که می توان آنرا( مدل هزینه سودمند )ترجمه کرد.این روش ابتدادر سال ۱۹۸۱توسط بوهم( B.W.BOHEM )ارائه گردید.

بوهم در مدل خود عوامل زیر را در هزینه یک پروژه نرم افزاری موثر دانست:
۱- قابلیت اعتماد محصول ۲- پیچیدگی محصول ۳- محدودیت زمان اجرا ۴- محدودیت حافضه اصلی ۵- در دسترس بودن ماشین ۶- قابلیت تیم آنالیست ۷- تجربه توسعه نرم افزارهای کاربردی ۸- قابلیت تیم برنامه نویسی ۹- میزان استفاده از ابزارهای مدرن طراحی ۱۰- میزان استفاده از ابزارهای مدرن برنامه نویسی .
در این روش , میزان تاثیرگذاری هر کدام از عوامل , روی پروژه از کم (LOW ) وتا خیلی زیاد( EXTRA HIGH)درجه بندی شده وبه آنها وزن داده می شود .به این ترتیب یک ماتریس بدست می آید که سطرهای آن عوامل موثر و ستونهای آن درجه میزان تاثیر هر عامل روی پروژه می باشد .این روش عوامل زیادی را در برآوردها در نظر می گیرد وبه همین دلیل احتمال خطا در آن زیاد است .

روش FPROM :
این روش یک روش برآورد مرحله ای است و برای هر مرحله منحصرا می توان زمانی برآورد نیروی انسانی را ارائه داد که مرحله قبل آن انجام شده وشاخصهای معتبری از پروژه موجود باشد .

همچنین در این روش مدیران بر اساس تجربه گذشته و تشخیص خود از قابلیتهای تیم های کاری خود برآورد نیروی انسانی را انجام می دهند که آنهم حجم قابل توجهی از هزینه نرم افزار را شامل می شود .به این ترتیب تفاوت این روش , با روش امتیاز کارکردی در نحوه انجام برآوردها (مرحله ای بودن آن )است واز نظر اینکه تعداد ورودی ها , خروجی ها , جداول و گزارشها را شاخصی برای مقیاس پروژه بدانند تفاوتی بین آنها وجود ندارد .

ارزیابی و مقایسه روشهای امتیاز کارکردی , COCOMO وFPROM :
در اینجا به مقایسه کارآیی روش امتیاز کارکردی با دو روش دیگر یعنی COCOMO و FPROM می پردازیم . برای مقایسه این روشها ۷پروژه بزرگ و متوسط متشکل از ۹۷ زیر پروژه که در محیطی کاملا مکانیزه با استفاده از متدولوژی مهندسی اطلاعات (IE)جیمز مارتین مورد مطالعه قرار گرفتند
در اینجا ما کوشش می کنیم به پرسشهای ذیل پاسخ دهیم.

۱-آیا روشهای حاضر برای پیش بینی نیروی انسانی در محیطهای پیشرفته معتبر هستند ؟
۲- آیا روشی که بر اساس یک تجربه طولانی مدیران در یک محیط خاص ایجاد شده باشد برای همان محیط مناسبتر نیست ؟
۳- آیا بطور کلی می توان بر مشکل پیش بینی نیروی انسانی مورد نیاز در ابتدای اینگونه پروژه ها فائق آمد؟

مراحل توسعه :
مراحل توسعه پروژه های فوق عبارتند از :۱- آنالیز
۲- طراحی ۳- اجرا
میزان نیروی انسانی مصرفی برای مراحل مختلف هر کدام از پروژه های مورد مطالعه به شرح جدول شماره ۱ است .
همچنین , تعداد موجودیتها , صفحات نمایش , FP های خاص و تعداد PSUDO-CODE این پروژه ها در جدول شماره ۲ ارائه شده است.