সাইক্লোমেটিক জটিলতা কি? কোড মানের পরিমাপ

  • প্রধান
  • খবর
  • সাইক্লোমেটিক জটিলতা কি? কোড মানের পরিমাপ

শাটারস্টক / ফ্রান_কি

সাইক্লোমেটিক জটিলতা হল একটি কোড মেট্রিক যা আপনি ভিজ্যুয়াল স্টুডিওর মতো অনেক IDE-তে দেখতে পারেন। যদিও একটি সঠিক বিজ্ঞান নয়, এটি আপনাকে ফাংশন, ক্লাস এবং নেমস্পেসগুলির জটিলতা সম্পর্কে একটি সাধারণ ধারণা দেয়, যা রিফ্যাক্টরের কোড খোঁজার সময় সহায়ক হতে পারে।

সাইক্লোমেটিক জটিলতা কি?

সাইক্লোম্যাটিক জটিলতা মূলত পরিমাপ করে আপনার কোড কতদূর শাখা। যতক্ষণ একটি |_+_| আছে বিবৃতি বা অন্যান্য নিয়ন্ত্রণ ব্লক যেমন লুপ, সাইক্লোমেটিক জটিলতা বৃদ্ধি পায়, কারণ গ্রাফটি আরও বেশি করে একটি গাছের মতো হয়ে যাবে।

আপনি যদি আপনার কোডটিকে নিয়ন্ত্রণ প্রবাহের মাধ্যমে লিঙ্কযুক্ত ক্রিয়ার একটি সিরিজ (ফাংশন, পদ্ধতি কল, পরিবর্তনশীল অ্যাসাইনমেন্ট) হিসাবে মনে করেন তবে আপনি একটি বিমূর্ত গ্রাফ পাবেন যা আপনি জটিলতা আরও ভালভাবে বোঝার জন্য ব্যবহার করতে পারেন। সাধারণ নিয়ন্ত্রণ প্রবাহের জন্য যেমন |_+_| ঘোষণা এবং |_+_| লুপ, গ্রাফগুলি দেখতে এইরকম:

সূত্র সহজ; গ্রাফে প্রান্তের সংখ্যা নিন (সবকিছুকে সংযুক্ত করে এমন তীরগুলি) এবং গ্রাফে নোডের সংখ্যা বিয়োগ করুন (কর্মগুলি নিজেরাই)।

|_+_|

উদাহরণস্বরূপ, এই কোডটির একটি সাইক্লোমেটিক জটিলতা রয়েছে, যেহেতু কোন শাখা নেই, এবং এটি কেবল বারবার WriteLine কে কল করে। যেহেতু এটি পুরোপুরি রৈখিক কোড, তাই নোডের সংখ্যা প্রান্তের সংখ্যা বাতিল করবে, একটি সাইক্লোমেটিক জটিলতা দেবে।

|_+_|

শাখা সহ আরও জটিল কোডের জন্য, জটিলতা বেশি হবে। এই কোড, যেটিতে একটি ফাইল রয়েছে |_+_| instruction, এর একটি জটিলতা 6, কারণ কোডটি নিতে পারে এমন অনেকগুলি ভিন্ন পথ রয়েছে। প্রতি |_+_| সুইচ স্টেটমেন্টে জটিলতা যোগ করে কারণ এটি বিভিন্ন ইনপুট সহ বিভিন্ন আউটপুট হতে পারে।

|_+_|

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

সাইক্লোমেটিক জটিলতা কি দরকারী?

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

বেশিরভাগ ক্ষেত্রে, জটিলতা 6 থেকে 8 সম্ভবত ঠিক ততক্ষণ পর্যন্ত যতক্ষণ না কোডটি নিজেই ভালভাবে ফর্ম্যাট করা হয়। 8-15-এর মধ্যে যে কোনও কিছু সন্দেহজনক এবং 15-এর উপরে কিছু সম্ভবত ভাল নয়। 25 বছরের বেশি কিছু প্রায় অবশ্যই একটি সমস্যা যদি না অন্যথায় প্রমাণিত হয়।

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

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

কোড পর্যালোচনা প্রায়শই সাইক্লোমেটিক জটিলতার জন্য দায়ী হতে পারে, পাশাপাশি সমস্যাযুক্ত বৈশিষ্ট্যগুলিকে ফ্ল্যাগ করে যা ম্যানুয়াল পর্যালোচনার প্রয়োজন হতে পারে। এটি একটি পরিষ্কার এবং পরিপাটি কোড বেস রাখার জন্য এটি একটি খুব দরকারী টুল তৈরি করতে পারে।

একটি ভুল কোড অনুসন্ধান করা হচ্ছে

অনেক আইডিই, যেমন ভিজ্যুয়াল স্টুডিওতে সম্পূর্ণ কোড বেসের জন্য সাইক্লোমেটিক জটিলতা এবং অন্যান্য কোড মেট্রিক্স গণনা করার জন্য অন্তর্নির্মিত সরঞ্জাম থাকবে।

ভিজ্যুয়াল স্টুডিও থেকে এটি করতে, বিশ্লেষণ ক্লিক করুন > কোড মেট্রিক্স গণনা করুন > সমাধান দ্বারা।

'কোড মেট্রিক্স' প্যানেলটি সমাধানের বিশদ বিশ্লেষণ দেখাবে। আপনি সবচেয়ে সমস্যাযুক্ত নেমস্পেস দেখতে কমপ্লেক্সিটি অনুসারে সাজাতে পারেন।

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

এখানে, ভিজ্যুয়াল স্টুডিও আমার একটি 400-লাইন পদ্ধতি হাইলাইট করেছে যা জটিলতার স্কেলে 72 এবং রক্ষণাবেক্ষণযোগ্যতা সূচকে 14/100 (একটি হলুদ সতর্কীকরণ ত্রিভুজ হিসাবে উপস্থাপিত) স্কোর করেছে এবং 65টি ভিন্ন শ্রেণীর উল্লেখ করেছে।

ফলে ব্যথার পাঁচটি পর্যায়ে সরাসরি পাঠানো যেত। 'কিন্তু এটি সত্যিই একটি দীর্ঘ কোরোটিন যা করতে অনেক কাজ আছে!' আমি নিজেকে বলি, অস্বীকার করার চেষ্টা করছি যে আমি যে কোডটি লিখেছি তা গাণিতিকভাবে খারাপ, যেখানে ভিজ্যুয়াল স্টুডিও একটি সতর্কতা ছুড়ে দেয়। 72 এর একটি জটিলতা অবশ্যই পরিষ্কার করা উচিত।

এই ক্ষেত্রে, সমাধানটি সহজ ছিল: কোরোটিনে অনেকগুলি কাজ আছে, তাই আমি সেই কাজগুলিকে ছোট কোরোটিনে বিভক্ত করি এবং মূল পদ্ধতিটিকে সাবরুটিন কলগুলির সাথে প্রতিস্থাপন করি৷ সামগ্রিক কোড পরিবর্তিত হয়নি, এবং ক্লাসের সামগ্রিক জটিলতাও নেই, তবে এখন মূল ফাংশনটি 400-লাইন দানব নয়।

আপনি কি মনে করেন?