অ্যাপ ডেভেলপমেন্টে লিগ্যাসি — এটি কী, ঝুঁকি এবং কাজের কৌশল

লেখক: IT Sectr প্রকাশিত: 2026-07-27 পড়ার সময়: 7 মিনিট

লিগ্যাসি — এটি শুধু পুরনো কোড নয়। এটি একটি কার্যকরী সিস্টেম যা ব্যবসার জন্য অর্থ আনে কিন্তু উন্নয়নকে ধীর করে দেয়। মোবাইল ডেভেলপমেন্টে, লিগ্যাসি Objective-C-তে লেখা হতে পারে, পুরনো লাইব্রেরি বা আর্কিটেকচারাল প্যাটার্ন ব্যবহার করতে পারে। CAST Software (2024)-এর রিপোর্ট অনুযায়ী, এন্টারপ্রাইজ প্রকল্পে কোডের একটি লাইনের গড় বয়স ১৪ বছর ছাড়িয়ে যায়। লিগ্যাসি নিয়ে কাজের কৌশল নির্ধারণ করে এটি বাধা হয়ে দাঁড়াবে নাকি ব্যবস্থাপনাযোগ্য সম্পদ হিসেবে থাকবে।

মূল বিষয়

  • লিগ্যাসি — কোড যা প্রোডাকশনে চলে কিন্তু পুরনো প্রযুক্তি বা পদ্ধতি ব্যবহার করে
  • লিগ্যাসি রক্ষণাবেক্ষণ — ঐতিহাসিক সিদ্ধান্ত বোঝা এবং সতর্ক রিফ্যাক্টরিং প্রয়োজন
  • মাইগ্রেশন কৌশল — Strangler Fig-এর মাধ্যমে পণ্য বন্ধ না করে মডিউলের ধাপে ধাপে প্রতিস্থাপন
  • লিগ্যাসি পরীক্ষা — characterization tests রিফ্যাক্টরিংয়ের আগে বর্তমান আচরণ রেকর্ড করে
  • কোডের বয়স নিজেই সমস্যা নয় — সমস্যা হল পরীক্ষা এবং আর্কিটেকচারাল দৃষ্টিভঙ্গির অভাব

অ্যাপ ডেভেলপমেন্টে লিগ্যাসি কী

লিগ্যাসি — কোড বা সিস্টেম যা প্রোডাকশনে চলতে থাকে কিন্তু আধুনিক মানের মান পূরণ করে না। লিগ্যাসি একটি পুরনো ভাষায় লেখা হতে পারে (যেমন, Objective-C Swift-এর পরিবর্তে), অসমর্থিত লাইব্রেরি বা আর্কিটেকচারাল প্যাটার্ন ব্যবহার করতে পারে যা দীর্ঘদিন ধরে অ্যান্টি-প্যাটার্ন হিসেবে বিবেচিত।

লিগ্যাসির মূল বৈশিষ্ট্য হল পরীক্ষার অনুপস্থিতি। Michael Feathers (2004)-এর সংজ্ঞা অনুযায়ী, লিগ্যাসি কোড হল পরীক্ষাবিহীন কোড। যদি আপনি নিরাপদে আচরণ পরিবর্তন করতে না পারেন, তাহলে সিস্টেম বয়স নির্বিশেষে লিগ্যাসি অবস্থায় রয়েছে। ইউনিট টেস্ট ছাড়া নতুন কোড প্রথম দিন থেকেই লিগ্যাসি।

লিগ্যাসি অগত্যা খারাপ নয়। Java 8-এ একটি সুপরিকল্পিত সিস্টেম, কোরুটিন সহ Kotlin-এ বিশৃঙ্খল কোডের চেয়ে বেশি নির্ভরযোগ্য এবং বোধগম্য হতে পারে। কোডের বয়স গুণমানের সূচক নয় — গুরুত্বপূর্ণ হল সিস্টেমটি কত সহজে পরিবর্তন ও সম্প্রসারণ করা যায়।

কেন লিগ্যাসি কোড স্বাভাবিক

প্রত্যেক সফল সিস্টেম সময়ের সাথে সাথে লিগ্যাসি হয়ে যায়। এটি একটি স্বাভাবিক প্রক্রিয়া: প্রযুক্তি কোড পুনর্লিখনের চেয়ে দ্রুত বিকশিত হয়। ৫ বছর আগে Swift 2-এ লেখা একটি অ্যাপ আজ লিগ্যাসি, যদিও এটি তৈরির সময় আধুনিক ছিল।

লিগ্যাসির ব্যবসায়িক মূল্য প্রায়ই অবমূল্যায়িত হয়। সিস্টেম নির্ভরযোগ্যভাবে কাজ করে, লেনদেন প্রক্রিয়া করে, ডেটা সংরক্ষণ করে — পুনর্লিখন ঝুঁকি বহন করে। Standish Group (2024) অনুযায়ী, সম্পূর্ণ পুনর্লিখন প্রকল্পের ৩৫% ব্যর্থতায় শেষ হয়। অর্থনৈতিকভাবে লিগ্যাসি থেকে মুক্তি পাওয়া নয়, বরং এর সাথে কাজ করতে শেখা যুক্তিযুক্ত।

সেরা কৌশল — ধীরে ধীরে মাইগ্রেশন, নতুন ইন্টারফেসের পিছনে পুরনো কোড এনক্যাপসুলেট করা এবং স্বয়ংক্রিয় পরীক্ষা। লিগ্যাসি তখনই সমস্যা হয় যখন এটি পূর্বাভাসযোগ্য খরচে পরিবর্তনযোগ্য থাকে না।

লিগ্যাসি সিস্টেমের প্রধান লক্ষণ

স্বয়ংক্রিয় পরীক্ষার অভাব — প্রধান সূচক। যদি একটি লাইন পরিবর্তনের পর ডেভেলপার পরীক্ষা চালিয়ে নিশ্চিত করতে না পারেন যে কিছু ভাঙেনি — আপনি লিগ্যাসির সম্মুখীন। অতিরিক্ত লক্ষণ: ডিপ্লয় প্রক্রিয়ায় ঘন্টা লাগে এবং ম্যানুয়াল পদক্ষেপ প্রয়োজন।

ডকুমেন্টেশন কোডের সাথে মেলে না — আরেকটি চিহ্ন। আর্কিটেকচারাল ডায়াগ্রাম পুরনো, মন্তব্য এমন আচরণ বর্ণনা করে যা ইতিমধ্যে পরিবর্তিত হয়েছে। নতুন ডেভেলপারের জন্য শেখার সময় এক মাসের বেশি — উচ্চ জটিলতা এবং কম রক্ষণাবেক্ষণযোগ্যতার লক্ষণ।

অতিরিক্ত লক্ষণ: স্পষ্ট সীমানা ছাড়া মনোলিথিক আর্কিটেকচার, প্রধান যাচাই পদ্ধতি হিসেবে ম্যানুয়াল পরীক্ষা, দীর্ঘ CI পাইপলাইন (৩০ মিনিটের বেশি), বর্তমান সংস্করণ ছাড়া লাইব্রেরি ব্যবহার, এবং সম্পর্কিত মডিউল ভাঙা ছাড়া নির্ভরতা আপডেট করতে অক্ষমতা।

ভঙ্গুর কোডের ঘটনা — এক জায়গায় পরিবর্তন তিনটি অন্য জায়গা ভেঙে দেয়। এটি টাইট কাপলিংয়ের ফল, যখন মডিউল একে অপর সম্পর্কে খুব বেশি জানে। কাপলিং যত বেশি, সিস্টেম তত দ্রুত লিগ্যাসি বিভাগে চলে যায়।

পুরনো কোড নিয়ে কাজের ঝুঁকি

গতি হ্রাস — প্রধান ঝুঁকি। একটি সাধারণ ফিচার যোগ করতে কোড অধ্যয়নে ঘন্টা এবং পরীক্ষায় দিন লাগে। Stripe (2024) অনুযায়ী, ডেভেলপাররা তাদের ৩৩% সময় টেকনিক্যাল ডেট কাটিয়ে উঠতে ব্যয় করে, যা সরাসরি প্রকল্পে লিগ্যাসি মডিউলের উপস্থিতির সাথে সম্পর্কিত।

বিশেষজ্ঞতা ফাঁস — মূল কোডের লেখক কোম্পানি ছেড়ে চলে যান এবং ডকুমেন্টেশন অসম্পূর্ণ। নতুন ডেভেলপাররা অপরিচিত মডিউল স্পর্শ করতে ভয় পান, যার ফলে হিমায়িত কোডের প্রভাব পড়ে: মডিউল বিকশিত হয় না কিন্তু কাজ করতে থাকে। এই ধরনের সিস্টেমের বাস ফ্যাক্টর গুরুতরভাবে কম।

নিরাপত্তা — পুরনো লাইব্রেরিতে পরিচিত দুর্বলতা থাকে। Java প্রকল্পে OpenSSL 1.0.2 বা Jackson-এর পুরনো সংস্করণ ব্যবহার করা নিরাপত্তা ঘটনার সরাসরি পথ যা ব্যবসার সুনাম এবং গ্রাহকদের ক্ষতি করতে পারে।

টিমের অনুপ্রেরণা হ্রাস — উন্নতির কৌশল ছাড়া লিগ্যাসি নিয়ে কাজ ডেভেলপার সন্তুষ্টি কমিয়ে দেয়। টিম পণ্য নিয়ে গর্বিত হওয়া বন্ধ করে দেয়, কর্মচারী টার্নওভার বেড়ে যায়, যা সিস্টেম উন্নয়নকে আরও ধীর করে দেয়।

লিগ্যাসি রিফ্যাক্টরিং কৌশল

Characterization tests — লিগ্যাসি কোডে কোনো পরিবর্তনের আগে প্রথম ধাপ। পরিচিত ইনপুট ডেটায় কোড চালান এবং প্রত্যাশিত আউটপুট রেকর্ড করুন। এই পরীক্ষাগুলি বর্তমান আচরণকে একটি নির্দিষ্টকরণ হিসাবে ক্যাপচার করে। Golden master testing — একটি পদ্ধতি যেখানে আউটপুট একটি রেফারেন্স ফাইলের সাথে তুলনা করা হয়।

Seam বিশ্লেষণ — সেই বিন্দুগুলি খুঁজে বের করা যেখানে আচরণ পরিবর্তন না করেই কাপলিং ভাঙা যায়। Michael Feathers বিভিন্ন ধরনের seams চিহ্নিত করেন: preprocessor seam, object seam, link seam। Object seam সবচেয়ে সাধারণ: একটি ইন্টারফেসের মাধ্যমে বাস্তব অবজেক্টকে টেস্ট স্টাব দিয়ে প্রতিস্থাপন করা।

Sprout method এবং Sprout class — পুরনো কোডের ভিতরে না হয়ে পাশে নতুন কোড যোগ করার কৌশল। বিদ্যমান মেথড পরিবর্তন করার পরিবর্তে, পছন্দসই লজিক সহ একটি নতুন মেথড তৈরি করুন এবং পুরনো থেকে এটি কল করুন। এতে কাজ করা কোড ভাঙার ঝুঁকি কমে যায়।

উদাহরণ: লিগ্যাসিতে লগিং যোগ করা

groovy
class LegacyPaymentProcessor {
    def process(payment) {
        // পুরনো কোডের ২০০ লাইন যা স্পর্শ করা উচিত নয়
        logPayment(payment) // sprout পদ্ধতি
    }
    def logPayment(payment) {
        // পুরনো কোডের পাশে যোগ করা নতুন কোড
    }
}

আধুনিক টেক স্ট্যাকে মাইগ্রেশন

Strangler Fig প্যাটার্ন — লিগ্যাসি মাইগ্রেশনের জন্য প্রস্তাবিত পদ্ধতি। একটি নতুন মডিউল সমান্তরালে তৈরি করা হয়, ট্রাফিক ধীরে ধীরে পুরনো থেকে নতুনে স্যুইচ করা হয়। পুরনো মডিউল স্বাভাবিকভাবেই শেষ হয়ে যায় যখন এটি অনুরোধ পাওয়া বন্ধ করে দেয়। প্যাটার্ন ঝুঁকি কমায় এবং সমস্যার ক্ষেত্রে রোলব্যাকের অনুমতি দেয়।

Branch by Abstraction — একটি কৌশল যেখানে পুরনো এবং নতুন বাস্তবায়নের উপর একটি অ্যাবস্ট্র্যাকশন তৈরি করা হয়। ক্লায়েন্ট কোড অ্যাবস্ট্র্যাকশনে স্যুইচ করে, এবং পুরনো বাস্তবায়ন ধীরে ধীরে প্রতিস্থাপিত হয়। উদাহরণ: একটি ইউনিফাইড NetworkService প্রোটোকলের মাধ্যমে AFNetworking থেকে Alamofire-এ নেটওয়ার্কিং লেয়ার প্রতিস্থাপন করা।

ধাপে ধাপে মাইগ্রেশন — স্থানান্তরকে ছোট ছোট ধাপে ভাঙা: পুরনো মডিউল এনক্যাপসুলেট করুন → পরীক্ষা লিখুন → নতুন মডিউল তৈরি করুন → সমান্তরালে চালান → পুরনো মডিউল সরান। প্রতিটি ধাপ একটি স্থিতিশীল সিস্টেম অবস্থায় শেষ হয়, যা যেকোনো মুহূর্তে ডিপ্লয়মেন্টের অনুমতি দেয়।

প্রায়শই জিজ্ঞাসিত প্রশ্ন

লিগ্যাসি কি পুরোপুরি পুনরায় লেখা প্রয়োজন?

সম্পূর্ণ পুনর্লিখন সবচেয়ে ঝুঁকিপূর্ণ বিকল্প। মাত্র ২৫% প্রকল্প Big Rewrite সময়মতো সফল হয়। Strangler Fig প্যাটার্ন প্রয়োগ করা ভাল: পণ্য বন্ধ না করে ধীরে ধীরে মডিউল প্রতিস্থাপন করুন। প্রতিটি পুনরাবৃত্তি ব্যবসায়িক মূল্য আনে এবং ঝুঁকি সময়ের সাথে বিতরণ হয়।

পরীক্ষা ছাড়া কীভাবে লিগ্যাসি রিফ্যাক্টরিং শুরু করবেন?

characterization tests দিয়ে শুরু করুন: পরিচিত ডেটায় মডিউল চালান, ফলাফল রেকর্ড করুন। Golden master testing আচরণ ক্যাপচার করার একটি সহজ উপায়। প্রতিবার যখন আপনি কোডের একটি লাইন স্পর্শ করেন তখন পরীক্ষা যোগ করুন। ৬ মাসের মধ্যে আপনার কাছে একটি কাঠামো থাকবে যা রিগ্রেশন থেকে রক্ষা করে।

লিগ্যাসি কখন না স্পর্শ করা ভাল?

যদি সিস্টেম স্থিতিশীল হয়, ঘন ঘন পরিবর্তনের প্রয়োজন না হয় এবং অন্যান্য মডিউলের উন্নয়নের গতি প্রভাবিত না করে — এটি ছেড়ে দিন। ভাঙেনি যদি, তবে ঠিক করো না — কম পরিবর্তন ফ্রিকোয়েন্সি সহ বিচ্ছিন্ন লিগ্যাসি মডিউলের জন্য একটি যুক্তিসঙ্গত পদ্ধতি। কোড তখনই স্পর্শ করুন যখন ব্যবসায়িক পরিবর্তন প্রয়োজন।

লিগ্যাসি প্রকল্পে নির্ভরতা কীভাবে আপডেট করবেন?

সেম্যান্টিক ভার্সনিং ব্যবহার করুন এবং ধাপে আপডেট করুন: patch → minor → major। প্রতিটি লাইব্রেরির জন্য সামঞ্জস্য পরীক্ষা লিখুন। Dependabot বা Renovate আপডেটের জন্য PR তৈরি স্বয়ংক্রিয় করে। যদি কোনো লাইব্রেরি ডেপ্রিকেটেড হয়, অ্যাবস্ট্র্যাকশনের মাধ্যমে তার প্রতিস্থাপনের পরিকল্পনা করুন।

লিগ্যাসি টেকনিক্যাল ডেট থেকে কীভাবে আলাদা?

টেকনিক্যাল ডেট স্থগিত উন্নতির খরচ মূল্যায়নের জন্য একটি রূপক। লিগ্যাসি একটি নির্দিষ্ট সিস্টেম বা কোড যা ইতিমধ্যে পুরনো হয়ে গেছে। টেকনিক্যাল ডেট এক মাসে জমা হতে পারে, লিগ্যাসির সময় লাগে। সব টেকনিক্যাল ডেট লিগ্যাসি হয় না, কিন্তু সব লিগ্যাসিতে টেকনিক্যাল ডেট থাকে।

সারসংক্ষেপ

  • লিগ্যাসি — বয়স নির্বিশেষে পরীক্ষাবিহীন কোড। কভারেজ ছাড়া নতুন কোড প্রথম দিন থেকে লিগ্যাসি
  • কোডের বয়স — সমস্যা নয়। সমস্যা হল উচ্চ কাপলিং, পরীক্ষা এবং ডকুমেন্টেশনের অভাব
  • Characterization tests — আচরণ ক্যাপচার করতে লিগ্যাসি মডিউলে কোনো পরিবর্তনের আগে প্রথম ধাপ
  • Strangler Fig প্যাটার্ন — ধাপে ধাপে মডিউল প্রতিস্থাপন সহ একটি নিরাপদ মাইগ্রেশন কৌশল
  • Sprout method — ভাঙার ঝুঁকি ছাড়া পুরনো কোডের পাশে নতুন কোড যোগ করার কৌশল
  • ৩৫% সম্পূর্ণ পুনর্লিখন ব্যর্থ হয় — ধাপে ধাপে মাইগ্রেশন Big Rewrite-এর চেয়ে বেশি নির্ভরযোগ্য
  • বিচ্ছিন্ন লিগ্যাসি কম পরিবর্তন ফ্রিকোয়েন্সি সহ না স্পর্শ করাই ভাল

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন