আমার কোডটির 'সাইক্লোমেটিক জটিলতা' বলতে কী বোঝায়?


42

আমি কোডের স্থিতিশীল বিশ্লেষণে নতুন। আমার অ্যাপ্লিকেশনটির 17,754 এর একটি সাইক্লোমেটিক জটিলতা রয়েছে। অ্যাপ্লিকেশনটি কেবলমাত্র 37,672 কোডের লাইন। কোড লাইনের উপর ভিত্তি করে জটিলতা বেশি বলা কি বৈধ? সাইক্লোমাটিক জটিলতা আমাকে কী বলছে?


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

উত্তর:


48

সাইক্লোমাটিক জটিলতা আমাকে কী বলছে?

সাইক্লোমেটিক জটিলতা কোডের লাইনগুলির একটি পরিমাপ নয়, তবে একটি মডিউলটির মাধ্যমে স্বাধীন পাথের সংখ্যা। আপনার সাইক্লোমাটিক জটিলতা 17,754 এর অর্থ হল আপনার অ্যাপ্লিকেশনটির মাধ্যমে 17,754 টি অনন্য পাথ রয়েছে। এটিতে কয়েকটি প্রয়োগ রয়েছে, সাধারণত আপনার অ্যাপ্লিকেশনটি বোঝা এবং পরীক্ষা করা কতটা কঠিন terms উদাহরণস্বরূপ, সাইক্লোমেটিক জটিলতা হ'ল 100% শাখা কভারেজ অর্জনের জন্য প্রয়োজনীয় পরীক্ষাগুলির সংখ্যা, ভাল-লিখিত পরীক্ষাগুলি ধরে নেওয়া।

একটি ভাল সূচনা পয়েন্ট হতে পারে সাইক্লোমেটিক জটিলতায় উইকিপিডিয়া নিবন্ধ । এটিতে সিউডোকোডের কয়েকটি স্নিপিটস এবং কয়েকটি গ্রাফ রয়েছে যা দেখায় যে চক্করগত জটিলতা কী all আপনি যদি আরও জানতে চান তবে আপনি ম্যাককেবের কাগজটিও পড়তে পারেন যেখানে তিনি সাইক্লোমেটিক জটিলতার সংজ্ঞা দিয়েছেন

আমার অ্যাপ্লিকেশনটিতে কোডের 17,754 লাইনের সাইক্লোমেটিক জটিলতা রয়েছে। অ্যাপ্লিকেশনটি কেবলমাত্র 37,672 কোডের লাইন। কোড লাইনের ভিত্তিতে জটিলতা বেশি বলে কি বৈধ?

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

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


36

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

সংখ্যাটি পদ্ধতি স্তরে কার্যকর। উচ্চ স্তরে এটি কেবল একটি সংখ্যা।

17,754 এর একটি সংখ্যা প্রকল্প স্তরের জটিলতা (মোট কোড) নির্দেশ করে, যার খুব বেশি অর্থ নেই।

ক্লাস এবং পদ্ধতি স্তরের জটিলতায় ড্রিলিং কোডের এমন অঞ্চলগুলি নির্ধারণ করবে যা ছোট পদ্ধতিতে রিফ্যাক্টর করা বা জটিলতা দূর করার জন্য পুনরায় নকশা করা দরকার।

একটি CASEপদ্ধতিতে 50 টি মামলা সহ একটি বিবৃতি বিবেচনা করুন । প্রতিটি রাজ্যের বিভিন্ন ব্যবসায়িক যুক্তি থাকতে পারে। এটি 50 এর একটি সাইক্লোমেটিক জটিলতা তৈরি করবে 50 50 সিদ্ধান্তের পয়েন্ট রয়েছে। ব্রাঞ্চিংয়ের যুক্তি থেকে মুক্তি পেতে কারখানার প্যাটার্ন ব্যবহার করে সিএসএসির বিবৃতিটি নতুনভাবে ডিজাইন করতে হতে পারে। কখনও কখনও আপনি চুল্লী করতে পারেন (পদ্ধতিটি ছোট অংশে বিভক্ত করুন) এবং কিছু ক্ষেত্রে কেবল একটি নতুন ডিজাইন জটিলতা হ্রাস করবে।

সাধারণভাবে, পদ্ধতি স্তরের জটিলতার জন্য:

  • <10 বজায় রাখা সহজ
  • 11-20 বজায় রাখা শক্ত
  • 21+ রিফ্যাক্টরিং / পুনরায় নকশার জন্য প্রার্থী

এছাড়াও বিবেচনা করুন যে উচ্চতর জটিলতা কোডকে ইউনিট পরীক্ষার থেকে আরও শক্ত করে তোলে।

আমি একটি পদ্ধতিতে সর্বাধিক জটিলতাটি দেখেছি 560 was এটি এক পদ্ধতিতে বিবৃতি দিলে প্রায় 2000 লাইন ছিল। মূলত অবিস্মরণীয়, অকেট অযোগ্য, সম্ভাব্য বাগগুলি পূর্ণ। ব্রাঞ্চিং যুক্তির জন্য প্রয়োজনীয় সমস্ত ইউনিট পরীক্ষার কেসগুলি কল্পনা করুন! ভাল না.

সমস্ত পদ্ধতি 20 এর নীচে রাখুন এবং রাখুন এবং উপলব্ধি করুন যে কোনও পদ্ধতিকে কম জটিল করে তুলতে তার পুনঃপরিশোধন করার জন্য ব্যয় হয়।


এটি একটি ভাল উত্তর।
পেসারিয়ার

2
@ পেসারিয়ার সেক্ষেত্রে কেবল উত্তরটি আপভোট করুন;)।
জিরো

> "সাধারণভাবে, পদ্ধতি স্তরের জটিলতার জন্য" উদ্ধৃতি?
বেনি বোত্তেমা

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

"ব্রাঞ্চিংয়ের যুক্তি থেকে মুক্তি পেতে কারখানার প্যাটার্ন ব্যবহার করে সিএসই-র বিবৃতিটি নতুনভাবে ডিজাইন করতে হতে পারে।" কেন? এটি যুক্তির জটিলতা দূর করে না; এটি কেবল এটি লুকিয়ে রাখে এবং এটি কম স্পষ্ট করে তোলে এবং এটি বজায় রাখা আরও কঠিন।
ম্যাসন হুইলার

1

এটি আপনার আবেদনে স্বতন্ত্র পাথের সংখ্যা। এই আইবিএম নিবন্ধটি দেখুন সিসি

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

আমি ব্যক্তিগতভাবে অনেকবার যা পড়েছি তা হ'ল 10 এর চেয়ে বেশি সিসি সহ পদ্ধতিতে ত্রুটির ঝুঁকি বেশি থাকে।

আমি আমার অ্যাপ্লিকেশনগুলির কোডের গুণমান পরীক্ষা করতে সোনার ব্যবহার করি এবং ডিফল্টরূপে আমি মনে করি আপনার যদি +10 সিসি সহ পদ্ধতি থাকে তবে এটি একটি সতর্কতা উত্থাপন করে। তবুও এর অর্থ কিছুই হতে পারে না। এর একটি দৃ concrete় উদাহরণ: আপনি যদি equalsআপনার শিমের বৈশিষ্ট্যের উপর ভিত্তি করে কোনও পদ্ধতি উত্পন্ন করার জন্য যদি ग्रहণ ব্যবহার করেন , সিসি খুব দ্রুত ছাদের উপরে চলে যাবে ...


1
পিএমডি-র ডিফল্ট সেটিংটি 10-এর একটি সাইক্লোমেটিক জটিলতার বিষয়েও সতর্ক করা। প্রতি-পদ্ধতি স্তরে জটিলতার দিকে তাকানো আপনাকে এমন পদ্ধতিগুলিকে উপেক্ষা করতে দেয় যা উচ্চতর সিসির জন্য উত্পন্ন equalsপদ্ধতিগুলির মতো ভাল কারণ থাকতে পারে ।
টমাসের মালিক

আমি নিশ্চিত ছিলাম তাই আমি পরীক্ষা করেছিলাম, তবে সোনার অভ্যন্তরীণভাবে এই পদক্ষেপটি পেতে পিএমডি ব্যবহার করে। সুতরাং এটি সমস্ত
অর্থবোধ করে

-1

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

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

আপনার যে অর্থবহ সিসিএনটি যত্ন নেওয়া উচিত তা হ'ল অন্য কোনও ফাংশন বেসে। এছাড়াও, প্রতিটি ফাংশনের সিসিএন আনবার 15 রাখুন আদর্শ পরিসীমা হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.