আপনার শিশুর টিডিডি-তে কীভাবে পদক্ষেপ রয়েছে?


37

আজ আমরা টিডিডি প্রশিক্ষণ দিচ্ছিলাম এবং নীচের ভুল বোঝাবুঝির বিষয়টি খুঁজে পেয়েছি।

কাজটি "1,2" সংখ্যার রিটার্ন যোগফলের জন্য যা 3 হয় I যা আমি লিখেছি (সি # তে) ছিল:

numbers = input.Split(',');
return int.Parse(numbers[0]) + int.Parse(numbers[1]); //task said we have two numbers and input is correct

তবে অন্যান্য ছেলেরা এটিকে অন্যভাবে করতে পছন্দ করে preferred প্রথমে, "1,2" ইনপুট দেওয়ার জন্য তারা নিম্নলিখিত কোডটি যুক্ত করেছেন:

if (input == "1,2")
   return 3;

তারপরে তারা ইনপুট "4,5" এর জন্য আরও একটি পরীক্ষার প্রবর্তন করেছিল এবং বাস্তবায়ন পরিবর্তন করেছে:

if (input == "1,2")
   return 3;
else if (input == "4,5")
   return 9;

এবং এর পরে তারা বলেছিল "ঠিক আছে, এখন আমরা প্যাটার্নটি দেখি" এবং আমি প্রাথমিকভাবে যা করেছি তা বাস্তবায়ন করে।

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

হালনাগাদ. আমি এটা পরিষ্কার করে না করে ভুল করেছি যে এটি প্রথম পরীক্ষা নয়। ইতিমধ্যে কিছু পরীক্ষা ছিল সুতরাং "রিটার্ন 3" আসলে প্রয়োজনীয়তা পূরণের জন্য কোডের সহজতম টুকরো ছিল না।


25
এত ছোট যে আমার সহকর্মীরা "Ooahhh dazso cuuuuuute"
অ্যাডেল

6
@ অ্যাডেল: আমার প্রাতঃরাশে প্রায় কমে গেছে, কীবোর্ড এখন পূর্ণ বা থুতু এবং টুকরো টুকরো
বাইনারি ওয়ারিয়ার

2
@ অ্যাডেল, অ-নেটিভ স্পিকার হিসাবে, আমার পক্ষে এই রসিকতাটি বোঝা বরং এটি কঠিন তবে আমি আপনার সহকর্মীদের প্রশ্নের মতো অনুমান করি :)
সাইবেরিয়ানগুই

8
@ ইডশা: কোনও শিশুদের প্রথম পদক্ষেপ দেখানো হলে এটি সহকর্মীদের প্রতিক্রিয়া স্থানান্তর করছে "Ooahhh dazso cuuuuuute" = "ওহ এতো সুন্দর" আদেলের লিখিত ইউনিট টেস্টগুলি দেখে ইউনিট টেস্টের শিশুর পদক্ষেপগুলি দেখে তারা বলে "ওহ এটি এত সুন্দর"। একটি - বাস্তব - বাচ্চাদের পদক্ষেপের প্রতি প্রতিক্রিয়া = ইউনিট পরীক্ষার "শিশুর পদক্ষেপ" এর প্রতিক্রিয়া।
বাইনারি ওয়ারিয়ার

3
@ বাইনারিওয়ারিয়ার ইচ্ছা আমি পেরেন্টেসকে ব্যাখ্যা করার জন্য সময় দেওয়ার জন্য সত্যিকারের পয়েন্ট দিতে পারব
অ্যান্ড্রু টি ফিনেল

উত্তর:


31

সবচেয়ে সহজ কোড লিখুন যা পরীক্ষাগুলি পাস করে।

আপনারা কেউই এটি করেননি, যতদূর আমি দেখতে পাচ্ছি।

শিশুর পদক্ষেপ 1।

পরীক্ষা: ইনপুটটির জন্য "1,2" সংখ্যার রিটার্ন যোগফল যা 3 হয়

পরীক্ষাটি ব্যর্থ করে দিন:

throw NotImplementedException();

পরীক্ষায় পাস করুন:

return 3;

শিশুর পদক্ষেপ 2।

পরীক্ষা: ইনপুটটির জন্য "1,2" সংখ্যার ফেরতের যোগফল, যা 3 is

পরীক্ষা: ইনপুটটির জন্য "4,5" সংখ্যার ফেরতের যোগফল, যা 9

দ্বিতীয় পরীক্ষা ব্যর্থ হয়, সুতরাং এটি পাস করুন:

numbers = input.Split(',');
return int.Parse(numbers[0]) + int.Parse(numbers[1]);

(যদি ... ফিরে আসার তালিকার চেয়ে সহজ উপায়)

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

যুক্তিটি হ'ল যদি আপনি দ্বিতীয় পরীক্ষাটি না লিখে থাকেন তবে কিছু উজ্জ্বল স্পার্ক পরে আসতে পারে এবং পড়ার জন্য আপনার কোডটিকে "রিফ্যাক্টর" দিতে পারে:

return input.Length; # Still satisfies the first test

এবং, উভয় পদক্ষেপ না নিয়েই আপনি কখনই দ্বিতীয় পরীক্ষাটিকে লাল হতে পারেননি (যার অর্থ পরীক্ষার নিজেই সন্দেহ হয়)।


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

@ ইডসা - হ্যাঁ, একেবারে, এবং আপনি যত বেশি পরীক্ষা লেখেন, বাস্তবায়ন তত বেশি পাগল হতে হবে। input.Lengthএটি এতদূর পাওয়া যায়নি, বিশেষত যদি পদ্ধতির ইনপুটটি কোথাও কোনও ফাইল থেকে পরিমাপ হিসাবে দেখা দেয় এবং আপনাকে অযথাকে আপনার পদ্ধতি বলা হয় Size()
pdr

6
+1 টি। টিডিডি কীভাবে শিখবেন সে সম্পর্কে শ্রদ্ধা সহ, এটি সঠিক উপায় way একবার আপনি এটি শিখলে, আপনি কখনও কখনও সরাসরি সুস্পষ্ট বাস্তবায়নের দিকে যেতে পারেন, তবে টিডিডির অনুভূতি পেতে এটি আরও ভাল।
কার্ল ম্যানাস্টার

1
আমার নিজেই "পরীক্ষা" সংক্রান্ত একটি প্রশ্ন আছে। আপনি কি ইনপুট "4,5" এর জন্য একটি নতুন পরীক্ষা লিখবেন , বা মূল পরীক্ষাটি সংশোধন করবেন?
mxmissile

1
@ এমএক্সমিসিল: আমি একটি নতুন পরীক্ষা লিখব। এটি পুরোপুরি সময় নেয় না এবং আপনি পরে রিফ্যাক্টরিংয়ের সময় আপনার সুরক্ষার জন্য দ্বিগুণ পরীক্ষার সমাপ্ত হন।
pdr

50

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

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


+1 এবং আমাকে একটি নতুন শব্দ
শিখিয়ে দেওয়ার

12
এটিকে অসাড় বোকা বলার জন্য +1। টিডিডি সমস্ত দুর্দান্ত এবং এ জাতীয়, তবে কোনও আধুনিক হাইপাইড প্রোগ্রামিং প্রযুক্তির মতো আপনারও যাতে এটি না ঘটে সেদিকে খেয়াল রাখা উচিত।
stijn

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

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

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

19

কেন্ট বেক তার বই টেস্ট ড্রাইভেন ডেভলপমেন্ট: উদাহরণ দ্বারা এটি কভার করেছেন।

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

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

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

বইটি থেকে:

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


18

আমি এটিকে আইনের চিঠির অনুসরণ হিসাবে দেখছি তবে এর আত্মা নয়।

আপনার শিশুর পদক্ষেপগুলি হ'ল:

যতটা সম্ভব সহজ, তবে সহজ নয়।

এছাড়াও, পদ্ধতিতে ক্রিয়াটি হয় sum

if (input == "1,2")
   return 3;

যোগফল নয়, এটি নির্দিষ্ট ইনপুটগুলির জন্য একটি পরীক্ষা।


4

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

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


1

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

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

আমার মাথায় থাকা এই শ্রেণিটি কি আসলে কাজ করবে?

অথবা

আমি কীভাবে এই জিনিসটি করতে যাচ্ছি?

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

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

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


1

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

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

সুতরাং, সম্ভবত আপনার কলেজটি একটু লাজুক :)


1

যতক্ষণ না পরীক্ষাগুলি সফল হয় ততক্ষণ কী পুরো পদ্ধতিটি বাস্তবায়ন অপ্রাসঙ্গিক নয়? পরীক্ষাগুলি প্রসারিত করা দ্বিতীয় উদাহরণে দ্রুত ব্যর্থ হবে তবে উভয় ক্ষেত্রেই এটি ব্যর্থ হতে পারে।


1
আপনি যদি আপনার সময় নষ্ট করার বিষয়ে পুরোপুরি চিন্তা না করেন তবে এটি অপ্রাসঙ্গিক
সাইবেরিয়ানগুই

1

আমি জনগণের সাথে একমত হয়ে বলছি যে দুটিই সহজ বাস্তবায়ন নয়।

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


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