বড় রিফ্যাক্টরিং করার সময় লোকেরা কীভাবে টিডিডি হ্যান্ডসেটের কাজের ক্ষতি করে


37

কিছুক্ষণের জন্য আমি আমার কোডের জন্য ইউনিট পরীক্ষা লিখতে শেখার চেষ্টা করছি।

প্রথমদিকে আমি সত্য টিডিডি করা শুরু করেছি, যেখানে আমি ব্যর্থ পরীক্ষা না লিখে আমি কোনও কোড লিখব না।

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

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

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

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


6
পরিপূর্ণতা অর্জন করা হয়, যখন যুক্ত করার মতো আরও কিছু থাকে না, তবে যখন কিছুই কেড়ে নিতে থাকে না। - এন্টোইন ডি সেন্ট-
এক্সুপেরি

12
এটি কীভাবে সম্ভব যে আপনার সমস্ত পরীক্ষাগুলি ভুল? দয়া করে ব্যাখ্যা করুন কীভাবে বাস্তবায়নের পরিবর্তন আপনার লিখিত প্রতিটি পরীক্ষাকে অবৈধ করে তোলে।
এস .লট

6
@ এস.লোট: পরীক্ষাগুলি ভুল ছিল না, সেগুলি এখন আর প্রাসঙ্গিক ছিল না। বলুন যে আপনি মৌলিক সংখ্যাগুলি ব্যবহার করে সমস্যার একটি অংশ সমাধান করছেন, সুতরাং আপনি মৌলিক সংখ্যা তৈরি করতে একটি ক্লাস লিখেন এবং এটিটি কাজ করছে কিনা তা নিশ্চিত করার জন্য class শ্রেণীর জন্য পরীক্ষা লেখেন। এখন আপনি আপনার সমস্যার আরও সম্পূর্ণ ভিন্ন সমাধান খুঁজে পেয়েছেন যা কোনওভাবেই প্রাইমগুলিকে জড়িত করে না। এই শ্রেণি এবং এটির পরীক্ষাগুলি এখন অপ্রয়োজনীয়। এটি শুধুমাত্র দশম শ্রেণীর সাথে আমার পরিস্থিতি ছিল না।
GazTheDestroyer

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

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

উত্তর:


33

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

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

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


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

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

1
আমার এ জাতীয় কোনও ধারণা নেই এবং আমি কীভাবে মন্তব্য থেকে এটি পেয়েছি তা নিশ্চিত নই।
GazTheDestroyer

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

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

8

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


3
আমার পদ্ধতিগুলি মোটেও বড় ছিল না, পুরানো স্থাপত্যের সাথে কোনও মিল নেই এমন নতুন স্থাপত্যের ফলে এগুলি কেবল অপ্রাসঙ্গিক হয়ে ওঠে। আংশিক কারণ নতুন স্থাপত্যটি অনেক সহজ ছিল।
GazTheDestroyer

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

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

@ পেটারট্রিক - এমন কিছু লোক আছেন যারা জোর দিয়ে বলেন যে টিডিডির কোনও খরচ হয় না কারণ আপনি কোডটি লেখার সময় এটি নিজের জন্য পরিশোধ করে। এটি অবশ্যই আমার ক্ষেত্রে নয় তবে কিলিয়ান এটি নিজের জন্য বিশ্বাস করে বলে মনে হয়।
PSr

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

6

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

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

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


এটি কেবল পেরিফেরিয়াল, তবে পিডিই কী?
একটি সিভিএন

1
@ MichaelKjörling আমি এটা আংশিক ডিফারেনশিয়াল সমীকরণ অনুমান
foraidt

2
ব্রুকস তার দ্বিতীয় সংস্করণে সেই বিবৃতি প্রত্যাহার করেনি?
সাইমন

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

5

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

আপনার একসাথে সমস্ত পরীক্ষা লেখার চেষ্টা করা উচিত নয়, কারণ আপনি লক্ষ্য করেছেন যে এটি কার্যকর হবে না। এটি ব্যবহার করা হচ্ছে না এমন পরীক্ষাগুলি লেখার সময় নষ্ট করার ঝুঁকি হ্রাস করে।


1
আমি নিজেকে খুব ভাল ব্যাখ্যা করতে পারে বলে মনে করি না। আমি পরীক্ষাগুলি পুনরাবৃত্তভাবে লিখি। এইভাবেই আমি কোডটির জন্য কয়েকশো টেস্ট দিয়ে শেষ করেছিলাম যা হঠাৎ করে অনর্থক হয়ে পড়ে।
গ্যাজডেস্ট্রোয়ার

1
উপরে হিসাবে - আমি মনে করি এটি " কোডের পরীক্ষার " চেয়ে "টেস্ট এবং কোড" হিসাবে ভাবা উচিত
মার্ফ

1
+1: "আপনারা সমস্ত পরীক্ষা
একবারে

4

আমি মনে করি আপনি এটি নিজেরাই বলেছেন: আপনি নিজের ইউনিট পরীক্ষা লিখতে শুরু করার আগে আপনার পদ্ধতির বিষয়ে নিশ্চিত ছিলেন না।

আমি তাত্ত্বিকভাবে যা শিখেছি তার সাথে বাস্তব জীবনের টিডিডি প্রকল্পগুলির সাথে তুলনা শিখেছি (অনেকগুলিই আসলে 3 বছরের কাজকে আবৃত করে না) এটি স্বয়ংক্রিয় পরীক্ষা! = ইউনিট টেস্টিং (অবশ্যই পারস্পরিকভাবে না হয়ে) একচেটিয়া)।

অন্য কথায়, টিডিডিতে টি এর সাথে একটি ইউ হওয়া উচিত নয় ... এটি স্বয়ংক্রিয় হয়, তবে একটি স্বয়ংক্রিয় কার্যকরী পরীক্ষার চেয়ে ইউনিট পরীক্ষা (টেস্টিং ক্লাস এবং পদ্ধতিগুলির মতো) কম: এটি একই স্তরে আপনি বর্তমানে যে আর্কিটেকচারটি নিয়ে কাজ করছেন তা হিসাবে কার্যকরী গ্রানুলারিটির of আপনি কয়েকটি পরীক্ষা এবং কেবলমাত্র কার্যকরী বড় ছবি দিয়ে উচ্চ-স্তরের শুরু করেন এবং কেবল অবশেষে আপনি হাজার হাজার ইউটি দিয়ে শেষ করেন এবং আপনার সমস্ত ক্লাস একটি সুন্দর স্থাপত্যে সু-সংজ্ঞায়িত হয় ...

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

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

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


3
ভাল বলেছে - এটি টিডিডি, ইউটিডিডি নয়
স্টিভেন এ লো লো

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

4
টিডিডি অনুশীলনকারীরা কীভাবে এই জাতীয় পরিস্থিতি সঠিকভাবে পরিচালনা করতে পারেন?
  1. কোড কখন বনাম প্রোটোটাইপ করবেন তা বিবেচনা করে
  2. বুঝতে পেরে যে ইউনিট পরীক্ষাটি টিডিডির মতো নয়
  3. কোনও বৈশিষ্ট্য / কাহিনী যাচাই করার জন্য টিডিডি পরীক্ষা করে লেখার মাধ্যমে, কার্যকরী ইউনিট নয়

পরীক্ষা-চালিত বিকাশের সাথে ইউনিট পরীক্ষার সংমিশ্রণ অনেক যন্ত্রণা ও হতাশার উত্স। সুতরাং আসুন এটি আরও একবার পর্যালোচনা করুন:

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

সংক্ষেপে: ইউনিট পরীক্ষার একটি বাস্তবায়ন ফোকাস রয়েছে, টিডিডির একটি প্রয়োজনীয় ফোকাস রয়েছে। এগুলো এক জিনিস না.


"টিডির একটি প্রয়োজনীয়তা ফোকাস রয়েছে" আমি এর সাথে পুরোপুরি একমত নই। পরীক্ষার TDD- এ আপনার লেখার হয় ইউনিট পরীক্ষা। তারা প্রতিটি ফাংশন / পদ্ধতি যাচাই করে না । টিডিডি কোড কভারেজের উপর জোর দেয় এবং দ্রুত সম্পাদন করে এমন পরীক্ষাগুলি সম্পর্কে যত্নশীল হয় (এবং তারা আরও ভাল করবে, যেহেতু আপনি প্রতি 30 সেকেন্ড বা তারপরে পরীক্ষা চালান) run আপনি এটিডিডি বা বিডিডি ভাবছিলেন?
guillaume31

1
@ আইয়ান 31: ইউটি এবং টিডিডি সংমিশ্রনের নিখুঁত উদাহরণ। অবশ্যই দ্বিমত পোষণ করুন এবং আপনাকে কিছু উত্স উপাদান en.wikedia.org/wiki/Test-driven_de વિકાસment উল্লেখ করুন - পরীক্ষাগুলির উদ্দেশ্য কোড প্রয়োজনীয়তার সংজ্ঞা দেওয়া । বিডিডি দুর্দান্ত। এটিডিডি সম্পর্কে কখনও শুনিনি, তবে এক নজরে দেখে মনে হচ্ছে কীভাবে আমি টিডিডি স্কেলিং প্রয়োগ করি ।
স্টিভেন এ। লো

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

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

@ আইয়ান 31: 'কয়েকশ ইউনিট পরীক্ষা নিক্ষেপ' সম্পর্কে ওপির প্রশ্নটি স্কেলের বিভ্রান্তির ইঙ্গিত দেয়। আপনি চাইলে শেড তৈরি করতে টিডিডি ব্যবহার করতে পারেন। : ডি
স্টিভেন এ লো।

3

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

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

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


2

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

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

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

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


1

আপনার পদ্ধতির 3 দিনের পরে কেন ত্রুটি দেখা দিয়েছে তা সম্পর্কে আমি নিশ্চিত নই। আপনার আর্কিটেকচারে আপনার অনিশ্চয়তার উপর নির্ভর করে আপনি নিজের পরীক্ষার কৌশলটি পরিবর্তন করতে পারেন:

  • আপনি যদি পারফরম্যান্স সম্পর্কে অনিশ্চিত থাকেন তবে আপনি কয়েকটি ইন্টিগ্রেশন টেস্ট দিয়ে শুরু করতে চাইতে পারেন যা কার্য সম্পাদনকে দৃ ?় করে তোলে?

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


0

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

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

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

মঞ্জুর, আপনার কাছে সবসময় এই সমস্ত গুডির জন্য সময় নেই। এরাই অবিকল মামলা যখন আপনি একটি প্রয়োজন হবে বৃহত্তর আপনার লক্ষ্য অর্জন করতে সময় পরিমাণ ... এবং / অথবা নিয়ন্ত্রণে সবকিছু রাখা।


0

সৃজনশীল বিকাশকারী সার্কাসে আপনাকে স্বাগতম


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







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

যা প্রদর্শিত হবে:
- আপনি সমস্ত বিধি সম্মান করে একটি কোড লিখেছিলেন
- আপনি একটি অভিজ্ঞতা পান, কাজের জন্য একটি নতুন উপায়
- আপনার মনের মধ্যে কিছু পরিবর্তন আসে, আপনি নতুন কনফিগারেশনের মাধ্যমে কখনই ভয় পাবেন না।

এবং এখন, আপনি যদি কোনও ইউএমএল উপরের মতো দেখতে পান তবে আপনি বলতে পারবেন
"বস, ​​আমি এর জন্য টিডিডি দিয়ে শুরু করি ...."
এটি অন্য নতুন জিনিস?
"বস, ​​আমি যেভাবে কোড করব তার সিদ্ধান্ত নেওয়ার আগে আমি কিছু চেষ্টা করব .."

প্যারিস
ক্লডের পক্ষ থেকে শুভেচ্ছা

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