(এই সপ্তাহ শিকাগোতে RailsConf-এ আছি। আমাকে দেখলে হাই বলুন! সাইডবারের ছবিতে বয়স্ক লোকটি আমি।)
আমার একটি আর্টিকেলের কমেন্টে একজন পাঠক টেস্টিং নিয়ে চমৎকার প্রশ্ন করেছেন:
আমার "TDD ফ্লাইহ್ವীল" ঘুরিয়ে দেওয়া দরকার, কিন্তু TDD আমার কাছে খুব অনফ্যামিলিয়ার। RSpec দিয়ে কীভাবে শুরু করব সেটা রিকমেন্ড করবেন নাকি শুধু "ঘুसे যাওয়া এবং হ্যাক করা" টাইপ?
তাই আমি উত্তর দিলাম:
যদি আপনি অন্যেকটিতে সেটেল না হন, তবে মিনিটেস্ট আপনাকে আরও সহজ লাগতে পারে। এটা একটু বেশি 'মেথডস এবং ক্লাসেস', তাই আপনি সম্পূর্ণভাবে TDD শিখতে ও প্র্যাকটিস করতে ফোকাস করতে পারবেন, নতুন সিনট্যাক্স শিখার ঝামেলা ছাড়া।
রেইলসের টেস্ট টার্মিনোলজি, অ্যSSERTion, এবং টেস্ট রান করার গাইড কফি ভালো।
TDD শিখার সেরা উপায় প্র্যাকটিস। এই ধাপগুলো ফলো করুন:
- যে কোড দরকার সেটা ইতিমধ্যে আছে ধরে একটি টেস্ট লিখুন।
- টেস্ট রান করুন, নিশ্চিত হোন নতুন টেস্ট ফেলছে।
- টেস্ট পাস করবে এমন সিম্প্লেস্ট কোড লিখুন। এখানে ওভারলি অ্যাবস্ট্রাক্ট বা রিফ্যাক্টর করবেন না।
- টেস্ট রান করুন, নিশ্চিত হোন নতুন টেস্ট পাস করছে।
- কোড রিফ্যাক্টর করুন ডুপ্লিকেশন সরাতে (অথবা কোড এক্সপ্রেসিভ করতে)।
- আবার টেস্ট রান করুন (নিশ্চিত করতে পাস করছে)।
- স্টেপ ১-এ ফিরে যান।
TDD প্র্যাকটিস করার সময় নিজেকে জিজ্ঞাসা করুন: কোন স্টেপে আছি? কোনো স্টেপ স্কিপ করলাম? নেক্সট স্টেপ কী? (আপনাকে সবসময় এই স্টেপগুলোর মধ্যে একটাতে থাকা উচিত) এটা আপনাকে সঠিক ট্র্যাকে রাখবে, যা নতুন কিছু শিখার সময় খুব গুরুত্বপূর্ণ। "প্র্যাকটিস মেইকস পার্মানেন্ট", তাই ভুল প্র্যাকটিস করবেন না!
তবুও, নিজেকে ভুল করার অনুমতি দিন। আপনি শিখছেন, এটা একদম ঠিক! বেশি করলে অনেক সহজ হয়ে যাবে।
টেস্টিং নিয়ে বই লিখছেন Eric Steele, আমার মিস করা একটি কী পয়েন্ট নিয়ে কথা বললেন:
TDD-র যে অংশটা বাদ পড়ে যায় সেটা হলো স্টেপ ১-এর আগে কতটুকু প্ল্যানিং হয়।
টেস্ট হলো অ্যাপের রিকোয়ারমেন্ট এবং আপনার প্ল্যানড ইমপ্লিমেন্টেশনের মিলনস্থল। টেস্ট ড্রাইভেন ডেভেলপমেন্টের আপপ зависиर्भরতা আছে অ্যাপটা কী করবে সেটা জানতে, এবং আপনার মনে থাকে কীভাবে করবেন।
রেইলস দিয়ে শুরু করলে আমরা অনেক কিছু জানি না। আমরা অনেক সময় এক্সপেরিমেন্টাল কোড লিখি যেন আমরা যা খুঁজছি সেটার মতো রেজাল্ট আসে। শিখার সাথে সাথে এটা কম হয়। আমি মনে করি এটাই কেন TDD 'রাইট আ টেস্ট' দিয়ে শুরু করে 'ফিগার আউট হয় কী বানাবো' দিয়ে না। আপনি টেস্ট করার সময় আপনার পেছনে যথেষ্ট এক্সপেরিয়েন্স থাকে।
'রাইট আ টেস্ট'-এর আগে এই স্টেপগুলো যোগ করি:
- ব্রেনস্টর্ম, জাস্টিফাই, এবং রিকোয়ারমেন্ট কাটুন। কোডিং এড়াতে চেষ্টা করুন।
- রিকোয়ারমেন্ট মেট করবে এমন কোড প্ল্যান ও ডিজাইন করুন।
- অনজান প্রশ্নের উত্তর পেতে কোড দিয়ে টিংকার করুন, কিন্তু সেই কোড আলাদা রাখুন।
আমার পরামর্শ:
- সিনট্যাক্সের চেয়ে প্ল্যানিং-এ ফোকাস করুন
- টুলস মিনিমাইজ করুন (আমি মিনিটেস্ট/ফিক্সচার খুব হেল্পফুল পেলাম)
- প্র্যাকটিস, প্র্যাকটিস, প্র্যাকটিস।
যেকোনো জিনিসের মত, TDD-এ শুরু করতে প্র্যাকটিস এবং সেলফ-করেকশন (বা কেউ থাকলে করেক্ট করার) দরকার। আপনি যদি কিছু রিজিড স্টেপ ফলো করতে পারেন, এবং প্রসেসে কোথায় আছেন সেটা মাইন্ডফুল থাকতে পারেন, TDD শীঘ্রই আপনাকে পুরোপুরি ন্যাচারাল লাগবে।