বাগ খোঁজা: ফেলুদার মতো ডিবাগিং

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

ধাপ ১: অপরাধ আবার ঘটান
যে বাগ আপনি ইচ্ছামতো ঘটাতে পারেন না, সেটা ধরা প্রায় অসম্ভব। প্রথম কাজ হলো ঠিক কোন ইনপুটে, কোন পরিস্থিতিতে সমস্যা হয় সেটা খুঁজে বের করা।
"মাঝে মাঝে লগইন হয় না" খুব খারাপ সূত্র। "যাদের ইমেইলে বড় হাতের অক্ষর আছে, তাদের লগইন হয় না" অসাধারণ সূত্র।
ধাপ ২: সূত্র সংগ্রহ
- পুরো এরর মেসেজ আর স্ট্যাক ট্রেস পড়ুন।
- লগ দেখুন: সমস্যার ঠিক আগে কী ঘটেছিল?
- সম্প্রতি কী বদলেছে? নতুন কোড, নতুন লাইব্রেরি, নতুন ডেটা?
import logging
logging.basicConfig(level=logging.DEBUG)
def login(email, password):
logging.debug("login attempt: email=%r", email)
user = find_user(email)
logging.debug("user found: %s", user is not None)
...
print দিয়েও কাজ চলে, তবে logging পরে বন্ধ-চালু করা সহজ।
ধাপ ৩: অনুমান তৈরি করুন
"আমার মনে হয় ইমেইল তুলনার সময় ছোট-বড় অক্ষরের পার্থক্য ধরা হচ্ছে।" একটা নির্দিষ্ট, পরীক্ষাযোগ্য অনুমান।
ধাপ ৪: একবারে একটা জিনিস পরীক্ষা করুন
একসাথে পাঁচটা জিনিস বদলালে, ঠিক হলেও জানবেন না কোনটা কাজ করল। একটা পরিবর্তন, একটা পরীক্ষা।
>>> find_user("Rahim@Example.com")
None
>>> find_user("rahim@example.com")
<User rahim>
প্রমাণ মিলে গেল। এখন সমাধান:
def find_user(email):
return db.users.get(email.strip().lower())
ধাপ ৫: অপরাধী ধরা পড়ার পর
ফেলুদা কেস শেষ করে চুপচাপ চলে যেতেন না; তোপসে সব লিখে রাখত। আপনিও লিখে রাখুন:
- এই বাগের জন্য একটা টেস্ট লিখুন, যাতে আর কখনো ফিরে না আসে।
- কমিট মেসেজে কারণ লিখুন: "ইমেইল তুলনায় ছোট-বড় অক্ষর উপেক্ষা করা হলো"।
ফেলুদার কিছু টিপস, প্রোগ্রামারদের জন্য
- রাবার ডাক পদ্ধতি: সমস্যাটা জোরে জোরে কাউকে (বা একটা রাবারের হাঁসকে) ব্যাখ্যা করুন। প্রায়ই ব্যাখ্যা করতে করতে নিজেই উত্তর পেয়ে যাবেন।
- বাইনারি সার্চ: কোডের অর্ধেক বন্ধ করে দেখুন সমস্যা থাকে কি না। এভাবে অর্ধেক অর্ধেক করে অপরাধীকে কোণঠাসা করুন। গিটে
git bisectঠিক এই কাজটাই করে। - বিরতি নিন: দুই ঘণ্টা আটকে থাকার পর দশ মিনিট হাঁটলে অনেক সময় সমাধান মাথায় আসে।
- "এটা অসম্ভব" বলবেন না: কম্পিউটার যা করছে, সেটা সম্ভব বলেই করছে। আপনার ধারণাটাই ভুল।
শেষ কথা
ভালো ডিবাগার হওয়া মানে সব জানা না। মানে ধৈর্য, কৌতূহল আর প্রমাণের প্রতি শ্রদ্ধা। পরের বার কোনো বাগ আপনাকে বোকা বানাতে চাইলে মনে মনে বলুন: "মগজাস্ত্র চালাও, তোপসে।"