بخشی از متن:
براي هر پروژه نرم افزاري سه عامل متداخل زمان، هزينه و كيفيت موثر است. پرداختن به هريك از عوامل باعث تاثير در دو عامل ديگر مي شود. بالا رفتن زمان انجام كار باعث كيفيت بيشتر و بر افزايش قيمت پروژه تاثير دارد. از آنجائي كه در برنامه ريزي پروژه بايستي منابع مورد نياز از قبــل، پيش بيني شود، لذا تخمين هزينه و زمان توليد نرم افزار هم براي توليد كننده و هم براي استفاده كننده بسيار حياتي است. منابع و برنامه دو عامل تعيين كننده براي انجام عمليات پروژه هستند. اگر اين دو عامل مشخص باشند،آنگاه زمان و هزينه پروژه توليد نرم افزار مي تواند تعيين شود. در پروژه های نرم افزاری قبل از شروع به کد نویسی بایستی پارامترهایی تخمین زده شود، بطوریکه رسیدن به اهداف پروژه تضمین گردد.این پارامترها جهت تصمیم گیری در تعیین زمان ،نیروی انسانی، میزان تلاش هزینه و ... کارایی دارد تیم نرم افزاری باید قادر باشند که قبل از شروع به کد نویسی این پارامترها ار برآورد نمایند. یکی از این پارامترها میزان تلاش لازم است که بایستی تخمین درستی از آن در دست داشته باشیم.الگوی های زیادی برای فرایند تخمین ارائه شده از این رو، ما در این تحقیق سعی داریم میزان تلاش لازم برای رسیدن نرم افزار به اهداف خود را در حالت کلی با مدل های ارائه شده پیش بینی و نتایج حاصل با استفاده از روشهای رسمی و ریاضی بررسی نماییم.
واژه های کلیدی
توسعه نرم افزار، هزینه نرم افزار ، تخمین تلاش نرم افزار
مقدمه:
منظور از تخمين تلاش ، پيش بينى مقدار تلاش، زمان و تعداد كاركنان موردنياز براي توسعه نرم¬افـزار مى¬باشد. اجزاي اصلي هزينة پروژه، هزينه هاى سخت افزارى، آموزش و هزينه هاى مربوط به توليد و ساخت نرم افزار، شامل: پرداخت دستمزد به مهندسان نرم افزار است. از آن جاكه، بخش اعظم هزينة پروژه، هزينة كاركنان است؛ اصطلاح تخمين هزينه و تخمين تلاش به صورت متقابل استفاده مى¬شوند. تخمين در ابتداي فرايند ساخت سيستم، كه به تخمين مقدماتي معروف است، اغلب دقت كمي دارد؛ زيرا در ابتدا، دانش كمي از پروژه موجود است. تخمين تلاش موردنياز براي ساخت يك نرم¬افــزار، يكي از دغدغـــه هاى مهم مديريت پروژه، تلقي مي شود. الگوهاى تخمين هزينه اى كه در مراحل اوليه ساخت پروژه، با حداقل اطلاعات موجود از پــروژه، هزينة ساخت سيستم را تخميــن مى زنند، سودمند و موردنياز هستند. روش تخمين هزينة مناسب، امكان كنتـرل مؤثر زمان و هزينة ساخت سيـستم را فـراهم مى¬نمايد (G Kim, 2004) در نتيجه الگوهاى متعددي براي تخمين تلاش سيستم مطرح شده است.
در بررسي بوهم و همكارانش، الگوهاى تخمين تلاش به چهار دسته تقسيم شده اند؛ شامل روش هاي مبتني بر: الگو، نظر خبره، يادگيري و پويايي هستند. روش هاي مبتني بر الگو، از متداول ترين شيوه تخمين تلاش سيستم مى باشند. (B. Barry, C. Abts, S. Chulani, 2000) بوهـــم، معتقد است كه تخمين تلاش ساخت سيستم در مراحل اوليه ساخت سيستم بين 25 تا 400 درصد تلاش واقعي، متغير است (B.Boehm, 1981)؛ به عبارت ديگر،تخمين تلاش از دقت بسيار كمي برخوردار است؛ زيرا دانش تخمين زننده از پروژه اندك است. اين نظر توسط همسترا نيز تأييد شده است. (F.Heemstra, 1992)
شبكة عصبي مصنوعي كه از آن براي تخـمين تلاش توسعـــة نرم افــزارها استفاده مى¬شود (A.Gray, S. MacDonell, 1997). به طور نسبى، كاربرد شبكة عصبي در تخمين تلاش در يك پژوهش، جديد است. در سال هاى اخير، تحقيقات متعددي براي استفاده از روش هاي غيرالگوريتمي نظير شبكة عصبي مصنوعي، به عنوان جايگزين روش هاي مبتني بر الگو، انجام شده است. (A. Idri, 2002)در دو دهة گذشته از شبكة عصبي براي پيش بينى در كاربردهاي مختلفي استفاده و نتايج حاصله در مقايسه با روش هاي معمول بهتر بوده است روش هاي مبتني بر الگو، در اوايل پروژه، به دليل دانش كمى از پروژه، تخمين مناسبي ارائه نمي دهند؛ درحالي كه، روش هاي مبتني بر شبكة عصبي مصنوعي، مى توانند درصورت وجود اطلاعات از تلاش پروژه هاى كامل شده، تخمين تلاش مناسبي را ارائه دهند. بررسی های صورت گرفته در مورد بيست هزار پروژه نرم افزاری در طول هجده سال نشان داد، که اکثر پروژه های نرم افزاری به دليل تخمين هزينه غلط و در نتيجه برنامه ريزی و زمان بندی نادرست مديران با شکست مواجه شده اند. روش های مختلفی در تخمین و برآورد حجم فعالیت های لازم در انجام یک پروژه نرم افزاری در جامعه نرم افزار ارائه شده است. فارغ از اینکه از چه روشی در تخمین یک پروژه نرم افـــزاری استفاده می¬شود مهم آن است که بدون وجود اطلاعات کافی در زمینه حوزه و دامنه سیستم قابلیت ها و توانایی های آن و همچنین شرایط محیطی و فرهنگی تیم تولید نرم افزار و پیچیدگی های تکنیکی آن، برآورد واقع بینانه پروژه کاری دور از دسترس می نماید.
امروزه تخمين هزينه پروژه هاي نرم افزاري اهميت زيادي پيداكرده است امروزه نرم افزار از گران ترين اجزاء يک سيستم کامپيوتری محسوب می گردد. تخمين درست هزينه توليد يک سيستم نرم افزاری، باعث می شود که مدير پروژه در طول چرخه حيات نرم افزار، از پشتوانه قدرتمندی جهت اتخاذ تصميمات مختلف برخوردار باشد و مدير پروژه، تحليل گر، طراح، برنامه نويس و ساير نيروهای تيم توسعه نرم افزار می دانند که برای توليد يک محصول مناسب به چه ميزان تلاش و زمان نياز دارند. بدون داشتن يک تخمين مناسب از هزينه مورد نياز، مدير پروژه نمی تواند تشخيص دهد که به چه ميزان زمان و چه حجمی از نيروی انسانی و ساير منابع جهت انجام پروژه نياز دارد و در صورت تشخيص اشتباه، پروژه در مسير شکست حتمی حرکت خواهد کرد. سوال این است که چگونه می توان تلاش لازم برای یک پروژه نرم افزاری را تخمین زد.
یکی از روشهای تخمین هزینه های نرم افزار، پیشگویی میزان تلاش لازم برای ساخت نرم افزار و زمان مورد نیاز جهت توسعه ی آن است. یکی از سوالات اساسی که در شروع برنامه نویسی با آن مواجه میشویم این است که میزان تلاش لازم برای انجام پروژه به گونه ای که به اهداف خود برسد چه میزان است؟ به شکل ساده می توان تلاش لازم را برحسب تعداد افرادی که در روز/هفته/ماه و یا حتی سال بر روی پروژه کار می کنند را تخمین زد. (Huang, 2007)
متدها و ابزارها و تکنولوژی های متفاوتی مطرح شده است، همچنین فرمولهایی پیشنهاد شده است که با توجه به سایز و پیچیدگی به عنوان مقادیر ورودی، میزان تلاش لازم را برآورد می نمایند. كار تخمين پروژه هاي نرم افزاري را به تخمين وظايف در مراحل چرخه حيات يا مراحل فرايند توليد نرم افزار مي¬توان افراز نمود . ميزان تلاش و كار لازم براي انجام هر فعاليت از وظايف تعيين شده معمولا بر اساس كارايي نفر در ماه مشخص مي شود . ممكن است هزينه افراد بر اساس نوع عملکرد محوله متفاوت باشد. معمولا به تحليلگران با سابقه دستمزدي بيشتر از برنامه نويسان تعلق مي گيرد. ماهیت خلاق پروژه های نرم افزاری و انتزاعی بودن آن تخمین تلاش لازم برای توسعه نرم افزار را بی نهایت مشکل می کند روشهای متداول تخمین خود اساسا انتزاعی است با این همه هنوز هم تخمین پروژه امری لازم و ضروری محسوب می¬شود. (اس.پرسمن, 1382)
1-3سوابق و ضرورت انجام تحقیق
در نخستين روزهاي كار با كامپيوتر ، تعداد كامپيوتر ها كم و برنامه هاي كاربردي اغلب پروژه هاي كوچك و يك نفره بود . از طرفي هزينه هاي نرم افزاري درصد كوچكي از كل هزينه سيستم كامپيوتري را تشكيل مي داد و قدري خطا در تخمين هزينه هاي نرم افزاري ، تاثير اندكي برجاي مي گذاشت . به تدريج تعداد ، اندازه و اهميــت برنامه هاي كاربردي و از طرف ديگر هزينه هاي ايجاد نرم افزار شروع به رشــد نمود ، به گونه اي كه امروزه نرم افزار گران ترين عنصر هر سيستم كامپيوتري به شمار مي آيد و افزايش بيش از حد هزينه ها براي سازنده نرم افزار مصيبت بار خواهد بود . روش هاي مبتني بر الگو، متداول ترين برآورد كننده تلاش ساخت نرم افزار هستند. الگوی COCOMO و نقاط وظیفه ای یا به اختصار FP مثالهایی از روش های مبتنی بر الگو می باشند.COCOMOمبتني برتحليل رگرسيون داده هاى مربوط به 63 پروژه كامل شده است. الگوى اساسي COCOMO به صورت رابطه شماره (1-1) نشان داده شده است. در این رابطه، EF تعداد نفر-ماه یا ساعات مورد نیاز، c مقدار ثایت به اندازه تخمینی 2/3، LOC تعداد خطوط برنامه به هزار و K مقدار ثابت به اندازه تخمینی 05/1 می باشند.
فهرست مطالب:
چکیده
فصل اول: کلیات تحقیق
1-1 مقدمه
1-2 بیان مسئله
1-3 سوابق و ضرورت انجام تحقیق
1-4 اهداف تحقیق
1-5 سازماندهی تحقیق
فصل دوم: ادبیات تحقیق
2-1 مقدمه
2-2 متدولوژی و ضرورت توجه به آن
2-3 تفاوت روش توسعه نرم افزار و سخت افزار
2-4 فرایند توسعه نرم افزار
2-4-1 مدلهای توسعه نرم افزار
2-4-1-1 اصول شئ گرایی
2-4-2 مقایسه متدولوژی های سنگین وزن و سبک وزن
2-4-3 فعالیت های پشتیبانی
فصل سوم: تخمین تلاش لازم جهت توسعه نرم افزار
3-1 مقدمه
3-2 مفهوم تخمین هزینه
3-3 تخمین هزینه نرم افزار
3-4 انواع تخمين
3-5 اندازه نرم افزار
3-5-1 تعداد خطوط کد
3-5-2 علم نرم افزار
3-5-3 نقاط کاری
3-5-4 نقطه ویژگی
3-6 روش های تخمین هزینه
3-6-1 روشهای غيرالگوريتمی
3-6-1-1 تخمین تجربی
3-6-1-2 روش داوری کارشناسانه
3-6-1-3 تخمین با قیاس
3-6-1-4 روش پارکینسون
3-6-1-5 پایین به بالا
3-6-1-6 بالا به پایین
3-6-2 روشهای الگوريتمی
3-6-2-1 مدل های COCOMO
3-6-2-2 مدل Putnam
3-6-2-3 روش های مبتنی بر آنالیز نقطه ی تابعی
3-6-2-4 رگرسیون
3-7 مروری بر کارهای انجام شده
3-7-1 مدل تخمین هزینه نرم افزار مبتنی بر منطق فازی
3-7-2 تخمین هزینه نرم افزار با استفاده از شبکه های عصبی
3-7-3 تخمین نیروی کار نرم افزار بوسیله الگوریتم ژنتیک با پارامترهای تنظیم شده
3-7-4 چهارچوب مبتنی بر شبکه عصبی و منطق فازی برای تخمین هزینه توسعه نرم افزار
3-7-5 بهینه سازی پارامترها با استفاده از بهینه سازی دسته ذرات
3-7-6 شبکه عصبی موجک برای تخمین هزینه
3-7-7 پیشگویی عصبی- ژنتیک برای توسعه نیروی کار نرم افزاری
3-8 ارزیابی مدل های تخمین
فصل چهارم: مدل رهیافتی
4-1 مقدمه
4-2 روش شناسی تحقیق
4-3 داده ها و جامعه آماری
4-4 معیارهای ارزیابی
4-5 اصول روش پیشنهادی
4-5-1 انتخاب زير مجموعه ويژگي
4-5-2 اندازه گيري شباهت
4-5-3 مقياس گذاري
4-5-4 تعداد پروژه هاي مشابه
4-5-5 تطابق تناسبات
4-6 شمایی از مدل پیشنهادی
نتیجه گیری
پیشنهادات آتی
منابع
فهرست جداول
فهرست شکل ها
برچسب ها:
تخمین تلاش توسعه نرم افزار سمینار ارشد نرم افزار پروژه رگرسیون پروژه داده کاوی پروژه تخمین هزینه نرم افزار time prediction cocomo software effort estimation تخمین تلاش نرم افزار توسعه نرم افزار هزینه نرم افزار