این مقاله رو من سال 92 در سایت شخصی خودم نوشته بودم. با بازگشایی بخش مربوط به قیمت گذاری پروژه های نرم افزاری گفتم بد نیست اون مقاله رو به اینجا منتقل کنم تا دوستان استفاده کنند. این مقاله شامل یک اسلاید هم می شود که در انتهای مقاله آمده است.

نویسنده: مبین رنجبر

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


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


به طور کل برآورد هزینه به معنی این است که در چه بازه زمانی و با چه هزینه ای تکمیل می شود.پس موضوع زمان در اینجا از اهمیت بالایی برخوردار است.روش های برآورد هزینه اصولا به دو بخش تقسیم می شوند:


1. الگوریتمی: که با فرمول و محاسبات ریاضی هزینه را تعیین می کند.
2. غیرالگوریتمی: که کاری با فرمول و محاسبات ندارد.


یکی از قدم های اول در هر فرآیند تخمین، شناخت و تعریف سیستمی است که قرار است مورد تخمین قرار بگیرد. تخمین هزینه نرم افزار که زودهنگام در چرخه حیات پروژه انجام می شود براساس ورودی های نادقیق و جزئیات طراحی کمتری هستند.


در اینجا به بررسی خلاصه وار دست کم دو مورد از روش های غیرالگوریتمی می پردازیم:


Expert Judgment Method یا روش قضاوت متخصص :


این روش مشاوره با متخصصان تخمین هزینه نرم افزار یا گروهی از متخصصین را نشان می دهد که از درک و فهم خوب از پروژه به تخمین هزینه آن می پردازند.این پرکاربردترین روش برای تخمین هزینه نرم افزار است.اکثر شرکت ها از این روش برای بدست آوردن ارزش محصولات خود استفاده می کنند.به طور کل،تکنیک اجماع گروهی همانند تکنیک دلفی بهترین روش برای استفاده است.فراهم کردن کانال ارتباطی راضی کننده برای متخصصین تا اطلاعات لازم یکدیگر را برای تخمین بسنجند ، یک روش گسترده دلفی ایست که به عنوان تکنیک فرا استاندارد معرفی می شود.
مراحل تخمین این روش به صورت زیر است:

الف.هماهنگ کننده مختصصین را با جزئیات و فرم مخصوص تخمین آشنا می کند.
ب.متخصصین فرم ها را به صورت ناشناس تکمیل می کنند.
ج.هماهنگ کننده با متخصصین تشکیل جلسه می دهند و در رابطه با موارد تخمینی با یکدیگر بحث می کنند.
د.هماهنگ کننده خلاصه نتیجه تخمین را به صورت فرم های تکراری آماده سازی و توزیع می کند.
ی.متخصصین بار دیگر فرم ها را به صورت ناشناس پر میکنند و مراحل ۴ و ۵ را تا زمان مناسب تکرار می شوند.

روش تخمین با مقایسه


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


مراحل تخمین با استفاده از این روش به صورت زیر است:

الف.درک خصوصیات پروژه خواسته شده.
ب.انتخاب شبیه ترین پروژه که در پایگاه داده مربوط به خصوصیات ذخیره می شود.
ج.یافتن تخمین نهایی برای پروژه از میان پروژه مشابه.
به دلیل اینکه نمی خواهم این بحث رو تبدیل به یک بحث تخصصی و دانشگاهی صرف کنم یکی از متداول ترین روش های برآورد الگوریتمی را در اینجا تعریف میکنم و از فرمول ها و محاسبات ریاضی صرف نظر می کنم.


مدل کوکومو (COCOMO)


مدل کوکومو یک مدل تجربی است که با جمع آوری داده های از تعداد زیادی پروژه نرم افزاری به دست آمده است.این داده ها تحلیل می شوند تا فرمول هایی به دست آید که بهترین تناسب را با مشاهدات داشته باشد.این فرمول ها اندازه سیستم و محصول،عوامل تیم و پروژه را به میزان کار موردنیاز برای توسعه سیستم ربط می دهد.کوکومو به دلایلی زیر انتخاب شد:
1. به خوبی مستند شده است و توسط ابزارهای تجاری پشتیبانی می شود.
2. به طور گسترده استفاده و ارزیابی شده است.


جدول زیر معایب و مزایای روش های متداول هر دو گروه را به طور خلاصه شرح داده است:


روش
نوع
مزایا
معایب
COCOMO
الگوریتمی
نتایج روشن، بسیار مرسوم
داده های زیادی نیاز است، برای همه پروژه ها مناسب نیست.
Expert Judgment
غیر الگوریتمی
پیش بینی سریع، پذیرفته شدن در پروژه های خاص
موفقیت اش وابسته به متخصص است،معمولا ناکامل انجام می شود.
Function Point
الگوریتمی
مستقل از زبان،نتایج اش از معیار SLOC بهتر است.
مکانیزه کردن آن سخت است،کیفیت خروجی در آن مورد توجه قرار نمیگیرد.
Analogy
غیرالگوریتمی
براساس تجارب دقیق کار میکند،داشتن متخصص ویژه مهم نیست.
اطلاعات بسیار زیادی از پروژه های گذشته نیاز است،در بعضی موقعیت ها هیچ پروژه مشابه ای وجود ندارد
Parkinson
غیرالگوریتمی
با تجربیات در ارتباط است.
عادات و کارهای نامناسب را شدت می بخشد.
Price to Win
غیرالگوریتمی
اغلب قرارداد می خواهد.
عموما اضافه کاری را بیشتر می کند.
Top-Down
غیرالگوریتمی
جزئیات حداقلی از پروژه نیاز است،معمولا برای اجرا سریعتر و راحت تر است،تمرکز در سطح سیستم
اساس انتزاعی دارد، از پایداری کمی برخوردار است.
Bottom-up
غیرالگوریتمی
از پایه کامل تری برخوردار است،پایداری بیشتری دارد،تعهدات فردی را تشویق میکند.
ممکن است از هزینه های سطح سیستم چشم پوشی کند،اقدامات و کارهای زیادی را برای انجام می طلبد،وقت گیر است.

در این بحث ما یک بررسی جامع از انواع مختلف روش های تخمین هزینه نرم افزار را ارائه کردیم و همچنین در مورد مزایا و معایب هرکدام بحث کردیم.فرآیند های تخمین هزینه می بایست به دقت برگزیده و دنبال شود.همانطور که دیده شد همه روش های تخمین برای پروژه های خاصی مشخص شدند.تصمیم بسیار سخت است که بگوییم یک روش از همه روش های دیگر بهتر خواهد بود زیرا هر روش یا مدل اهمیت و ارزش مخصوص به خود را دارد.برای فهم مزایا و معایبشان بسیار مهم است که چه زمانی می خواهید پروژه های خود را تخمین بزنید.در تحقیقی که در سال اخیر انجام شد، محققین بر روی ضمینه های دیگری همچون داده کاوی و تکنیک یادگیری ماشین برای بهبود دقت فرآیند تخمین هزینه نرم افزار به موازات مهندسی نرم افزار کار کردند.در آینده بر روی روش ها و مدل های تخمین هزینه جدیدی کار می شود که می تواند به در فهم آسانتر فرآیند تخمین هزینه نرم افزار کمک کند.


در پایان به طور خلاصه باید بگویم که برای تمامی محصولات و پروژه ها نمی توان یک روش را انتخاب کرد.


اسلاید ارائه را می توانید در زیر مشاهده نمایید:

http://www.slideshare.net/mobinism/s...review-persian


منابع



Software Engineering (8th Edition), Ian Sommerville
Performance Analysis of the Software Cost Estimation Methods:A Review, International Journal of Advaned Research in Computer Science and Software Engineering, Volume 3, Issue 7, July 2013