بعد از اين‌كه سيستم نرم‌افزاري توليد شد و توانست نيازهاي كاربرانش را تأمين كند، هنوز كار يك پروژه نرم‌افزاري به اتمام نرسيده است، زيرا تازه نوبت نگهداري از آن نرم‌افزار مي‌رسد و هر لحظه ممكن است تغييراتي در نرم‌افزار از سوي كاربر درخواست شود يا حتي نرم‌افزار با مشكلي غيرقابل پيش‌بيني روبه‌رو شود كه نياز به نگهداري نرم‌افزار را آشكار مي‌سازد‌.‌

بعد از اين‌كه سيستم نرم‌افزاري توليد شد و توانست نيازهاي كاربرانش را تأمين كند، هنوز كار يك پروژه نرم‌افزاري به اتمام نرسيده است، زيرا تازه نوبت نگهداري از آن نرم‌افزار مي‌رسد و هر لحظه ممكن است تغييراتي در نرم‌افزار از سوي كاربر درخواست شود يا حتي نرم‌افزار با مشكلي غيرقابل پيش‌بيني روبه‌رو شود كه نياز به نگهداري نرم‌افزار را آشكار مي‌سازد‌.‌ رويه نگهداري نرم‌افزار بسيار شبيه و به سختي رويه توليد نرم‌افزار است و بر مباني زير تأكيد مي‌كند:


- كنترل روي رويه‌هاي سيستم

- كنترل روي تغييرات سيستم

- ايجاد تغييرات براي افزايش كارايي سيستم

-جلوگيري از كاهش كيفيت و كارايي سيستم


تعميرپذيري (Maintainability) يك نرم‌افزار يكي از پارامترهايي است كه هنگام ارزيابي فني يك نرم‌افزار به آن توجه داريم و به كيفيت طراحي، تحليل، كدنويسي، كدهاي برنامه و مستندسازي آن نرم‌افزار و سيستم بستگي دارد. همچنين قابليت و توانايي‌هاي فني تيم نگهداري نرم‌افزار و ميزان سختي نرم‌افزار نيز بر تعميرپذيري يك نرم‌افزار تأثيرگذار هستند.


براي اندازه‌گيري تعميرپذيري يك نرم‌افزار اغلب از ميزان MTR (سرنام Mean Time To Repair) يا متوسط زمان براي تعمير استفاده مي‌شود كه فاصله زماني بين زمان گزارش مشكل در نرم‌افزار تا اصلاح مشكل و راه‌اندازي دوباره نرم‌افزار است. هر اندازه MTR يك نرم‌افزار كمتر باشد، تعميرپذيري سيستم نرم‌افزاري بالاتر و در نتيجه نرم‌افزار مرغوب‌تر است. براي اين‌كه بتوانيم MTR كمتري داشته باشيم، بايد از استراتژي‌هاي نگهداري نرم‌افزار استفاده كنيم.


استراتژي‌هاي نگهداري‌

استراتژي‌هايي را كه فقط براي مديريت نگهداري نرم‌افزار به كار گرفته مي‌شوند و بايد هميشه موردنظر تيم نگهداري نرم‌افزار قرار گيرد، مي‌توانيم در سه عنوان زير ذكر كنيم:

1- استراتژي نگهداري بهبود‌‌بخش (Corrective)

براي اين‌كه يك نرم‌افزار هيچ‌گاه از كار روزانه باز نماند، بايد از اين استراتژي استفاده كرد. از آنجا كه بيشتر اشكالاتي كه ممكن است يك نرم‌افزار پيدا كند، اغلب از اشكالات SRS ،RDD، طراحي، كدنويسي آن نشأت مي‌گيرد مي‌توان با اين استراتژي، مشكلات كوچك به وجود آمده را حل كرد.


2- استراتژي سازگار (Adoptive)

براي زماني به كار مي‌رود كه مي‌خواهيم مثلاً فناوري يا پلتفرم سيستم را تغيير دهيم و در آن نرم‌افزار را به نوعي تغيير مي‌دهيم كه با آن فناوري يا پلتفرم سازگار باشد.


3- استراتژي پيشگيرانه (Preventive)

يكي از بهترين راه‌هايي است كه مي‌توانيم استفاده كنيم و با تغييرات اصلاحي و رفع مشكلات كوچك از وقوع مشكل و باگ بزرگ در سيستم جلوگيري كنيم.

اغلب، استفاده از استراتژي بهبودبخش و پيشگيرانه، بيشترين كاربرد را در مديريت نگهداري نرم‌افزارها دارد. البته، نبايد اين نكته را ناديده گرفت كه اجراي هر كدام از اين استراتژي‌هاي نگهداري نرم‌افزار، هزينه قابل توجهي را در بر دارد كه بايد مورد توجه گروه نگهداري سيستم‌هاي نرم‌افزاري قرار گيرد.

هزينه نگهداري‌

هزينه نگهداري سيستم‌هاي نرم‌افزاري تقريباً معادل نيمي از هزينه ساخت تمامي مراحل نرم‌افزار مي‌شود. البته، نبايد اين نكته را ناديده گرفت كه اين هزينه كاملاً به نوع نرم‌افزار، نوع فناوري‌هاي استفاده شده در نرم‌افزار، نوع طراحي، مستندات و كيفيت آزمايشي كه روي نرم‌افزار انجام شده، بستگي دارد كه مي‌توان از روش COCOMO (روش اندازه‌گيري هزينه توليد نرم‌افزار) نيز براي اندازه‌گيري اين معيار استفاده كرد.

ابزارهاي نگهداري

تكنيك‌هايي كه مي‌توان در نگهداري نرم‌افزارها از آن استفاده كرد، عبارتند از:

- مديريت تغييرات، نگهداري و ردگيري تمامي تغييراتي كه در سيستم به وجود مي‌آيد به همراه تاريخ، ساعت و نوع تغيير و توضيح در مورد اشكال يا تغييرات اصلاحي‌

- مديريت ساختار و حفظ ساختار اصلي برنامه بدون اين‌كه در عملكرد آن مشكلي به وجود آيد.

- آناليز تأثيرگذاري (براي محاسبه هزينه نگهداري)

- استفاده از ابزارهاي خودكار جهت تعمير و نگهداري نرم‌افزارها


استفاده از ابزارهاي خودكار مي‌تواند MTR نرم‌افزار را پايين آورده و باعث شود گروه نرم‌افزاري به آساني نرم‌افزار را نگهداري كند. ابزارهاي متنوعي براي تعمير و نگهداري سيستم‌هاي نرم‌افزاري وجود دارد كه مي‌توانيم به موارد زير اشاره داشته باشيم:


- ابزارهايي خودكار براي شناسايي تفاوت دو فايل برنامه

- ابزارهاي شناسايي اشكال و Debugging

- ابزارهاي نوشتن كدهاي برنامه كه به صورت خودكار تغييرات را نيز ركورد مي‌كنند و در زمان مورد نياز آن تغييرات را اعمال مي‌كنند.

- ابزارهاي اندازه‌گيري كدها (براي اندازه‌گيري هزينه نگهداري نرم‌افزار براساس تعداد خط كد و پارامترهاي ديگر برنامه‌نويسي مانند درج