Saeid Noormohammadi
خواندن ۳ دقیقه·۲ ماه پیش

چرا و چگونه سیستم ها را دپریکیت کنیم؟ - بخش اول

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

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

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

اساس بحث ما در دپریکیت کردن این است که به کد به عنوان یک "بدهی" نگاه کنیم، نه یک "دارایی". کد هزینه دارد، بخشی از این هزینه هنگام ساخت پرداخت می شود، اما قسمت بیشتر آن در طول عمر سیستم صرف نگه داری، بروزرسانی و مدیریت آن می شود. بنابر این برای تصمیم گیری درباره دپریکیت کردن یک سیستم، باید هزینه ها و مزایا آن را به دقت بررسی کنیم.

نکته مهم این است که صرفا قدیمی بودن سیستم، دلیل کافی برای دپریکیت کردن آن نیست. بسیاری از سیستم های قدیمی مثل LaTeX، با وجود قدیمی بودن، همچنان کارآمد هستند و به تدریج بهبود پیدا می کنند. برای همین قدیمی بودن سیستم به تنهایی معیار مناسبی برای حذف آن نیست.

شاید این سوال پیش بیاید که اگر کد یک بدهی است، چرا این قدر برای نوشتن و بهبود آن تلاش می کنیم؟ پاسخ ساده است، کد به خودی خود ارزشی ندارد. آنچه ارزشمند است، فانکشنالیتی است که کد ارائه می دهد. کدی که بتواند نیاز کاربران را برطرف کند یک دارایی به حساب می آید. اگر همان فانکشنالیتی را بتوان با کدی ساده تر و قابل نگهداری تر به دست آورد، دیگر نیازی به هزاران خط کد پیچیده نیست.

به همین دلیل، به جای تمرکز بر روی حجم کدها، باید به این فکر کنیم که هر خط کد چه مقدار فانکشنالیتی ارائه می دهد. یکی از بهترین راه ها برای رسیدن به این هدف، حذف کدها و سیستم هایی است که دیگر نیازی به آن ها نداریم. فرایند دپریکیت کردن راهی ارزشمند برای این کار است.

حتی شرکت های بزرگ مثل گوگل همچنان در حال یادگیری بهترین روش ها برای دپریکیت کردن سیستم ها هستند. این فرایند گاهی مطابق برنامه پیش می رود و گاهی هم نه. به طور کلی، حذف سیستم های قدیمی همچنان یک چالش پیچیده و در حال پیشرفت می باشد.

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

منبع: کتاب Software Engineering at Google

شاید از این پست‌ها خوشتان بیاید