কোড বেসের বিভিন্ন অংশে কাজ করার সময় একটি বাগ ঠিক করা


19

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

আপনি এই পরিস্থিতিতে কি করবেন?

  1. বাগটি ঠিক করুন এবং এটি আপনার বর্তমান কাজের সাথে একত্রিত করুন
  2. আপনার বর্তমান কাজ অন্য কোথাও সংরক্ষণ করুন, একটি পৃথক প্রতিশ্রুতিতে বাগটি ঠিক করুন, তারপরে আপনার কাজ চালিয়ে যান [1]
  3. আপনার যা করা উচিত তা চালিয়ে যান, কোডটি কমিট করুন (তা সত্ত্বেও) বিল্ড বিরতি কিছু পরীক্ষা ব্যর্থ করে), তারপরে বাগ (এবং বিল্ড পরীক্ষা পাস) একটি পৃথক অঙ্গীকার মধ্যে

[1] বাস্তবে এর অর্থ হ'ল: অন্য কোথাও মূল সংগ্রহস্থলটিকে ক্লোন করুন, বাগটি ঠিক করুন, পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ / চাপ দিন, আপনি যে ভাণ্ডারটিতে কাজ করছেন তার প্রতিশ্রুতিটি টানুন, পরিবর্তনগুলি মার্জ করুন এবং আপনার কাজ চালিয়ে যান।

সম্পাদনা: আমি আসলে কী বোঝাতে চেয়েছি তা প্রতিফলিত করতে আমি তিন নম্বর পরিবর্তন করেছি।


2
বাগ ফিক্স এবং একক লেনদেনে আপনার পরিবর্তন উভয়কেই কেন প্রতিশ্রুতিবদ্ধ করবেন না? এটি বেশ সাধারণ, এবং পরিষ্কার। অবশ্যই আপনার প্রতিশ্রুতিবদ্ধ বিষয়ে যথাযথ মন্তব্য রাখতে হবে।

@ পিয়েরে, এটি ১ নম্বর। আমি মনে করি আমি এর চেয়ে ভাল শব্দটি বেছে নিতে পারি silently
imgx64

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

2
@ পিয়ার 303 ওহে মানুষ, এইরকম খারাপ অভ্যাস! আপনার প্রতিশ্রুতিগুলি দানাদারে ভাগ করুন।
বিকল্প

@ ম্যাথেপিক: যখন পরিবর্তনটি কেবলমাত্র একটি কার্যকে প্রভাবিত করে হ্যাঁ, কিন্তু যখন এটি একাধিক

উত্তর:


15

আমি 1 এবং 2 করেছি এবং শেষ পর্যন্ত, আমি মনে করি আমি # 2 পছন্দ করি। এটি বাগ ফিক্সের আরও দৃশ্যমানতার জন্য অনুমতি দেয় যা কিউএ / রিলিজ নোট / অন্যান্য বিকাশকারীদের জন্য গুরুত্বপূর্ণ হতে পারে।

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


11

আমি সাধারণত # 2 এর জন্য যাই। এটি সংগ্রহস্থলটিকে ক্লিনার তৈরি করে এবং লগগুলিকে আরও বোধগম্য করে তোলে। আমি অন্য ঘৃণা করি যখন আমি একই রকম প্রতিশ্রুতিবদ্ধ 15 টি পৃথক বাগ ফিক্স, বৈশিষ্ট্য এবং রিফ্যাক্টরিংয়ের সাথে কাজ করি তখন আমি এটিকে ঘৃণা করি।

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


7

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


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

@ imgx64: যদিও এর সূচকের সমতুল্য আছে কিনা আমি জানি না। এটি
গিটারের

সেই ব্লগ পোস্টে মন্তব্যগুলি পড়ে, মার্কুরিয়াল এর সমতুল্য এক্সটেনশন রয়েছে। shelveএক্সটেনশন আমি কি প্রয়োজন আছে।
imgx64

@ imgx64 শেল্ভ দরকারী হতে পারে, হ্যাঁ। তবে রেকর্ড এক্সটেনশনটি আমার মনে হয় আরও উপযুক্ত। আমি এটি কেবল টরটোইজএইচজি জিইআইয়ের মাধ্যমে ব্যবহার করি (আপনি এটি প্রতিশ্রুতিতে অপসারণ / যুক্ত করতে একটি ডিফের উপর ডাবল ক্লিক করতে পারেন)।
বরজাক

3

আমি অলিখিত বিকল্প নির্বাচন করি (4): আপনার প্রকল্পটিকে উচ্চ-বিশেষায়িত সম্মেলন / গ্রন্থাগারগুলিতে ভাগ করুন, যাতে সম্পর্কযুক্ত বাগগুলি সর্বদা সংস্করণ নিয়ন্ত্রণ গাছের আলাদা জায়গায় থাকবে।

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

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

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

যদি আপনার এই বিকল্পটির অভাব হয় - যেমন আপনি প্রকল্পের সংস্থায় কোনও জুনিয়র দেব না বলে থাকেন - তবে আমি কেবল # 1 দিয়ে যেতে চাই এবং লগটিতে যথাযথ নোট তৈরি করতাম যাতে অন্যান্য লোকেরা জানতে পারে আপনি কেন এই কাজটি করেছেন। আপনি যদি কোনও বড় পরিবর্তন করে থাকেন তবে আপনি কী স্থির করেছেন এবং কেন তা দৃশ্যের জন্য আপনার ইস্যু ট্র্যাকিং সিস্টেমে একটি বাগ রিপোর্ট ফাইল করুন।


2
আমি সম্মত হওয়ার পরেও, এটি সমস্ত পরিস্থিতিতে কার্যকর হয় না। 'কোডের আলাদা অংশে বাগ' পিতামাতার ক্লাসে বা এমনকি একই শ্রেণিতে ভিন্ন পদ্ধতিতে থাকতে পারে। আপনি বিভিন্ন লাইব্রেরিতে সেগুলি আলাদা করতে পারবেন না।
imgx64

@ আইএমজি: অবশ্যই, তবে কোড বেসের "বিভিন্ন অংশ" যদি আপনি যেটির উপর কাজ করছেন তার সান্নিধ্যে থাকে, তবে সম্ভবত এটি এতটা মনোযোগও ন্যায়সঙ্গত করে না - কেবল এটি ঠিক করুন! : পি
आरोনট

1

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


3
গিটের সাহায্যে আপনি একই ফাইলে একাধিক পরিবর্তনকে বিভিন্ন কমিটে বিভক্ত করতে পারেন - এসভিএন-ভিত্তিক প্রকল্পগুলিতে কাজ করার সময় আমি প্রায়শই এটি না করাকে মিস করি।
পিটার বুটন

1

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


1

সংক্ষিপ্ত উত্তর: # 2। আপনি সত্যই চান যে সেই বাগবিক্সটি (আপনার ট্র্যাকারটিতে এটির নোট সহ) আপনার পৃথক সত্ত্বা হিসাবে আপনার সংস্করণ ইতিহাসে ট্যাগ করা উচিত।

দীর্ঘ উত্তর:

  • বাগ জুড়ে হোঁচট খাচ্ছে
  • ত্রুটি প্রদর্শন করে একটি পরীক্ষা বা আরও কিছু লিখুন
  • পরীক্ষা পাস করুন
  • কেবলমাত্র সেই পরিবর্তন এবং এর পরীক্ষাগুলি প্রতিশ্রুতিবদ্ধ করুন ( git add --interactiveবা darcs record -iআপনার ভিসিএস এটি করে) (*)
  • আমি যা করছিলাম তা ফিরে পান।

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

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


1

আমি বাগটি ঠিক করি এবং আমি পৃথক কমিট করি , প্রতিটি ফিক্স / বৈশিষ্ট্যের জন্য একটি করে

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

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


0

আমি সাধারণত # 2 করি। আমার বর্তমান কাজ অন্য কোথাও সংরক্ষণ করা: এটি প্যাচ তৈরি করে সাধারণত কাজ করে। এছাড়াও কিছু আইডিই (ইন্টেলিজ) আশ্রয় পরিবর্তনের জন্য অনুমতি দেয় যা হ'ল: বর্তমান কাজ অন্য কোথাও সংরক্ষণ করুন।


0

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

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

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


0

আমরা # 1 করি। # 2 ভাল শোনাচ্ছে, তবে আমি বলতে পারি না যে আমাদের # 1 নিয়ে সমস্যা হয়েছে যা # 2 ঠিক হয়ে যায়।

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

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