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

· 2 min read · Syed Omar Faruk Towaha
বাগ খোঁজা: ফেলুদার মতো ডিবাগিং

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

Detective method
অনুমান না, প্রমাণ।

ধাপ ১: অপরাধ আবার ঘটান

যে বাগ আপনি ইচ্ছামতো ঘটাতে পারেন না, সেটা ধরা প্রায় অসম্ভব। প্রথম কাজ হলো ঠিক কোন ইনপুটে, কোন পরিস্থিতিতে সমস্যা হয় সেটা খুঁজে বের করা।

"মাঝে মাঝে লগইন হয় না" খুব খারাপ সূত্র। "যাদের ইমেইলে বড় হাতের অক্ষর আছে, তাদের লগইন হয় না" অসাধারণ সূত্র।

ধাপ ২: সূত্র সংগ্রহ

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())

ধাপ ৫: অপরাধী ধরা পড়ার পর

ফেলুদা কেস শেষ করে চুপচাপ চলে যেতেন না; তোপসে সব লিখে রাখত। আপনিও লিখে রাখুন:

ফেলুদার কিছু টিপস, প্রোগ্রামারদের জন্য

শেষ কথা

ভালো ডিবাগার হওয়া মানে সব জানা না। মানে ধৈর্য, কৌতূহল আর প্রমাণের প্রতি শ্রদ্ধা। পরের বার কোনো বাগ আপনাকে বোকা বানাতে চাইলে মনে মনে বলুন: "মগজাস্ত্র চালাও, তোপসে।"

// related

// prefer the terminal?

Open the terminal blog and type read bug-khonja-feluda-style-debugging.