چکیده

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

کلمات کلیدی: تخمین تلاش، پروژه نرم افزاری، کوکومو، محاسبات نرم

مقدمه
تخمین تلاش یک پروژه نرم افزاری شامل مجموعه ای از تکنیکها و فرآیندهایی است که یک سازمان بکار می برد تا هزینه، زمانبندی، نیروی انسانی و منابع یک پروژه نرم افزاری را تخمین بزند .[۱۴] جهت تخمین تلاش یک پروژه نرم افزاری تاکنون

مدلهای مختلفی معرفی شده است که هر کدام از آنها تلاش می کنند تا دقت تخمین خود را به روشهای مختلفی افزایش دهند.

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

جهت تخمین تلاش نرم افزار، مدلهای مختلفی معرفی شده است که کوکومو۱ یکی از مشهورترین آنها می باشد. کوکوموی ۱ یا کوکوموی ۸۱ یک مدل مبتنی بر رگرسیون می باشد که در سال ۱۹۸۱ توسط بوهم پیشنهاد شد.[۴] این مدل جزو دسته مدلهای الگوریتمی محسوب می شود که می تواند علاوه بر میزان تلاش، میزان زمانبندی یک پروژه نرم افزاری را نیز محاسبه کند. این

۱ Constructive Cost Model (COCOMO)

مدل دارای ۳ سطح می باشد: -۱ مدل پایه ای۲ که میزان تلاش نرم افزار را از روی اندازه نرم افزار که بر حسب ۳KDSI می باشد محاسبه می کند. -۲ مدل متوسط۴ که میزان تلاش را از روی اندازه نرم افزار و ۱۵محرک هزینه۵ به دست می آورد و -۳ مدل جزئی۶ یا پیشرفته۷ که تمامی مشخصات مدل متوسط را به همراه تخمینی از میزان تأثیر هر محرک هزینه بر روی هر مرحله در فرآیند توسعه نرم افزار، ترکیب می کند. مدل کوکوموی ۱ به دلیل سادگی و شفافیت در نحوه کارکرد آن و در نظر گرفتن فاکتورهای مختلف موثر در تخمین تلاش توانسته محبوبیت بسیاری پیدا کند. یکی از مشکلات مدل کوکوموی ۱ عدم سازگاری و مطابقت با محیطهای توسعه در اواخر سال ۱۹۹۰ بود که همین امر موجب شد تا بوهم در سال ۱۹۹۵ مدل کوکوموی ۲ را پیشنهاد دهد.[۶] مدل کوکوموی ۲ نیز دارای ۴ مدل می باشد:

۱٫ مدل ترکیبی کاربردی: ۸ این مدل در فازهای اولیه توسعه نرم افزار استفاده می شود و زمانی به کار برده می شود که نرم افزار ترکیبی از قطعات موجود باشد.

۲٫ مدل طراحی اولیه: ۹ این مدل زمانی بکار می رود که نیازمندی ها در دسترس اما طراحی هنوز آغاز نشده باشد.

۳٫ مدل استفاده مجدد: ۱۰ این مدل برای محاسبه میزان تلاش اجزای قابل استفاده مجدد یکپارچه شده بکار می رود.

۴٫ مدل پسا معماری: ۱۱ این مدل زمانی بکار می رود که
معماری سیستم طراحی شده و اطلاعات بیشتری از سیستم در دسترس باشد. این مدل نسبت به مدلهای قبلی میزان جزئیات بیشتری را در نظر می گیرد.

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

۲ Basic 3 Thousand delivered source instruction 4 Intermediate 5 Cost driver 6 Detailed 7 Advanced

۸ Application composition model 9 Early design model 10 Reuse 11 Post-Architecture

افزار می باشد زیرا این پارامترها و ضرایب بسیار مبهم و نامشخص می باشند و در نتیجه این امر باعث پایین آمدن دقت تخمین تلاش یک پروژه نرم افزاری می شود. برای غلبه بر این مشکل تکنیکهای مختلفی بر روی این مدل اعمال شد تا کیفیت تخمین آن را بهبود بخشد. با توجه به بررسی هایی انجام شده، تاکنون هیچ مقاله ای به مرور و بررسی این حوزه نپرداخته و پراکندگی و تعدد زیاد تحقیقات انجام شده در این حوزه منجر به سردرگمی و دشواری بررسی کارهای انجام شده در گذشته شده است. این مقاله با بررسی ۱۷ مقاله در فاصله بین سالهای ۲۰۰۳ تا ۲۰۱۳ قصد دارد تا چهار تکنیکی که تاکنون بر روی مدل کوکومو جهت بالا بردن دقت تخمین آن اعمال شده است را مرور کند. این چهار تکنیک شامل شبکه های عصبی هوشمند، الگوریتمهای بهینه سازی، منطق فازی و الگوریتمهای دسته بندی می باشند. ویژگی های موجود در این تکنیکها منجر به بالا رفتن دقت مدل کوکومو می شوند. به همین دلیل در سالهای اخیر اعمال تکنیکهای این چنینی بر روی مدل کوکومو و یا حتی استفاده از برخی از آنها جهت ساختن مدلهای جدید جهت تخمین تلاش، محبوبیت بسیاری پیدا کرده است۱۶]،۴،.[۱

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

کوکومو و الگوریتم های بهینه سازی
کوکومو یکی از شناخته شده ترین مدل های ریاضی است که برای تخمین هزینه به کار برده می شود اما به دلیل وجود عدم قطعیت و احتمالاتی که در فرآید توسعه نرم افزار وجود دارد ضرایب استفاده شده در این مدل برای پروژه های مدرن و جدید امروزی به درستی و دقت تعیین نمی شوند بنابراین سعی شده است از الگوریتم های تکاملی مانند الگوریتم ژنتیک، الگوریتم بهینه سازی تجمعی ذرات ، شبکه های عصبی، منطق فازی که پاسخ را در محیط های غیر قطعی شبیه سازی می کنند استفاده شود. در مقالات ۸]و[۱۰ سعی شده است از الگوریتم ژنتیک برای بهینه کردن ضرایب مدل کوکومو استفاده شود

برای این کار به صورت زیر عمل شده است: برای تولید جمعیت اولیه هر یک از ضرایب مدل کوکومو به صورت یک کروموزوم در نظر گرفته می شوند که بطور تصادفی ایجاد شده اند. با استفاده از کروموزم