الكود القديم يزداد سوءاً مع مرور الزمن
الكود القديم (Legacy code) لا يتحسن بمرور الوقت، بل يزداد سوءاً.
قضيت الأسبوع الماضي ثلاث ساعات في إصلاح خطأ برمجي (bug). كان من المفترض أن يستغرق الأمر 20 دقيقة فقط. كانت المشكلة في وحدة تحقق (validation module) تعود لعام 2019. تجاهلها الجميع لأنها "تعمل". لكنها لم تكن تعمل. وجدت تعليق TODO من عام 2020 داخل الملف.
يتعامل الكثيرون مع الكود القديم كأنه دين اختياري، ويظنون أن بإمكانهم سداده عندما يتوفر لديهم الوقت. لكن الكود القديم يشبه العفن؛ فهو ينتشر ويلوث أجزاءً أخرى من نظامك. وكلما تجاهلته لفترة أطول، زادت تكلفة تنظيفه.
وهذا يخلق حلقة مفرغة:
- ترث مشروعاً فوضوياً.
- تضيف جملة
ifأخرى لجعل ميزتك البرمجية تعمل. - بعد ستة أشهر، يفعل شخص آخر الشيء نفسه.
- بعد عام واحد، يصبح الملف مكوناً من 800 سطر وبدون أي اختبارات.
هذا الكود "الذي يعمل" له تكاليف خفية:
- تنخفض سرعة التطوير؛ حيث تقضي وقتاً في قراءة السياق أكثر مما تقضيه في كتابة الكود.
- تزداد الأخطاء؛ فإصلاح شيء واحد قد يؤدي إلى تعطل شيء آخر.
- تصبح عملية انضمام المطورين الجدد (onboarding) صعبة، حيث يجدون صعوبة في فهم سبب تكرار المنطق البرمجي في كل مكان.
انتبه لهذه العلامات التحذيرية:
- تعليقات عديمة الفائدة أو مضللة.
- تكرار منطق العمل (business logic) في ملفات مختلفة.
- الاعتمادات الدائرية (circular dependencies) والارتباط الوثيق (high coupling).
لا تحاول إعادة كتابة كل شيء. فعمليات إعادة الكتابة الكاملة تفشل بنسبة 80% من الوقت. ستقضي شهوراً في إعادة بناء ما هو موجود بالفعل بينما تنتظر الشركة ميزات جديدة.
استخدم إعادة الهيكلة التدريجية (incremental refactoring) مع اختبارات التوصيف (characterization tests):
- وثّق السلوك الحالي باستخدام الاختبارات، حتى لو كان غريباً.
- أعد الهيكلة دون تغيير هذا السلوك.
- كرر العملية حتى يصبح الكود قابلاً للقراءة.
- عندها فقط، قم بتغيير السلوك باستخدام اختبارات حقيقية.
اتبع هذه القواعد لتجنب الفخاخ:
- لا تقم أبداً بإعادة الهيكلة بدون اختبارات.
- لا تغير السلوك أثناء إعادة الهيكلة؛ فقد يكون الخطأ ميزة غير موثقة يعتمد عليها العميل.
- اترك الكود المستقر وشأنه. إذا لم تتغير وحدة برمجية منذ ثلاث سنوات ولم تسبب أي مشاكل، فاتركها كما هي.
ركز طاقتك على الكود الذي تلمسه وتعدل عليه باستمرار.
المصدر: https://dev.to/taina_costa_f/legacy-code-nao-envelhece-como-vinho-quanto-mais-espera-pior-fica-132h
