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