টিডিডি এবং সংস্করণ নিয়ন্ত্রণ


25

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

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

  2. আমি একটি বাগ খুঁজে পাই এবং এটি পুনরায় তৈরি করার জন্য একটি পরীক্ষা লিখি। আমি কি ব্যর্থ পরীক্ষার প্রতিশ্রুতিবদ্ধ বা বাগ ফিক্স বাস্তবায়ন করব এবং তারপরে কমিট করব?

এই দুটি উদাহরণ যা তাত্ক্ষণিক মনে আসে। আপনার উত্তরে অতিরিক্ত উদাহরণ সরবরাহ করতে নির্দ্বিধায়

সম্পাদনা:

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

এর অর্থ এই যে আমার প্রশ্নের যেমন সম্পর্কে অনেক হিসাবে কি কমিট হিসেবে এটি সম্পর্কে যখন কমিট করতে।

উত্তর:


21

ক্লাস লেখার আগে পরীক্ষা করা উচিত কিনা যদিও পরীক্ষাটি সংকলন করে না? বা প্রতিশ্রুতি দেওয়ার আগে পরীক্ষাটি সংকলন করার জন্য প্রয়োজনীয় ন্যূনতম পরিমাণের কোডটি কী আমার থেকে সরিয়ে দেওয়া উচিত?

অবশ্যই না. আপনার পরীক্ষা এবং ক্লাস উভয়ই শেষ করা উচিত। এমন 1 টি প্রতিশ্রুতিবদ্ধ যা এমনকি সংকলন করে না তা বোঝা যায় না এবং আপনি যদি নিয়মিতভাবে এটি করেন তবে একই প্রকল্পে কাজ করা লোকদের অবশ্যই রেগে যাবে।

আমি একটি বাগ খুঁজে পাই এবং এটি পুনরায় তৈরি করার জন্য একটি পরীক্ষা লিখি। আমি কি ব্যর্থ পরীক্ষার প্রতিশ্রুতিবদ্ধ বা বাগ ফিক্স বাস্তবায়ন করব এবং তারপরে কমিট করব?

না, একটি ব্যর্থ পরীক্ষা করবেন না। লেব্ল্যাঙ্কের আইন বলছে:

পরে সমান হয় না।

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

এছাড়াও, টিডিডি বিকাশ শৈলীটি বলে:

টেস্ট-চালিত বিকাশ ক্রমাগত পরীক্ষার কেস যুক্ত করার পদক্ষেপগুলি পুনরুক্ত করে যা ব্যর্থ হয়, তাদের পাস করে এবং পুনঃস্থাপন করে।

যদি আপনি একটি ব্যর্থ পরীক্ষায় চেক করেন তবে তার অর্থ আপনি চক্রটি সম্পূর্ণ করেন নি।


1 যখন আমি প্রতিশ্রুতিবদ্ধ বলেছিলাম, তখন আমার অর্থ ট্রাঙ্কের প্রতি সত্যই প্রতিশ্রুতিবদ্ধ ছিল (গিট ব্যবহারকারীদের জন্য, আপনার পরিবর্তনগুলি ধাক্কা দিন, যাতে অন্যান্য বিকাশকারীরা সেগুলি পেতে পারে)।


4
"এবং অবশ্যই একই প্রকল্পে রাগান্বিত লোকদের কাজ করবে যদি" ​​- কেউ এসভিএন বিশ্বে বাস করছে জিআইটি ব্যবহার করে এবং আপনি কাউকে রাগ করবেন না
ম্যাটিউজ

3
আমি মনে করি একটি পরীক্ষা লেখার পরে প্রতিশ্রুতিবদ্ধতা ঠিক আছে, আপনার কাজ শেষ না হওয়া পর্যন্ত এটি চাপবেন না।
ম্যাটসেম্ন

4
@radarbob এটি কি এমন কোনও ডিভিসিএসের জন্যও প্রযোজ্য যেখানে প্রতিশ্রুতিবদ্ধ এবং চাপ দেওয়ার মধ্যে পার্থক্য রয়েছে? আমি এমন একটি পরিস্থিতিটি কল্পনা করতে পারি যেখানে আমি আমার স্থানীয় গিট রেপোতে বেশ কয়েকটি কমিট করি যেখানে চূড়ান্ত প্রতিশ্রুতিবদ্ধভাবে বিল্ডটি ভাঙ্গা হয়নি তবে অন্তর্বর্তীকালীন কমিটগুলির মধ্যে এটির যে কোনওটি হতে পারে।
কোড-গুরু

6
না, ব্যর্থ পরীক্ষার প্রতিশ্রুতি দিবেন না। তবে টিডিডির একটি পয়েন্ট হ'ল কোডিংয়ের আগে একটি ব্যর্থ পরীক্ষা করা। সুতরাং একটি ব্যর্থ পরীক্ষার প্রত্যাখ্যান করা বোধগম্য।
mouviciel

4
@ কোড-গুরু: ডিভিসিএসের জন্য, এই নিয়মগুলি হ'ল: "যে শাখায় অন্যেরা নিয়মিতভাবে টানেন সেগুলিতে ভাঙা কোড করবেন না"। অন্যরা যদি আপনার স্থানীয় রেপো থেকে টান না নেয় তবে আপনি যে কোনও অবস্থায় থাকতে পারেন।
বার্ট ভ্যান ইনজেন শেেনা

6

ক্লাস লেখার আগে পরীক্ষা করা উচিত কিনা যদিও পরীক্ষাটি সংকলন করে না?

না।

আমি কি ব্যর্থ পরীক্ষার প্রতিশ্রুতিবদ্ধ

না।

আপনি এখানে দুটি দৃষ্টান্তের কথা বলছেন:

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

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

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


5

অবশ্যই আপনি গিটের মতো স্বাস্থ্যকর উত্স নিয়ন্ত্রণ ব্যবহার করে শুরু করবেন।

তারপরে আপনি নিজের পছন্দ মতো কাজ করতে পারেন এবং প্রতিটি কোণে প্রতিশ্রুতিবদ্ধ করতে পারেন - যে কোনও পদক্ষেপ বা সাবস্টিপ একটি ন্যায্য খেলা।

তারপরে স্টাফটি ধাক্কা দেওয়ার আগে আপনি পুরো কাজটিকে একক প্রতিশ্রুতিতে স্কোয়াশ করুন। বা এমন একটি দম্পতি, যেখানে সবুজ সবুজ এবং সংমিশ্রণটি বোঝায় points এবং সেই বুদ্ধিমান কমিটিকে চাপ দিন। একাধিক ক্ষেত্রে, আপনি --no-ff এর সাথে একীভূত করে এমন একটি শাখা তৈরি করুন।

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


5

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


আমি আপনার সাথে একমত. "বিল্ডটি ভাঙ্গবেন না" এই নিয়মটি অনুসরণ করতে আমি একটি ভিন্ন শাখা ব্যবহার করতে পছন্দ করি এবং পরীক্ষাটি পাস করার সময় ট্রাঙ্কের পরিবর্তনগুলি মার্জ করে।
ফিল্ড

5

ক্লাস লেখার আগে পরীক্ষা করা উচিত কিনা যদিও পরীক্ষাটি সংকলন করে না?

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

বা প্রতিশ্রুতি দেওয়ার আগে পরীক্ষাটি সংকলন করার জন্য প্রয়োজনীয় ন্যূনতম পরিমাণের কোডটি কী আমার থেকে সরিয়ে দেওয়া উচিত?

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

আমি একটি বাগ খুঁজে পাই এবং এটি পুনরায় তৈরি করার জন্য একটি পরীক্ষা লিখি। আমি কি ব্যর্থ পরীক্ষার প্রতিশ্রুতিবদ্ধ বা বাগ ফিক্স বাস্তবায়ন করব এবং তারপরে কমিট করব?

পরীক্ষার কোডটি লিখতে সত্যিই ছোট / তুচ্ছ না হলে আমি সাধারণত এটির জন্য দুটি কমিট করি।

এই দুটি উদাহরণ যা তাত্ক্ষণিক মনে আসে। আপনার উত্তরে অতিরিক্ত উদাহরণ সরবরাহ করতে নির্দ্বিধায়

সম্পাদনা:

আমি উভয় উদাহরণে অনুমান করেছি যে আমি পরীক্ষার লেখার সাথে সাথেই পরীক্ষার পাস করার জন্য কোড লিখব।

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

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

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


2
গিট পুনরায় সেট করার প্রস্তাব - যত্ন সম্পর্কে সতর্কতা অবলম্বন করুন। এটি গিটের কয়েকটি কমান্ডগুলির মধ্যে একটি যা আপনাকে কাজ ছেড়ে দিতে বাধ্য করবে।
gnash117

2

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

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

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

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