ট্র্যাশ কোড (spaghetti code, জঞ্জাল, big ball of mud) হল একটি বিশৃঙ্খল, খারাপভাবে গঠিত সোর্স কোড যা পড়া, রক্ষণাবেক্ষণ এবং কিছু ভেঙে ফেলার ঝুঁকি ছাড়া পরিবর্তন করা কঠিন। শব্দটি একটি কোডবেস বর্ণনা করে যেখানে নির্ভরতাগুলি জড়িয়ে আছে, কোনও একীভূত আর্কিটেকচার নেই এবং ক্লিন কোডের নীতিগুলি লঙ্ঘিত হয়েছে। TIOBE Index, 2025 অনুসারে, উচ্চ প্রযুক্তিগত ঋণযুক্ত প্রকল্পগুলিতে ভালভাবে সংগঠিত কোডবেসের তুলনায় নতুন কার্যকারিতা যুক্ত করতে গড়ে ৪ গুণ বেশি সময় লাগে।
মূল বিষয়
ট্র্যাশ কোড (এছাড়াও spaghetti code, জঞ্জাল, big ball of mud) একটি কোডবেসের জন্য একটি রূপক যা তার গঠন হারিয়েছে এবং নির্ভরতার একটি জটলা জালে পরিণত হয়েছে। এই ধরনের কোডে, এক জায়গায় যেকোনো পরিবর্তন অন্য জায়গায় ভেঙে দেয় এবং নতুন কার্যকারিতা যুক্ত করা একটি ঝুঁকিপূর্ণ অভিযানে পরিণত হয়।
মোবাইল ডেভেলপমেন্টে, ট্র্যাশ কোড বিশেষভাবে গুরুতর: “জঞ্জালের” উপর তৈরি একটি অ্যাপ ধীর হতে শুরু করে, পুরানো ডিভাইসে ক্র্যাশ করে এবং কোড রিভিউ পাস করতে সংগ্রাম করে। আর্কিটেকচার ছাড়া একটি iOS প্রকল্প অস্থিরতার কারণে App Review পাস নাও করতে পারে।
Stripe অনুসারে, ডেভেলপাররা তাদের কাজের সময়ের ৪২% পর্যন্ত বিদ্যমান কোড পড়া এবং বোঝার জন্য ব্যয় করে। ট্র্যাশ কোডযুক্ত প্রকল্পগুলিতে, এই সংখ্যা ৬০% ছাড়িয়ে যায়, যা ডেভেলপমেন্টকে অত্যন্ত অদক্ষ করে তোলে।
Spaghetti code হল প্রাচীনতম শব্দ, যা ১৯৭০-এর দশকের। এটি বিশৃঙ্খল নিয়ন্ত্রণ প্রবাহযুক্ত কোড বর্ণনা করে, যা জড়ানো পাস্তার মতো দেখায়।
Big ball of mud একটি শব্দ যা ব্রায়ান ফুট এবং জোসেফ ইয়োডার ১৯৯৭ সালে স্পষ্ট আর্কিটেকচার ছাড়া সিস্টেম বর্ণনা করতে প্রবর্তন করেছিলেন যা বিশৃঙ্খলভাবে বৃদ্ধি পায়।
ট্র্যাশ কোড বাজারে নতুন বৈশিষ্ট্য প্রকাশের গতি কমিয়ে দেয়। দল মূল্য তৈরি করার পরিবর্তে বিদ্যমান কোড কীভাবে কাজ করে এবং কিছু না ভাঙার চেষ্টা করার সময় ব্যয় করে।
McKinsey অনুসারে, নিম্ন কোড মানের কোম্পানিগুলি পণ্য রক্ষণাবেক্ষণে ২০-৪০% বেশি ব্যয় করে এবং উচ্চ কোড মানের কোম্পানির তুলনায় নতুন বৈশিষ্ট্য প্রকাশের গতি ২-৩ গুণ কম।
ট্র্যাশ কোড চেনা যায় উদ্দেশ্যমূলক সূচকের একটি সেটের মাধ্যমে, যার কিছু স্বয়ংক্রিয়ভাবে পরিমাপ করা হয়। যত বেশি সূচক মিলবে, সমস্যা তত গুরুতর।
শিল্পে, Halstead Complexity, Maintainability Index এবং Technical Debt Ratio-র মতো কোড মানের মেট্রিক ব্যবহার করা হয়। এই মেট্রিকগুলি জানা কোডবেসের অবস্থা উদ্দেশ্যমূলকভাবে মূল্যায়ন করতে সাহায্য করে।
ট্র্যাশ কোডের সবচেয়ে সাধারণ লক্ষণ হল পুনরাবৃত্ত কোড ব্লক। একটি সাধারণ ফাংশন বের করার পরিবর্তে, ডেভেলপাররা ন্যূনতম পরিবর্তন সহ এক জায়গা থেকে অন্য জায়গায় কোড কপি করে।
৫% পর্যন্ত পুনরাবৃত্তির মাত্রা স্বাভাবিক বলে বিবেচিত হয়। যদি পুনরাবৃত্তি ১৫% ছাড়িয়ে যায়, এটি একটি গুরুতর সংকেত। Simian এবং PMD Copy Paste Detector-এর মতো সরঞ্জাম স্বয়ংক্রিয়ভাবে কপি-পেস্ট সনাক্ত করতে সহায়তা করে।
১০০ লাইনের বেশি দীর্ঘ একটি মেথড ট্র্যাশ কোডের স্পষ্ট লক্ষণ। এই ধরনের মেথড সাধারণত খুব বেশি কাজ করে এবং একক দায়িত্ব নীতি (Single Responsibility) লঙ্ঘন করে।
১০০০ লাইনের বেশি কোডের ক্লাসগুলিও সমস্যাজনক। এগুলিতে অসম্পর্কিত কার্যকারিতা থাকে, যা কোডের পরীক্ষা, বোঝা এবং পরিবর্তনকে কঠিন করে তোলে।
ম্যাককেবের সাইক্লোম্যাটিক জটিলতা (Cyclomatic Complexity) একটি মেট্রিক যা কোডে স্বাধীন পথের সংখ্যা দেখায়। ১৫-এর উপরে মান সমস্যাজনক বলে বিবেচিত হয়।
৩০-এর উপরে জটিলতা সম্পন্ন মেথডগুলি “বিপর্যয় অঞ্চলে” রয়েছে। এগুলিতে খুব বেশি শাখা থাকে, যা গভীর বিশ্লেষণ ছাড়া পরীক্ষা এবং বোঝা অসম্ভব করে তোলে।
ট্র্যাশ কোড “নিজে থেকে” দেখা দেয় না — এটি সর্বদা দলের নির্দিষ্ট প্রক্রিয়া এবং সিদ্ধান্তের ফলাফল। কারণগুলি বোঝা ভবিষ্যতে এটি প্রতিরোধে সহায়তা করে।
JetBrains Developer Ecosystem 2024 অনুসারে, ৬৭% ডেভেলপার স্বীকার করেন যে তারা সময়ের অভাবে তাদের সক্ষমতার চেয়ে খারাপ কোড লেখেন। এটি প্রযুক্তিগত ঋণ জমা হওয়ার প্রধান কারণ।
সবচেয়ে সাধারণ কারণ হল টাইট সময়সীমা। দল “যেমন হয়” কোড লেখে, শুধু সময়সীমা পূরণ করার জন্য। রিফ্যাক্টরিং, টেস্ট এবং কোড রিভিউ “পরে করার জন্য” স্থগিত করা হয়।
সমস্যা হল “পরে” কখনো আসে না — পরবর্তী স্প্রিন্টে নতুন সময়সীমা দেখা দেয় এবং প্রযুক্তিগত ঋণ তুষারবলের মতো জমা হতে থাকে।
কোড রিভিউ ছাড়া, প্রতিটি ডেভেলপার নিজস্ব শৈলীতে লেখে, নিজস্ব প্যাটার্ন ব্যবহার করে এবং নিজস্ব “চিহ্ন” রেখে যায়। সময়ের সাথে সাথে, কোডবেস একরূপতা হারায়।
SmartBear ২০২৪-এর গবেষণা অনুসারে, প্রতিটি পুল রিকোয়েস্টের জন্য বাধ্যতামূলক কোড রিভিউ অনুশীলনকারী দলগুলিতে প্রোডাকশনে ৬০% কম ত্রুটি থাকে।
যদি একটি প্রকল্প স্পষ্ট আর্কিটেকচার ছাড়া শুরু হয়, ট্র্যাশ কোড অনিবার্য। প্রথম “দ্রুত সমাধান” একটি ভিত্তি স্থাপন করে যার উপর পরে গুণগত কিছু তৈরি করা কঠিন।
মোবাইল ডেভেলপমেন্টে, আর্কিটেকচারের পছন্দ (MVC, MVP, MVVM, Clean Architecture) কোড লেখা শুরুর আগে একটি সচেতন সিদ্ধান্ত হওয়া উচিত, বিবর্তনের ফলাফল নয়।
ট্র্যাশ কোড মোকাবেলা করতে পুরো দলের কাছ থেকে একটি পদ্ধতিগত দৃষ্টিভঙ্গি এবং শৃঙ্খলা প্রয়োজন। কোনও একক সরঞ্জাম বা অনুশীলন নেই যা সমস্যা সমাধান করবে — ব্যবস্থার একটি সেট প্রয়োজন।
মূল নীতি হল লেখার পর্যায়ে ট্র্যাশ কোড প্রতিরোধ করা, পরে তা ঠিক করা নয়। প্রতিরোধ সর্বদা বিদ্যমান “জঞ্জাল” রিফ্যাক্টর করার চেয়ে সস্তা।
একীভূত কোড শৈলী ট্র্যাশ কোড প্রতিরোধের ভিত্তি। কোডিং মান (Code Style) নথিভুক্ত করা উচিত এবং লিন্টার দ্বারা স্বয়ংক্রিয়ভাবে পরীক্ষা করা উচিত।
iOS-এর জন্য SwiftLint ব্যবহার করা হয়, Android-এর জন্য Ktlint এবং Detekt। কনফিগারেশন ফাইলে নিয়ম সেট করা মান লঙ্ঘনকারী পুল রিকোয়েস্ট স্বয়ংক্রিয়ভাবে প্রত্যাখ্যান করার অনুমতি দেয়।
রিফ্যাক্টরিং বাগ ফিক্স করা নয়, বরং কোডের আচরণ পরিবর্তন না করে এর গঠন উন্নত করা। এটি ডেভেলপমেন্ট প্রক্রিয়ার একটি নিয়মিত অংশ হওয়া উচিত, একটি পৃথক প্রকল্প নয়।
প্রতিটি স্প্রিন্টের ২০% সময় রিফ্যাক্টরিং এবং প্রযুক্তিগত ঋণ পরিশোধের জন্য বরাদ্দ করার সুপারিশ করা হয়। এটি “জঞ্জাল” জমা হওয়া প্রতিরোধ করে এবং দীর্ঘমেয়াদে দলের গতি বজায় রাখে।
প্রতিটি পুল রিকোয়েস্ট কমপক্ষে একজন ডেভেলপার দ্বারা পর্যালোচনা করা উচিত। কোড রিভিউ শুধু বাগই নয়, আর্কিটেকচার লঙ্ঘন, শৈলীর সমস্যা এবং ট্র্যাশ কোডের সম্ভাব্য উৎসও চিহ্নিত করে।
একটি ভাল অভ্যাস হল কোড রিভিউর জন্য একটি চেকলিস্ট যাতে কপি-পেস্ট, মেথডের দৈর্ঘ্য, সাইক্লোম্যাটিক জটিলতা এবং টেস্ট কভারেজ পরীক্ষা অন্তর্ভুক্ত থাকে। চেকলিস্ট ছাড়া, পর্যালোচকরা ৫০% পর্যন্ত সমস্যা উপেক্ষা করেন।
আধুনিক কোড বিশ্লেষণ সরঞ্জাম স্বয়ংক্রিয়ভাবে ট্র্যাশ কোড সনাক্ত করতে, প্রযুক্তিগত ঋণ পরিমাপ করতে এবং গুণমান পর্যবেক্ষণ করতে দেয়। এই সরঞ্জামগুলিকে CI/CD পাইপলাইনে একীভূত করা ক্রমাগত পর্যবেক্ষণ প্রদান করে।
কমপক্ষে একটি স্ট্যাটিক বিশ্লেষক এবং একটি মেট্রিক পরিমাপ সরঞ্জাম ব্যবহার করার সুপারিশ করা হয়। অতিরিক্তভাবে, কোড গুণমান ডেটা একত্রিত করার জন্য একটি প্ল্যাটফর্ম সংযুক্ত করা যেতে পারে।
SonarSource অনুসারে, স্ট্যাটিক বিশ্লেষণ ব্যবহারকারী দলগুলি গ্রহণের প্রথম ত্রৈমাসিকেই প্রোডাকশন বাগের সংখ্যা ৩০% কমিয়ে দেয়।
CodeClimate এবং Codacy হল প্ল্যাটফর্ম যা কোড গুণমান মেট্রিক একত্রিত করে, প্রবণতা ট্র্যাক করে এবং “হট স্পট” — সর্বোচ্চ প্রযুক্তিগত ঋণযুক্ত ফাইলগুলি দেখায়।
Android প্রকল্পের জন্য, Detekt ১০০টির বেশি অন্তর্নির্মিত বিশ্লেষণ নিয়ম প্রদান করে, যার মধ্যে সাইক্লোম্যাটিক জটিলতা, মেথডের দৈর্ঘ্য এবং কোড পুনরাবৃত্তি পরীক্ষা অন্তর্ভুক্ত।
সচরাচর জিজ্ঞাসা
একটি বড় প্রকল্পে ট্র্যাশ কোড সম্পূর্ণরূপে নির্মূল করা যা কয়েক বছর ধরে বিকশিত হচ্ছে, কার্যত অসম্ভব। লক্ষ্য “ক্লিন কোড” নয়, বরং প্রযুক্তিগত ঋণের একটি নিয়ন্ত্রণযোগ্য স্তর যা উন্নয়নে বাধা দেয় না।
বর্তমান অবস্থা পরিমাপ করে শুরু করুন: একটি স্ট্যাটিক বিশ্লেষক চালান, মেট্রিক পান এবং সবচেয়ে সমস্যাজনক মডিউল চিহ্নিত করুন। তারপর পদ্ধতিগতভাবে, স্প্রিন্টের পর স্প্রিন্ট, সবচেয়ে জটিল এলাকাগুলি রিফ্যাক্টর করুন।
টেস্ট ছাড়া রিফ্যাক্টরিং রিফ্যাক্টরিং নয়, বরং অন্ধভাবে কোড পুনর্লিখন। টেস্ট ছাড়া আচরণ পরিবর্তন হয়েছে কিনা তা নিশ্চিত করা অসম্ভব। লিগ্যাসি কোড রিফ্যাক্টর করার আগে, এটি ক্যারেক্টারাইজেশন টেস্ট দিয়ে কভার করুন।
প্রতিটি পুল রিকোয়েস্টের জন্য গেট নিয়ন্ত্রণ প্রয়োগ করুন: স্বয়ংক্রিয় লিন্টার পরীক্ষা, কোড রিভিউ অনুমোদন, নির্ধারিত সীমার উপরে টেস্ট কভারেজ। সমস্ত গেট পাস না করে কোনো কোড মূল শাখায় প্রবেশ করে না।
প্রযুক্তিগত ঋণের খরচ টাকায় দেখান: ট্র্যাশ কোড রক্ষণাবেক্ষণে কত ঘন্টা ব্যয় হয়, এটি থেকে কতগুলি বাগ উদ্ভূত হয়, এটি নতুন বৈশিষ্ট্য প্রকাশকে কীভাবে ধীর করে। SonarQube Technical Debt Ratio মেট্রিক একটি বিশ্বাসযোগ্য যুক্তি।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন