স্বয়ংক্রিয় টেস্ট লেখা
১৯৭২ সালে Edsger W. Dijkstra তার “The Humble Programmer” প্রবন্ধে বলেছিলেন যে, “প্রোগ্রাম টেস্টিং বাগ (bug) এর উপস্থিতি দেখানোর জন্য খুব কার্যকর একটি উপায় হতে পারে, কিন্তু এটি বাগের অনুপস্থিতি দেখানোর জন্য একেবারেই যথেষ্ট নয়।” এর মানে এই নয় যে আমরা যতটা সম্ভব টেস্ট করার চেষ্টা করব না!
আমাদের প্রোগ্রামের নির্ভুলতা (correctness) বলতে বোঝায়, আমাদের কোড ঠিক সেই কাজটি কতটা ভালোভাবে করে যা আমরা করতে চেয়েছিলাম। Rust ডিজাইন করার সময় প্রোগ্রামের নির্ভুলতার উপর অনেক বেশি গুরুত্ব দেওয়া হয়েছে, কিন্তু নির্ভুলতা একটি জটিল বিষয় এবং এটি প্রমাণ করা সহজ নয়। Rust-এর type system এই গুরুদায়িত্বের একটি বড় অংশ পালন করে, কিন্তু type system সবকিছু ধরতে পারে না। একারণে, Rust-এ স্বয়ংক্রিয় সফটওয়্যার টেস্ট (automated software test) লেখার জন্য সাপোর্ট অন্তর্ভুক্ত করা হয়েছে।
ধরা যাক, আমরা add_two
নামে একটি function লিখলাম যা তার প্যারামিটারে (parameter) আসা যেকোনো সংখ্যার সাথে ২ যোগ করে। এই function-টির সিগনেচার একটি integer প্যারামিটার হিসেবে গ্রহণ করে এবং একটি integer ফলাফল হিসেবে রিটার্ন করে। যখন আমরা সেই function-টি ইমপ্লিমেন্ট (implement) এবং কম্পাইল (compile) করি, তখন Rust সমস্ত type checking এবং borrow checking সম্পন্ন করে, যা আপনারা এর মধ্যেই শিখেছেন। এটি নিশ্চিত করে যে আমরা যেন এই function-এ String
ভ্যালু বা কোনো অবৈধ reference
পাস না করি। কিন্তু Rust এটা পরীক্ষা করতে পারে না যে এই function-টি ঠিক সেটাই করবে যা আমরা করতে চেয়েছিলাম, অর্থাৎ প্যারামিটারের সাথে ২ যোগ করবে, ১০ যোগ বা ৫০ বিয়োগ নয়! এখানেই টেস্টের প্রয়োজনীয়তা আসে।
আমরা এমন টেস্ট লিখতে পারি যা assert করে, উদাহরণস্বরূপ, যখন আমরা add_two
ফাংশনে 3
পাস করব, তখন রিটার্ন ভ্যালু হবে 5
। আমরা যখনই আমাদের কোডে কোনো পরিবর্তন আনি, তখন এই টেস্টগুলো চালাতে পারি। এটি নিশ্চিত করে যে বিদ্যমান সঠিক আচরণে (correct behavior) কোনো পরিবর্তন আসেনি।
টেস্টিং একটি জটিল দক্ষতা: যদিও এক অধ্যায়ে ভালো টেস্ট লেখার সমস্ত খুঁটিনাটি আলোচনা করা সম্ভব নয়, এই অধ্যায়ে আমরা Rust-এর টেস্টিং ব্যবস্থার (testing facilities) কার্যপ্রণালী নিয়ে আলোচনা করব। আমরা টেস্ট লেখার জন্য উপলব্ধ অ্যানোটেশন (annotations) এবং ম্যাক্রো (macros), টেস্ট চালানোর জন্য ডিফল্ট আচরণ ও অপশন এবং কীভাবে টেস্টগুলোকে ইউনিট টেস্ট (unit tests) এবং ইন্টিগ্রেশন টেস্টে (integration tests) সাজানো যায় তা নিয়ে কথা বলব।