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

بسترهای قدیمی در مقابل رشد تکنولوژی
همه نرمافزارها در ابتدای شکلگیری بر اساس مفاهیم مهندسی نرمافزار در فاز تولید قرار میگیرد. در این فاز، بر اساس نیازمندیهای تعریف شده، نرمافزار وارد فرآیندهای مختلف تحلیل، معماری، طراحی، پیادهسازی و تست میشود. بعد از پایان این مراحل، نرمافزار به فاز توسعه و نگهداری میرود تا بدون تغییر اساسی در مفاهیم یا رفتارها و صرفا برای رفع باگهای موجود از آن، نگهداری شود.
معمولا تغییرات نرمافزارها در طول حیاتش باعث ناپایداری آن، میشوند. نرمافزار همچنان کار میکند؛ اما هر تغییر باعث ایجاد تاثیرات غیر قابل کنترلی در سایر قسمتهای آن میشود و در نهایت آن را غیر قابل نگهداری میکند. در این شرایط نیاز است که با بازمهندسی حیات دوبارهای به او بخشیده شود؛اما این تنها علت برای بازمهندسی نرمافزار نیست.
پلتفرمهای جدیدی مثل
پلتفرم موبایل در ساختارهای نرمافزاری ایجاد میشوند که انجام امور توسط کاربران را راحتتر میکنند. از این رو نیاز است تا نرمافزارها به این تکنولوژیهای جدید انتقال پیدا کنند؛ به عنوان مثال میتوان استفاده از نرمافزارهای موبایلی و میزان وابستگی افراد به این پلتفرم در مدت زمان 6 یا 7 سال پیش با حال حاضر مقایسه کرد. ایجاد علوم و تکنولوژیهای جدید در مدت زمانی که نرمافزارها در فاز توسعه و نگهداری هستند برای حفظ قابلیت توسعه آنها نیاز به بازمهندسی را اجتنابناپذیر میکند.
نرمافزارها در طول حیات خود در فاز نگهداشت معمولا توسط افراد مختلف با میزان مهارتهای متفاوت، توسعه داده میشوند. این توسعه مکرر در سالهای طولانی باعث تغییرات بنیادین در کدهای نرمافزار میشوند که معمولا کدهای اولیه را تبدیل به کدهایی پیچیده وغیر قابل توسعه، میکنند. از این رو نیاز است که با بازنگری بر روی منابع کد موجود در نرمافزار و ریفکتور کردن آنها توسعهپذیری و پشتیبانیپذیری نرمافزار را به آن برگرداند.
اهداف فرآیند بازمهندسی در نرمافزارهای مکاتبات اداری • تغییر رفتار نرمافزار برای پشتیبانی از فرایندهای تغییریافته در شرکتهای مشتری
• تغییر معماری نرمافزار به منظور استفاده از علوم و تکنولوژیهای جدیدتر
• تغییر کد به منظور توسعهپذیری و نگهداشت بهتر نرمافزار
چگونگی فرایند بازمهندسی نرمافزاربنا برتقسیمبندی فازهای تقریبا مشترک در بین تمامی فرایندهایی که بر مبنای اصول بازمهندسی میتوان گفت که این فرایند شامل فازهای اصلی مهندسی معکوس، بازطراحی، بازسازی کد، تست و استقرار و بازخوردگیری خواهد بود.
مهندسی معکوسبه صورت خیلی ساده میتوان گفت مهندسی معکوس عملیاتی است که طی آن از روی منابع کد به طراحی، قوانین و مقررات کسب و کار نرمافزار که همان نیازمندیهای اولیه است، میتوان دست پیدا کرد. در مهندسی نرمافزار نیازهای اولیه تحلیل، طراحی و سپس به کد تبدیل میشوند. مستندات مختلفی از نرمافزار در فازهای مختلف تولید نرمافزار بوجود میآیند که به مرور زمان، قدیمی و ناکارآمد میشوند و بر اساس تغییراتی که در طول زندگی خود داشته است از درجه اعتبار ساقط میشوند؛ بنابراین نیاز است به هر هدفی که عملیات بازمهندسی میخواهد صورت بگیرد ابتدا قواعد، قوانین و رفتارهای فعلی نرمافزار به صورت جامع شناسایی شوند. همه این اقدامات در فاز مهندسی معکوس، ممکن میشوند. افراد درگیر در پروژه بازمهندسی در این فاز، شروع به خواندن کدهای نرمافزار میکنند و این کدها را ابتدا به نمودارهای طراحی، معماری و سپس به داستانهای کاربران و یا قواعد و قوانین کسب و کاری که از آنها بهره میگیرند، تبدیل میکنند.
بازطراحیدر این فاز در صورتی که هدف، تغییر معماری باشد عملیاتهای بازطراحی مشخصکننده ساختار نرمافزار بعد از اعمال تغییرات خواهد بود و در صورتیکه هدف، تغییر رفتارهای نرمافزار باشد عملیاتهای بازطراحی، رفتار و معماری نرمافزار بر اساس رفتارهای جدید را شامل میشود. این کار بر اساس عملیاتهایی بالا به پایین، سعی میکند دوباره و بر اساس هدف مشخص شده، طراحی مجددی داشته باشد. برای این کار از بالاترین سطح انتزاع به دست آمده از عملیات مهندسی معکوس، استفاده میشود. برای هر سطح مجموعه طراحیهایی صورت میگیرد که بر اساس هدف مشخص شده، رفتا نهایی نرمافزار را رقم میزند. در این فاز گاهی ماژولها باقی میمانند و برخی از رفتارهای آنها منقضی و رفتارهای جدید جایگزین آن میشوند و گاهی همان رفتارها به معماری جدید و ساختار تکنولوژیک متفاوتی، منتقل میشوند. همچنین در این بازطراحی ممکن است ساختار دادههای نرمافزار مورد بازبینی قرار گیرند و در انتهای این فاز، نقشه راهی برای تبدیل کدهای فعلی به کدهای مطلوب به دست بیاید.
بازسازی کدعملیات بازسازی کد شاید پیچیدهترین فاز بازمهندسی نرمافزار است؛ زیرا همواره تغییر دادن کد موجود به کدی جدید که در کنار تغییرات احتمالی رفتار و معماری، قابلیت پشتیبانی و توسعه داده باشد و عاری از هر گونه مشکلی پیش از بازمهندسی باشد بسیار سختتر از نوشتن یک نرمافزار جدید است. در انتهای این فاز اطمینان حاصل میشود که کدهای بازسازی شده هیچگونه ناهنجاریهای پیشین را نداشته باشند.
تستتستهایی مانند تست واحد، یکپارچگی، تست بار، کارآیی و امنیت مجموعه تستهایی هستند که بر اساس اهمیت بخشهای مختلف نرمافزار و بودجه تعیین شده برای بازمهندسی صورت میگیرند. نتایج این تستها در بهبود کیفیت محصول تولید شده بعد از بازمهندسی، تعیین کنندهاند. در این فاز، نرمافزار مانند اصول مهندسی به صورت جامع تست میشود تا پیش از انتشار، مجموعه باگها و مشکلات آن پیدا و رفع شوند.
استقرار و پشتیبانیدر این نیاز است که مستندات راهنما به روز شوند و آموزشهای لازم برای استفاده از
سیستم اتوماسیون ادرای (در صورت تغییر در رفتار نرمافزا) به مشتریان داده شود و عملیات پشتیبانی برای رفع عیوب و بازخوردگیری از نرمافزار به صورت کامل انجام پذیرند.