লেগাসি কোড সময়ের সাথে সাথে আরও খারাপ হয়

লেগাসি কোড ওয়াইনের মতো সময়ের সাথে সাথে উন্নত হয় না। আপনি যত দিন এটি অবহেলা করবেন, এটি তত দিন খারাপ হতে থাকবে।

গত সপ্তাহে, আমি একটি সমস্যা ডিবাগ করতে তিন ঘণ্টা ব্যয় করেছি যা মাত্র ২০ মিনিটে সমাধান করা সম্ভব ছিল। এর মূল কারণ ছিল ২০১৯ সালের একটি ভ্যালিডেশন মডিউল। মানুষ এটি পরিবর্তন করেনি কারণ এটি কাজ করছিল। আসলে এটি কাজ করছিল না। আমি ২০২০ সালের একটি "TODO: refactor this" কমেন্ট খুঁজে পেয়েছি।

অনেকেই লেগাসি কোডকে একটি ঐচ্ছিক ঋণ হিসেবে বিবেচনা করেন। তারা মনে করেন যখন সময় পাবেন তখন এটি পরিশোধ করবেন। লেগাসি কোড ছাঁচের (mold) মতো কাজ করে। এটি ছড়িয়ে পড়ে। এটি চারপাশের সবকিছুকে আক্রান্ত করে। আপনি যত বেশি দেরি করবেন, এটি পরিষ্কার করা তত বেশি ব্যয়বহুল হয়ে উঠবে।

এই চক্রটি অনুমানযোগ্য:

  • আপনি একটি অগোছালো কিন্তু কাজ করছে এমন একটি ফিচার উত্তরাধিকারসূত্রে পান।
  • এটি কাজ করানোর জন্য আপনি আরও একটি "if" স্টেটমেন্ট যোগ করেন।
  • ছয় মাস পর, অন্য কেউ একই কাজ করে।
  • এক বছর পর, ফাইলটিতে ৮০০ লাইন কোড থাকে এবং কোনো টেস্ট থাকে না।

এই লুকানো খরচটি আপনাকে তিনটি উপায়ে আঘাত করে:

  • গতি কমে যায়। কোড লেখার চেয়ে প্রেক্ষাপট (context) বোঝার পেছনেই আপনি বেশি সময় ব্যয় করেন।
  • বাগ বৃদ্ধি পায়। লজিকগুলো জট পাকানো থাকায় একটি সমস্যার সমাধান করতে গিয়ে অন্য কিছু ভেঙে যায়।
  • অনবোর্ডিং ব্যর্থ হয়। নতুন ডেভেলপারদের বুঝতে সমস্যা হয় কেন একই লজিক সাতটি ভিন্ন জায়গায় বিদ্যমান।

এই রেড ফ্ল্যাগ বা সতর্ক সংকেতগুলোর দিকে নজর দিন:

  • "HACK: do not touch this" এর মতো অপ্রয়োজনীয় কমেন্ট।
  • বিভিন্ন ফাইলে একই বিজনেস লজিকের পুনরাবৃত্তি।
  • সার্কুলার ডিপেন্ডেন্সি যেখানে সার্ভিসগুলো একে অপরের ওপর নির্ভরশীল।

সবকিছু নতুন করে লিখবেন না। সম্পূর্ণ নতুন করে লেখা (Full rewrites) ৮০% ক্ষেত্রে ব্যর্থ হয়। পরিবর্তে, characterization tests-এর মাধ্যমে ধাপে ধাপে রিফ্যাক্টরিং করুন।

এই প্রক্রিয়াটি অনুসরণ করুন:

  • এমনকি অদ্ভুত অংশগুলোসহ বর্তমান আচরণটি টেস্টের মাধ্যমে ক্যাপচার করুন।
  • সেই আচরণ পরিবর্তন না করেই কোডটি রিফ্যাক্টর করুন।
  • কোডটি পঠনযোগ্য না হওয়া পর্যন্ত এটি পুনরাবৃত্তি করুন।
  • প্রকৃত টেস্ট থাকা নিশ্চিত করার পরেই কেবল আচরণ পরিবর্তন করুন।

মেনে চলার নিয়মাবলী:

  • টেস্ট ছাড়া কখনোই রিফ্যাক্টর করবেন না।
  • এমন কোনো উন্নতি এড়িয়ে চলুন যা কোডের আচরণ পরিবর্তন করে। একটি বাগ হয়তো এমন একটি ফিচার যা ক্লায়েন্ট ব্যবহার করছে।
  • শান্ত কোড বা যে কোড নিয়ে কোনো সমস্যা নেই তা পরিবর্তন করবেন না। যদি একটি মডিউল তিন বছর ধরে পরিবর্তিত না হয় এবং কোনো সমস্যা তৈরি না করে, তবে সেটি স্পর্শ করবেন না।

আপনার শক্তি সেই কোডগুলোর ওপর ব্যয় করুন যা আপনি প্রায়ই ব্যবহার বা পরিবর্তন করেন।

উৎস: https://dev.to/taina_costa_f/legacy-code-nao-envelhece-como-vinho-quanto-mais-espera-pior-fica-132h