مدیریت پروژه نرم‌افزاری

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

## تاریخچه
تاریخچه مدیریت پروژه‌های نرم‌افزاری با تاریخچه تولید نرم‌افزار در هم آمیخته‌است. نرم‌افزارها در آغاز برای مقاصد خاص یا راه‌اندازی سخت‌افزارها نوشته می‌شد. اما با معرفی مفهوم برنامه‌نویسی شیءگرا در سال ۱۹۶۰ (میلادی) برنامه‌نویسی با این رویکرد مورد استقبال شرکت‌های توسعه نرم‌افزار قرار گرفت و در دهه‌های ۱۹۷۰ و ۱۹۸۰ روند تولید و توسعه نرم‌افزار رشد سریعی را تجربه کرد.

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

* عدم بیان روشن اهداف پروژه
* برآورد نادرست از منابع مورد نیاز پروژه
* تعریف نادرست نیازمندی‌ها
* گزارش‌دهی ضعیف روند پروژه
* استفاده از فناوری‌های نابالغ
* عدم توانایی در کنترل پیچیدگی‌های پروژه
* روش‌های توسعه غیر استاندارد
* مدیریت پروژه ضعیف
* سیاست‌های ذی‌نفعان
* فشارهای مربوط به جنبه‌های تجاری پروژه

سه مورد نخست در فهرست بالا نشان می‌دهد که عدم بیان روشن و بدون ابهام نیازمندی‌های نرم‌افزاری توسط مشتریان منجر به اشتباه در هدف‌گذاری و تخصیص منابع مورد نیاز پروژه می‌شود.

## برنامه‌ریزی، پایش و کنترل پروژه
هدف از برنامه‌ریزی پروژه نرم‌افزاری، مشخص نمودن محدوده (Scope) پروژه، تخمین حجم کاری مورد نیاز، تعيين گام‌هاي لازم جهت رسیدن به اهداف و در نتیجه تدوین یک برنامه زمان‌بندی جهت اجرای پروژه است.

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

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

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

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

## Issue
در مهندسی نرم‌افزار، **Issue** (مشکل) بخشی از کار است که در صورت حل (مانند رفع یک اشکال نرم‌افزاری (باگ)، مستندسازی یک کامپوننت یا تحلیل نیازمندی تازه)، عملکرد سامانه نرم‌افزاری بهبود می‌یاد. issueها معمولاً بر پایه پارامتر *میزان شدت* یا *میزان اهمیت* دسته‌بندی می‌شوند. این دسته‌بندی معمولاً به صورت زیر است:

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

در بسیاری از شرکت‌های نرم‌افزاری وظیفه استخراج و دسته‌بندی مشکلات نرم‌افزاری بر عهده تیم یا مسئول تضمین کیفیت است.

## پانویس

## منابع
* 

رده:مدیریت پروژه نرم‌افزاری
رده:توسعه نرم‌افزار
رده:مدیریت پروژه
رده:مهندسی نرم‌افزار