Exercism-এ আপনার Go অনুশীলনীগুলো কীভাবে টেস্ট করবেন তা শিখুন
আপনার exercism প্রজেক্ট ডিরেক্টরির ভেতরে থাকা Go অনুশীলনীগুলো চালাতে হলে অনুশীলনীর ডিরেক্টরিতে গিয়ে go test রান করুন।
cd exercism/project/directory/go/leap
go test
go test রান করার পাশাপাশি কিছু অনুশীলনী ডেটা রেস ডিটেক্টর-এর একটি ফ্ল্যাগ দিয়ে চালানো উচিত, যাতে যাচাই করা যায় যে আপনার সমাধান কোনো ডেটা রেস বাগ তৈরি করছে না।
সংশ্লিষ্ট অনুশীলনীগুলোতে ডেটা রেস ডিটেক্টর ফ্ল্যাগ -race দিয়ে টেস্ট চালানোর কথা মনে করিয়ে দেওয়া হয়েছে।
ডেটা রেস আছে কি না দেখতে go test -race রান করুন।
উদাহরণস্বরূপ:
cd exercism/project/directory/go/bank-account
go test -race
বেশিরভাগ অনুশীলনীতেই বেঞ্চমার্ক থাকে, যা ব্যবহার করে আপনি দেখতে পারেন আপনার সমাধানে পরিবর্তন করলে তার পারফরম্যান্সে কী প্রভাব পড়ে।
কোনো অনুশীলনীর বেঞ্চমার্ক রান করতে অনুশীলনীর ডিরেক্টরির ভেতরে go test -v --bench . --benchmem কমান্ডটি ব্যবহার করুন।
এই আউটপুটটি দেখুন।
BenchmarkReverse-16 403594 2537 ns/op 176 B/op 34 allocs/op
এর মানে হলো, নির্ভরযোগ্যভাবে সময় মাপার জন্য বেঞ্চমার্কটিতে ৪০৩৫৯৪ বার ইটারেশন লেগেছে। গড় গতি ছিল প্রতি লুপে ২৫৩৭ ns। প্রতি অপারেশনে ৩৪টি মেমরি অ্যালোকেশন হয়েছে, গড়ে ১৭৬ বাইট করে।
উদাহরণ টেস্ট কিছু অনুশীলনীতে ব্যবহার করা হয় এবং সেগুলো অনুশীলনীর সাধারণ টেস্টগুলোর পাশাপাশি চলে। এই উদাহরণগুলো অনুশীলনীর API ডকুমেন্ট করা ও যাচাই করার জন্য ব্যবহার করা হয়, আর অনুশীলনীর প্রত্যাশিত API কী তা বোঝার জন্যও এগুলো কাজে লাগতে পারে।
কোড জমা দেওয়ার আগে অনুগ্রহ করে আপনার কোডে go fmt চালান।
প্রতিটি অনুশীলনীর README.md-তে একটি সাধারণ বর্ণনা থাকে, কিন্তু Go টেস্ট প্রোগ্রামটি হবে খুবই নির্দিষ্ট।
টেস্ট প্রোগ্রামটি খুলে একবার ভালোভাবে দেখুন। এটা যদি প্রতারণার মতো মনে হয়, তবুও দেখে নিন।
সহায়ক কমেন্ট, টেস্ট ডেটা, আর শুধু টেস্ট ফাংশনগুলোর নাম খুঁজে দেখুন।
কিছু লেখার আগেই go test রান করে দেখুন, আর দেখুন এরর মেসেজগুলো আপনাকে শুরু করার একটা ধারণা দেয় কি না।
আপনার প্রথম লক্ষ্য হবে কোনোভাবে কোড কম্পাইল করানো, যদিও তা টেস্টে ফেল করে।
এজন্য আপনার ফাংশনগুলো "স্টাব" করা উচিত।
অর্থাৎ ফাংশনের বডি খালি রাখুন, শুধু যা রিটার্ন করা দরকার সেটি ছাড়া।
শুধু কম্পাইল করানোর জন্য return 0 বা return "" বা যা দরকার তাই লিখুন।
কখনো কখনো ফাংশনের সিগনেচার বোঝার জন্য টেস্ট প্রোগ্রামে ফিরে গিয়ে আরও বিস্তারিত পড়তে হবে।
প্রয়োজনীয় সব ফাংশন সিগনেচার বুঝে ফেলার পর টেস্ট প্রোগ্রাম অভিযোগ করবে যে 0 ভুল উত্তর।
এখন ফাংশনের বডি ভরাতে শুরু করুন।
টেস্ট প্রায়ই প্রথম এররেই থেমে যায়।
সেটি ঠিক করুন, এরপর এরর না থাকা পর্যন্ত এভাবে চালিয়ে যান।
go test কমান্ডে কিছু দরকারি অপশন আছে।
go test -v আরও বিস্তারিত আউটপুট দেবে। go test -run <regexp> শুধু এমন টেস্ট চালাবে যাদের নাম <regexp> প্যাটার্নের সাথে মেলে।
প্যানিক হলে অনেক আউটপুট আসে। প্রথমে ভয়ংকর লাগতে পারে, তবে সাহস রাখুন। প্যানিক আউটপুটের একেবারে উপরের দিকে প্যানিক মেসেজটি দেখুন। ওখানেই সমস্যার একটি সাধারণ বর্ণনা থাকবে। এরপর বাকিটা পড়ুন এবং আপনার কোডের প্রথম উল্লেখটি খুঁজুন। সেটিই প্রায়ই সরাসরি সমস্যার দিকে ইঙ্গিত করবে।
কনকারেন্ট প্রোগ্রামের সমস্যা খুঁজতে go test -race চেষ্টা করে দেখুন।
আবার বলি, go fmt রান করুন।
Golint আপনার কোডের এমন স্টাইল সমস্যার কথা জানাতে পারে যা go fmt ধরতে পারে না।
আপনি go vet কমান্ডটিও দেখতে পারেন, যা আপনার কোডের সম্ভাব্য সমস্যা নিয়ে সতর্ক করে।
কোড রিভিউয়ের সাধারণ মন্তব্যগুলো পড়ুন এবং মেনে চলুন।
কনকারেন্সি জড়িত কোনো অনুশীলনীর ক্ষেত্রে, টেস্ট পাস করলেও go test -race চালিয়ে দেখুন।
বেঞ্চমার্ক পারফরম্যান্সের জন্য অপ্টিমাইজ করলেও পাঠযোগ্যতা মাথায় রাখুন।
কখনো কখনো অপ্টিমাইজেশন আপনাকে সংক্ষিপ্ত ও পাঠযোগ্য সমাধান খুঁজে পেতে সাহায্য করে, তবে পারফরম্যান্সের পেছনে ছুটতে গিয়ে পাঠযোগ্যতা ছেড়ে দেওয়ার প্রলোভনও থাকতে পারে।
কয়েকটি অনুশীলনীতে বোনাস টেস্ট থাকে, যা শুধু go test দিয়ে চলে না।
নিয়মিত অনুশীলনীর পাশাপাশি বোনাস অংশটিও সমাধান করলে আপনাকে go test -tags bonus টাইপ করতে হবে, অথবা টেস্ট প্রোগ্রামের ডকুমেন্টেশনে দেওয়া অনুরূপ কোনো কমান্ড দিতে হবে।