জটিলতাটি পরিমাপ করার জন্য সর্বাধিক সাধারণ মেট্রিকগুলি (বা সরলতা, যদি আপনি জটিলতার বিপরীতে হিসাবে সরলতা নেন তবে) হলেন ম্যাককেবের সাইক্লোমেটিক জটিলতা এবং হালস্টেড জটিলতা মেট্রিক্স ।
সাইক্লোমেটিক জটিলতা প্রদত্ত ইউনিটের মাধ্যমে সাধারণত একটি পদ্ধতি বা ফাংশন দ্বারা পৃথক পাথের সংখ্যা পরিমাপ করে, যদিও এটি কোনও শ্রেণিতেও গণনা করা যায়। পাথের সংখ্যা বাড়ার সাথে সাথে প্রদত্ত মডিউলের মাধ্যমে ডেটা প্রবাহকে স্মরণ করা আরও কঠিন হয়ে ওঠে, যা কার্যকরী স্মৃতির ধারণার সাথে সম্পর্কিত । হাই সাইক্লোমেটিক জটিলতা মডিউল পরীক্ষা করার ক্ষমতাতে অসুবিধা নির্দেশ করতে পারে - সিস্টেমের মাধ্যমে বিভিন্ন পাথের জন্য আরও পরীক্ষার ক্ষেত্রে আবশ্যক। এমন অধ্যয়নও হয়েছে যেগুলি উচ্চ চক্রবৃত্তীয় জটিলতাকে উচ্চ ত্রুটি হারের সাথে যুক্ত করেছে। সাধারণত, 10 এর একটি চক্রবৃত্তীয় জটিলতা ইঙ্গিত দেয় যে একটি ইউনিট পর্যালোচনা করা উচিত এবং সম্ভবত রিফ্যাক্টর করা উচিত।
হালডস্ট জটিলতা ব্যবস্থাগুলি কোডের একটি অংশের ভলিউম, অসুবিধা এবং প্রচেষ্টা গণনা করতে মোট এবং স্বতন্ত্র অপারেটর এবং অপারেটরগুলির ইনপুটগুলি ব্যবহার করে। অসুবিধা, যা (অনন্য অপারেটরের সংখ্যা / ২) * (অপারেটরের মোট সংখ্যা / অনন্য অপারেটরের সংখ্যা), সিস্টেমটি শেখার বা কোনও কোড পর্যালোচনা সম্পাদনের মতো কাজের জন্য কোডটি পড়ার এবং বুঝতে সক্ষমতার সাথে জড়িত। আবার, আপনি এটি একটি সিস্টেম স্তর, একটি শ্রেণি স্তর, বা একটি পদ্ধতি / ফাংশন স্তরে গণনা করতে পারেন। এই পরিমাপগুলি এখানে এবং এখানে কম্পিউটিং সম্পর্কে কয়েকটি পোস্টিং রয়েছে ।
কেবল কোডের লাইন গণনাও আপনাকে জটিলতার ধারণা দিতে পারে। কোডের আরও লাইনগুলির অর্থ মডিউলটিতে আরও পড়ার এবং বোঝার আছে। আমি এটিকে একা একা পরিমাপ হিসাবে ব্যবহার করতে দ্বিধা বোধ করব। পরিবর্তে, আমি অন্যান্য পরিমাপের সাথে এটি ব্যবহার করতাম যেমন ত্রুটি ঘনত্ব অর্জনের জন্য প্রদত্ত মডিউলটিতে ত্রুটির সংখ্যা। একটি উচ্চ ত্রুটিযুক্ত ঘনত্ব পরীক্ষার লিখন এবং কোড পর্যালোচনা সম্পাদন করতে সমস্যাগুলি নির্দেশ করতে পারে, যা জটিল কোডের কারণে হতে পারে বা নাও পারে।
ফ্যান-ইন এবং ফ্যান-আউট ডেটা প্রবাহের সাথে সম্পর্কিত আরও দুটি মেট্রিক। এখানে সংজ্ঞায়িত হিসাবে , ফ্যান ইন হ'ল প্রক্রিয়াগুলির সমষ্টি, প্যারামিটারগুলি পড়া এবং গ্লোবাল ভেরিয়েবলগুলি পড়া এবং ফ্যান আউট এমন পদ্ধতিগুলির সমষ্টি যা প্রদত্ত পদ্ধতিটিকে কল করে, প্যারামিটারগুলিতে লিখিত হয় (বাইরের ব্যবহারকারীদের কাছে প্রকাশিত হয়, রেফারেন্স দ্বারা পাস করা হয়), এবং গ্লোবাল ভেরিয়েবলগুলিতে লিখিত। আবার, উচ্চ ফ্যান-ইন এবং ফ্যান-আউট এমন একটি মডিউল নির্দেশক হতে পারে যা বুঝতে অসুবিধা হতে পারে।
নির্দিষ্ট দৃষ্টান্তে, অন্যান্য পদক্ষেপ বা মেট্রিকগুলিও দরকারী। উদাহরণস্বরূপ, অবজেক্ট-ওরিয়েন্টেড বিশ্বে, কোনও সিস্টেম কতটা জটিল বা জটিল তা নির্ধারণের জন্য মনিটরিং কাপলিং (ইচ্ছা কম), সংহতি (উচ্চ আকাঙ্ক্ষা) এবং উত্তরাধিকারের গভীরতা (ইচ্ছা কম) ব্যবহার করা যেতে পারে।
অবশ্যই, এটি উপলব্ধি করা গুরুত্বপূর্ণ যে প্রচুর পরিমাপ এবং মেট্রিকগুলি কেবল সূচক। সরলতা বাড়াতে রিফ্যাক্টর করা দরকার কিনা বা তা করার চেষ্টা করার মতো মূল্য নেই কিনা তা নির্ধারণ করতে আপনাকে আপনার রায় ব্যবহার করতে হবে। আপনি পরিমাপ তৈরি করতে পারেন, মেট্রিকগুলি গণনা করতে পারেন এবং আপনার কোড সম্পর্কে শিখতে পারেন, তবে আপনি সংখ্যার দ্বারা আপনার সিস্টেমটি ডিজাইন করতে চান না। শেষ পর্যন্ত, যা বোঝায় তা করুন।