চক্রীয় জটিল জটিলতা [বন্ধ]


27

চক্রীয় জটিলতার বিভাগগুলি কী কী? উদাহরণ স্বরূপ:

1-5:
6-10 বজায় রাখা সহজ : কঠিন
11-15: খুব কঠিন
20+: অসম্ভব কাছে পৌঁছা

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

আমি দেখেছি এই :

কার্নেগি মেলনের পূর্বোক্ত রেফারেন্স মানগুলি সাইক্লোমেটিক জটিলতার মানগুলির জন্য চারটি রুট রেঞ্জ নির্ধারণ করে:

  • 1 এবং 10 এর মধ্যে পদ্ধতিগুলি সহজ এবং সহজে বোঝা যায় বলে বিবেচিত হয়
  • 10 এবং 20 এর মধ্যে মানগুলি আরও জটিল কোড নির্দেশ করে, যা এখনও বোধগম্য হতে পারে; তবে কোড নিতে পারে এমন সম্ভাব্য শাখার বেশি সংখ্যার কারণে পরীক্ষা আরও কঠিন হয়ে পড়ে
  • 20 এবং তদূর্ধ্বের মানগুলি প্রচুর সংখ্যক সম্ভাব্য এক্সিকিউশন পাথ সহ কোডের আদর্শ এবং কেবলমাত্র সম্পূর্ণরূপে উপলব্ধি করা যায় এবং দুর্দান্ত অসুবিধা ও প্রচেষ্টা দিয়ে পরীক্ষা করা যায়
  • এমনকি আরও উঁচুতে যাওয়া পদ্ধতিগুলি, যেমন> 50> অবশ্যই অবিস্মরণীয়

কোনও সমাধানের জন্য কোড মেট্রিকগুলি চলাকালীন, ফলাফলগুলি 25 এর নীচের যে কোনও কিছুর জন্য সবুজ দেখায় I আমি এর সাথে একমত নই, তবে আমি অন্যান্য ইনপুট পাওয়ার আশা করছিলাম।

চক্রবৃত্তীয় জটিলতার জন্য কি সাধারণভাবে গৃহীত রেঞ্জের তালিকা আছে?


2
আপনি সফ্টওয়্যার ইঞ্জিনিয়ারিং ইনস্টিটিউট, একটি সংস্থা যা ডেটা সন্ধান করে সফ্টওয়্যার ইঞ্জিনিয়ারিংয়ের একটি নেতা হিসাবে স্বীকৃত। আপনার প্রশ্নটি কী তা আমি বুঝতে পারছি না - আপনি চক্রযুক্ত জটিলতার জন্য একটি পরিসীমা তালিকা পেয়েছেন। আপনি আর কি খুঁজছেন?
টমাস ওয়ানস

1
আমি বিভিন্ন পরিসীমা দেখেছি; এটি কেবল একটি উদাহরণ ছিল। এবং মাইক্রোসফট শো 25. অধীনে কোনো কিছুর জন্য "সবুজ" যদি সেখানে ছিল আমি ভাবছিলাম এক গৃহীত পরিসীমা তালিকা। সম্ভবত আমি এটি খুঁজে পেয়েছি।
বব হর্ন

1
আমি @ থমাস ওভেন্সের সাথে একমত, তবে আপনি এই প্রশ্নটি জিজ্ঞাসা করে খুশি হন। আমি এটিকে একটি প্রশ্ন এবং উত্তর উভয় হিসাবেই উত্সাহিত করেছি।
ইওওলর

1
স্টিভ ম্যাককনেলের কোড কমপ্লিটের দ্বিতীয় সংস্করণে তিনি সুপারিশ করেন যে 0 থেকে 5 এর মধ্যে একটি চক্রবৃত্তীয় জটিলতা সাধারণত ভাল, তবে জটিলতা 6 থেকে 10 ব্যাপ্তিতে আসতে শুরু করলে আপনার সচেতন হওয়া উচিত। তিনি আরও ব্যাখ্যা করেছেন যে 10 এর জটিলতায় যে কোনও কিছু আপনার কোডকে রিফ্যাক্টর করার জন্য দৃ .়ভাবে বিবেচনা করা উচিত।
গিব্বোক

উত্তর:


19

আমি মনে করি এটি আপনার প্রোগ্রামিং কর্মীদের সামর্থ্যের উপর নির্ভর করে এবং পরিচালক হিসাবে আপনার সংবেদনশীলতার কোনও অংশেই নয়।

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

এটি একটি সাবজেক্টিভ মেট্রিক; আপনার কোড মেট্রিক্স সমাধানের সেটিংটি মূল্যায়ন করুন এবং এটি এমন একটি মিষ্টি স্পটে সামঞ্জস্য করুন যা আপনাকে বোধগম্য ফলাফল দেয় with


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

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

3
'কমনীয়তা' দরকারী কিছু সমস্যার জন্য, অন্যদের জন্য এটি বিষয়গুলিকে আরও বিভ্রান্ত করে তোলে। সিলভার বুলেট নেই।
23

1
-1 এর জন্য "অন্যান্য প্রোগ্রামাররা একক ইউনিট পরীক্ষা না লিখে পুরোপুরি ভাল, বাগ ফ্রি প্রোগ্রাম তৈরিতে পুরোপুরি সক্ষম" " আপনি যদি এটি পরীক্ষা না করে থাকেন তবে আপনি এর বাগটি মুক্ত জানতে পারবেন না।
সেবাস্তেয়েন

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

10

এখানে কোনও পূর্বনির্ধারিত বিভাগ নেই এবং বিভিন্ন কারণে কোনও শ্রেণিবদ্ধকরণ সম্ভব হবে না:

  1. কিছু রিফ্যাক্টরিং কৌশল কেবল জটিলতাটিকে এক বিন্দু থেকে অন্য দিকে সরিয়ে দেয় ( আপনার কোড থেকে কাঠামো বা একটি ভালভাবে পরীক্ষা করা বাহ্যিক লাইব্রেরিতে নয়, তবে কোডবেসের এক অবস্থান থেকে অন্য জায়গায়)। এটি সাইক্লোমেটিক জটিলতা হ্রাস করতে সহায়তা করে এবং আপনার বসকে (বা ক্রমান্বয়ে ক্রমবর্ধমান গ্রাফিক্সের সাথে উপস্থাপনাগুলি পছন্দ করে এমন কোনও ব্যক্তিকে) বোঝাতে সহায়তা করে যে আপনি আপনার দুর্দান্ত কিছু তৈরিতে ব্যয় করেছেন, তবে কোডটি আগের মতোই খারাপ থেকে যায়।

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

  3. বিকাশকারীদের জন্য একটি কোডের জটিলতা মারাত্মকভাবে হ্রাস করার সময় কিছু অন্যান্য অ-রিফ্যাক্টরিং কৌশলগুলি চক্রচক্রীয় জটিলতাকে মোটেই প্রভাবিত করে না। উদাহরণ: প্রাসঙ্গিক মন্তব্য বা ডকুমেন্টেশন যুক্ত করা। সিনট্যাকটিক চিনি ব্যবহার করে কোডটিকে "আধুনিকীকরণ" করুন।

  4. সাইক্লোমেটিক জটিলতা অপ্রাসঙ্গিকভাবে কেবল এমন ক্ষেত্রে রয়েছে। আমি তার মন্তব্যে আইসিসনেম দ্বারা প্রদত্ত উদাহরণটি পছন্দ করি : কিছু বড় switchবক্তব্য অত্যন্ত স্পষ্ট হতে পারে এবং আরও OOPy উপায়ে এগুলি পুনর্লিখন খুব কার্যকর হবে না (এবং নতুনদের দ্বারা কোডটির বোঝাপড়া জটিল করে তুলবে)। একই সাথে, এই বিবৃতিগুলি একটি দুর্যোগ, চক্রবিজ্ঞান সংক্রান্ত জটিলতা-ভিত্তিক।

  5. রবার্ট হার্ভি যেমন ইতিমধ্যে উপরে বলেছে , এটি দলের উপর নির্ভর করে।

অনুশীলনে, আমি উত্স কোডটি দেখেছি যার মধ্যে ভাল চক্রযুক্ত জটিলতা ছিল তবে এটি ছিল ভয়ানক। একই সময়ে, আমি উচ্চ সাইক্লোমেটিক জটিলতার কোড দেখেছি, তবে এটি বুঝতে আমার খুব বেশি ব্যথা হয়নি।

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

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


2
+1 আমি যা বলেছি তার সাথে একমত। সাইক্লোমেটিক জটিলতা বা এলওসি হ'ল মেট্রিক যা স্থির কোড বিশ্লেষণের সাহায্যে আপনাকে দেওয়া হয়। স্ট্যাটিক বিশ্লেষকরা দুর্দান্ত সরঞ্জাম, তবে তাদের মধ্যে সাধারণ জ্ঞানের অভাব রয়েছে। এই মেট্রিকগুলি একটি মানব মস্তিষ্কের দ্বারা প্রক্রিয়াজাত করা দরকার, সম্ভবত অভিজ্ঞ অভিজ্ঞ প্রোগ্রামারের অন্তর্ভুক্ত one তবেই আপনি বলতে পারবেন যে কোনও নির্দিষ্ট সফ্টওয়্যার অযথা জটিল is
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.