این مطلب یکی از مقالات پرونده ویژه«متدولوژیها، الگوها و معماری نرمافزار» شماره 207 ماهنامه شبکه است. علاقهمندان میتوانند کل این پرونده ویژه را از روی سایت شبکه دانلود کنند.
هدف اصلی هر توسعه نرمافزار یا پروژه مهندسی نرمافزار بهطور مشخص با استفاده از فناوریها و ویژگیهای جدید، دستیابی به بهرهوری بیشتر و بهرهگیری از پیشرفتهای جدید در مهندسی نرمافزار است. مدیران پروژههای نرمافزاری بهخوبی میدانند که رسیدن به چنین موفقیتهایی خالی از ریسک نیست. ریسکها در پروژههای نرمافزاری کاملا واقعی و مرسوم هستند. عدم درک درست این ریسکها و اولویتبندی و مدیریت آنها میتواند عملکرد و موفقیت هر پروژه نرمافزاری را تحت تاثیر قرار دهد و دستاوردهای کل پروژه را تهدید کند. برای پروژههایی که با محدودیتهای زمانی و هزینهای روبهرو هستند؛ تجربه نشان داده تلاشهای توسعه نرمافزاری موفقیتآمیز خواهد بود که در آن ریسکها بهشدت کاهش پیدا کرده و توسط یک تیم توسعه متمرکز، تحت کنترل باشند.
ریسک در مهندسی نرمافزار چیست؟
به زبان ساده، ریسک یک مشکل بالقوه است. ریسک یک فعالیت یا رویداد است که میتواند موفقیت و دستاورد یک پروژه توسعه نرمافزاری را به خطر بیندازد. ریسک احتمال متحملشدن خسارت است و ریسک کامل (total risk) مجموع خسارتها و احتمال خطرهایی است که میتواند برای یک پروژه اتفاق بیفتد. غالبا گمانهزنیها یا مدیریت بحرانها برای مواجهه با ریسکهای نرمافزاری موثر نیستند و تنها راهحل، شناسایی و متراکم کردن ریسکها در یک متد پیشبینی برای به دست آوردن احتمال ریسک نهایی یک پروژه توسعه نرمافزاری است. ریسکهای یک پروژه میتواند فسخ، قطع، تاخیر در برنامهریزی، اشتباه در برآورد هزینهها و مشکلات مربوط به منابع پروژه باشد.
مدیریت ریسک در مهندسی نرمافزار چیست؟
مدیریت ریسک به معنای محدود کردن و کاهش ریسکها در یک پروژه نرمافزاری است. مدیریت ریسک شامل چندین گام و مرحله است. در گام اول، باید ریسکهای یک پروژه شناسایی و مشخص شوند. در گام دوم، برای مقابله یا کاهش ریسکها برنامهریزی شود و در گام بعدی، برای انجام پروژه آمادهشده و بر اساس تجربه و دانش کل تیم، تلاش شود تاثیرات ریسکها بر پروژه به حداقل برسد.
بنابراین، مدیریت ریسک شامل مراحل زیر میشود:
شناسایی (Identify) ریسکها و عوامل آنها
طبقهبندی (Classify) و اولویتدهی تمام ریسکها
طرحریزی (plan) برای کاهش تاثیرات ریسکها
مانیتور (Monitor) عوامل ریسکها هنگام انجام پروژه
پیادهسازی اقدامات کاهش ریسک (mitigating action) در صورت بروز
ارتباطات (Communicate) وضعیت ریسک در سراسر پروژه
شناسایی و طبقهبندی ریسکها
بیشتر پروژههای مهندسی نرمافزار بهدلیل مشکلات بالقوهای که ممکن است برایشان رخ دهد، ریسکپذیر هستند. تجربه داشتن از اجرای دیگر پروژههای مهندسی نرمافزار میتواند به شناسایی و طبقهبندی ریسکها کمک کند. لازم به ذکر است، چگونگی کیفیت طبقهبندی یا تنوع و گستردگی طبقهبندی مهم نیست، بلکه شناسایی دقیق ریسکها و به دست آوردن توصیفی واضح و مشخص از تهدیدات واقعی برای یک پروژه مهندسی نرمافزار ارزشمند است. یک طبقهبندی ساده ولی موثر ریسکها شامل فهرستی از ریسکها بر اساس تاثیرگذاری آنها روی موفقیت پروژه است.
۵ نوع ریسک در مدیریت پروژههای نرمافزاری
در اغلب پروژههای توسعه نرمافزاری، تهدیدات و ریسکهای قابلتصور برای یک پروژه به یکی از این پنج نوع زیر خلاصه میشوند:
- فناوریهای جدید و محک نزده
- الزامات کاربری و عملکردی
- معماری سیستم و برنامه کاربردی
- کارایی
- سازماندهی
فناوریهای جدید و محک نزده:
اغلب پروژههای نرمافزاری تمایل دارند از فناوریهای جدید استفاده کنند. پس در هر پروژه با حجمی از تغییرات ابزارها، استانداردها، پروتکلها، تکنیکها و سیستمهای توسعه روبهرو هستیم که بهطور بالقوه میتوانند ریسکهای فناوری را افزایش دهند. در هر پروژه، آموزش و دانش بسیار اهمیت دارند و به تیمها کمک میکنند تا از بهکارگیری اشتباه فناوریهای جدید جلوگیری کرده و ریسک پروژهها را کاهش دهند. هر اندازه، تیمهای توسعه با درایت، تجربه و دقت بیشتر و کسب آگاهی کافی درباره یک فناوری یا استاندارد جدید، تصمیم به استفاده از آن بگیرند، تهدیدات آینده پروژه را کاهش میدهند.
الزامات کاربری و عملکردی:
هر نرمافزار به الزامات کاربری، عملکردی و کیفیت خدمات نیازمند است. همیشه باید یک تصویر مشخص و واضح از این الزامات در دسترس باشد ولی اغلب اوقات فرآیند تعریف الزامات برای یک نرمافزار یا پروژه توسعه نرمافزار زمانبر، طولانی و خستهکننده است. بنابراین تیمها برخی الزامات را رعایت نمیکنند یا اینکه توجه بیشازحد به الزامات کاربری باعث میشود الزامات عملکردی یا کیفیت خدمات به فراموشی سپرده شود و مورد کمتوجهی قرار بگیرد. رعایت نکردن الزامات توسعه یک نرمافزار بهطور مستقیم چندین ریسک را فعال کرده و زمینه شکست پروژه را فراهم میکند.
معماری سیستم و برنامههای کاربردی:
در پیش گرفتن یک مسیر اشتباه با انتخاب یک پلتفرم، اجزا یا معماری در یک نرمافزار میتواند عواقب فاجعهباری داشته باشد. همانطور که تیم برنامهنویس و توسعه نرمافزار باید مراقب استفاده از فناوریهای جدید و بهروز باشد، این تیم باید متخصصان باتجربهای برای درک و تحلیل درست یک پلتفرم و معماری نرمافزار داشته باشد تا بتوانند در بهکارگیری چارچوبها و اجزای نرمافزاری انتخابهای درستی داشته باشند.
کارایی:
یکی از نکتههای مهم در هر پروژه این است که مدیریت ریسک بتواند کارایی مورد انتظار مشتری و شرکای تجاری را برآورده کند. گاهی اوقات تصمیمهای محتاطگونه برای کاهش ریسکها در یک پروژه، بهطور مستقیم روی کارایی و بهرهوری نرمافزار و محصول تاثیر گذاشته و آن عملکرد مورد انتظار به دست نمیآید. باید اطمینان حاصل شود که هر محصول و نرمافزار تمام آزمایشها و پروسههای ارزیابی را با موفقیت پشت سر گذاشته و در مسیر درستی توسعهیافته است.
سازماندهی:
روشن است که مشکلات سازماندهی میتواند تاثیرات منفی روی خروجی پروژه داشته باشد. مدیریت پروژه باید برای اجرای درست، بهموقع و موفقیتآمیز یک پروژه، برنامهریزی و طرحریزی کند. معمولا با متعادلسازی نیازهای تیم توسعه و انتظارات مشتری میتوان یک پروژه را به موفقیت رساند. انتخاب نیروی انسانی ماهر، باتجربه و استخدام کافی نیرو برای توسعه یک نرمافزار از جمله عواملی هستند که زمینهساز کاهش ریسکها میشوند.
طرحریزی مدیریت ریسک
پس از شناسایی و طبقهبندی همه ریسکهای احتمالی برای یک پروژه توسعه نرمافزار، مدیر پروژه باید یک طرح و برنامه برای مدیریت ریسکها ترسیم کند. مدیر پروژه (بهعنوان یک بخش از طرحی بزرگتر و جامعتر، در طرح و برنامه) باید برای هر ریسک یک پاسخ مشخص پیشبینیشده داشته باشد تا تاثیرات آن را کاهش دهد.
مانیتور و مقابله
برای موثر واقعشدن تصمیمهای مدیر پروژه در کاهش ریسکها، باید تیم توسعه بهطور مرتب و مستمر وضعیت ریسکها را در طول یک پروژه ردگیری و بررسی کند. به این معنا که در جلسههای پروژه و همینطور رویدادهای بحرانی، ریسکها کنترل و نظارت شوند. افراد تیم توسعه باید درباره ریسکهای احتمالی صحبت کنند و مدیران پروژه سراغ احتمال وقوع آنها و تصمیمهای پیشنهادشده در طرح مدیریت ریسک بروند. ردگیری ریسکها در پروژه شامل موارد زیر میشود:
انتشار گزارشهای وضعیت پروژه همراه با وضعیت مدیریت ریسک.
اصلاح و تجدیدنظر کردن در طرح مدیریت ریسک بر اساس تغییرات مهمی که در زمانبندی پروژه رخ داده است.
بررسی و اولویتبندی مجدد ریسکها و از بین بردن مواردی که احتمال وقوع کمتری دارند.
ایجاد طوفان فکری (Brainstorm) و مشکلگشایی گروهی پس از مشاهده یک ریسک جدید بالقوه و تغییر برنامهریزی پروژه برای مقابله با آن.
اتخاذ یک سیاست و واکنش بر اساس طرح مدیریت ریسک هنگام رخدادن ریسک.
گزینههای مقابله و کاهشدهنده ریسکها به شرح زیر هستند:
پذیرفتن (Accept): بهنوعی تسلیم شدن در برابر وقوع یک ریسک است. قبول میکنید پروژه با چنین ریسکی روبهرو است و ناچار به ادامه دادن پروژه هستید؛ اگرچه خسارتهای این ریسک را هم باید بپذیرید. معمولا در این شرایط، مدیران پروژه باید در تصمیمگیری حضور داشته باشند و از تاثیرات ریسک بر پروژه آگاه شوند.
اجتناب (Avoid): حاضر به پذیرفتن ریسک نشده و از همه امکانات و ظرفیتها برای محدودسازی و برطرف کردن کامل تاثیرات ریسک روی پروژه استفاده میکنید.
کنترل (Control): فعالیتها و کارهایی برای به حداقل رساندن تاثیرات ریسک انجام میدهید.
انتقال (Transfer): تغییر سازماندهی و چارچوب کلی پروژه برای انتقال ریسک به بخش، مسئول و تیم دیگری. گاهی اوقات یک تیم توسعهدهنده یا بخش دیگری از شرکت توانایی مقابله و کاهش تاثیرات یک ریسک را دارند.
ادامه نظارت (Continue Monitoring): معمولا برای ریسکهای با تاثیرات بسیار کم اتخاذ میشود ولی باید همچنان ریسکهای با تاثیرات بالا ردگیری و بررسی شوند تا واکنش بهموقع صورت گیرد.
ارتباطات
در طول یک پروژه باید ارتباط مستمر و موثری میان همه بخشها از جمله تیم توسعه، مدیران پروژه، بازاریابی و مشتری برقرار شود. به اشتراکگذاری گزارشها و اطلاعات مفید درباره وضعیت توسعه پروژه و دریافت بازخوردها میتواند باعث افزایش احتمال موفقیت یک پروژه و کاهش ریسکها شود.
بهترین ممارستهای مدیریت ریسک
مدیریت ریسک یک پروسه نیازمند نظم و ترتیب بسیار گسترده و طولانی است. هر فردی که با مدیریت پروژه، فعالیتهای میانی پروژهها و توسعه نرمافزار سر و کار دارد، باید با مباحث مدیریت ریسک و انواع روشهای مناسب برای کاهش ریسک در پروژههای مهندسی نرمافزار آشنا باشد. آنچه مهم است عدم وجود یک روش و پیشنهاد منحصربهفرد برای مدیریت ریسک در پروژههای نرمافزاری مختلف است. مدیران پروژه باید بر اساس مختصات پروژه نرمافزاری، یک یا چند روش مدیریت ریسک را انتخاب کرده و به کار گیرند. اغلب افراد با تجربهاندوزی و داشتن مهارت و ممارست در مدیریت ریسک میتوانند بهترین استراتژی را در مدیریت ریسک انتخاب و پیادهسازی کنند. برخی از تمرینها و ممارستهایی که میتوانند قدرت مدیریت ریسک افراد را افزایش دهند؛ به شرح زیر هستند:
۱- همیشه در هر وضعیتی از پروژه به مدیریت ریسک فکر کنید وگرنه یک تیم پروژه از یک بحران وارد بحران دیگر خواهد شد.
۲- از چکلیستها استفاده و آنها را با پروژههای مشابه دیگر مقایسه کنید.
۳- حتما ریسکها را بر اساس سطح تهدیدات آنها اولویتبندی کنید.
۴- فهرستهای ۱۰ ریسک و ۲۰ ریسک با اولویت بالا برای پروژه تهیه کنید. میتوانید این فهرستها را برای پروژههای متعدد استفاده و تغییر و بهبود دهید.
۵- با برگزاری جلسات مختلفی با تیمها و افراد درگیر با پروژه، بهخصوص تیمهای بازاریابی، خدمات پس از فروش و ارتباط با مشتری، سعی کنید با ریسکهای جدیدی آشنا شوید.
۶- در صورت امکان، ریسکهای بزرگ و بسیار موثر در شکست یا موفقیت یک پروژه را به تعدادی ریسک کوچکتر بشکنید. معمولا ریسکهای کوچکتر راحتتر تشخیص دادهشده و قابل کنترل هستند.
۷- مدیران و سهامداران یک پروژه را مدام تشویق کنید درباره ریسکها و مشکلات یک پروژه همفکری کرده و مواردی را که به ذهنشان میرسد، گزارش دهند. همیشه صحبت کردن درباره یک پروژه و خطرات بالقوه آن میتواند ریسکهای پهنان را آشکار کند.
ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را میتوانید از کتابخانههای عمومی سراسر کشور و نیز از دکههای روزنامهفروشی تهیه نمائید.
ثبت اشتراک نسخه کاغذی ماهنامه شبکه
ثبت اشتراک نسخه آنلاین
کتاب الکترونیک +Network راهنمای شبکهها
- برای دانلود تنها کتاب کامل ترجمه فارسی +Network اینجا کلیک کنید.
کتاب الکترونیک دوره مقدماتی آموزش پایتون
- اگر قصد یادگیری برنامهنویسی را دارید ولی هیچ پیشزمینهای ندارید اینجا کلیک کنید.
نظر شما چیست؟