কোড মেট্রিকগুলির সাথে মুগ্ধতা কী? [বন্ধ]


84

আমি ইদানীং এসও তে 'কোড মেট্রিক্স' সম্পর্কিত বেশ কয়েকটি প্রশ্ন দেখেছি এবং ভাবতে হবে যে মোহ কী? এখানে কয়েকটি সাম্প্রতিক উদাহরণ দেওয়া হল:

আমার মনে, কোনও মেট্রিক কোড পর্যালোচনার বিকল্প নিতে পারে না, যদিও:

  • কিছু মেট্রিক কখনও কখনও এমন জায়গাগুলি নির্দেশ করতে পারে যেগুলি পর্যালোচনা করা দরকার and
  • স্বল্প সময়ের ফ্রেমে মেট্রিকগুলিতে আমূল পরিবর্তনগুলি এমন স্থানগুলিকে নির্দেশ করতে পারে যা পর্যালোচনা করা দরকার

তবে আমি একটি একক মেট্রিকের কথা ভাবতে পারি না যা নিজে থেকে সর্বদা 'ভাল' বা 'খারাপ' কোড নির্দেশ করে - পরিমাপগুলি দেখতে না পারে এমন জিনিসগুলির জন্য সর্বদা ব্যতিক্রম এবং কারণ রয়েছে।

কোড মেট্রিকগুলি যা আমি উপেক্ষা করেছি সেগুলি থেকে লাভ করার জন্য কি কিছু জাদুকরী অন্তর্দৃষ্টি রয়েছে? অলস প্রোগ্রামার / পরিচালকরা কোড না পড়ার অজুহাত খুঁজছেন? লোকেরা কি দৈত্য লিগ্যাসি কোড ঘাঁটি দিয়ে উপস্থাপিত হয় এবং কোনও স্থান শুরু করার জন্য সন্ধান করে? কি হচ্ছে?

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

সম্পাদনা: আমি সকলের সাথেই পরিচিত, যদি সমস্ত মেট্রিকগুলি নিয়ে আলোচনা করা হয় না, আমি কেবল তাদের বিচ্ছিন্নতা বা গুণমানের স্বেচ্ছাচারিত মান হিসাবে দেখি না।


4
সি # কোডের জন্য আমার কোড মেট্রিক the number of StyleCop warnings + 10 * the number of FxCop warnings + 2 to the power of the number of disabled warning types। কেবলমাত্র সেই মেট্রিকের মান যতটা সম্ভব ছোট হওয়ার পরে, কোডটি (আমার মতে) পর্যালোচনা করা কোনও মানুষের পক্ষে কি উপযুক্ত? সংক্ষেপে: সরল কৌশলগুলির চেয়ে সূক্ষ্ম সরঞ্জামগুলি কোডের মান উন্নত করতে সহায়তা করতে পারে। যদিও এটি সম্ভবত অফ-টপিক।
হামিশ গ্রুবিজন

@ অ্যালফ্রেড - I just don't see the point of them in isolation or as arbitrary standards of quality.- কে বিচ্ছিন্নতার সাথে বা মানের স্বতন্ত্র মান হিসাবে মেট্রিক ব্যবহারের কথা ভাবেন?
luis.espinal

@ লুই যে আমার সম্পাদনা, এই প্রশ্নটি উত্থাপিত বিভিন্ন প্রশ্নের উপর ভিত্তি করে - উত্তরটি "পরিচালন", মূলত
স্টিভেন এ। লো

বুলেট তালিকার জন্য যেখানে তারা দরকারী সেগুলির জন্য +1, আমি মনে করি এটি ঠিক যেমনটি আপনি বর্ণনা করেছেন ঠিক তেমন
পরিবর্তনশীল

উত্তর:


87

এই থ্রেডের উত্তরগুলি একরকম বিজোড় যেমন তারা কথা বলে:

  • "দলটি" যেমন বলা মেট্রিকগুলির "এক এবং একমাত্র সুবিধাভোগী";
  • "মেট্রিক্স" যেমন তারা নিজের মধ্যে কিছু বোঝায়।

1 / মেট্রিক্স একটি জনসংখ্যার জন্য নয় , তবে তিনজনের জন্য :

  • বিকাশকারীরা: তারা তাদের কোডের স্থির বিশ্লেষণ সম্পর্কিত তাত্ক্ষণিক স্ট্যাটিক কোড মেট্রিকের সাথে সম্পর্কিত (চক্রযুক্ত জটিলতা, মন্তব্যের গুণমান, লাইনের সংখ্যা, ...)
  • প্রকল্পের নেতারা: তারা ইউনিট পরীক্ষা, কোড কভারেজ, অবিচ্ছিন্ন ইন্টিগ্রেশন টেস্টিং থেকে আসা দৈনিক লাইভ কোড মেট্রিকের সাথে সম্পর্কিত
  • ব্যবসায় স্পনসর (তারা সর্বদা ভুলে যায়, তবে তারা অংশীদার, উন্নয়নের জন্য যা অর্থ প্রদান করে): তারা স্থাপত্য নকশা, সুরক্ষা, নির্ভরতা, ... সম্পর্কিত সাপ্তাহিক গ্লোবাল কোড মেট্রিকের সাথে উদ্বিগ্ন are

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

2 / মেট্রিকগুলি নিজেরাই কোডের একটি স্ন্যাপশট উপস্থাপন করে এবং এর অর্থ ... কিছুই না!

এটি সেই মেট্রিকগুলির সংমিশ্রণ এবং বিশ্লেষণের সেই বিভিন্ন স্তরের সংমিশ্রণ যা "ভাল" বা "খারাপ" কোড নির্দেশ করতে পারে তবে আরও গুরুত্বপূর্ণ বিষয় হল এটি সেই মেট্রিকগুলির প্রবণতা যা তাৎপর্যপূর্ণ।

এটি সেই মেট্রিকগুলির পুনরাবৃত্তি যা আসল যুক্ত মূল্য দেয় যা তারা ব্যবসায়ের পরিচালকদের / প্রকল্পের নেতাদের / বিকাশকারীদের বিভিন্ন সম্ভাব্য কোড ফিক্সগুলির মধ্যে অগ্রাধিকার দিতে সহায়তা করবে


অন্য কথায়, "ম্যাট্রিক্সের আকর্ষণ" সম্পর্কে আপনার প্রশ্নটির মধ্যে পার্থক্য বোঝাতে পারে:

  • "সুন্দর" কোড (যদিও এটি সর্বদা দর্শকের চোখে থাকে)
  • "ভাল" কোড (যা কাজ করে এবং এটি কার্যকরভাবে প্রমাণ করতে পারে)

সুতরাং, উদাহরণস্বরূপ, 9 এর একটি চক্রবৃত্তীয় জটিলতার সাথে একটি ফাংশনটিকে "সুন্দর" হিসাবে সংজ্ঞায়িত করা যেতে পারে, যেমন 42 এর চক্রবৃত্তীয় জটিলতার এক দীর্ঘ সংশ্লেষিত ক্রিয়াকলাপের বিপরীতে।

কিন্তু যদি:

  • পরবর্তী ফাংশনটির একটি স্থিতিশীল জটিলতা থাকে, যা 95% এর কোড কভারেজের সাথে মিলিত হয় ,
  • যেহেতু সাবেক একটি হয়েছে বৃদ্ধি জটিলতা সঙ্গে মিলিত এর ... 0% একটি কভারেজ,

এক তর্ক করতে পারে:

  • পরেরটি একটি " ভাল " কোডটি উপস্থাপন করে (এটি কাজ করে, এটি স্থিতিশীল, এবং যদি এটি পরিবর্তন করার প্রয়োজন হয় তবে এটি এখনও সংশোধনের পরে কাজ করে কিনা তা পরীক্ষা করতে পারে),
  • পূর্ববর্তীটি একটি " খারাপ " কোড (এটি করার জন্য সমস্ত কিছু আবশ্যক করার জন্য এটি এখনও কিছু কেস এবং শর্ত যুক্ত করতে হবে এবং কিছুটা রিগ্রেশন পরীক্ষা করার সহজ উপায় নেই)

সুতরাং, সংক্ষেপে:

একটি একক মেট্রিক যা নিজেই সর্বদা নির্দেশ করে [...]

: খুব বেশি নয়, কোডটি আরও "সুন্দর" হতে পারে, যা নিজে থেকে অনেকটা বোঝায় না ...

কোড মেট্রিকগুলি যা আমি উপেক্ষা করেছি সেগুলি থেকে লাভ করার জন্য কি কিছু জাদুকরী অন্তর্দৃষ্টি রয়েছে?

কেবলমাত্র মেট্রিকের সংমিশ্রণ এবং প্রবণতাই আপনার পরে আসল "জাদুকরী অন্তর্দৃষ্টি" দেয়।


4
"সুন্দর" কোডটি বজায় রাখা আরও সহজ হতে পারে - এবং যদি তা হয় তবে এর অনেক মূল্য আছে!
রিচার্ড টি

21

আমার একটি প্রকল্প ছিল যা আমি এক মাস আগে একজন ব্যক্তির কাজ হিসাবে সাইক্লোমেটিক জটিলতার জন্য পরিমাপ করেছিলাম। এই ধরণের মেট্রিক্সে এটি আমার প্রথম প্রকাশ ছিল।

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

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

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

আমি মনে করি আপনি যদি নিজের কোড উন্নত করার জন্য কোনও কারণ / প্রেরণা হিসাবে মেট্রিকগুলি ব্যবহার করেন তবে তা মজাদার জিনিস a তবে কখন থামতে হবে এবং মেট্রিক লঙ্ঘনের অনুদানের জন্য জিজ্ঞাসা করা অবাস্তব।

মেট্রিকগুলি গাইড এবং সহায়তা, নিজের মধ্যে শেষ হয় না।


4
খুব সুন্দর, আপনি খুব গুরুত্বপূর্ণ ধারণাটি মার্জিত উপায়ে প্রকাশ করতে পরিচালনা করেছেন। আমি বর্তমানে সফ্টওয়্যার মেট্রিক্সের ক্ষেত্রে গবেষণা করছি এবং আমি এটি উল্লেখ করতে পারি।
পিটার পেরে

4
"1 মেট্রিক লঙ্ঘনের অনুদানের জন্য কখন থামবেন এবং জিজ্ঞাসা করবেন তা জানার জন্য এটি জরুরি" " আপনি এই সম্পর্কে ঠিক বলেছেন। কৌতুকপূর্ণভাবে মেট্রিকগুলি মান্য করা ধ্বংসাত্মক।
শাবিরোব

15

আমি যে সর্বকালের সেরা মেট্রিক ব্যবহার করেছি তা হ'ল করেছি সিআরপি স্কোর

মূলত এটি একটি অ্যালগরিদম যা স্বয়ংক্রিয় পরীক্ষার কভারেজের সাথে ওজনযুক্ত সাইক্লোমাটিক জটিলতার তুলনা করে। অ্যালগরিদম এর মত দেখাচ্ছে:CRAP(m) = comp(m)^2 * (1 – cov(m)/100)^3 + comp(m) যেখানে কমপ (এম) হল পদ্ধতি মিটার সাইক্লোমেটিক জটিলতা, এবং কোভ (এম) হ'ল স্বয়ংক্রিয় পরীক্ষাগুলির দ্বারা প্রদত্ত পরীক্ষার কোড কভারেজ।

পূর্বোক্ত নিবন্ধটির লেখকগণ (দয়া করে এটি পড়ুন ... এটি আপনার সময়ের পক্ষে ভাল) 30 টির একটি সর্বোচ্চ সিআরপি স্কোর প্রস্তাব করে যা নিম্নলিখিত উপায়ে ভেঙে যায়:

Method’s Cyclomatic Complexity        % of coverage required to be
                                      below CRAPpy threshold
------------------------------        --------------------------------
0 – 5                                   0%
10                                     42%
15                                     57%
20                                     71%
25                                     80%
30                                    100%
31+                                   No amount of testing will keep methods
                                      this complex out of CRAP territory.

আপনি যত তাড়াতাড়ি দেখতে পাচ্ছেন, মেট্রিক পুরষ্কারের কোডগুলি যা উত্তম পরীক্ষার কাভারেজের সাথে জটিল নয় (যদি আপনি ইউনিট পরীক্ষা লিখছেন, এবং আপনার হওয়া উচিত, এবং কভারেজটি মাপছেন না ... ভাল, আপনি সম্ভবত বাতাসে থুথু উপভোগ করবেন যেমন). ;-)

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

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


10

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

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

9

একটি ভাল কোড রিভিউ একটি ভাল স্থিতিশীল বিশ্লেষণ সরঞ্জামের বিকল্প নয়, যা অবশ্যই ইউনিট পরীক্ষার একটি ভাল সেটের বিকল্প নয়, এখন ইউনিট পরীক্ষাগুলি গ্রহণযোগ্যতা পরীক্ষার সেট ছাড়াই ভাল নয় ......

কোড মেট্রিকগুলি আপনার সরঞ্জাম বাক্সে রাখার অন্য একটি সরঞ্জাম, এগুলি তাদের নিজস্ব সমাধান নয় তারা যথাযথ হিসাবে ব্যবহার করার জন্য একটি সরঞ্জাম মাত্র (অবশ্যই আপনার বাক্সের অন্যান্য সমস্ত সরঞ্জাম সহ!)।


6

কোড বোঝার এবং বর্ণনা করার জন্য যান্ত্রিক পদ্ধতিতে লোকেরা আকৃষ্ট হয়। যদি সত্য হয়, দক্ষতা এবং উত্পাদনশীলতার জন্য র‌্যামিকেশনগুলি ভাবেন!

আমি সম্মত হই যে "গুড গদ্য" -এর জন্য "কোড গডনেস" এর একটি মেট্রিক মেট্রিকের মতোই বোধগম্য। তবে এর অর্থ এই নয় যে মেট্রিকগুলি অকেজো, কেবল সম্ভবত অপব্যবহার করা।

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

আমি মনে করি যদি আমরা প্রস্তাব হিসাবে মেট্রিকগুলি ব্যবহার করি - একটি লাল পতাকা - সম্ভবত তারা কার্যকর হতে পারে। সমস্যাগুলি যখন লোকেরা এসএলওসি বা উত্পাদন পরীক্ষার সাথে শতাংশের শতাংশে গুণমানের পরিমাপ শুরু করে।


6

আমার অত্যন্ত বিষয়গত মতামতটি হ'ল কোড মেট্রিকগুলি অন্তর্নিহিতভাবে অযোগ্য প্রমাণযোগ্য কিছুকে মাপ দিতে সক্ষম হয়ে অদম্য প্রাতিষ্ঠানিক মুগ্ধতা প্রকাশ করে।

একটি উপায়ে অন্তত মনস্তাত্ত্বিকভাবে বোঝায়, এমন কোনও বিষয় আপনি কীভাবে মূল্যায়ন বা বুঝতে পারবেন না সে সম্পর্কে আপনি কীভাবে সিদ্ধান্ত নিতে পারেন? শেষ পর্যন্ত অবশ্যই আপনি মানের সম্পর্কে মূল্যায়ন করতে পারবেন না যদি না আপনি বিষয়টি সম্পর্কে জ্ঞানবান হন (এবং আপনি যা মূল্যায়ন করার চেষ্টা করছেন তার চেয়ে কম ভাল) বা জ্ঞানবান এমন কাউকে জিজ্ঞাসা করেন যা অবশ্যই সমস্যাটিকে পিছনে ফেলেছে একধাপ.

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

না বলে আমি এটি একটি ভাল পরিমাপ বলে মনে করি, কেবলমাত্র আমি এটির অস্তিত্বের অপ্রতিরোধ্যতা দেখতে পাচ্ছি। এবং, যেমন আপনি উল্লেখ করেছেন, সম্ভবত কয়েকটি যুক্তিসঙ্গত মেট্রিক রয়েছে (প্রচুর 500+ লাইন পদ্ধতি, উচ্চ জটিলতা - সম্ভবত খারাপ)। যদিও আমি কখনই এমন জায়গায় পৌঁছিনি।


6

আমি বিশ্বাস করি একটি কোড মেট্রিক আছে।

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

সংখ্যাটি যত ছোট হবে তত ভাল।


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

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

আপনি কীভাবে জানবেন যে আপনার সাথে তুলনা করার কোনও বেসলাইন না থাকলে আপনি একটি ভাল কাজ করেছেন?
জেএস

5

মেট্রিক্স এবং স্বয়ংক্রিয় পরীক্ষাগুলি সম্পূর্ণ কোড পর্যালোচনার প্রতিস্থাপন বলে বোঝানো হয় না।

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

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


5

পরিমাপ কেবল তখন দরকারী যদি:

  • দল তাদের বিকাশ করেছে
  • দলটি তাদের সাথে একমত হয়েছিল
  • এগুলি একটি নির্দিষ্ট অঞ্চল চিহ্নিত করতে ব্যবহৃত হচ্ছে

সাধারণভাবে, যে কোনও মেট্রিক এতে মাপসই করা হয় না সেটিকে দলটি অনুকূল করে তুলতে হবে। আপনি কোড লাইন পরিমাপ করতে চান? গোশ করে, দেখুন তারা কত লিখতে পারে! আপনি কোড কভারেজ পরিমাপ করতে চান, গলির মাধ্যমে, আমাকে সেই কোডটি কভার করুন দেখুন!

আমি মনে করি প্রবণতা সনাক্তকরণের জন্য মেট্রিকগুলি দরকারী হতে পারে এবং বাস্তবে আমি কিছু দরকারীগুলি দেখেছি যেমন বিল্ড ব্রেক ব্রেক করার সময় প্লট করা, কোড মন্থ (প্রকল্পের মধ্যে কোডের রেখার সংখ্যা পরিবর্তিত হওয়া) এবং অন্যান্য জিনিস। তবে দলটি যদি তাদের সাথে না আসে, বা তারা রাজি না হয় বা তাদের বুঝতে না পারে, তবে আপনি সম্ভবত এক আঘাতের জগতে রয়েছেন।


5

এখানে stan4j থেকে কিছু জটিলতা মেট্রিক রয়েছে

একটি গ্রহন শ্রেণীর কাঠামো বিশ্লেষণ সরঞ্জাম।

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

জটিলতা মেট্রিক্স

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

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

গড় Cyclomatic জটিলতা Cyclomatic জটিলতা গড় মান একটি অ্যাপ্লিকেশন, গ্রন্থাগার, প্যাকেজ গাছ বা প্যাকেজের সব পদ্ধতি উপর মেট্রিক।

ফ্যাট মেট্রিক্স একটি আর্টিক্টের ফ্যাট মেট্রিক হস্তনির্মিতের একটি উপযুক্ত নির্ভরতা গ্রাফের প্রান্তগুলির সংখ্যা। নির্ভরতা গ্রাফের ধরণটি মেট্রিক বৈকল্পিক এবং নির্বাচিত শিল্পকর্মের উপর নির্ভর করে:

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

কোনও প্যাকেজের ফ্যাট মেট্রিক তার ইউনিট নির্ভরতা গ্রাফের প্রান্ত গণনা count এই গ্রাফটিতে প্যাকেজের সমস্ত শীর্ষ স্তরের শ্রেণি রয়েছে।

কোনও শ্রেণীর ফ্যাট মেট্রিক তার সদস্য গ্রাফের প্রান্ত গণনা। এই গ্রাফটিতে শ্রেণীর সমস্ত ক্ষেত্র, পদ্ধতি এবং সদস্য শ্রেণি রয়েছে। (এই গ্রাফ এবং ফ্যাট মানটি কেবলমাত্র যদি বিশদ সদস্যের স্তরের সাথে বিশ্লেষণ করে কোড বিশ্লেষণ করা হয় তবে উপলব্ধ।)

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

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

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

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


2

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

ওহ ... এবং এটি ধরে নিয়েছে যে আপনার কোড পর্যালোচনায় অংশগ্রহণকারীদের মধ্যে কমপক্ষে একজনের একটি সূত্র রয়েছে।


2

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


2

মেট্রিক্স কোড পর্যালোচনার বিকল্প নয়, তবে সেগুলি আরও সস্তা। তারা যে কোনও কিছুর চেয়ে বেশি সূচক।


2

উত্তরের একটি অংশ হ'ল কিছু কোড মেট্রিক আপনাকে প্রশ্নের উত্তরে খুব দ্রুত, প্রাথমিক ছুরিকা দিতে পারে: এই কোডটি কেমন?

এমনকি 'কোডের লাইনগুলি' আপনি যে কোডটি দেখছেন তার আকারের ধারণা দিতে পারে।

অন্য উত্তরে উল্লিখিত হিসাবে, মেট্রিকের ট্রেন্ড আপনাকে সর্বাধিক তথ্য দেয়।


2

তাদের মেট্রিকগুলি বিশেষ আকর্ষণীয় নয়। আপনি তাদের সাথে যা করেন তা গুরুত্বপূর্ণ।

উদাহরণস্বরূপ আপনি যদি কোডের লাইন প্রতি মন্তব্যের সংখ্যা পরিমাপ করছিলেন তবে কোন ভাল মান হিসাবে বিবেচনা করবেন? কে জানে? বা সম্ভবত আরও গুরুত্বপূর্ণ, প্রত্যেকের নিজস্ব মতামত আছে।

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

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

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

তবে সম্পর্কটি খুঁজে পাওয়ার আগে (কার্যকারণ বা না) আপনার কাছে ডেটা থাকতে হবে।

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

সুতরাং ডেটা সংগ্রহ করার আগে আপনাকে এটি দিয়ে কী করতে চান তা জানতে হবে। যদি মেট্রিকগুলি মাধ্যম হয় তবে শেষটি কী?


আমি সম্মত হব, আপনি উন্নতির জন্য যা মাপলেন তা ব্যতীত গুরুত্বপূর্ণ। আপনি যদি কোনও উত্পাদন প্রক্রিয়াতে ত্রুটিগুলি হ্রাস করতে চান তবে আপনার যা পরিমাপ করা হয় তা হ'ল ব্রেকের ঘরে যে পরিমাণ ত্রুটি এবং কত পরিমাণে কফি খাওয়া হয় তা আপনি সম্ভবত কোথাও পাবেন না
স্টিভেন এ। লো

অন্য কথায় কোনও মান হিসাবে ব্যবহারের জন্য কোনও প্রতিষ্ঠিত সম্পর্ক নেই; আপনি কি কোনও মান স্থাপনের জন্য মেট্রিক এবং পারস্পরিক সম্পর্ক ব্যবহারের পরামর্শ দিচ্ছেন? যদি তা হয় তবে আপনি কি কার্যকারণ যোগসূত্রটি প্রদর্শন করতে পারেন বা আমরা আবার কফির ব্যবহার পরিমাপ করছি?
স্টিভেন এ। লো

2

আমি মেট্রিকের ছোট পরিবর্তনগুলি অর্থবহ বলে মনে করি না: জটিলতা 20 সহ একটি ফাংশন জটিলতা 30 এর সাথে ফাংশনের চেয়ে পরিষ্কারভাবে পরিষ্কার নয় But তবে বড় পার্থক্যগুলি অনুসন্ধান করার জন্য এটি মেট্রিকগুলি চালানোর পক্ষে উপযুক্ত।

এক সময় আমি কয়েক ডজন প্রকল্প জরিপ করছিলাম এবং প্রকল্পগুলির একটির সর্বাধিক জটিলতার মান ছিল প্রায় 6,000 এবং অন্য প্রতিটি প্রকল্পের মূল্য ছিল প্রায় 100 বা তারও কম। এটি আমার উপর বেসবল ব্যাটের মতো আঘাত করে। অবশ্যই এই প্রকল্পটি নিয়ে অস্বাভাবিক কিছু এবং সম্ভবত খারাপ something


আপনি কি প্রকল্পটি দেখেছেন? মেট্রিকের বিশাল পার্থক্যের কারণ কী ছিল?
স্টিভেন এ। লো

6 কে জটিলতার প্রকল্পটি খারাপভাবে লেখা শুরু করা হয়নি, তবে চরম চাপের মধ্যে দিয়ে এটি বিকশিত হওয়ায় আরও খারাপ হয়।
জন ডি কুক

1

আমরা প্রোগ্রামার। আমরা সংখ্যা পছন্দ করি।

এছাড়াও, আপনি কী করতে যাচ্ছেন, কোডবেজের আকারটি বর্ণনা করবেন না কারণ "কোড মেট্রিকের লাইনগুলি অপ্রাসঙ্গিক"?

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


4
পার্থক্য আছে, একটিতে কোডের আরও লাইন রয়েছে। তবে কি? এটি সফ্টওয়্যারটির গুণমান সম্পর্কে কিছুই বলে না ...
স্টিভেন এ। লো

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