مدیریت پروژه نرم افزاری، هنر و دانش برنامهریزی برای پروژههای نرم افزاری است. در واقع زیرمجموعهای از مبحث مدیریت پروژه است که به طور انحصاری به مدیریت، برنامهریزی، پیادهسازی و نظارت بر پروژههای نرم افزاری میپردازد.
آیا با استفاده از روشهای کلاسیک مدیریتی، میتوان فرآیند راهبری پروژههای نرم افزاری را هم به دست گرفت؟ برای پاسخ به این سوال، در ابتدا لازم است نگاهی به تاریخچه مدیریت پروژههای نرم افزاری داشته باشیم. نرم افزارهای رایانهای، در ابتدا صرفا به منظور برقراری ارتباط با سختافزارها نوشته میشد و در واقع کاربرد چندانی از آنها انتظار نمیرفت. با طرح مفهوم برنامهنویسی شیء گرا در سال ۱۹۶۰ میلادی، این رویکرد از سوی برنامهنویسان با استقبالی چشمگیر مواجه شد و در ادامه تولید محصولات نرم افزاری بین دهه ۶۰ و ۷۰ میلادی رشدی بیسابقه را تجربه کردند.
در این دوره، سعی بر آن بود تا بتوان به روشهای کلاسیک مدیریتی، پروژههای نرم افزاری را نیز راهبری کرد. اما رفته رفته سرعت تولید نرم افزارها کاهش یافت و مشکلات عدیدهای در مراحل تست و مدیریت تغییرات به وجود آمد. همین موضوع به خودی خود نشان میداد که روشهای سنتی مدیریت پروژه برای راهبری تیمهای نرمافزاری مناسب نبوده و برای مدیریت اینگونه پروژهها، رویکردی جدید مورد نیاز است.
مدیریت پروژه نرم افزاری چیست؟
به منظور پاسخ به این سوال، باید چند مفهوم کلیدی در رابطه با برنامهریزی، نظات و کنترل را در پروژههای نرم افزاری بدانیم. پروژههای تولید نرم افزار، تنها در صورتی ارزشمند هستند که بتوانند نیازهایی واقعی را برآورده کنند. بنابراین، حین فرآیند مدیریت پروژههای نرم افزاری همواره باید ذینفعان پروژه و اهداف آنها ورد توجه قرار گیرند. شناسایی این اهداف و موضوع برآورده شدن آنها، اساس یک پروژه موفق هستند. با این حال، رسیدن به این هدف تنها در صورتی ممکن است که اطلاعاتی دقیق در دسترس مدیر پروژه باشد.
تفاوت پروژههای نرم افزاری با انواع دیگر پروژهها
بسیاری از تکنیکهای مدیریت پروژههای عمومی، برای مدیریت پروژههای نرم افزاری هم کاربرد دارد. اما واقعیت امر این است که پروژههای نرم افزاری از اساس دارای ویژگیهای خاصی هستند که تفاوت آنها را مشخص میکند. در اینجا به شماری از این تفاوتها اشاره خواهد شد:
نامرئی بودن: هنگامی که یک محصول فیزیکی نظیر پل یا جاده ساخته میشود، روند پیشرفت این کار به خوبی قابل مشاهده است. این در حالی است که پیشرفت در توسعه یک پروژه نرم افزاری به شکل فوری قابل ملاحظه نیست.
پیچیدگی: به ازای هر ریال هزینهای که برای یک پروژه نرم افزاری صرف میشود، پیچیدگی بیشتری در محصول پدید خواهد آمد. این در حالی است که مثلا در یک پروژه دیگر نظیر ساخت پل، ساختمان یا …، صرف هزینهها تاثیر چندانی بر پیچیدگی پروژه ندارد.
انعطافپذیری: سهولت در تغییر نرم افزار ، معمولا به عنوان یکی از نقاط قوت آن شناخته میشود. زمانی که یک محصول نرم افزاری مطابق با نیاز یک سازمان و گروهی از کارکنان آن به تولید میرسد، انتظارها بر این است که نرم افزار بتواند خود را با نیاز افراد تطبیق دهد و نه بر عکس؛ در واقع این محصول نرم افزاری است که با دارا بودن درجه انعطافپذیری بالا، قادر است مطابق با هر نیازی خود را تغییر دهد.
مدیریت پروژه نرم افزاری شامل چه فعالیتهایی است؟
به طور کلی سه فرآیند پیدرپی در شکلگیری یک سیستم نرم افزاری نقش دارند.
- مطالعه امکانسنجی: این فرایند در واقع به منظور جمعآوری اطلاعات در رابطه با «ارزش» احتمالی پروژه است که طی آن، هزینههای احتمالی توسعه و عملیاتی را همراه با میزان ارزش و سوددهی سیستم برآورد میشوند. این ارزیابی ممکن است در قالب یک تمرین استراتژیک انجام شود که در آن طیف گستردهای از تحولات احتمالی نرم افزار مورد ارزیابی قرار گیرند.
- برنامهریزی: در صورتی که مطالعه امکانسنجی نتایجی مثبت را برای آینده پروژه پیشبینی کند، مرحله برنامهریزی پروژه در دستور کار قرار میگیرد. در واقع برای یک پروژه بزرگ، کلیه برنامهریزیها در همان مرحله اول انجام نمیگیرد. به جای آن، تنها یک طرح اصلی برای کلیت پروژه تعریف شده و در مراحل بعدی هریک از این فرآیندها با جزئیاتی دقیقتر برنامهریزی خواهند شد.
- اجرای پروژه: این مرحلهای است که پروژه میتواند اجرا شود. در تصویر زیر، نمایی از چرخه عمر پروژهای کلاسیک را مشاهده میکنید:

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