আমি TDD সম্পর্কে অনেক কিছু লিখেছি। সুতরাং, এতে অবাক হওয়ার কিছু নেই যে যখন আমি আমার শেষ নিবন্ধটি প্রায় ঠিক মুহূর্তে প্রকাশ করি David Heinemeier Hansson তার RailsConf মূল বক্তব্যের সময় TDD উল্লেখ করেছেন, আমি কিছু প্রশ্ন পেয়েছি:
আপনি কি TDD সম্পর্কে DHH-এর মতামতের সাথে একমত? আপনি এখনও TDD সুপারিশ করেন? যদি না হয়, তাহলে আমি কি করব?
DHH কি বলেছে
আপনি যদি মূল বক্তব্যটি মিস করেন, তাহলে DHH-এর প্রবন্ধটি এর সারাংশটি তুলে ধরে:
শিল্পের স্বয়ংক্রিয়, রিগ্রেশন টেস্টিংয়ের দুঃখিত অভাব ভাঙ্গার জন্য কাউন্টারইন্টুইটিভ রাম হিসাবে পরীক্ষা-প্রথম ব্যবহার করা প্রয়োজন ছিল। হতে পারে এটি একটি দৃষ্টান্ত ছিল যা সফ্টওয়্যার লেখার প্রতিদিনের কাজের আক্ষরিক বর্ণনা হওয়ার উদ্দেশ্যে ছিল না। তবে এটি যেভাবেই শুরু হয়েছিল, তা শীঘ্রই নষ্ট হয়ে গিয়েছিল। অ-বিশ্বাসীদের মারতে হাতুড়ি হিসাবে ব্যবহার করা হয়, তাদের অ-পেশাদার এবং সফ্টওয়্যার লেখার জন্য অযোগ্য ঘোষণা করা হয়। একটি লিটমাস পরীক্ষা।
যথেষ্ট. আর না. আমার নাম ডেভিড, এবং আমি সফ্টওয়্যার পরীক্ষা-প্রথম লিখি না। আমি এর জন্য ক্ষমা চাইতে রাজি নই, অনেক কম লুকাই। স্বয়ংক্রিয় রিগ্রেশন পরীক্ষার জন্য আমার চোখ খোলার জন্য TDD যা করেছে তার জন্য আমি কৃতজ্ঞ, কিন্তু আমি অনেক আগেই ডিজাইনের মতবাদ থেকে এগিয়ে এসেছি।
…
হ্যাঁ, পরীক্ষা-প্রথম আমার কাছে মৃত। তবে এর সমাধিতে নাচের পরিবর্তে, আমি ট্র্যাভেস্টিতে দীর্ঘস্থায়ী হওয়ার চেয়ে এর অবদানকে সম্মান করতে চাই। এটি আমাদের ইতিহাসের একটি গুরুত্বপূর্ণ পর্যায় চিহ্নিত করেছে, তবুও এটি এগিয়ে যাওয়ার সময়।
পুরো জিনিসটি পড়ার যোগ্য, তবে আমি কিছু মূল বিষয় তুলে ধরেছি:
- টিডিডি হল স্বয়ংক্রিয় রিগ্রেশন টেস্টিংকে উৎসাহিত করার জন্য একটি মাইন্ড হ্যাক
- রাগ পরীক্ষা-প্রথম বক্তৃতা দুঃখ এবং হতাশার দিকে নিয়ে যায়
- TDD অবজেক্ট এবং ইনডাইরেকশনের অত্যধিক জটিল জালের দিকে নিয়ে যায়
- ইউনিট পরীক্ষার চেয়ে আপনার বিচ্ছিন্ন সিস্টেম পরীক্ষা পছন্দ করা উচিত
- কিন্তু আপনার সেই পছন্দকে অন্য ধর্মে পরিণত করা উচিত নয়
- এই কারণে, পরীক্ষা-প্রথম একটি ডিজাইন অনুশীলন নয় যা আপনার আর ব্যবহার করা উচিত।
প্রবন্ধে, এই পয়েন্টগুলির বেশিরভাগই একসাথে বাঁধা। তারা নিজেরাই অর্থবোধ করে, কিন্তু তাদের তৈরি করা হয়েছে এমনভাবে একে অপরের সাথে জড়িত নয়।
যদি আপনি সেগুলিকে আলাদা না করেন, একটি বিন্দু তর্ক করলে অন্য পয়েন্টগুলি ধরে নেয় যেগুলির সাথে আপনি বাস্তবে একমত নাও হতে পারেন৷ যখন আপনি এটিকে টুইটার আক্রোশ এবং 140-অক্ষরের সীমার সাথে একত্রিত করেন, তখন আপনি বিভ্রান্তি, স্ট্রম্যান এবং ফ্লেমওয়ারের সাথে শেষ হয়ে যান৷
পরিবর্তে, আমি এই কয়েকটি পয়েন্ট সম্পর্কে আলাদাভাবে কথা বলব।
টিডিডি বস্তু এবং নির্দেশের অত্যধিক জটিল জালের দিকে নিয়ে যায়
সম্প্রতি, আমি রুবি টেস্টিং সম্প্রদায়ে "অবজেক্টের জটিল জাল এবং পরোক্ষ" এর জন্য একটি পছন্দ দেখছি। আমি মনে করি এটি একটি খারাপ জিনিস। (এটি একটি কারণ যা আমি মূলত জাভা থেকে এসেছি!) কিন্তু আমি একমত নই যে TDD এর কারণ।
আমি প্রায় এক দশক ধরে টিডিডি করেছি, এবং আমি আমার পরীক্ষাগুলি ডাটাবেস থেকে আলাদা করি না। কন্ট্রোলার-স্তরের কার্যকরী পরীক্ষা এবং একটি শক্তিশালী ইন্টিগ্রেশন টেস্ট স্যুটও আমার মোট টেস্ট স্যুটের মূল্যবান অংশ, সেগুলি যতই ধীরে চলুক না কেন।
সিস্টেম থেকে আপনার পরীক্ষাগুলিকে আলাদা করা কেবলমাত্র অপ্টিমাইজেশান৷৷ এবং YAGNI বলেছেন যে এটি সম্ভবত এখনও গুরুত্বপূর্ণ নয়। এছাড়াও, আমি প্রতিটি পৃথক পরীক্ষা অপ্টিমাইজ করার চেষ্টা করার পরিবর্তে SSD এবং অ্যাপ প্রিলোডিং থেকে বোর্ড জুড়ে গতি বাড়াতে চাই।
এটি বলেছে, টিডিডি এখনও আপনার সিস্টেম ডিজাইনের উপর প্রভাব ফেলে।
TDD আপনার কোড অর্গানিকভাবে বৃদ্ধি করে। এই একটি মহান জিনিস হতে পারে! কিন্তু কখনও কখনও, একজন দক্ষ সফ্টওয়্যার বিকাশকারী এমন কোড লিখতে পারেন যা TDD এর ডিজাইনের চেয়ে ভাল দেখায়। এটি অন্যান্য কোডের সাথে আরও শক্তভাবে মিলিত হতে পারে, এটি সমস্ত OOD নিয়মগুলি অনুসরণ নাও করতে পারে, তবে এটি পরিষ্কার, সরল এবং সহজ৷ (DHH পিং পং এর কিছু ভাল উদাহরণ আছে)।
আপনি কি তৈরি করছেন তা জানার আগে TDD আপনাকে একটি অবজেক্ট API ডিজাইনে লক করতে পারে। এটি পরবর্তীতে API পরিবর্তন করা কঠিন করে তোলে। এবং সেই ঘর্ষণটি আপনাকে আরও খারাপ ডিজাইনে স্থির হতে পারে।
পরীক্ষা-প্রথম একটি ডিজাইনের অনুশীলন নয় যা আপনার আর ব্যবহার করা উচিত
TDD নমনীয়, ভাল-পরীক্ষিত কোড তৈরি করার জন্য একটি দুর্দান্ত সরঞ্জাম। তাই আমি এই পয়েন্টের সাথে সম্পূর্ণ একমত নই। আমি ইতিমধ্যে একটি পূর্ববর্তী নিবন্ধে TDD এর অনেক সুবিধার কথা বলেছি:
- আপনি নিজেকে আরও নমনীয়, পরীক্ষিত বস্তুর মডেলের সাথে খুঁজে পাবেন।
- আপনার সিস্টেমটি সংজ্ঞা অনুসারে পরীক্ষাযোগ্য, ভবিষ্যতের পরীক্ষাগুলি লেখার জন্য কম ব্যয়বহুল করে তোলে৷৷
- আপনি আপনার অনুমানগুলিকে আরও নির্ভুল করে ডেভেলপমেন্ট প্রক্রিয়া জুড়ে আপনার পরীক্ষার খরচ বর্জন করেন৷
- এটি আপনাকে প্রবাহিত রাখে, কারণ পরবর্তীতে কী করতে হবে তা আপনাকে কখনই সিদ্ধান্ত নিতে হবে না।
এই সুবিধাগুলি ছাড়াও, এটি আপনাকে অভ্যাস করতে সাহায্য করে৷ পরীক্ষামূলক. যেহেতু আপনি সর্বদা আপনার পরীক্ষাগুলি প্রথমে লিখছেন, আপনি অনেক পরীক্ষা করতে যাচ্ছেন আপনি যদি সত্যের পরে পরীক্ষা করার চেষ্টা করেন তার চেয়ে বেশি . আপনার পরীক্ষাগুলি আসলে সঠিক কিনা তা আপনি এখনই জানতে পারবেন (কারণ তারা প্রথমে ব্যর্থ হবে)। এছাড়াও, "এই একবার" পরীক্ষাগুলি এড়িয়ে যাওয়ার জন্য আপনার কাছে কোনও অজুহাত নেই৷
৷রাগ পরীক্ষা-প্রথম বক্তৃতা দুঃখ এবং হতাশার দিকে নিয়ে যায়
সম্পূর্ণ, 100% একমত। হ্যাঁ, আমি এটি আবার পোস্ট করছি। কিন্তু যদি কেউ টিডিডি না করে কারণ তারা সুবিধাগুলি সম্পর্কে জানে না, বা তারা এখনও এটি কীভাবে করতে হয় তা পুরোপুরি শিখেনি, বা তারা এতে অস্বস্তি বোধ করে, সঠিক পদ্ধতি হল তাদের লজ্জা না দেওয়া, এটা হল সহায়তা তাদের। যদি TDD আপনার জন্য উপযোগী হয়, তাহলে তাদের দেখান কিভাবে এটি আপনাকে সাহায্য করে। তারা আগ্রহী হলে, তাদের শুরু করতে সাহায্য করুন।
যদি তারা TDDিং না করে কারণ তারা TDD ছাড়া কোডটি যেভাবে পরিণত হয় তা পছন্দ করে, তাদের অনুমতি দিন।
আপনি দক্ষতা তৈরি করার সাথে সাথে আপনি আপনার নিজস্ব অন্তর্দৃষ্টি, আপনার নিজস্ব স্বাদের অনুভূতি এবং সফ্টওয়্যার বিকাশের জন্য আপনার নিজস্ব পছন্দের কৌশলগুলি বিকাশ করবেন। এবং কোনও ইন্টারনেট যুক্তিই একজন বিশেষজ্ঞকে সেই বিষয়গুলিকে উপেক্ষা করতে শেখাতে যাচ্ছে না৷৷
সুতরাং, আপনি যদি আপনার সেরা অনুশীলনের ধারণা অনুসরণ না করার জন্য কাউকে সমালোচনা করতে যাচ্ছেন, আপনি হয় তাদের শেখার ক্ষমতাকে আঘাত করছেন বা শূন্যতায় চিৎকার করছেন। যা সর্বোত্তম ক্ষেত্রে সময়ের অপচয়, এবং সবচেয়ে খারাপ ক্ষেত্রে আপনার কারণকে আঘাত করে।
তাহলে আপনার কি TDDing রাখা উচিত?
হ্যাঁ! আমি আপনাকে এটি শিখতে এবং অনুশীলন করার পরামর্শ দিচ্ছি৷৷
কিভাবে পরীক্ষা করতে হয় তা শেখানোর জন্য আমি TDD কে কৃতিত্ব দিই, এবং আমি যখন TDD করি তখনও আমি বিশাল সুবিধা পাই। এটি নিখুঁত নয়, তবে কোন একটি কৌশলই জাদুকরীভাবে আরও ভাল কোড তৈরির চাবিকাঠি নয়৷
৷পরিবর্তে, আপনাকে নতুন নিদর্শন, কৌশল এবং সরঞ্জামগুলি শিখতে হবে। যতক্ষণ না আপনি সঠিক জায়গায় সঠিক প্যাটার্ন ব্যবহার করতে না পারেন ততক্ষণ সেগুলি প্রয়োগ করার অনুশীলন করুন কারণ এটি সঠিক মনে হয় .
আপনি যখন শিখবেন, আপনার কোডটি সংশোধন, রিফ্যাক্টর এবং পরীক্ষা করার জন্য কিছু সময় নিন। আপনার পুরানো কোড এবং আপনার নতুন কোড দেখুন. এটি পর্যালোচনা করার জন্য আপনার চেয়ে বেশি অভিজ্ঞ কাউকে পান। আপনি কি এটি আরও ভাল করেছেন? এভাবেই আপনি বড় হন৷৷