কিভাবে একটি অর্থবহভাবে রক্ষণাবেক্ষণ পরিমাপ করে?


23

প্রসঙ্গ: আমি একটি সমস্ত-এমএস শপের একটি এন্টারপ্রাইজ বিকাশকারী।

কোডের কোনও টুকরো বা অ্যাপ্লিকেশনটির রক্ষণাবেক্ষণযোগ্যতা পরিমাপের জন্য কেউ কি ভাল উপায়ের প্রস্তাব দিতে পারেন ?

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

কেন উদ্দেশ্যমূলকভাবে পরিমাপ করার ক্ষমতা : আমি একটি বড় এন্টারপ্রাইজ গ্রুপে কাজ করি। আপনি যদি উদ্দেশ্যমূলকভাবে এটি পরিমাপ করতে না পারেন তবে আপনি লোকদের এটির জন্য দায়বদ্ধ রাখতে পারবেন না বা তাদের আরও ভাল করে তুলতে পারবেন না। বিষয়গত পরিমাপ হয় হয় না বা ধারাবাহিকভাবে ঘটে না।

আমি ভিএস 2010 কোড মেট্রিকগুলিতে দেখছি তবে আমি ভাবছি যে কারও অন্য কোনও প্রস্তাব আছে কিনা।


@ অ্যান - আমি একমত, তবে কমপক্ষে এটি আমাকে শুরু করার জায়গা দেবে। এখনই কিছুই নেই; এটি এমনকি খেলা করা হয় না।
nlawalker

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

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

3
"গণনা করা যায় এমন প্রতিটি জিনিস অগত্যা গণনা করা হয় না; যা কিছু গণনা করা হয় তা অবশ্যই গণনা করা যায় না।" -ইনস্টাইন
জেসন বেকার

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

উত্তর:


7

রক্ষণাবেক্ষণের পরিমাপ সহ সতর্কতা হ'ল আপনি ভবিষ্যতের ভবিষ্যদ্বাণী করার চেষ্টা করছেন। কোড কভারেজ, বাগ গণনা, এলওসি cyclomatic জটিলতা উপস্থিত রয়েছে এমন সব চুক্তি

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

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


7

ঠিক আছে, আমি যে পরিমাপটি ব্যবহার করি, বা আমার মনে হয় যে আমি ব্যবহার করি তা হ'ল এটি:

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

আমি কল করি যে উত্স কোডের অপ্রয়োজনীয়তা , কারণ এটি একটি ত্রুটি-সংশোধনকারী কোডের অতিরিক্ত কাজ like তথ্যটি 1 টি অংশে অন্তর্ভুক্ত ছিল, তবে এন অংশ হিসাবে এনকোড করা হয়েছিল, যা ধারাবাহিকভাবে সবগুলি একসাথে করতে হবে।

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

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

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

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


এটি কি খুব দুর্দান্ত ধারণা তৈরি করছে না - যে সমস্ত কার্যকরী প্রয়োজনীয়তাগুলি প্রায় একই আকারের? এবং এই মেট্রিক কি দায়িত্ব বিচ্ছিন্নতা নিরুৎসাহিত করবে না? আমার একটি অনুভূমিক বৈশিষ্ট্য প্রয়োগ করা দরকার; সর্বাধিক "রক্ষণাবেক্ষণযোগ্য" কোডটি হ'ল একটি প্রোগ্রামের একটি সম্পূর্ণ-পুনর্লিখন যা সম্পূর্ণরূপে এক একক পদ্ধতিতে অন্তর্ভুক্ত।
অ্যারোনআউট

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

5

রক্ষণাবেক্ষণ আসলে পরিমাপযোগ্য নয়। এটি তার অভিজ্ঞতা এবং পছন্দগুলির উপর ভিত্তি করে কোনও ব্যক্তির একটি বিষয়গত দৃষ্টিভঙ্গি।

কোনও কোড দেওয়ার জন্য একটি নিখুঁত ডিজাইনের ধারণা নিয়ে আসে ।

তারপরে সেই নিখুঁত একটি থেকে বাস্তব কোডটির কোনও বিচ্যুতির জন্য কিছু সংখ্যার মাধ্যমে 100 এর মান হ্রাস পায়। কোনটি সঠিকভাবে বেছে নেওয়া অ-নিখুঁত পদ্ধতির পরিণতির উপর নির্ভর করে By

একটি উদাহরণ:

কোডের একটি অংশটি কিছু ডেটা ফর্ম্যাট পড়ে এবং আমদানি করে এবং কিছু ভুল হলে ত্রুটি বার্তা প্রদর্শন করতে পারে।

একটি নিখুঁত সমাধান (100) এ ত্রুটি বার্তাগুলি একটি সাধারণ জায়গায় রাখা থাকবে। আপনার সমাধানটিতে যদি কোডগুলিতে স্ট্রিং কনস্ট্যান্ট হিসাবে তাদের হার্ড-কোডড থাকে তবে আপনি নিন 15 বলুন। সুতরাং আপনার রক্ষণাবেক্ষণ সূচক 85 হয়।


4

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

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

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

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


2

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

  • Cyclomatic জটিলতা
  • উত্তরাধিকারের গভীরতা
  • ক্লাস কুলিং
  • কোডের লাইনগুলি (প্রতিটি পদ্ধতিতে, প্রতি ক্লাসে, প্রতিটি প্রকল্পে, যাই হোক না কেন, আপনার রোল-আপের স্তরের উপর নির্ভর করে)

রক্ষণাবেক্ষণের সূচকটিই আমি কার্যকর বলে মনে করি। এটি একটি যৌগিক সূচক, এর উপর ভিত্তি করে:

  1. মোট আকার (কোডের লাইন)
  2. ক্লাস বা ফাইলের #
  3. পদ্ধতি #
  4. 20 এর উপরে সাইক্লোমেটিক জটিলতা (বা 10 - কনফিগারযোগ্য, 10 আমার পছন্দ)
  5. দ্বিত্ব

মাঝে মাঝে আমি স্বল্প রক্ষণাবেক্ষণ সূচক (কম এর জন্য খারাপ =) এর সাথে আমার পদ্ধতিগুলি দেখব। প্রায় ব্যর্থ না হয়ে, আমার প্রকল্পের সর্বনিম্ন রক্ষণাবেক্ষণ সূচকের সাথে যে পদ্ধতিগুলি পুনর্লিখনের সবচেয়ে বেশি প্রয়োজন এবং পড়ার পক্ষে সবচেয়ে কঠিন (বা বজায় রাখা)।

দেখুন সাদা কাগজ গণনার উপর আরও তথ্যের জন্য।


1

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

সাইক্লোমেটিক জটিলতা কোডটিতে কতগুলি পাথ রয়েছে তার একটি পরিমাপ। প্রতিটি পাথ পরীক্ষা করা উচিত (তবে সম্ভবত তা নয়)। প্রায় 20 এর উপরে জটিলতার সাথে কিছু ছোট ছোট মডিউলগুলিতে বিভক্ত হওয়া উচিত। 20 এর একটি সাইকোমেটিক জটিলতা সহ একটি মডিউল (এটি 20 ধারাবাহিক if then elseব্লকের সাথে এটির সদৃশ করতে পারে ) পরীক্ষার জন্য 2 ^ 20 পাথের উপরের সীমা থাকবে।

ক্লাস সংযোগগুলি ক্লাসগুলিতে কতটা দৃ bound়ভাবে আবদ্ধ হয় তার একটি পরিমাপ। আমি আমার পূর্ববর্তী নিয়োগকর্তার সাথে কাজ করেছি এমন কিছু খারাপ কোডের উদাহরণে কনস্ট্রাক্টরের প্রায় 30 আইটেম সহ একটি "ডেটা স্তর" উপাদান রয়েছে। সেই উপাদানটির জন্য বেশিরভাগ ব্যক্তিই "দায়বদ্ধ", এটি কাদামাটির সত্যিকারের বড় বল না হওয়া পর্যন্ত ব্যবসায় এবং ইউআই লেয়ার প্যারামিটারগুলি কন্সট্রাক্টর / ওপেন কলগুলিতে যুক্ত করে রাখে। যদি মেমরিটি সঠিকভাবে আমাকে পরিবেশন করে তবে প্রায় 15 টি বিভিন্ন নতুন / ওপেন কল (কিছু এখন আর ব্যবহৃত হয় না), কিছুটা আলাদা পরামিতিগুলির সেট sets আমরা এ জাতীয় আরও কিছু করা থেকে বিরত রাখার একমাত্র উদ্দেশ্যে কোড রিভিউ প্রতিষ্ঠিত করেছি - এবং এটি যেন আমরা তাকে এককভাবে ছড়িয়ে দিই না এমন দৃষ্টিভঙ্গি এড়াতে আমরা দলের প্রত্যেকের কোড পর্যালোচনা করেছি, তাই আমরা প্রায় অর্ধেক দিন 4-6 এর জন্য নষ্ট করেছি লোকেরা প্রতিদিন এবং কারণ আমরা 'না


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

1

নীচের লাইনে, রক্ষণাবেক্ষণযোগ্যতা কেবলমাত্র প্রয়োজন পরে পরিমাপ করা যেতে পারে , আগে নয় । এটি হ'ল, আপনি কেবলমাত্র বলতে পারবেন, কোনও কোডের টুকরোটি রক্ষণাবেক্ষণযোগ্য কিনা, যখন আপনি এটি বজায় রাখতে হবে।

কোডের টুকরোটি প্রয়োজনীয়তার সাথে মানিয়ে নেওয়া কতটা সহজ ছিল তা পরিমাপ করা তুলনামূলকভাবে সুস্পষ্ট obvious এটি প্রয়োজনীয়তার পরিবর্তনের ক্ষেত্রে কীভাবে প্রতিক্রিয়া জানাবে সময়ের আগে এটি অসম্ভব পরিমাপের কাছাকাছি। এর অর্থ হ'ল, আপনার প্রয়োজনীয়তার পরিবর্তনের পূর্বাভাস দিতে হবে। এবং যদি আপনি এটি করতে পারেন তবে আপনার নোবেল মূল্য পাওয়া উচিত;)

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


1

বিপুল পরিমাণে কারিগরি debtণ যা সত্যই কখনই সম্বোধিত হয় না

প্রযুক্তিগত debtণ যা "ইভেন্টগুলি দ্বারা ছাপিয়ে গেছে" তার সম্পর্কে কী?

আমি ক্রিপি কোড লিখি এবং তা উত্পাদনে ছুটে যাই।

আপনি পর্যবেক্ষণ - সঠিকভাবে - যে এটি রক্ষণাবেক্ষণযোগ্য নয়।

এই কোডটি হ'ল কোনও পণ্য লাইনের বৈশিষ্ট্যগুলির শেষ রাউন্ড যা বাতিল হয়ে যাবে কারণ আইনী প্রেক্ষাপট পরিবর্তিত হয়েছে এবং পণ্যের লাইনের কোনও ভবিষ্যত নেই।

"প্রযুক্তিগত debtণ" আইনী পরিবর্তন দ্বারা মুছে ফেলা হয় যা এটিকে সমস্ত অচল করে দেয়।

বাইরের বিবেচনার কারণে "রক্ষণাবেক্ষণ" মেট্রিকটি "খারাপ" থেকে "অপ্রাসঙ্গিক" হয়ে গেল।

কীভাবে এটি পরিমাপ করা যায়?


"একশ বছরে আমরা সকলেই মরে যাব এবং এগুলির কোনোটাই বিবেচ্য হবে না K যদি অপ্রাসঙ্গিক কিছু থাকে তবে এটি এই প্রতিক্রিয়া যা প্রশ্নের উত্তর নয়।
মার্টিন মাট

0

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


0

প্রশ্নাবলী

বিকাশকারীদের বেনামে প্রশ্নপত্র তৈরি করার বিষয়ে, মাসে বা একবার একবার পূরণ করার কী? প্রশ্নগুলি কিছু যেতে হবে:

  • গত মাসে আপনার প্রকল্পের সময়টি আপনি কতটা ব্যয় করেছেন এক্স (প্রায়) [0% ... 100%]
  • রক্ষণাবেক্ষণের ক্ষেত্রে আপনি কীভাবে কোড বেসের রাজ্যটিকে রেট করবেন (সত্যই দরিদ্র, দরিদ্র, নিরপেক্ষ, ঠিক আছে, ভাল, সত্যই ভাল)।
  • প্রকল্পের জটিলতার তুলনায় কোড বেইজটিকে আপনি কীভাবে রেট করবেন (উপায়টি খুব জটিল, ঠিক ঠিক খুব সহজ সরল)।
  • কোড বেসের অত্যধিক জটিলতার কারণে আপনার কাজগুলি সমাধানে বাধা পেয়েছিলেন এমন সময় আপনি কতক্ষণ অনুভব করেন? [মোটেও একবারে নয়, প্রায়ই, ক্রমাগত]

(মন্তব্যগুলিতে রক্ষণাবেক্ষণযোগ্যতা পরিমাপে আপনার পক্ষে অতিরিক্ত প্রশ্ন যুক্ত হতে পারে এবং আমি সেগুলি যুক্ত করব them)


0

আমি রক্ষণাবেক্ষণের দিকে তাকানোর দুটি উপায় সম্পর্কে ভাবতে পারি (আমি নিশ্চিত যে আরও ভাল আশা আছে যে অন্যরা ভাল সংজ্ঞা দিয়ে আসতে পারেন।

না বুঝে পরিবর্তন।

কোনও বাগ ফিক্সার কোডে আসতে পারে এবং পুরো সিস্টেমটি কীভাবে কাজ করে তা বোঝার প্রয়োজন ছাড়াই কোনও সমস্যার সমাধান করতে পারে।

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

এই পরিস্থিতিতে একটি বাগ ফিক্সার অবশ্যই সিস্টেমের ন্যূনতম জ্ঞান সহ একটি (সাধারণ) বাগটি ঠিক করতে সক্ষম হবে should যদি ঠিকঠাক কাজ করে তবে রিগ্রেশন পরীক্ষার কোনওটিই ব্যর্থ হওয়া উচিত। যদি কোনও রিগ্রেশন পরীক্ষা ব্যর্থ হয় তবে আপনাকে দ্বিতীয় পর্যায়ে যেতে হবে।

maintainabilty1 = K1 . (Code Coverage)/(Coupling of Code) * (Complexity of API)

বোঝার সাথে পরিবর্তন।

যদি কোনও বাগ ফিক্স অ-তুচ্ছ হয়ে যায় এবং আপনার সিস্টেমটি বুঝতে হবে। তারপরে সিস্টেমের ডকুমেন্টেশনটি কী পছন্দ করে। আমরা বাহ্যিক এপিআইয়ের ডকুমেন্টেশন বলছি না (তারা তুলনামূলকভাবে অকেজো)। আমাদের যা বোঝার দরকার তা হ'ল সিস্টেমটি কীভাবে কাজ করে যেখানে কোনও চালক (হ্যাক পড়ুন) বাস্তবায়নে ব্যবহৃত কৌশলগুলি ইত্যাদি etc.

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

সুতরাং সম্ভবত আমরা এর কিছু পরিমাপ নিয়ে আসতে পারলাম:

maintainability2 = K2 . (Size of doc)/(Time to write doc)

0

আমি প্রায়শই দেখতে পাই যে "সংক্ষিপ্ততম সমতুল্য" সমাধানটি সর্বাধিক রক্ষণাবেক্ষণযোগ্য হতে থাকে।

এখানে সংক্ষিপ্ততমটির অর্থ কয়েকটিতম অপারেশন (লাইন নয়)। এবং সমতুল্য হ'ল সংক্ষিপ্ত সমাধানের আগের সমাধানের চেয়ে খারাপ সময় বা স্থান জটিলতা থাকা উচিত নয়।

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

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

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

সুতরাং এমন একটি সরঞ্জাম থাকা উচিত যা কোডের পুনরাবৃত্তি স্পট করতে পারে, তবে আমি মনে করি যে সমস্যাটি সর্বোত্তম সংকোচনের সন্ধানের অনুরূপ, যা কোলমোগোরভ জটিলতার সমস্যা যা অনস্বীকার্য। তবে অন্য প্রান্তে অব্যবহৃত এবং ব্যবহৃত বিমূর্ততাগুলি রেফারেন্সের সংখ্যার ভিত্তিতে স্পট করা সহজ: এর জন্য একটি চেক স্বয়ংক্রিয়ভাবে তৈরি করা যেতে পারে।


0

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

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

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

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