
সাইক্লোম্যাটিক কমপ্লেক্সিটি স্কিল কী?
cyclomatic-complexity হলো একটি Claude স্কিল, যা বিদ্যমান কোডে অতিরিক্ত ব্রাঞ্চিং কমানোর জন্য তৈরি। এটি বিশেষভাবে এমন AI-জেনারেটেড কোডের ক্ষেত্রে কার্যকর, যা সঠিকভাবে কাজ করলেও গভীরভাবে নেস্টেড শর্ত, অসংখ্য সিদ্ধান্তের পথ বা মানুষের জন্য রক্ষণাবেক্ষণ করা কঠিন ফাংশন জমা করেছে।
স্কিলটি Claude-কে একটি কাঠামোবদ্ধ প্রক্রিয়ার মাধ্যমে পরিচালিত করে: প্রতিটি ফাংশনের কমপ্লেক্সিটি পরিমাপ করা, সবচেয়ে সমস্যাজনক হটস্পট শনাক্ত করা, সেগুলো রিফ্যাক্টর করা, আচরণ যাচাই করা এবং পরিবর্তনের আগে ও পরে কমপ্লেক্সিটির মানসহ ফলাফল সংক্ষেপে জানানো।
সংক্ষিপ্ত এক্সপ্রেশন বা চতুর ওয়ান-লাইনার দিয়ে স্কোর কমানোর পরিবর্তে, স্কিলটি সিদ্ধান্ত গ্রহণের লজিককে স্পষ্ট ও অর্থবহ নামে সাজানো ফাংশনে স্থানান্তর করে। এর লক্ষ্য শুধু কম কমপ্লেক্সিটি মাপা নয়, রক্ষণাবেক্ষণযোগ্যতাও নিশ্চিত করা।
প্রধান বৈশিষ্ট্য
- প্রতিটি ফাংশনের পরিমাপ: Radon, ESLint, gocyclo, Lizard অথবা ম্যানুয়াল গণনার মাধ্যমে কমপ্লেক্সিটি পরিমাপ করা যায়।
- প্রকল্প-সচেতন থ্রেশহোল্ড: প্রকল্পের লিন্টারে আগে থেকেই কনফিগার করা কমপ্লেক্সিটি সীমা স্কিলটি মেনে চলে।
- হটস্পট অগ্রাধিকার: নির্বিচারে কোড পরিবর্তন না করে প্রথমে সবচেয়ে জটিল ফাংশনগুলো রিফ্যাক্টর করা হয়।
- প্রতিষ্ঠিত রিফ্যাক্টরিং প্যাটার্ন: স্কিলটি গার্ড ক্লজ, এক্সট্র্যাক্টেড ফাংশন, লুকআপ টেবিল এবং নামযুক্ত প্রেডিকেট ব্যবহার করে।
- মেট্রিক নিয়ে কারসাজি নয়: ঘন সিনট্যাক্সের আড়ালে লুকিয়ে না রেখে কমপ্লেক্সিটিকে বোধগম্য ইউনিটে পুনর্গঠন করা হয়।
- স্পষ্ট রিপোর্টিং: প্রতিটি রিফ্যাক্টরিংয়ের শেষে পরিবর্তনের আগে ও পরে কমপ্লেক্সিটির রিপোর্ট দেওয়া হয়।
ইনস্টলেশন
Claude Code-এ ইনস্টল করুন
প্রকল্পের প্লাগইন মার্কেটপ্লেস যোগ করে স্কিলটি ইনস্টল করুন:
/plugin marketplace add saurabhkumar8112/cyclomatic-complexity-skill
/plugin install cyclomatic-complexity@cyclomatic-complexity-skillইনস্টলেশনের পর প্রাসঙ্গিক রিফ্যাক্টরিং, ক্লিনআপ এবং কোড রিভিউয়ের অনুরোধে Claude Code স্কিলটি সক্রিয় করতে পারবে।
Claude.ai-তে ইনস্টল করুন
- রিপোজিটরির Releases বিভাগ খুলে
.skillফাইলটি ডাউনলোড করুন। বিকল্প হিসেবেskills/cyclomatic-complexityফোল্ডারটির একটি ZIP আর্কাইভ তৈরি করতে পারেন। - Claude.ai খুলে Settings, তারপর Capabilities, এরপর Skills-এ যান।
- ডাউনলোড করা স্কিল ফাইল বা ZIP আর্কাইভ আপলোড করুন।
Claude API দিয়ে ইনস্টল করুন
API-ভিত্তিক ওয়ার্কফ্লোর জন্য Claude Skills API-এর মাধ্যমে স্কিলটি আপলোড করুন। বর্তমান আপলোড ও কনফিগারেশন পদ্ধতির জন্য API গাইড অনুসরণ করুন।
মৌলিক ব্যবহার
আপনার অনুরোধ রিফ্যাক্টরিং, ক্লিনআপ বা কোড রিভিউ-সংক্রান্ত হলে স্কিলটি স্বয়ংক্রিয়ভাবে সক্রিয় হয়। আরও নিয়ন্ত্রণের জন্য স্কিলটির নাম স্পষ্টভাবে উল্লেখ করুন এবং Claude-কে যে ফাইলটি পরীক্ষা করতে হবে সেটি নির্দিষ্ট করুন।
parser.py রিফ্যাক্টর করতে cyclomatic complexity skill ব্যবহার করুন
এই সরাসরি অনুরোধে কাঙ্ক্ষিত ওয়ার্কফ্লো এবং লক্ষ্য ফাইল, দুটিই নির্ধারিত হয়। এরপর Claude কমপ্লেক্সিটি পরিমাপ করতে, সবচেয়ে সমস্যাজনক ফাংশনগুলো খুঁজে বের করতে এবং উপযুক্ত রিফ্যাক্টরিং প্যাটার্ন প্রয়োগ করতে পারে।
নির্দিষ্ট কোড রিভিউয়ের অনুরোধ করুন
আপনি কাজটিকে কমপ্লেক্সিটি-কেন্দ্রিক রিভিউ হিসেবেও উপস্থাপন করতে পারেন:
cyclomatic complexity skill ব্যবহার করে parser.py রিভিউ করুন। প্রতিটি ফাংশনের কমপ্লেক্সিটি পরিমাপ করুন এবং প্রথমে সবচেয়ে সমস্যাজনক হটস্পটগুলো রিফ্যাক্টর করুন।আপনার প্রকল্পে যদি আগে থেকেই কোনো লিন্টার থ্রেশহোল্ড নির্ধারিত থাকে, তাহলে সেই কনফিগারেশনটি রিপোজিটরিতে রাখুন, যাতে স্কিলটি প্রকল্পের বিদ্যমান মানদণ্ড মেনে চলতে পারে।
রিফ্যাক্টরিং প্রক্রিয়া বোঝা
- প্রতিটি ফাংশন পরিমাপ করুন: স্কিলটি Radon, ESLint, gocyclo বা Lizard-এর মতো সমর্থিত উপযুক্ত অ্যানালাইজার ব্যবহার করে। এটি ম্যানুয়াল গণনাও করতে পারে।
- প্রকল্পের থ্রেশহোল্ড পরীক্ষা করুন: কনফিগার করা থাকলে বিদ্যমান লিন্টার সীমাই অগ্রাধিকার পায়।
- হটস্পটের ক্রম নির্ধারণ করুন: সবচেয়ে বেশি কমপ্লেক্সিটিযুক্ত ফাংশনগুলো আগে সমাধান করা হয়।
- পাঠযোগ্য রূপান্তর প্রয়োগ করুন: প্রয়োজন অনুযায়ী Claude গার্ড ক্লজ যোগ করে, ফাংশন আলাদা করে, লুকআপ টেবিল তৈরি করে অথবা জটিল প্রেডিকেটের অর্থবহ নাম দেয়।
- আচরণ যাচাই করুন: রিফ্যাক্টরিংয়ের মাধ্যমে বিদ্যমান আচরণ অপরিবর্তিত থাকা উচিত; যাচাইয়ের জন্য উপলব্ধ টেস্ট স্যুট ব্যবহার করা হয়।
- ফলাফল রিপোর্ট করুন: চূড়ান্ত উত্তরে পরিবর্তনের আগে ও পরে কমপ্লেক্সিটি দেখানো হয়।
আউটপুট পড়া
সম্পন্ন রিফ্যাক্টরিংয়ে সাধারণত নিচের মতো একটি রিপোর্ট থাকে:
## Complexity report
| Function | Before | After |
|----------|--------|-------|
| parseOrder | 14 | 4 |
Extracted: validateHeader, resolveDiscount
Behavior verified: existing test suite passesএই উদাহরণে parseOrder-এর কমপ্লেক্সিটি 14 থেকে কমে 4 হয়েছে। রিপোর্টে আলাদা করা ফাংশন validateHeader এবং resolveDiscount-এর নামও দেওয়া হয়েছে এবং বিদ্যমান টেস্ট সফলভাবে পাস করেছে বলে উল্লেখ করা হয়েছে।
আলাদা করা ফাংশনের তালিকা গুরুত্বপূর্ণ, কারণ শুধু কম সংখ্যা দেখলেই প্রমাণ হয় না যে কোডটি রক্ষণাবেক্ষণ করা সহজ হয়েছে। স্পষ্ট নাম দায়িত্বগুলো কোথায় স্থানান্তরিত হয়েছে তা দেখায় এবং রিভিউয়ারদের নতুন কাঠামো বুঝতে সহায়তা করে।
স্কিলটি যে রিফ্যাক্টরিং কৌশল ব্যবহার করে
গার্ড ক্লজ
গার্ড ক্লজ অবৈধ বা ব্যতিক্রমী শর্তগুলো শুরুতেই পরিচালনা করে। এতে নেস্টিং কমে এবং মূল এক্সিকিউশন পথ অনুসরণ করা সহজ হয়।
এক্সট্র্যাক্টেড ফাংশন
একটি ফাংশন যখন একাধিক সিদ্ধান্ত বা দায়িত্ব পালন করে, তখন স্কিলটি সুসংগত অংশগুলো অর্থবহ নামে আলাদা ফাংশনে স্থানান্তর করতে পারে। এতে কমপ্লেক্সিটি এমন ইউনিটে বণ্টিত হয়, যেগুলো নিজেদের উদ্দেশ্য স্পষ্টভাবে প্রকাশ করে।
লুকআপ টেবিল
পরিচিত ইনপুটকে পরিচিত ফলাফলের সঙ্গে ম্যাপ করা বারবার ব্যবহৃত শাখাগুলো একটি লুকআপ টেবিল দিয়ে প্রতিস্থাপন করা যেতে পারে। কোড ছোট করার জন্য নয়, বরং স্বচ্ছতা বাড়ালে এই দক্ষতা এই পদ্ধতি ব্যবহার করে।
নামযুক্ত প্রেডিকেট
জটিল শর্তগুলো এমন ফাংশনে রাখা যেতে পারে, যেগুলোর নাম ব্যবসায়িক নিয়মটি ব্যাখ্যা করে। এতে সিদ্ধান্ত নেওয়ার স্থানগুলো আরও সহজে পাঠযোগ্য হয় এবং অস্পষ্ট কন্ডিশনাল এক্সপ্রেশন এড়ানো যায়।
উন্নত পরামর্শ
ছোট পরিসরের লক্ষ্য দিয়ে শুরু করুন
বড় কোডবেসের ক্ষেত্রে একটি ফাইল বা পরিচিত সমস্যার ক্ষেত্র দিয়ে শুরু করুন। refactor parser.py-এর মতো নির্দিষ্ট নির্দেশনা দক্ষতাটিকে একটি স্পষ্ট সীমা দেয় এবং তৈরি হওয়া প্রতিবেদন পর্যালোচনা করা সহজ করে।
লিন্টার কনফিগারেশন প্রস্তুত রাখুন
আপনার প্রকল্পের নিজস্ব জটিলতার সীমা থাকলে, Claude কাজটি সম্পাদন করার সময় সংশ্লিষ্ট কনফিগারেশনটি উপস্থিত আছে কি না নিশ্চিত করুন। দক্ষতাটি কোনো অসংলগ্ন মানদণ্ড চাপিয়ে দেওয়ার বদলে প্রকল্পে নির্ধারিত সীমা অনুসরণ করার জন্য তৈরি।
প্রথমে সবচেয়ে খারাপ হটস্পটগুলো চাইুন
সর্বোচ্চ জটিলতার ফাংশনগুলোকে অগ্রাধিকার দিলে এমন জায়গায় প্রচেষ্টা কেন্দ্রীভূত হয়, যেখানে রক্ষণাবেক্ষণযোগ্যতার ওপর সবচেয়ে বেশি প্রভাব পড়তে পারে। এতে ইতিমধ্যে সহজ ফাংশনগুলোতে অপ্রয়োজনীয় পরিবর্তনও এড়ানো যায়।
শুধু স্কোর নয়, নামও পর্যালোচনা করুন
চূড়ান্ত সংখ্যার পাশাপাশি বের করে আনা ফাংশন ও প্রেডিকেটগুলোর নাম পরীক্ষা করুন। validateHeader এবং resolveDiscount-এর মতো নাম দায়িত্ব ব্যাখ্যা করে; পরিমাপ করা স্কোর কমে গেলেও অস্পষ্ট সহায়ক ফাংশনের নাম রিফ্যাক্টরটিকে কম কার্যকর করে তুলবে।
নিরাপত্তা যাচাই হিসেবে পরীক্ষা ব্যবহার করুন
জটিলতা কমানোর সময় আচরণ অপরিবর্তিত থাকা উচিত। বিদ্যমান টেস্ট স্যুট প্রস্তুত রাখুন এবং চূড়ান্ত প্রতিবেদনে এটি পাস করেছে কি না তা নথিভুক্ত হয়েছে নিশ্চিত করুন। উন্নত জটিলতা স্কোরের জন্য সঠিকতার সঙ্গে আপস করা উচিত নয়।
মেট্রিক কৌশলকে উৎসাহিত করে এমন অনুরোধ এড়িয়ে চলুন
সম্ভব সর্বনিম্ন স্কোরের বদলে পাঠযোগ্য ও রক্ষণাবেক্ষণযোগ্য পরিবর্তনের অনুরোধ করুন। দক্ষতাটি সচেতনভাবে চতুর এক লাইনের কোডে সিদ্ধান্ত লুকিয়ে রাখা এড়ায়, তাই প্রম্পটে স্বচ্ছতা ও দীর্ঘমেয়াদি রক্ষণাবেক্ষণযোগ্যতাকে গুরুত্ব দেওয়া উচিত।
উপসংহার
সাইক্লোম্যাটিক-কমপ্লেক্সিটি দক্ষতাটি শাখা-নির্ভর কোড উন্নত করার জন্য Claude-কে একটি পুনরাবৃত্তিযোগ্য কর্মপ্রবাহ দেয়। এটি জটিলতা পরিমাপ করে, প্রকল্পের সীমা অনুসরণ করে, সবচেয়ে খারাপ ফাংশনগুলো আগে সমাধান করে, পাঠযোগ্য রিফ্যাক্টরিং প্যাটার্ন প্রয়োগ করে, আচরণ যাচাই করে এবং শেষ পর্যন্ত পরিবর্তনের আগের ও পরের অবস্থার একটি সুনির্দিষ্ট প্রতিবেদন তৈরি করে। প্রকল্পটি Apache 2.0 লাইসেন্সের অধীনে বিতরণ করা হয়।
