بخشی از مقاله

چکیده

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

با تاثیر فاکتورها و پارامترهای دخیل در ریسک میتوان تجزیه و تحلیل و میزان احتمال ریسک را شناسایی کرد. روش-های زیادی برای برای تجریه و تحلیل ریسکها وجود دارد که مدل کوکومو یکی از مدلهای اصلی برای ارزیابی ریسک است اما این توانایی لازم برای شناسایی ریسک را ندارد. بنابراین در این مقاله از الگوریتم ژنتیک بهبود یافته که بر مبنای عملگر جهش بهبود داده شده است استفاده کردیم. ارزیابی و نتایج بر روی دیتاست NASA93 که یکی از دیتاستهای اصلی سایت ناسا و شامل انواع مختلفی از پروژههای نرمافزاری است انجام شده است. نتایج نشان میدهد که مقدار MMRE در الگوریتم ژنتیک بهبود یافته در مقایسه با مدل COCOMOII و مدل ANN-GA، کمتر است و همچنین فاکتورهای دخیل در ریسک را دقیقتر شناسایی کرده است.

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

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

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

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

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

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

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

همچنینمعمولاً فاقد تکرارپذیری است چون تجربه بهراحتی با تیمهای مختلف در یک سازمان به اشتراک گذاشته نمیشود. بنابراین توسعه تکنیکهای مدلسازی هوشمند که بتوانند پشتیبانی تصمیمگیری عینیتر، تکرارپذیرتر و مشهودتر برای مدیریت ریسک ارائه دهند مهم میباشد. ما در این تحقیق با استفاده از الگوریتم ژنتیک[7] 1 ریسک پروژههای نرمافزاری دیتاست [9][8] NASA93 که شامل 93 پروژه مختلف میباشد را ارزیابی میکنیم و آن را با مدلهای محققان دیگر بررسی و مقایسه میکنیم.الگوریتم ژنتیک بهعنوان یک الگوریتم مبتنی بر جمعیت با در نظر گرفتن مجموعه ای از نقاط فضای جواب در هر تکرار محاسباتی به نحو مؤثری نواحی مختلف فضای جواب را جستجو میکند.

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

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

-2 کارهای قبلی

بیشتر مدلهای ایجاد شده که برای ریسک پروژههای نرمافزاری مورد استفاده قرار میگیرند، هزینه و تلاش را به طور غیر مستقیم با استفاده از سایز نرم-افزار ارزیابی مینمایند. در میان مدلهای الگوریتمی مدل کوکومو مبتنی بر تعداد خطوط کد کاربرد گستردهای دارد. بنابراین، نیاز به متدولوژیهایی است که ریسک پروژههای نرمافزاری را با توجه به فاکتورهایی مانند پیچیدگی نرم-افزار در نظر بگیرند. با وجود این که تا کنون مطالعات بسیاری در زمینه ریسک پروژههای نرمافزاری صورت گرفته است. اما هنوز یک توافق کلی مبنی بر این که کدام یک از روشهای ارائه شده برای استفاده در شرکتهای تولید و توسعه نرمافزار بهتر است، موجود نیست. در بسیاری از مدلهایی که به بررسی آنها پرداختهایم محققان برای ریسک پروژههای نرمافزاری از مدل-های مبتنی بر هوش مصنوعی استفاده کردهاند.ریسک پروژههای نرمافزاری دیتاست NASA93 با استفاده از ترکیب ANN-GA انجام شده است.[10]

بیشتر ریسکها، شامل ترکیبی از داده-های کمی و کیفی است. بنابراین تکنیکهای کمی ارزیابی ریسک برای تخمین نرخ ریسک کافی نمیباشد. در این مقاله، یک روش ارزیابی برای تخمین نرخ ریسک پروژههای نرمافزاری، براساس رویکرد Neuro-Fuzzy ارائه شده است. با ترکیب پارامترهای احتمال، اثر و اهمیت ریسک، فاکتور کلی ریسک حاصل میشود. این فاکتورها به صورت مقیاسهای کیفی بیان میشوند و به تابع عضویت فازی مثلثی تعریف میگردند. با ورود فاکتورهای ریسک به سیستم استنتاج فازی، نرخ ریسک برای هر عنصر ریسک حاصل میگردد. مقدار خطای MMRE در مدل ANN و ANN-GA به ترتیب برابر 0.4523 و 0.60 است و مقدار PRED در مدلها به ترتیب برابر94.07 و 95.00 است.محققین برای ریسک پروژههای نرمافزاری از مدل شبکه بیزین باور استفاده کردهاند.[11] نتایج و ارزیابی برو 12 پروژه از دیتاست پروژههای نرمافزاری انجام گرفته است.BBN

یک چهارچوب برای فرمولبندی مشکلات استنباطی آماری است که یک استدلالی است، و از تبدیل ریاضی و تخصیص ضرایب مختلف به دادهها استفاده میکند. نتایج نشان میدهد BBN دقت تخمین بیشتری در مقایسه با مدل واقعی دارد. مقدار MMRE در BBN برابر 0.03842 میباشد.محققین از مدل شبکه عصبی مصنوعی پس انتشار5 برای ریسک پروژههای نرمافزاری استفاده کردهاند .[12] آنها 18 پروژه را با 10 فاکتور ریسک ارزیابی کردهاند و مقدار خطا برای فاکتورها محاسبه شده است. مدل Fuzzy-EXCOM برای ریسک پروژههای نرمافزاری پیشنهاد شده است.[13] ارزیابی و نتایج بر روی دیتاستهای NASA93، TURKISHو INDUSTRY انجام شده است. از تابع عضویت گوسین فازی به منظور فازیسازی دادهها استفاده شده است. مهمترین فاکتور در ارزیابی ریسک پروژه-ها CPLX است که مقدار دقیق برای آن بسیار مهم است. نتایج نشان می-دهد که مقدار ضریب همبستگی در مدل Fuzzy-EXCOM در مقایسه با مدل Expert COM دقیقتر است.

-3 مدل پیشنهادی

تولید و توسعه پروژههای نرمافزاری، همواره با ریسکهای مختلفی مواجه بوده است که باعث کاهش راندمان و گاهی عدم موفقیت در به پایان رساندن پروژههای نرمافزاری میشود. علیرغم اینکه تمام پروژههای نرمافزاری بزرگ باید دارای بخشی به نام مدیریت ریسک باشد، فقدان چنین امری باعث ناکارآمدی صنعت نرمافزار شده است. از طرفی دیگر پیچیدگی و عدم دسترسی به اطلاعات کافی باعث ضعف در تحلیل ریسک شده است. در روشهای الگوریتمی همانند COCOMO، ارزیابی ریسکهای پروژه بر اساس دو معیار احتمال وقوع و تأثیر آنها انجام میشود، ولی این معیارها بهتنهایی بیانگر تمام جنبههای ریسک نیستند. باهدف رفع کاستیهای مدل کوکومو، برای ارزیابی ریسک پروژههای نرمافزاری از الگوریتم ژنتیک بهبودیافته استفاده میکنیم. بنابراین، وزن فاکتورهای مهم در پروژههای نرم-افزاری را با استفاده از الگوریتم ژنتیک بهبودیافته تعیین میکنیم. جدول - - 1، دستهبندی ریسک پروژههای نرمافزاری دیتاست NASA93 را نشان میدهد .[14] دستهبندی ریسک در چهار سطح Low، Moderate، High و Very High انجام میگیرد.طبق معادله - - 1، ریسک پروژههای نرمافزاری برای دیتاست NASA93 بدست میآید .[14] ریسک هر پروژه بر مبنای طبقهبندی و فاکتورهای تلاش

در متن اصلی مقاله به هم ریختگی وجود ندارد. برای مطالعه بیشتر مقاله آن را خریداری کنید