RubyCritic আপনার Ruby অ্যাপ্লিকেশনে কোড গন্ধ, কোড স্ট্রাকচার, টেস্টিং-র সহজতা এবং টেস্ট কভারেজ হাইলাইট করে ভিজ্যুয়াল রিপোর্ট প্রদান করে।
এটি সক্রিয়ভাবে বিকাশাধীন এবং নতুন কোড বিশ্লেষণ টুলস প্রায়শই নতুন ফিচার হিসেবে যোগ করা হয়। RubyCritic-এর রিলিজগুলো ট্র্যাক করা নিশ্চিতভাবে ارزشবান।
এই আর্টিকেলে RubyCritic-এর সুবিধাগুলো, এর নির্ভরতা এবং কীভাবে এর কোড রিপোর্ট পড়বেন সেটি আলোচনা করা হবে।
চলুন শুরু করি!
আপনার Ruby on Rails অ্যাপ্লিকেশনের জন্য RubyCritic কেন বেছে নেবেন?
আপনার প্রজেক্টের কোড উন্নতির পর্যালোচনা করার জন্য একটি একক স্থান চাইলে RubyCritic ব্যবহার করার কথা ভাবতে পারেন। আপনার ডেভেলপমেন্ট প্রসেসে RubyCritic অন্তর্ভুক্ত করলে ডেভেলপমেন্ট টিমের টেকনিক্যাল ডেট সম্পর্কে কাজ করার সময় নিশ্চিতভাবে কমাবে। অধিকাংশ টেকনিক্যাল ডেট ডেভেলপমেন্ট সময়েই ম্যাপ হয়ে যাবে।
RubyCritic আপনার প্রজেক্ট এবং ডেভেলপমেন্ট প্রসেসে যে কিছু সুবিধা দিতে পারে:
- একই জায়গায় যৌথ তথ্য
- ভিজ্যুয়াল রিপোর্ট
- সহজ ইনস্টলেশন
- শূন্য কনফিগারেশন
- কাস্টমাইজেশন সুবিধা
- এক্সটেনসিবল — আপনি নিজের ওপেন-সোর্স ইন্টিগ্রেশন তৈরি করতে পারেন
- ব্যাজ জেনারেটর 🎉
RubyCritic কীভাবে কাজ করে বুঝতে এর ইন্টারনাল ডিপেন্ডেন্সিগুলো দেখে নিই যা রিপোর্ট তৈরি করতে ব্যবহৃত হয়।
RubyCritic-এর ইন্টারনাল ডিপেন্ডেন্সি
আপনি যখন আপনার প্রজেক্টে RubyCritic যোগ করবেন, কিছু ডিপেন্ডেন্সি স্বয়ংক্রিয়ভাবে ইনক্লুড হবে।
যে ডিপেন্ডেন্সিগুলো জাদু করে সেগুলো হাইলাইট করা যাক: Reek, Flay, এবং Flog gems। এই ডিপেন্ডেন্সিগুলো RubyCritic-কে আপনার কোড সম্পর্কে মূল্যবান তথ্য দেখাতে সক্ষম করে। এগুলোর কাজ বুঝলে RubyCritic ব্যবহার করাও সহজ হবে।
Reek: Ruby-তে কোড গন্ধ শনাক্ত করা
Reek হল Ruby-তে কোড গন্ধ শনাক্ত করার একটি gem। কোডে বড গন্ধ মানে ভুল কোড শনাক্ত করা নয়, বরং কোড আরও ভালো লেখা যায় কিনা তা বিশ্লেষণ করা।
Reek-এর বিশ্লেষণ শনাক্ত করে কি কোনো কিছু অন্য ভাবে ইমপ্লিমেন্ট করা যায়। এটি কিভাবে সেটি সাজেস্ট করে না, কারণ অধিকাংশ কোড গন্ধ বিজনেস লজিক এবং ডেভেলপারের ভাষা সম্পর্কে অভিজ্ঞতার সাথে জড়িত।
উদাহরণস্বরূপ, আপনি সহজেই একটি if স্টেটমেন্টকে মেটা-প্রোগ্রামিং টেকনিক দিয়ে রিরাইট করতে পারেন। কিন্তু সেটি কীভাবে ঠিক করবেন সেটি প্রজেক্টের কনটেক্স্ট অনুযায়ী ডেভেলপারের ওপর নির্ভর করে। এই কেসে কোনো লাইব্রেরি সেরা সমাধান ইন্ডিকেট করতে পারবে না।
Reek একটি ব্যাপক তালিকা গন্ধ শনাক্ত করে। এটি পরীক্ষা করে এবং সম্ভাব্য গন্ধ চেনে:
- ক্লাস
- অ্যাট্রিবিউট
- মেথড
- প্যারামিটার
- মডিউল
- ইটারেটর
- পলিমরফিজমের ইমপ্লিমেন্টেশন
গন্ধ খুঁজে বের করে আপনি আপনার কোড আরও পঠনীয় এবং রক্ষণাবেক্ষণযোগ্য করতে পারেন।
Reek কাস্টম কনফিগারেশন অনুমতি দেয়:
- ডিটেক্টর টাইপ অনুযায়ী ডিজেবল করা
- স্ক্যান থেকে ডিরেক্টরি এক্সক্লুড করা
- ফিল্টার ব্যবহার করে সতর্কতা নিষ্ক্রিয় করা
আপনি স্পেসিফিক কোড ডিফাইন করে স্ক্যানে সাপ্রেস করতে পারেন, যা খুবই উপযোগী যখন কোড এখনও ফাইনালাইজড বা রিফ্যাক্টরড নয়, অথবা লিগেসি কোড হলে।
Reek কীভাবে কাজ করে সেটি একটি নমুনা দিয়ে দেখি। এই কোডে এক্সসেপশন শুধু e হিসেবে ডিফাইন করা হয়েছে।
সহজেই কল্পনা করা যায় e মানে এক্সসেপশন, কিন্তু যদি অন্য এক্সসেপশন থাকে? সেগুলো সঠিকভাবে চেনা হলে কোড ভালো থাকে।
Reek e কে UncommunicativeVariableName হিসেবে চিন्हিত করবে এবং সতর্কতা দেখাবে।
Flay: Ruby কোড ডুপ্লিকেশন চেক করা
Flay Ruby কোডের স্ট্রাকচারাল সাদৃশ্য চিন्हিত করে, যার মধ্যে রয়েছে:
- প্রজেক্টের ভিতরে কোড ডুপ্লিকেশন শনাক্ত করা
- যেকোনো কোড লেভেলে পার্থক্য চেক করা
- একটি স্কোর জেনারেট করা যাতে বুঝা যায় কোড কতটুকু ভালো (স্কোর যত কম, কোড তত ভালো)
Flay আপনার কোডে সাদৃশ্য রিপোর্ট করলে, সেটি একটি শক্তিশালী ইন্ডিকেটর যে রিফ্যাক্টরিং দরকার। এটিকে উপেক্ষা করবেন না! ডুপ্লিকেট কোড বাগের প্রবেশদ্বার। আপনি এক জায়গায় ফিক্স করলেন কিন্তু অন্য জায়গায় ভুলে গেলে, আরও বাগ আসবে।
Flay কীভাবে কাজ করে সেটি এর নিজের সোর্স কোডে রান করে দেখতে পারি:
Flay এই দুটির মধ্যে সাদৃশ্য চিন्हিত করে:
লক্ষ্য করুন কোডের স্পেলিং একদম এক जैसा নয়, কিন্তু ফাংশনালিটি এক এবং রিফ্যাক্টর করে ডুপ্লিকেশন এড়ানো যায়। এটাই Flay-এর জাদু!
Flog: Ruby-তে কোড জটিলতা পরীক্ষা
Flog চেক করে আপনার কোড টেস্ট করা কতটুকু কঠিন। এটি প্রতিটি লাইন কোডের জন্য একটি জটিলতা স্কোর নির্ধারণ করে এবং প্রতিটি মেথড ও ক্লাসের জন্য স্কোর যোগ করে।
স্কোর যত বেশি, কোড তত বেশি রিফ্যাক্টর করার দরকার কারণ এটি ইন্ডিকেট করে আপনার ইমপ্লিমেন্টেশন অত্যন্ত জটিল।
Flog কাজ করছে সেটি দেখি! একটি ছোট পরিবর্তন আপনার স্কোর পরিবর্তন করতে পারে।
লক্ষ্য করুন কোডের প্রথম অংশে একটি or চেক আছে যা স্কোর ০.৪ পয়েন্ট বাড়ায়।
RubyCritic-এর অন্যান্য ডিপেন্ডেন্সি
RubyCritic অন্যান্য রানটাইম ডিপেন্ডেন্সি ও ব্যবহার করে, যেমন:
byebug- এটি Ruby অ্যাপ্লিকেশন ডিবাগিংকে উন্নত করে। এটি আপনাকে প্রোগ্রাম লাইন বাই লাইন রান করতে, ব্রেকপয়েন্ট যোগ করতে, এবং রানটাইমে মান ইভ্যালুয়েট ও ট্র্যাক করতে দেয়। আপনি এখনও ডিবাগিংয়ের জন্যputsব্যবহার করলে, Byebug-এর ফিচার ও কমান্ডগুলো জানা আপনার জন্য উপযোগী।rubocop- Ruby কোডের জন্য একটি লিন্টার যা Ruby কমিউনিটি দ্বারা ব্যবহৃত স্টাইল গাইড অনুসরণ করতে সাহায্য করে, অথবা আপনার নিজের কোড স্টাইল প্রয়োগ করতে। এটি টিমে স্ট্যান্ডার্ড সেট করতে এবং স্পেস-ট্যাব নিয়ে বিতর্ক এড়াতে খুব উপকারী।SimpleCov- Ruby অ্যাপ্লিকেশন কোড কভারেজ চেক করার একটি টুল। আপনি এটি টেস্টের সাথে রান করার জন্য কনফিগার করতে পারেন। এটি কোড কভারেজের মেট্রিক্স প্রদান করে যাতে আপনি বুঝতে পারেন কোথায় মনোযোগ দরকার এবং কোথায় সময় বিনিয়োগ করলে ভালো টেস্ট কেস তৈরি হবে।
RubyCritic-এর ডিপেন্ডেন্সি তালিকা গভীরে যান।
আপনার Ruby on Rails অ্যাপের জন্য RubyCritic ব্যবহার
RubyCritic-এর ভালো ডকুমেন্টেশন আছে যা কম কনফিগারেশনে শুরু করতে সাহায্য করে। তাই আমরা এর রিসোর্সগুলো কীভাবে ব্যবহার করে এর রিপোর্ট বিশ্লেষণ করব সেটি ফোকাস করব।
RubyCritic 'Code', 'Smells', এবং 'Coverage' রিপোর্ট প্রদান করে। আমরা এগুলো একে একে দেখব।
RubyCritic-এ ওভারভিউ
'Overview' পেজে আপনার প্রজেক্টের টোটাল স্কোর একটি ডোনাট চার্টে দেখানো থাকে, পাশাপাশি রেটিং (A সেরা রেটিং, F সবচেয়ে খারাপ)। 'Summary' সেকশনে প্রতিটি রেটিংর ডিটেইলস থাকে, যার মধ্যে ফাইলের সংখ্যা, চার্ন (কমিট পরিবর্তন), এবং পাওয়া গন্ধের সংখ্যা।

'Churn vs Complexity' সেকশনে এখানে ইতিমধ্যে সবচেয়ে বেশি জটিল ক্লাস চিন्हিত করা সম্ভব, যা সম্ভবত প্রথম প্রায়োরিটি হওয়া উচিত।
এই গ্রাফ ভালোভাবে বুঝতে কোড চার্ন সম্পর্কে জানা দরকার। কোড যা ঘন ঘন পরিবর্তন হয় সেটি সমস্যা ইন্ডিকেট করতে পারে — যেন লজিক বা বিজনেস ডোমেইনে কিছু সমস্যা আছে। যাই হোক, 'Churn vs Complexity' দেখে আপনি প্রজেক্ট জুড়ে পেইন পয়েন্ট চিনতে পারেন।
কোড রিপোর্ট
'Code' রিপোর্টে প্রতিটি ক্লাসের স্কোর থাকে, যার মধ্যে চার্ন, জটিলতা, ডুপ্লিকেশন, এবং গন্ধের ইন্ডিকেটর থাকে।
আপনি যেকোনো কলাম অনুযায়ী এই লিস্ট সর্ট করতে পারেন হigest র্যাঙ্কিং ফ্যাক্টর দেখতে এবং সবচেয়ে ক্রিটিক্যাল ইস্যু اولوية দিয়ে সমাধান করতে।

বیشেষ, এই লিস্টে একটি ফিল্টার আছে যা ক্লাস নাম দিয়ে দ্রুত সার্চ করতে দেয়।
ক্লাসের নামে ক্লিক করলে একটি ডিটেইলড পেজ খুলবে যেখানে ক্লাস কোড এবং মেট্রিক্স থাকবে যেন:
- কোড লাইন
- মেথডের পরিমাণ
- ক্যালকুলেটেড চার্ন
- মেথড অনুযায়ী জটিলতা
- জটিলতা স্কোর (প্রতি ক্লাস টোটাল)
- পাওয়া ডুপ্লিকেশনের পরিমাণ
- গন্ধের সংখ্যা
সমস্যা যেখানে পাওয়া গেছে সেই কোড লাইন হাইলাইট থাকবে (Reek gem-এর ইনফরমেশন অনুযায়ী)।
Flog কোনো ইস্যু চিন्हিত করলে আপনি স্কোর দেখবেন। Flay রিপোর্ট কোনো ডুপ্লিকেট কোড ডিটেক্ট করলে সেটিও দেখাবে।

গন্ধ রিপোর্ট
'Smells' পেজে গন্ধের টাইপ, সঠিক লোকেশন যেখানে গন্ধ আছে, এবং ফিক্স স্ট্যাটাস দেখানো থাকে।
উল্লেখ্য, গন্ধগুলো Reek দ্বারা ডিটেক্ট করা হয়, এবং এখানেও সর্টিং ও ফিল্টারিং উপলব্ধ।
ক্লাসের নামে ক্লিক করলে আপনার কোডের ডিটেইলস পেজ খুলবে। আপনি গন্ধের টাইপ অনুযায়ী ক্লাসগুলো গ্রুপড ও দেখতে পারেন (এটি 'Code' পেজে নেই, সেখানে শুধু গন্ধের সংখ্যা থাকে)।

কভারেজ রিপোর্ট
শেষে, 'Coverage' রিপোর্টে ক্লাস ক্লাসিফিকেশন এবং প্রতিটি ক্লাসের কভারেজ পর্ন্টেজ দেখা যায়। 'Code' এবং 'Smells' রিপোর্টের লিস্টের বিপরীতে, 'Coverage'-এ লিস্টে সর্ট এবং ফিল্টার করার অপশন নেই।
আপনি শুধু কোড কভারেজের পর্ন্টেজ দেখতে পাবেন — কোনো অ্যাডিশনাল ইনফরমেশন নেই।

SimpleCov রিপোর্ট ইন্টিগ্রেট করলে এই পেজে আরও ভ্যালু এবং ব্যবহারিকতা যোগ হতো। কিন্তু যাই হোক, 'Coverage' রিপোর্ট আপনার প্রজেক্টের টেস্ট কভারেজ সিম্পলভাবে পরীক্ষা করতে সাহায্য করতে পারে।
উপসংহার
এই পোস্টে আমরা RubyCritic-এর সুবিধাগুলো সংক্ষেপে দেখেছি, তারপর এর ইন্টারনাল ডিপেন্ডেন্সি: Reek, Flay, এবং Flog-এ গভীরে গিয়েছি। এরপর RubyCritic-এর রিপোর্ট পড়া ও বিশ্লেষণ করা শিখেছি।
পরবর্তী ধাপ হিসেবে, আপনার পাইপলাইনে RubyCritic কীভাবে ব্যবহার করবেন সেটি বের করুন।
শুভ কোড রিফ্যাক্টরিং!
ন.ব. আপনি যদি Ruby Magic পোস্টগুলো প্রকাশ होते সাথে সাথে পড়তে চান, আমাদের Ruby Magic নিউজলেটার সাবস্ক্রাইব করুন এবং একটাও পোস্ট মিস করবেন না!
Brena Monteiro
গেস্ট অথর Brena একজন টেক লিড যিনি নতুন ডেভেলপারদের মেন্টরিংয়ে আগ্রহী এবং হাই-পারফরমিং টিম ডেভেলপ ও লিড করার অভিজ্ঞতা রাখেন। তিনি স্কেলেবল API এবং ক্লাউড সার্ভিস ইন্টিগ্রেশন বিল্ড করার অভিজ্ঞতা রাখেন, বিবর্তনশীল আর্কিটেকচার নিয়ে উদ্ভাবনী, এবং এক্সটেন্ডেড রিয়েলিটি (XR) অপ্রেন্টিস।
Brena Monteiro-এর সকল আর্টিকেল