Practical Debugging
- এরর বার্তার ধরন (SyntaxError, ReferenceError, TypeError) থেকে সম্ভাব্য কারণ বলতে পারবেন
- অনুমান → পরীক্ষা চক্র দিয়ে নীরব (silent) বাগ খুঁজে পেতে পারবেন
- মধ্যবর্তী মান ছাপিয়ে ও ছোট ইনপুট দিয়ে সমস্যা আলাদা করতে পারবেন
সমস্যাটা কী?
কুপন কোড “EID10” দিলে ১০% ছাড় পাওয়ার কথা। একজন গ্রাহক অভিযোগ করলেন ১০০০ টাকার অর্ডারে তিনি ১০০ টাকা ছাড় পেয়েছেন—ঠিক আছে। আরেকজন বললেন তার ক্ষেত্রে পেজই খুলছে না। কোড দেখে কিছুই বোঝা যাচ্ছে না। কোথা থেকে শুরু করবেন?
শেখার লক্ষ্য
- এরর বার্তার ধরন (SyntaxError, ReferenceError, TypeError) থেকে সম্ভাব্য কারণ বলতে পারবেন
- অনুমান → পরীক্ষা চক্র দিয়ে নীরব (silent) বাগ খুঁজে পেতে পারবেন
- মধ্যবর্তী মান ছাপিয়ে ও ছোট ইনপুট দিয়ে সমস্যা আলাদা করতে পারবেন
পূর্বশর্ত
ব্যাখ্যা
- পুনরুৎপাদন: ঠিক কোন ইনপুটে সমস্যা হয় তা খুঁজুন। “কখনো কখনো ভুল” থেকে “কুপন ছোট হাতের অক্ষরে দিলে ভুল”—এটাই অর্ধেক সমাধান।
- এরর বার্তা পড়ুন: ধরন + বার্তা। নিচের টেবিল দেখুন।
- অনুমান করুন: “আমার ধারণা discount undefined”।
- পরীক্ষা করুন: সন্দেহের জায়গার ঠিক আগে
console.log("discount =", discount)। - ছোট করুন: ১০০টি অর্ডারের বদলে একটি অর্ডার, একটি কুপন দিয়ে চালান।
- ঠিক করুন ও আবার পরীক্ষা করুন: আগের সফল ইনপুটগুলোও যেন ঠিক থাকে।
| এরর | সাধারণ অর্থ | প্রথমে কী দেখবেন |
|---|---|---|
| SyntaxError | কোড ভাষার নিয়ম ভেঙেছে—চালানোর আগেই ধরা পড়ে | বন্ধনী/কোটেশন জোড়া, কমা, বানান |
| ReferenceError | এমন নাম যা ঘোষণা হয়নি বা স্কোপে নেই | বানান, ঘোষণার জায়গা, block-এর বাইরে ব্যবহার |
| TypeError | ভুল ধরনের মানে কাজ (undefined.x, নন-ফাংশন কল) | কোন মান undefined/null হলো এবং কেন |
| কোনো এরর নেই কিন্তু ভুল ফল | যুক্তির বাগ (silent bug) | মধ্যবর্তী মান ছাপুন; প্রত্যাশা লিখে মিলান |
সবচেয়ে বিপজ্জনক বাগ শেষ সারিটি—কোনো এরর নেই, শুধু ভুল সংখ্যা। ML কোডে এটা খুব সাধারণ: মডেল “চলছে” কিন্তু শিখছে না। এজন্য প্রত্যাশিত মান আগে থেকে হাতে হিসাব করে রাখা জরুরি।
উপমা — এবং কোথায় ভাঙে
উপমা: Debugging হলো ডাক্তারের রোগ নির্ণয়: উপসর্গ (এরর) শুনে অনুমান, পরীক্ষা (console.log), ফল দেখে অনুমান বাদ বা নিশ্চিত।
কোথায় ভাঙে: ডাক্তার রোগীর ওপর ইচ্ছামতো পরীক্ষা চালাতে পারেন না; প্রোগ্রামে আপনি একই ইনপুট হাজারবার চালাতে পারেন, ইনপুট বদলাতে পারেন—এই সুবিধা পুরোপুরি ব্যবহার করুন।
ধাপে ধাপে উদাহরণ
বাগ ১ (নীরব): applyCoupon(1000, "eid10") → ১০০০ (ছাড় নেই)। প্রত্যাশা ৯০০।
- অনুমান: কুপন খোঁজা ব্যর্থ। পরীক্ষা:
console.log(coupons[code])→ undefined। - কারণ: coupons-এ key "EID10" (বড় হাতের), ইনপুট "eid10"। object key case-sensitive।
- সমাধান:
code.toUpperCase().trim()দিয়ে স্বাভাবিক করা।
বাগ ২ (এরর): applyCoupon(1000) (কুপন ছাড়া) → TypeError: cannot read property 'toUpperCase' of undefined।
- বার্তা পড়ি: undefined-এর ওপর toUpperCase। কোন মান undefined? code।
- কারণ: কুপন ঐচ্ছিক, কিন্তু কোড ধরে নিয়েছে সবসময় আছে।
- সমাধান: শুরুতে
if (!code) return total;।
অনুশীলন / অ্যাক্টিভিটি
console.log আউটপুট দেখায়। ব্রাউজারের DOM, নেটওয়ার্ক (fetch), টাইমার বা ফাইল এখানে নেই—ইচ্ছাকৃতভাবে। Ctrl/⌘ + Enter চাপলেও Run হয়।ডিসকাউন্ট ক্যালকুলেটর — দুটি বাগ খুঁজুন
const coupons = { EID10: 10, NEW50: 50 }; // শতাংশ
function applyCoupon(total, code) {
const key = code.trim();
const percent = coupons[key];
const discount = total * percent / 100;
return total - discount;
}
console.log("EID10:", applyCoupon(1000, "EID10")); // 900
console.log("eid10:", applyCoupon(1000, "eid10")); // 900 হওয়া উচিত
console.log("ভুল কোড:", applyCoupon(1000, "XYZ")); // 1000 হওয়া উচিত
console.log("কুপন নেই:", applyCoupon(1000)); // 1000 হওয়া উচিতলাইন ধরে বুঝি
- starter-এর “eid10” লাইনে এরর নেই কিন্তু ফল
NaN—নীরব বাগ। percent = undefined, আর undefined দিয়ে গুণ = NaN। - “ভুল কোড” লাইনেও একই NaN—অজানা কোড সামলানো হয়নি।
- “কুপন নেই” লাইনে TypeError, আর এর পরে কিছুই চলে না—একটি অধরা exception পুরো প্রোগ্রাম থামায়।
- সমাধানে
[debug]লাইনটি মধ্যবর্তী মান দেখায়। কাজ শেষে এমন debug লাইন সরিয়ে ফেলা বা নিয়ন্ত্রিত logging-এ রাখা উচিত।
এখানে এটা কেন ব্যবহার করেছি?
এখানে প্রতিটি বাগ ইচ্ছাকৃতভাবে বাস্তবসম্মত: case-sensitivity, ঐচ্ছিক ইনপুট, অজানা মান। পরের অধ্যায়ে গ্রেডিয়েন্ট বা attention-এর কোডে ঠিক এভাবেই মধ্যবর্তী shape ও মান ছাপিয়ে ভুল খুঁজব।
কোন বিষয়গুলো মনে রাখব?
- পুনরুৎপাদন → বার্তা পড়া → অনুমান → পরীক্ষা → ছোট করা → ঠিক করা
- TypeError: কোন মান undefined তা খুঁজুন
- NaN দেখলে উৎসের দিকে পিছিয়ে যান
- নীরব বাগের জন্য প্রত্যাশিত মান আগে লিখে রাখুন
এখনই কোনগুলো মুখস্থ করতে হবে না?
- ব্রাউজার DevTools-এর breakpoint (নিজের কম্পিউটারে শিখবেন)
- stack trace-এর সব অংশ
- অটোমেটেড টেস্ট ফ্রেমওয়ার্ক
নিজে পরিবর্তন করে দেখুন
নিজে একটি বাগ ঢোকান: total * percent / 100-কে total * percent / 10 করুন। এরর আসে না—কোন ইনপুটে আপনি সবচেয়ে দ্রুত ধরতে পারবেন যে ফল ভুল? (ইঙ্গিত: হাতে সহজে হিসাব করা যায় এমন সংখ্যা।)
সাধারণ ভুল
- এরর বার্তা না পড়ে কোড এলোমেলোভাবে বদলানো
- একসাথে অনেক কিছু বদলানো—কোনটিতে কাজ হলো বোঝা যায় না
- শুধু “সুখী পথ” (সঠিক ইনপুট) পরীক্ষা করা
- debug লাইন রেখে দেওয়া যা ব্যক্তিগত তথ্য ছাপে
জ্ঞান যাচাই
নিচের 3টি প্রশ্নের উত্তর দিয়ে “জমা দিন” চাপুন। স্কোর সার্ভারে যাচাই হয়; প্রতিটি উত্তরের পর কেন সঠিক বা ভুল তা দেখাবে। লগইন থাকলে ফল আপনার অগ্রগতিতে সংরক্ষিত হয়।
সংক্ষেপে মনে রাখুন
- debugging একটি পদ্ধতি, অনুমানের খেলা নয়
- এরর ধরন কারণ খোঁজার দিক দেখায়
- নীরব বাগ সবচেয়ে বিপজ্জনক—প্রত্যাশিত মান লিখে রাখুন
পরবর্তী পাঠ
অধ্যায় ২-এর সব দক্ষতা একসাথে—প্রজেক্ট: প্রজেক্ট: Rule-based Support Assistant
সূত্র ও যাচাই
জ্ঞান যাচাই
আপনার শেখার অগ্রগতি সংরক্ষণ করতে লগইন করুন।
এখানে প্রশ্ন করুন
আপনার শেখার অগ্রগতি সংরক্ষণ করতে লগইন করুন।