কোডটি "খারাপ" হতে হলে আমার পর্যালোচক হিসাবে কী করা উচিত?


18

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

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

এই বিশেষ পর্যালোচনার প্রতি আমার কীভাবে আচরণ করা উচিত? আমার পক্ষে কি সততা বজায় রাখা এবং গঠনমূলক থাকার কোনও উপায় আছে?

দয়া করে নোট করুন যে আমি এই প্রসঙ্গে কোড পর্যালোচনার সীমানা সম্পর্কে জিজ্ঞাসা করছি। আমি বুঝতে পারি যে সমস্যাটি সংগঠন এবং কাজের সংস্কৃতি সহ অন্যান্য কারণগুলির কারণে ঘটেছিল তবে আমি যা জানতে চাই তা হল পর্যালোচনাটি কীভাবে পরিচালনা করা যায়।


1
বিকাশকারী দলিলটি কেন এটি এভাবে করা হয় এবং সম্ভবত সমস্যা ট্র্যাকারে মূল সমস্যার জন্য একটি সমস্যা লিখেছিল?
লুক ফ্রাঙ্কেন

চটপট, এবং না।
লাল

4
প্রযুক্তিগত aboutণ সম্পর্কে কিছু করার জন্য আপনার সংস্থার মধ্যে কি ক্ষুধা আছে?
রবার্ট হার্ভে

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

1
সম্পর্কিত (সম্ভবত একটি সদৃশ): প্রকল্পে কীভাবে অত্যধিক বাস্তববাদকে মোকাবেলা করতে হবে?
gnat

উত্তর:


25

সরল:

1. আপনার প্রযুক্তিগত Documentণ নথি

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

প্রযুক্তিগত debtণ নিয়ে কাজ করার প্রথম পদক্ষেপটি এটি নথিভুক্ত করা। আপনার ইস্যু ট্র্যাকারে আইটেম যুক্ত করে এটি করুন যা describeণের বর্ণনা দেয়। এটি আপনাকে সমস্যার পরিমাণের একটি পরিষ্কার চিত্র পেতে সহায়তা করবে এবং এটি মোকাবেলা করার পরিকল্পনা তৈরিতে সহায়তা করবে।

২. ধীরে ধীরে আপনার backণ পরিশোধ করুন

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

একবার আপনি এমন একটি পর্যায়ে পৌঁছে গেছেন যেখানে আপনার আর কোনও প্রযুক্তিগত ঘাটতি নেই আপনি একটি স্বাস্থ্যকর কোডবেসে যাচ্ছেন :)


5

পার্শ্ব নোট হিসাবে: একটি নতুন কাজের জন্য অনুসন্ধান করুন। এই এক ভাল কিছু হবে না।

আপনি যে কোডটির পর্যালোচনা করছেন তার লক্ষ্যগুলি হ'ল:

  • কোনও বৈশিষ্ট্য শিপানোর জন্য, যা প্রয়োজনীয়তা অনুসারে কাজ করা উচিত।

  • কারিগরি .ণের বৃদ্ধি কমাতে।

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

দ্বিতীয় লক্ষ্যটি হ'ল আপনার প্রশ্নটি যার দিকে केन्द्रিত। একদিকে, নতুন কোডটি কারিগরি debtণ বাড়ানোর আশা করা যায় না। অন্যদিকে, পর্যালোচনার সুযোগটি কোডটি নিজেই, তবে পুরো কোডবেজের প্রসঙ্গে। সেখান থেকে আপনি একজন পর্যালোচক হিসাবে মূল লেখকের কাছ থেকে দুটি পদ্ধতির আশা করতে পারেন:

  • বাইরের কোডটি আমার দোষ নয়। আমি কেবল বৈশিষ্ট্যটি বাস্তবায়ন করেছি এবং পুরো কোডবেস সম্পর্কে কোনও চিন্তা করি না।

    এই দৃষ্টিকোণে, কোডটি কোডবেসের ত্রুটিগুলি অনুলিপি করবে এবং তাই অনিবার্যভাবে প্রযুক্তিগত debt ণ বাড়িয়ে তুলবে : আরও খারাপ কোড সর্বদা আরও খারাপ।

    যদিও এটি একটি বৈধ স্বল্পমেয়াদী পদ্ধতির দীর্ঘমেয়াদে, এর ফলে দেরি এবং কম উত্পাদনশীলতা বৃদ্ধি পাবে এবং শেষ পর্যন্ত বিকাশ প্রক্রিয়াটি এত ব্যয়বহুল এবং ঝুঁকিপূর্ণ হতে পারে, ফলে পণ্যটি বিকশিত হওয়া বন্ধ করে দেয়।

  • নতুন কোড লেখা লিগ্যাসি রিফ্যাক্টর করার একটি সুযোগ।

    এই দৃষ্টিকোণে, নতুনটিতে লিগ্যাসি কোডের ত্রুটিগুলির প্রভাব সীমিত হতে পারে। তদুপরি, প্রযুক্তিগত debtণ হ্রাস হতে পারে, বা কমপক্ষে কোড বৃদ্ধির সাথে আনুপাতিকভাবে বাড়ানো যায় না।

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

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

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

আপনার সহকর্মী অন্য একটি বৈশিষ্ট্যটি বাস্তবায়ন করছেন এবং এমন কোনও ওআরএমের অভাবের কারণে খুব অবাক হয়েছেন যেখানে একজনের নিখুঁত আকার তৈরি হয়। সুতরাং তিনি একটি ওআরএম ব্যবহার শুরু করেন।

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

আপনি মনে করেন আপনি দুর্দান্ত কাজ করেছেন, কিন্তু এখন, নতুন বিকাশকারী যিনি এই প্রকল্পে যোগদান করছেন তাদের আগের চেয়ে অনেক জটিলতার মুখোমুখি হতে হবে:

  • অনুরোধগুলি চিকিত্সার পুরানো উপায়,

  • এমভিসি উপায়,

  • পুরানো লগিং প্রক্রিয়া,

  • লগিং ফ্রেমওয়ার্ক,

  • ফ্লাইতে নির্মিত এসকিউএল কোয়েরি সহ ডাটাবেসে সরাসরি অ্যাক্সেস,

  • ওআরএম

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

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

  • লিগ্যাসি লগিং সম্পন্ন সমস্ত জায়গাগুলি সন্ধান করুন (যেমন লগ ফাইলটি সরাসরি অ্যাক্সেস করা হয়) এবং নিশ্চিত করুন যে তারা সবাই একই পদ্ধতিতে কল করে।

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

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

  • নতুন বৈশিষ্ট্যটিতে সদ্য রিফ্যাক্টর পদ্ধতিগুলি ব্যবহার করুন।

  • লগিং ফ্রেমওয়ার্কে স্থানান্তরিত করুন: একমাত্র প্রভাবিত কোড হ'ল ডেডিকেটেড লাইব্রেরির মধ্যে কোড।


1
শেষ অনুচ্ছেদ পর্যন্ত দুর্দান্ত উত্তর। আপনি এটি উদ্দেশ্যযুক্ত করেছেন বা না করেছেন, আপনি বোঝাচ্ছেন যে ভাল কোডগুলি নতুন কোডের জন্য ব্যবহার করা উচিত নয়। -1
রাবারডাক

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

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

@ রাবারডাক: এটি দ্বিতীয় লগিং কাঠামোটি যুক্ত করার বিষয়ে নয়, প্রথমটি। যে লোকটি দ্বিতীয় লগিং কাঠামোয় যুক্ত করে তা প্রথম কারণটি শুধুমাত্র একটি ছোট বৈশিষ্ট্যে ব্যবহৃত হয়; আমার পরামর্শ অনুসারে যদি কোডবেসটি রিফ্যাক্ট করা হত তবে এটি হবে না।
আর্সেনী মোরজেনকো

আমি মনে করি আপনি এবং আমি একমত, তবে আপনার উত্তরগুলি এমনভাবে পড়ে যা উন্নতিতে নিরুৎসাহিত করে। আমি ঠিক সে সাথে উঠতে পারি না।
রাবারডাক

3

আপনি যদি আপনার উন্নয়ন প্রক্রিয়ার অংশ হিসাবে কোড পর্যালোচনা করছেন; তারপরে আপনাকে অবশ্যই যে বিধিগুলি আপনি পর্যালোচনা করছেন তার বিরুদ্ধে 'বিচার' করতে হবে।

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

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

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


3

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

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

অন্য কথায়, মূলটি হ'ল নিয়মিতভাবে প্রজেক্টগুলি শুরু করার দিকে ছোট পরিবর্তনগুলি পরিবর্তনের পরিবর্তে শেষের দিকে আরও বড় পরিবর্তনের পরামর্শ দেওয়ার পরিবর্তে পরামর্শ দেওয়া।


2

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

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

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