প্রোগ্রাম ডিজাইন ও ডিবাগিং

এইচএসসি আইসিটি: প্রোগ্রাম ডিজাইন মডেল (টপ-ডাউন, বটম-আপ) এবং ডিবাগিং। সিনট্যাক্স এরর, লজিক্যাল এরর ও রানটাইম এররের বিস্তারিত ব্যাখ্যা ও উদাহরণ।

শেখা শুরু করুন

প্রোগ্রাম ডিজাইন ও ডিবাগিং

  1. অধ্যায় ৫: প্রোগ্রাম ডিজাইন ও ডিবাগিং
  2. কম্পিউটারের ভেতরে পোকা?
  3. প্রোগ্রাম ডিজাইন মডেল
  4. প্রোগ্রামের ভুলের প্রকারভেদ (Types of Errors)
  5. ১. সিনট্যাক্স এরর (Syntax Error)
  6. ২. লজিক্যাল এরর (Logical Error)
  7. ৩. রানটাইম এরর (Runtime Error)
  8. ডিবাগিং (Debugging) কী?
  9. চলো যাচাই করি: কোনটি কোন এরর?
  10. সারসংক্ষেপ (Summary)
  11. ধন্যবাদ

অধ্যায় ৫: প্রোগ্রাম ডিজাইন ও ডিবাগিং

এই লেকচার শেষে আমরা-

১। প্রোগ্রাম ডিজাইন মডেল (টপ-ডাউন ও বটম-আপ) ব্যাখ্যা করতে পারব।
২। প্রোগ্রামের ভুল বা এরর (Error) এর প্রকারভেদ বর্ণনা করতে পারব।
৩। সিনট্যাক্স, লজিক্যাল ও রানটাইম এরর চিহ্নিত করতে পারব।
৪। ডিবাগিং কী এবং কীভাবে করতে হয় তা ব্যাখ্যা করতে পারব।

সুপ্রিয় শিক্ষার্থীরা, সবাইকে স্বাগতম! আজকে আমরা প্রোগ্রামিংয়ের অত্যন্ত গুরুত্বপূর্ণ এবং মজার একটি অংশ নিয়ে কথা বলব—সেটি হলো 'প্রোগ্রাম ডিজাইন ও ডিবাগিং'। একজন ভালো প্রোগ্রামার হতে হলে শুধু কোড লিখলেই হয় না, কোডের ভুল বা Error খুঁজে বের করাও জানতে হয়। এই লেকচার শেষে আমরা প্রোগ্রাম ডিজাইন মডেল যেমন টপ-ডাউন ও বটম-আপ সম্পর্কে জানতে পারব। এছাড়াও প্রোগ্রামের বিভিন্ন ধরনের ভুল যেমন সিনট্যাক্স, লজিক্যাল ও রানটাইম এরর সম্পর্কে বিস্তারিত জানব এবং কীভাবে ডিবাগিং করতে হয় তা শিখব। চলো শুরু করা যাক!

কম্পিউটারের ভেতরে পোকা?

গল্প: ১৯৪৭ সাল, হার্ভার্ড মার্ক-২ কম্পিউটার

  • ঘটনা: কম্পিউটারটি হঠাৎ কাজ করা বন্ধ করে দেয়।
  • কারণ: বিজ্ঞানী গ্রেস হপার কম্পিউটারের রিলে-র ভেতরে একটি 'মথ' (Moth) বা পোকা খুঁজে পান।
  • ফলাফল: পোকাটি সরানোর পর তিনি লগ বুকে লিখে রাখেন 'First actual case of bug being found'.

এখান থেকেই 'Bug''Debugging' শব্দের উৎপত্তি।

  • Bug = প্রোগ্রামের ভুল
  • Debugging = ভুল সংশোধন করা

তোমরা কি জানো, কম্পিউটার প্রোগ্রামের ভুলকে কেন 'Bug' বা 'পোকা' বলা হয়? এর পেছনে একটা দারুণ ইতিহাস আছে। সালটা ছিল ১৯৪৭। বিখ্যাত কম্পিউটার বিজ্ঞানী গ্রেস হপার হার্ভার্ড মার্ক-২ কম্পিউটার নিয়ে কাজ করছিলেন। হঠাৎ কম্পিউটারটি কাজ করা বন্ধ করে দিল। অনেক খোঁজাখুঁজির পর দেখা গেল, কম্পিউটারের হার্ডওয়্যারের ভেতরে একটি মথ বা পোকা ঢুকে সার্কিট অচল করে দিয়েছে। গ্রেস হপার পোকাটি বের করলেন এবং তাঁর লগ বুকে আঠা দিয়ে লাগিয়ে রাখলেন। নিচে লিখলেন, 'First actual case of bug being found'। সেই থেকেই আমরা প্রোগ্রামের ভুলকে বলি 'Bug' আর ভুল সরানোর প্রক্রিয়াকে বলি 'Debugging'। এখনকার দিনে আমাদের কোডে আর সত্যিকারের পোকা থাকে না, কিন্তু ভুলের পোকা ঠিকই থাকে!

প্রোগ্রাম ডিজাইন মডেল

প্রোগ্রাম তৈরির আগে এর নকশা বা ডিজাইন করা প্রয়োজন। প্রধান দুটি মডেল হলো:

১. টপ-ডাউন ডিজাইন (Top-Down Design):
* বড় সমস্যাকে ভেঙে ছোট ছোট অংশে ভাগ করা।
* উপর থেকে নিচের দিকে কাজ করে।
* উদাহরণ: C প্রোগ্রামিং ভাষা। (যেমন: বাড়ি তৈরির সময় আগে নকশা, তারপর রুম, তারপর দেয়াল)।

২. বটম-আপ ডিজাইন (Bottom-Up Design):
* ছোট ছোট অংশ আগে তৈরি করে পরে জোড়া লাগানো।
* নিচ থেকে উপরের দিকে কাজ করে।
* উদাহরণ: C++, Java (OOP)। (যেমন: লেগো দিয়ে গাড়ি বানানোর সময় আগে চাকা, বডি বানিয়ে জোড়া দেওয়া)।

একটা বড় সফটওয়্যার তৈরি করার আগে সেটা কীভাবে ডিজাইন করা হবে, তা ঠিক করা জরুরি। এর জন্য দুটো প্রধান মডেল আছে। প্রথমটি হলো 'টপ-ডাউন ডিজাইন'। ধরো, তুমি একটা বাড়ি বানাবে। প্রথমে তুমি পুরো বাড়ির নকশা করলে, তারপর রুম, তারপর দেয়াল, সবশেষে ইট। অর্থাৎ উপর থেকে নিচে বা বড় থেকে ছোটতে যাওয়া। C প্রোগ্রামিং ভাষায় আমরা মূলত এই পদ্ধতি ব্যবহার করি। দ্বিতীয়টি হলো 'বটম-আপ ডিজাইন'। এটা অনেকটা লেগো (Lego) খেলার মতো। আগে ছোট ছোট চাকা, বডি পার্টস বানালে, তারপর সব জোড়া লাগিয়ে একটা গাড়ি তৈরি করলে। অর্থাৎ নিচ থেকে উপরে। C++ বা Java-র মতো ভাষায় এই পদ্ধতি বেশি জনপ্রিয়।

প্রোগ্রামের ভুলের প্রকারভেদ (Types of Errors)

প্রোগ্রাম লিখতে গিয়ে ভুল করা খুবই স্বাভাবিক। কিন্তু সব ভুল একরকম নয়। প্রোগ্রামের ভুল বা Error-কে আমরা প্রধানত তিনটি ভাগে ভাগ করতে পারি। চিত্রে খেয়াল করো— ১. সিনট্যাক্স এরর (Syntax Error), ২. লজিক্যাল এরর (Logical Error), এবং ৩. রানটাইম এরর (Runtime Error)। সিনট্যাক্স এরর হলো ভাষার ব্যাকরণগত ভুল। লজিক্যাল এরর হলো তোমার চিন্তার বা যুক্তির ভুল। আর রানটাইম এরর হলো প্রোগ্রাম চলার সময় ঘটা কোনো দুর্ঘটনা। চলো, এখন আমরা এই তিন ধরনের ভুল বিস্তারিতভাবে উদাহরণসহ দেখে নিই।

১. সিনট্যাক্স এরর (Syntax Error)

সংজ্ঞা: প্রোগ্রামিং ভাষার ব্যাকরণ বা নিয়ম না মানলে যে ভুল হয়।

উদাহরণ:
* সেমিকোলন (;) না দেওয়া।
* বানান ভুল করা (যেমন: printf এর বদলে prntf)।
* ব্র্যাকেট শেষ না করা।

বৈশিষ্ট্য: কম্পাইলার এই ভুল সাথে সাথেই ধরে ফেলে এবং ঠিক না করা পর্যন্ত প্রোগ্রাম রান করে না।

প্রথমে আসি সিনট্যাক্স এরর-এ। সহজ কথায়, এটা হলো ব্যাকরণগত ভুল। আমরা যেমন বাংলা বা ইংরেজিতে লেখার সময় বানান ভুল করি, প্রোগ্রামিংয়েও তাই হয়। C ভাষায় প্রতিটি স্টেটমেন্টের শেষে সেমিকোলন দিতে হয়। তুমি যদি সেটা না দাও, বা `printf` ফাংশনের বানান ভুল করে `prntf` লেখো, তাহলে কম্পাইলার বুঝতে পারবে না তুমি কী করতে চাইছো। ছবিতে দেখো, কম্পাইলার লাল দাগ দিয়ে দেখিয়ে দিচ্ছে যে 'এখানে ভুল আছে'। মনে রাখবে, সিনট্যাক্স এরর থাকলে প্রোগ্রাম কখনোই রান করবে না বা চালু হবে না।

২. লজিক্যাল এরর (Logical Error)

সংজ্ঞা: প্রোগ্রামের লজিক বা যুক্তিতে ভুল থাকা।

উদাহরণ:
* দুটি সংখ্যা যোগ করার বদলে বিয়োগ চিহ্ন দেওয়া (sum = a - b)।
* ত্রিভুজের ক্ষেত্রফলে 0.5 গুণ করতে ভুলে যাওয়া।
* লুপের শর্ত ভুল দেওয়া।

বৈশিষ্ট্য: কম্পাইলার এই ভুল ধরতে পারে না। প্রোগ্রাম রান করে, কিন্তু উত্তর ভুল আসে। এটি খুঁজে বের করা সবচেয়ে কঠিন।

এবার আসি সবচেয়ে বিপদজনক ভুলের কথায়—লজিক্যাল এরর। ধরো, তোমাকে বলা হলো ত্রিভুজের ক্ষেত্রফল বের করতে। তুমি কোড লিখলে, প্রোগ্রাম রানও করল, কোনো এরর দেখাল না। কিন্তু উত্তর ভুল এল! কেন? ছবিতে দেখো, হয়তো তুমি সূত্রের মধ্যে ০.৫ গুণ করতে ভুলে গেছো, অথবা যোগের জায়গায় বিয়োগ চিহ্ন দিয়ে ফেলেছো। কম্পিউটার তো জানে না তুমি কী চাও, তাই সে এটা ধরতেও পারে না। যেহেতু প্রোগ্রাম রান করে কিন্তু রেজাল্ট ভুল দেয়, তাই এই ভুল খুঁজে বের করা বা ডিবাগ করা প্রোগ্রামারের জন্য সবচেয়ে চ্যালেঞ্জিং।

৩. রানটাইম এরর (Runtime Error)

সংজ্ঞা: প্রোগ্রাম চলার সময় (Execution time) যে ভুলের কারণে প্রোগ্রাম হঠাৎ বন্ধ হয়ে যায় বা ক্রাশ করে।

উদাহরণ:
* কোনো সংখ্যাকে শূন্য দিয়ে ভাগ করা (Division by Zero)।
* ভুল মেমোরি অ্যাড্রেস ব্যবহার করা।
* অসীম লুপে (Infinite Loop) পড়ে যাওয়া।

বৈশিষ্ট্য: কম্পাইল করার সময় ধরা পড়ে না, কিন্তু প্রোগ্রাম চালানোর মাঝপথে এরর দেখায়।

তৃতীয়টি হলো রানটাইম এরর। নাম শুনেই বোঝা যাচ্ছে, এই ভুলটা হয় 'রান' করার সময় বা 'টাইম'-এ। ধরো, তোমার প্রোগ্রাম ঠিকঠাক কম্পাইল হলো। কিন্তু চালানোর সময় তুমি ইনপুট হিসেবে এমন একটা সংখ্যা দিলে যা দিয়ে কম্পিউটার ক্যালকুলেশন করতে পারে না। যেমন, গণিতের নিয়মে কোনো সংখ্যাকে শূন্য (0) দিয়ে ভাগ করা যায় না। তুমি যদি কোডে `50 / 0` লিখে ফেলো বা ইউজার ইনপুট হিসেবে 0 দেয়, কম্পিউটার তখন কনফিউজড হয়ে যায় এবং প্রোগ্রামটা ক্রাশ করে বা বন্ধ হয়ে যায়। একেই বলে রানটাইম এরর।

ডিবাগিং (Debugging) কী?

সংজ্ঞা: প্রোগ্রামের ভুল বা Bug খুঁজে বের করে তা সমাধান করার প্রক্রিয়াকে ডিবাগিং বলে।

ডিবাগিংয়ের ধাপ:
১. ভুল শনাক্ত করা (Identify).
২. ভুলের অবস্থান খুঁজে বের করা (Isolate).
৩. ভুল সংশোধন করা (Fix).

সহায়ক টুলস: কম্পাইলার এরর মেসেজ, ডিবাগার টুল, প্রিন্ট স্টেটমেন্ট।

আমরা তো ভুলগুলো সম্পর্কে জানলাম। এখন এই ভুলগুলো ঠিক করার পালা। প্রোগ্রামের ভুল বা Bug খুঁজে বের করে তা সমাধান করার এই পুরো প্রক্রিয়াকে বলা হয় 'ডিবাগিং'। একজন ডাক্তারের কাজ যেমন রোগীর রোগ নির্ণয় করে ওষুধ দেওয়া, ডিবাগিংও ঠিক তাই। প্রথমে তোমাকে বুঝতে হবে ভুলটা কী, তারপর কোডের কোথায় ভুলটা হয়েছে তা খুঁজে বের করতে হবে এবং শেষে তা ঠিক করতে হবে। এর জন্য আমরা কম্পাইলারের মেসেজ পড়ি, আবার অনেক সময় কোডের মাঝখানে `print` কমান্ড দিয়ে দিয়ে চেক করি প্রোগ্রাম কতদূর ঠিক কাজ করছে।

চলো যাচাই করি: কোনটি কোন এরর?

নিচের কোড স্নিপেটগুলো দেখে বলো কোনটি কোন ধরনের ভুল:

১. সেমিকোলন মিসিং:

int x = 10

(উত্তর: Syntax Error)

২. গড় নির্ণয়ে ভুল সূত্র:

avg = a + b / 2;

(ব্র্যাকেট নেই, তাই আগে ভাগের কাজ হবে)
(উত্তর: Logical Error)

৩. শূন্য দিয়ে ভাগ:

int result = 50 / 0;

(উত্তর: Runtime Error)

এবার তোমাদের পালা! স্ক্রিনে তিনটি কোডের অংশ বা স্নিপেট দেখা যাচ্ছে। তোমরা ভিডিওটা একটু পজ করো এবং চিন্তা করো—কোনটি কোন ধরনের ভুল? ... চলো মিলিয়ে দেখি। ১ নম্বরটায় দেখো শেষে সেমিকোলন নেই। তার মানে এটা ব্যাকরণগত ভুল, অর্থাৎ 'সিনট্যাক্স এরর'। ২ নম্বরটায় গড় বের করতে চাওয়া হয়েছে। কিন্তু `a + b` কে ব্র্যাকেটে না রাখায়, শুধু `b` কে ২ দিয়ে ভাগ করা হবে আগে। প্রোগ্রাম রান করবে কিন্তু উত্তর ভুল আসবে। তাই এটি 'লজিক্যাল এরর'। ৩ নম্বরটায় ৫০ কে ০ দিয়ে ভাগ করা হয়েছে, যা অসম্ভব। তাই এটি প্রোগ্রাম ক্রাশ করাবে, অর্থাৎ 'রানটাইম এরর'। তোমরা কি ধরতে পেরেছিলে?

সারসংক্ষেপ (Summary)

আজকের ক্লাসের মূল বিষয়গুলো:

  • প্রোগ্রাম ডিজাইন: টপ-ডাউন (C) ও বটম-আপ (OOP) মডেল।
  • সিনট্যাক্স এরর: ব্যাকরণগত ভুল (ধরা সহজ, কম্পাইলার ধরে)।
  • লজিক্যাল এরর: যুক্তির ভুল (ধরা কঠিন, ভুল উত্তর দেয়)।
  • রানটাইম এরর: চলার সময় ক্রাশ করা (যেমন: ০ দিয়ে ভাগ)।
  • ডিবাগিং: ভুল খুঁজে সমাধান করার প্রক্রিয়া।

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

ধন্যবাদ

সবাইকে ধন্যবাদ।
পড়াশোনা চালিয়ে যাও!

সবাইকে ধন্যবাদ আজকের ক্লাসটি করার জন্য। পরবর্তী লেকচারে আমরা সরাসরি সি প্রোগ্রামিং ল্যাঙ্গুয়েজ এর গভীরে প্রবেশ করব। সেই পর্যন্ত সবাই ভালো থেকো, আল্লাহ হাফেজ।

প্রোগ্রাম ডিজাইন ও ডিবাগিং: নির্ভুল কোডিংয়ের নির্দেশিকা

পড়তে প্রায় 25 মিনিট

প্রোগ্রামিংয়ের জগতে কোড লেখা যতটা গুরুত্বপূর্ণ, সেই কোডটি সঠিক ও নির্ভুলভাবে কাজ করানো তার চেয়েও বেশি চ্যালেঞ্জিং। একজন ভালো প্রোগ্রামারের প্রধান গুণ শুধু কোড লেখা নয়, বরং কোডের ভুল বা ত্রুটি (Error) খুঁজে বের করে তা সমাধান করা। আমরা যখন কোনো বড় সফটওয়্যার তৈরি করি, তখন শুরুতেই হুট করে কোড লিখতে বসে যাই না। প্রথমে একটি পরিকল্পনা বা ডিজাইন করতে হয়। এরপর কোড লেখার সময় যেসব অনাকাঙ্ক্ষিত ভুল হয়, সেগুলোকে চিহ্নিত ও সংশোধন করতে হয়। এই অধ্যায়ে আমরা প্রোগ্রাম ডিজাইনের মডেল এবং বিভিন্ন ধরণের এরর বা ভুল সম্পর্কে বিস্তারিত জানব। এইচএসসি আইসিটি পরীক্ষায় সৃজনশীল ও এমসিকিউ—উভয় অংশেই 'এরর শনাক্তকরণ' বা 'ডিবাগিং' থেকে নিয়মিত প্রশ্ন আসে।

জেনে রাখা ভালো (Did You Know?): কম্পিউটার প্রোগ্রামের ভুলকে 'Bug' বলা হয় কেন জানো? ১৯৪৭ সালের ৯ সেপ্টেম্বর হার্ভার্ড মার্ক-২ কম্পিউটারে কাজ করার সময় বিখ্যাত কম্পিউটার বিজ্ঞানী গ্রেস হপার (Grace Hopper) একটি যান্ত্রিক ত্রুটি খুঁজে পান। পরীক্ষা করে দেখা যায়, কম্পিউটারের রিলে (Relay)-এর ভেতরে একটি মথ বা পোকা ঢুকে আটকে আছে। সেই পোকাটিকে তিনি লগবইয়ে আঠা দিয়ে লাগিয়ে রাখেন এবং নিচে লিখে দেন "First actual case of bug being found." সেই থেকেই প্রোগ্রামিংয়ের ভুলকে 'Bug' এবং ভুল সারানোকে 'Debugging' বলা হয়। পোকাটি এখনো আমেরিকার 'স্মিথসোনিয়ান ন্যাশনাল মিউজিয়াম'-এ সংরক্ষিত আছে।

প্রোগ্রাম ডিজাইন মডেল: টপ-ডাউন বনাম বটম-আপ

একটি বড় বা জটিল প্রোগ্রাম তৈরি করার সময় সেটিকে সুশৃঙ্খলভাবে সাজানোর জন্য নির্দিষ্ট কিছু ডিজাইন পদ্ধতি অনুসরণ করা হয়। এর মধ্যে সবচেয়ে জনপ্রিয় দুটি পদ্ধতি হলো টপ-ডাউন ডিজাইন (Top-Down Design) এবং বটম-আপ ডিজাইন (Bottom-Up Design)।

Top-Down vs Bottom-Up Design Diagram

টপ-ডাউন ডিজাইন (Top-Down Design)

এই পদ্ধতিতে একটি বড় সমস্যা বা মূল প্রোগ্রামকে প্রথমে বিবেচনা করা হয়। এরপর সেটিকে ভেঙে ছোট ছোট সাব-প্রোগ্রাম বা মডিউলে ভাগ করা হয়। প্রয়োজন হলে এই ছোট মডিউলগুলোকে আরও ক্ষুদ্র অংশে ভাগ করা হয়। স্ট্রাকচার্ড প্রোগ্রামিং ভাষা, যেমন C ল্যাঙ্গুয়েজ-এ এই পদ্ধতিটি বেশি ব্যবহৃত হয়। এর মূল সুবিধা হলো, প্রোগ্রামার শুরুতেই সম্পূর্ণ সিস্টেমের একটি সামগ্রিক ধারণা পান।

সংজ্ঞা (Definition): টপ-ডাউন ডিজাইন হলো এমন একটি প্রোগ্রাম ডিজাইন পদ্ধতি যেখানে একটি জটিল বা বড় সমস্যাকে ধাপে ধাপে ভেঙে ছোট ছোট সাব-প্রোগ্রাম বা মডিউলে ভাগ করা হয় এবং পর্যায়ক্রমে সমাধান করা হয়।

বটম-আপ ডিজাইন (Bottom-Up Design)

এটি টপ-ডাউন পদ্ধতির ঠিক বিপরীত। এখানে প্রথমে ছোট ছোট মডিউল বা অংশগুলো ডিজাইন ও ডেভেলপ করা হয়। এরপর এই ছোট অংশগুলোকে জোড়া লাগিয়ে বড় বা মূল প্রোগ্রামটি তৈরি করা হয়। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP) ভাষা, যেমন C++, Java, Python-এ এই পদ্ধতিটি বেশ জনপ্রিয়। এর প্রধান সুবিধা হলো, তৈরি করা ছোট মডিউলগুলো পরবর্তীতে অন্য প্রোগ্রামে পুনরায় ব্যবহার (Code Reusability) করা যায়।

সংজ্ঞা (Definition): বটম-আপ ডিজাইন হলো এমন একটি পদ্ধতি যেখানে প্রথমে প্রোগ্রামের মৌলিক বা ক্ষুদ্রতম অংশগুলো তৈরি করা হয় এবং পরে সেগুলোকে একত্রিত করে মূল বা পূর্ণাঙ্গ প্রোগ্রাম গঠন করা হয়।

টপ-ডাউন ও বটম-আপ ডিজাইনের তুলনা

পরীক্ষায় প্রায়ই এই দুটি পদ্ধতির পার্থক্য বা তুলনা করতে বলা হয়। নিচের ছকটি ভালোভাবে লক্ষ্য করো:

বৈশিষ্ট্য টপ-ডাউন ডিজাইন (Top-Down) বটম-আপ ডিজাইন (Bottom-Up)
কাজের ধারা উপর থেকে নিচে (Top to Bottom)। বড় সমস্যা ভেঙে ছোট করা হয়। নিচ থেকে উপরে (Bottom to Top)। ছোট অংশ জুড়ে বড় করা হয়।
ফোকাস মূল সমস্যা বা প্রধান মডিউলের ওপর বেশি গুরুত্ব দেওয়া হয়। ক্ষুদ্রতম অংশ বা ডিটেইলসের ওপর বেশি গুরুত্ব দেওয়া হয়।
ব্যবহার স্ট্রাকচার্ড প্রোগ্রামিং (যেমন: C, Pascal)। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (যেমন: C++, Java)।
রিইউজেবিলিটি কোড পুনরায় ব্যবহার (Reuse) করা কঠিন। মডিউলগুলো পুনরায় ব্যবহার করা সহজ।
ত্রুটি শনাক্তকরণ ইন্টারফেস বা সংযোগের ত্রুটিগুলো আগেই ধরা পড়ে। ইউনিট টেস্টিং বা প্রতিটি অংশের আলাদা পরীক্ষা করা সহজ।

প্রোগ্রামের ভুল বা এরর (Programming Errors)

প্রোগ্রামিংয়ের ভাষায়, কোড লেখার সময় বা প্রোগ্রাম চালানোর সময় যে অনাকাঙ্ক্ষিত বাধা বা ভুল ফলাফল আসে, তাকেই এরর (Error) বা বাগ (Bug) বলে। একজন দক্ষ প্রোগ্রামার হতে হলে তোমাকে অবশ্যই ভুলের ধরন চিনতে হবে এবং তা সমাধান করতে জানতে হবে।

গুরুত্বপূর্ণ (Important):
সাধারণ ইংরেজিতে ভুলকে 'Mistake' বলা হলেও, প্রোগ্রামিংয়ের পরিভাষায় একে 'Error' বা 'Bug' বলা হয়। প্রোগ্রামিং এরর প্রধানত তিন প্রকার:
১. সিনট্যাক্স এরর (Syntax Error)
২. লজিক্যাল এরর (Logical Error)
৩. রানটাইম এরর (Runtime Error)

Classification of Programming Errors

১. সিনট্যাক্স এরর (Syntax Error)

প্রতিটি প্রোগ্রামিং ভাষার নিজস্ব কিছু ব্যাকরণ বা নিয়মকানুন (Grammar Rules) থাকে। কোড লেখার সময় এই নিয়মগুলো লঙ্ঘন করলে কম্পাইলার যে ত্রুটি প্রদর্শন করে, তাকে সিনট্যাক্স এরর বলে। এটিই সবচেয়ে সাধারণ ভুল এবং এটি সমাধান করাও সবচেয়ে সহজ, কারণ কম্পাইলার সরাসরি বলে দেয় ভুলটি কোথায় হয়েছে।

সংজ্ঞা (Definition): প্রোগ্রামিং ভাষার ব্যাকরণগত নিয়ম (যেমন বানান ভুল, সেমিকোলন না দেওয়া) অমান্য করার ফলে কম্পাইলার কর্তৃক প্রদর্শিত ত্রুটিকে সিনট্যাক্স এরর বলে।

সাধারণ কিছু সিনট্যাক্স এরর:
* সেমিকোলন (;) দিতে ভুলে যাওয়া।
* কী-ওয়ার্ড (Keyword) ভুল লেখা (যেমন: printf এর বদলে prntf লেখা)।
* ভেরিয়েবল ঘোষণা (Declare) না করে ব্যবহার করা।
* ব্র্যাকেট ( বা { শুরু করে শেষ না করা।

উদাহরণ (Wrong vs Correct Code):

ভুল কোড (Syntax Error):

#include <stdio.h>
int main() {
   int x = 10
   printf("Value: %d", x);
   return 0;
}

ত্রুটি: লাইন ৩-এ সেমিকোলন (;) নেই।

সঠিক কোড:

#include <stdio.h>
int main() {
   int x = 10;  // সেমিকোলন দেওয়া হয়েছে
   printf("Value: %d", x);
   return 0;
}
২. লজিক্যাল এরর (Logical Error): সবচেয়ে বিপদজনক ভুল

লজিক্যাল এরর বা যৌক্তিক ভুল হলো এমন এক ধরণের ত্রুটি যেখানে প্রোগ্রামের সিনট্যাক্স বা ব্যাকরণ সব ঠিক থাকে, কিন্তু প্রোগ্রামের লজিক বা যুক্তিতে ভুল থাকে। ফলে প্রোগ্রামটি রান করে, কোনো এরর মেসেজ দেয় না, কিন্তু ফলাফল ভুল আসে

এটি কেন সবচেয়ে বিপদজনক? কারণ কম্পাইলার এই ভুল ধরতে পারে না। প্রোগ্রামারকে নিজে কোড পড়ে বা ডিবাগ করে এই ভুল খুঁজে বের করতে হয়।

সংজ্ঞা (Definition): প্রোগ্রামে ব্যবহৃত যুক্তি, সূত্র (Formula) বা অ্যালগরিদমে ভুল থাকার কারণে যদি প্রোগ্রামটি ভুল ফলাফল প্রদান করে, তবে তাকে লজিক্যাল এরর বলে।

সাধারণ কিছু লজিক্যাল এরর:
* ভুল সূত্র ব্যবহার করা (যেমন: গড় বের করতে গিয়ে যোগফলকে সংখ্যা দিয়ে ভাগ না করা)।
* লুপের শর্ত ভুল দেওয়া (ফলে লুপ সঠিক সময়ে থামে না)।
* > এর জায়গায় < চিহ্ন ব্যবহার করা।

পরীক্ষার টিপস (Exam Tip):
অনুধাবনমূলক প্রশ্নে প্রায়ই আসে—"সিনট্যাক্স এরর ও লজিক্যাল এররের মধ্যে কোনটি বেশি জটিল এবং কেন?"
উত্তর হবে: লজিক্যাল এরর বেশি জটিল। কারণ সিনট্যাক্স এরর কম্পাইলার দেখিয়ে দেয় এবং প্রোগ্রাম রানই করে না। কিন্তু লজিক্যাল এরর কম্পাইলার ধরতে পারে না, প্রোগ্রাম রান করে কিন্তু ভুল উত্তর দেয়। এটি খুঁজে বের করা প্রোগ্রামারের জন্য সময়সাপেক্ষ ও কষ্টসাধ্য।

উদাহরণ (Logical Error):
উদ্দেশ্য: দুটি সংখ্যার গড় (Average) নির্ণয় করা।

ভুল কোড:

float avg = a + b / 2;

ব্যাখ্যা: এখানে লজিক্যাল ভুল আছে। গাণিতিক নিয়ম অনুযায়ী কম্পিউটার আগে ভাগের কাজ করবে (b/2), তারপর a-এর সাথে যোগ করবে। ফলে গড় ভুল আসবে।

সঠিক কোড:

float avg = (a + b) / 2;

ব্যাখ্যা: ব্র্যাকেট দেওয়ায় প্রথমে যোগফল বের হবে, তারপর ভাগ হবে। এটি সঠিক লজিক।

৩. রানটাইম এরর (Runtime Error)

প্রোগ্রাম কম্পাইল হওয়ার পর, অর্থাৎ রান করার সময় (Execution Time) যেসব অনাকাঙ্ক্ষিত কারণে প্রোগ্রামটি হঠাৎ বন্ধ হয়ে যায় বা 'ক্রাশ' (Crash) করে, সেগুলোকে রানটাইম এরর বলে। এই ভুলগুলো সাধারণত ইনপুট ডেটার সমস্যার কারণে বা হার্ডওয়্যার সীমাবদ্ধতার কারণে হয়।

সংজ্ঞা (Definition): প্রোগ্রাম চলাকালীন বা এক্সিকিউশন টাইমে যে ত্রুটির কারণে প্রোগ্রাম অস্বাভাবিকভাবে বন্ধ হয়ে যায়, তাকে রানটাইম এরর বলে।

সাধারণ কিছু রানটাইম এরর:
* কোনো সংখ্যাকে শূন্য দিয়ে ভাগ করা (Divide by Zero)। গণিতে এটি অসংজ্ঞায়িত, তাই কম্পিউটার এটি প্রসেস করতে পারে না।
* ঋণাত্মক সংখ্যার বর্গমূল বা লগারিদম বের করার চেষ্টা করা (বাস্তব সংখ্যার ক্ষেত্রে)।
* কম্পিউটারের মেমোরি পূর্ণ হয়ে যাওয়া (Insufficient Memory)।
* অসীম লুপে (Infinite Loop) পড়ে যাওয়া, যার ফলে প্রোগ্রাম হ্যাং করে।


টেস্টিং ও ডিবাগিং (Testing & Debugging)

অনেক শিক্ষার্থী 'টেস্টিং' এবং 'ডিবাগিং' বিষয় দুটিকে এক মনে করে, কিন্তু এদের মধ্যে স্পষ্ট পার্থক্য আছে। সহজ কথায়, টেস্টিং হলো ভুল খোঁজা, আর ডিবাগিং হলো সেই ভুল সারানো।

টেস্টিং ও ডিবাগিং-এর পার্থক্য
বিষয় টেস্টিং (Testing) ডিবাগিং (Debugging)
সংজ্ঞা প্রোগ্রামটি সঠিক ফলাফল দিচ্ছে কি না তা যাচাই করার প্রক্রিয়া। প্রোগ্রামের ভুল বা বাগ শনাক্ত করে তা সমাধান করার প্রক্রিয়া।
উদ্দেশ্য ভুল (Bug) খুঁজে বের করা। ভুল (Bug) সংশোধন করা।
কারা করে? সাধারণত টেস্টার (Tester) বা ব্যবহারকারীরা করেন। সাধারণত প্রোগ্রামার বা ডেভেলপাররা করেন।
ধরণ এটি একটি যাচাইকরণ প্রক্রিয়া (Verification)। এটি একটি সংশোধনমূলক প্রক্রিয়া (Correction)।
ডিবাগিং-এর ধাপসমূহ

ডিবাগিং একটি সুশৃঙ্খল প্রক্রিয়া। যখন কোনো এরর ধরা পড়ে, তখন এলোমেলোভাবে কোড পরিবর্তন না করে নিচের ধাপগুলো অনুসরণ করা উচিত:

ডিবাগিং প্রক্রিয়া (Steps of Debugging):
১. ভুল শনাক্ত করা (Identify): প্রথমে বুঝতে হবে যে প্রোগ্রামে কোনো ভুল আছে (যেমন: আউটপুট মিলছে না)।
২. ভুলের অবস্থান নির্ণয় (Isolate): কোডের ঠিক কোন লাইনে বা কোন মডিউলে ভুলটি হচ্ছে, তা খুঁজে বের করা।
৩. ভুল বিশ্লেষণ (Analyze): কেন ভুলটি হচ্ছে তা বোঝা (লজিক্যাল নাকি সিনট্যাক্স)।
৪. ভুল সংশোধন (Fix): সঠিক কোড লিখে ভুলটি সমাধান করা।
৫. পুনরায় যাচাই (Retest): সংশোধনের পর প্রোগ্রামটি আবার চালিয়ে দেখা যে সমস্যাটি দূর হয়েছে কি না এবং নতুন কোনো সমস্যা তৈরি হয়েছে কি না।


সংক্ষিপ্ত সারাংশ (Quick Revision):
- ডিজাইন মডেল: টপ-ডাউন (বড় থেকে ছোট, C ভাষায় ব্যবহৃত) এবং বটম-আপ (ছোট থেকে বড়, OOP-তে ব্যবহৃত)।
- সিনট্যাক্স এরর: ব্যাকরণগত ভুল। কম্পাইলার ধরে দেয়। সমাধান করা সবচেয়ে সহজ। (উদাহরণ: সেমিকোলন মিসিং)।
- লজিক্যাল এরর: যুক্তির ভুল। কম্পাইলার ধরে না, ভুল উত্তর দেয়। সমাধান করা কঠিন। (উদাহরণ: ভুল সূত্র)।
- রানটাইম এরর: প্রোগ্রাম চলার সময় ক্রাশ করে। (উদাহরণ: ০ দিয়ে ভাগ)।
- পার্থক্য: টেস্টিং মানে ভুল খোঁজা, ডিবাগিং মানে ভুল সারানো।

পরিভাষা (Glossary)

শব্দ (Term) সংজ্ঞা (Definition)
Bug (বাগ) কম্পিউটার প্রোগ্রামের ত্রুটি বা ভুল।
Debugging (ডিবাগিং) প্রোগ্রামের ভুল খুঁজে বের করে সমাধান করার প্রক্রিয়া।
Compiler (কম্পাইলার) অনুবাদক প্রোগ্রাম যা হাই-লেভেল ল্যাঙ্গুয়েজের কোডকে মেশিন ল্যাঙ্গুয়েজে রূপান্তর করে এবং সিনট্যাক্স এরর চেক করে।
Infinite Loop (অসীম লুপ) লুপের শর্ত ভুল হওয়ার কারণে লুপটি যখন অনন্তকাল চলতে থাকে এবং থামে না।
Module (মডিউল) একটি বড় প্রোগ্রামের ক্ষুদ্র ও স্বাধীন অংশ বা সাব-প্রোগ্রাম।

অনুশীলনের প্রশ্ন

সৃজনশীল প্রশ্ন

সৃজনশীল প্রশ্ন ১

অর্ণব আইসিটি ল্যাবে তিনটি সংখ্যার গড় নির্ণয়ের জন্য সি ভাষায় একটি প্রোগ্রাম লিখল। কম্পাইল করার সময় মনিটরে "Statement missing ;" বার্তাটি দেখাল। শিক্ষকের সহায়তায় সেমিকোলন যুক্ত করার পর প্রোগ্রামটি রান হলো। কিন্তু ইনপুট হিসেবে ১০, ২০ ও ৩০ দেওয়ায় ফলাফল আসল ৬০, যেখানে সঠিক উত্তর ২০ হওয়ার কথা ছিল।

ক) ডিবাগিং কী?
খ) "সিনট্যাক্স ভুল সংশোধন করা লজিক্যাল ভুল সংশোধনের চেয়ে সহজ" — ব্যাখ্যা কর।
গ) উদ্দীপকে অর্ণব শুরুতে কোন ধরনের ভুলের সম্মুখীন হয়েছিল? ব্যাখ্যা কর।
ঘ) অর্ণবের প্রোগ্রামটি রান হওয়ার পরেও সঠিক ফলাফল না পাওয়ার কারণ কী? এটি সমাধানের উপায় বিশ্লেষণ কর।

উত্তর

(ক) প্রোগ্রামের ভুল বা বাগ (Bug) খুঁজে বের করে তা সংশোধন করার প্রক্রিয়াকে ডিবাগিং (Debugging) বলা হয়।

(খ) সিনট্যাক্স ভুল (Syntax Error) হলো প্রোগ্রামের ব্যাকরণগত ভুল, যেমন বানান ভুল বা সেমিকোলন না দেওয়া। এই ভুলগুলো কম্পাইলার বা ইন্টারপ্রিটার সহজেই শনাক্ত করতে পারে এবং ভুলের অবস্থান ও কারণ জানিয়ে দেয়, তাই এটি সংশোধন করা সহজ। অন্যদিকে, লজিক্যাল ভুল (Logical Error) হলো যুক্তির ভুল, যেমন যোগের জায়গায় গুণ চিহ্ন দেওয়া। এক্ষেত্রে প্রোগ্রাম রান করে কিন্তু ভুল উত্তর দেয় এবং কম্পিউটার কোনো এরর মেসেজ দেয় না, তাই এই ভুল খুঁজে বের করা এবং সংশোধন করা তুলনামূলক কঠিন।

(গ) উদ্দীপকে অর্ণব শুরুতে সিনট্যাক্স এরর (Syntax Error) বা ব্যাকরণগত ভুলের সম্মুখীন হয়েছিল।

প্রোগ্রামিং ভাষার নিজস্ব কিছু নিয়মকানুন বা ব্যাকরণ থাকে, যা মেনে কোড লিখতে হয়। এই নিয়মের ব্যত্যয় ঘটলে যে ভুলের সৃষ্টি হয়, তাকে সিনট্যাক্স এরর বলে। উদ্দীপকে অর্ণব কোড লেখার সময় লাইনের শেষে সেমিকোলন (;) দিতে ভুলে গিয়েছিল। সি ভাষায় প্রতিটি স্টেটমেন্টের শেষে সেমিকোলন দেওয়া বাধ্যতামূলক। যেহেতু কম্পাইলার এই নিয়মভঙ্গটি ধরতে পেরেছে এবং "Statement missing ;" মেসেজ দিয়েছে, তাই এটি নিশ্চিতভাবেই একটি সিনট্যাক্স এরর।

(ঘ) অর্ণবের প্রোগ্রামটি রান হওয়ার পরেও সঠিক ফলাফল না পাওয়ার কারণ হলো লজিক্যাল এরর (Logical Error) বা যৌক্তিক ভুল।

উদ্দীপকে দেখা যায়, অর্ণব ১০, ২০ ও ৩০ ইনপুট দেওয়ায় গড় মান ২০ এর পরিবর্তে যোগফল ৬০ পেয়েছে। অর্থাৎ, সে গড়ের সূত্র (a+b+c)/3 ব্যবহার না করে সম্ভবত শুধু a+b+c ব্যবহার করেছে অথবা ভাগের কাজটি সঠিকভাবে সম্পন্ন করেনি। প্রোগ্রামে লজিক বা ফর্মুলা ভুল থাকলে কম্পিউটার কোনো এরর মেসেজ দেয় না, কিন্তু ফলাফল ভুল আসে।

সমাধানের উপায় বিশ্লেষণ:
১. সোর্স কোড নিরীক্ষণ: অর্ণবকে তার লেখা কোডের ফর্মুলা অংশটি ভালোভাবে পরীক্ষা করতে হবে। দেখতে হবে সে avg = (num1 + num2 + num3) / 3; এর পরিবর্তে sum = num1 + num2 + num3; বা অন্য কোনো ভুল সমীকরণ লিখেছে কিনা।
২. ড্রাই রান (Dry Run): খাতা-কলমে ইনপুট মানগুলো বসিয়ে প্রোগ্রামের প্রতিটি ধাপ ম্যানুয়ালি পরীক্ষা করে দেখতে হবে কোথায় লজিকে ভুল হয়েছে।
৩. টেস্ট ডেটা ব্যবহার: বিভিন্ন ধরনের টেস্ট ডেটা দিয়ে প্রোগ্রামটি চালিয়ে দেখতে হবে এবং প্রত্যাশিত ফলাফলের সাথে প্রাপ্ত ফলাফল মিলিয়ে ভুলের উৎস নিশ্চিত করতে হবে।

সঠিক ফর্মুলা বা লজিক প্রয়োগ করলেই অর্ণব এই সমস্যাটি সমাধান করে সঠিক গড় মান নির্ণয় করতে পারবে।


সৃজনশীল প্রশ্ন ২

'সফটেক' কোম্পানি একটি বড় হসপিটাল ম্যানেজমেন্ট সফটওয়্যার তৈরির কাজ পেল। প্রজেক্ট ম্যানেজার প্রথমে পুরো সিস্টেমটিকে রেজিস্ট্রেশন, বিলিং, ও রিপোর্ট—এই তিনটি প্রধান অংশে ভাগ করলেন। এরপর প্রতিটি অংশের কাজগুলো বিস্তারিতভাবে সাজিয়ে আলাদা আলাদা প্রোগ্রামারদের দায়িত্ব দিলেন। শেষে সব মডিউল একত্র করে মূল সফটওয়্যারটি তৈরি করা হলো।

ক) স্ট্রাকচার্ড প্রোগ্রামিং কী?
খ) টপ-ডাউন ডিজাইন পদ্ধতিটি ব্যাখ্যা কর।
গ) উদ্দীপকে 'সফটেক' কোম্পানি প্রোগ্রাম ডিজাইনের কোন মডেল অনুসরণ করেছে? ব্যাখ্যা কর।
ঘ) উদ্দীপকে উল্লিখিত পদ্ধতিটি বড় প্রজেক্ট বাস্তবায়নে কতটা সুবিধাজনক? বিশ্লেষণ কর।

উত্তর

(ক) যে প্রোগ্রামিং পদ্ধতিতে একটি বড় সমস্যাকে ছোট ছোট অংশে বা মডিউলে ভাগ করে সমাধান করা হয় এবং লজিক্যাল ফ্লো বজায় রাখা হয়, তাকে স্ট্রাকচার্ড প্রোগ্রামিং বলা হয়।

(খ) টপ-ডাউন ডিজাইন (Top-down Design) হলো প্রোগ্রাম ডিজাইনের এমন একটি পদ্ধতি যেখানে একটি বড় সমস্যাকে প্রথমে প্রধান কয়েকটি মডিউলে ভাগ করা হয়। এরপর প্রতিটি মডিউলকে ধাপে ধাপে আরও ছোট সাব-মডিউলে ভাগ করা হয় যতক্ষণ না প্রতিটি অংশ সহজে সমাধানযোগ্য হয়। এই পদ্ধতিতে উপর থেকে নিচের দিকে বা সাধারণ ধারণা থেকে বিস্তারিত অংশের দিকে অগ্রসর হওয়া হয়।

(গ) উদ্দীপকে 'সফটেক' কোম্পানি প্রোগ্রাম ডিজাইনের টপ-ডাউন ডিজাইন (Top-down Design) মডেল অনুসরণ করেছে।

টপ-ডাউন ডিজাইনে মূল সমস্যাটিকে ভেঙে ছোট ছোট মডিউলে বিভক্ত করা হয়। উদ্দীপকে প্রজেক্ট ম্যানেজার পুরো হসপিটাল ম্যানেজমেন্ট সিস্টেমটিকে প্রথমে রেজিস্ট্রেশন, বিলিং ও রিপোর্ট—এই তিনটি প্রধান মডিউলে ভাগ করেছেন। এরপর তিনি প্রতিটি মডিউলের বিস্তারিত কাজগুলো সাজিয়ে প্রোগ্রামারদের দায়িত্ব দিয়েছেন। সবশেষে ছোট অংশগুলো জোড়া লাগিয়ে মূল সফটওয়্যার তৈরি করেছেন। এই "উপর থেকে নিচে" বা "বড় থেকে ছোট" বিভাজন প্রক্রিয়াই হলো টপ-ডাউন ডিজাইন পদ্ধতির মূল বৈশিষ্ট্য।

(ঘ) উদ্দীপকে উল্লিখিত টপ-ডাউন ডিজাইন পদ্ধতিটি বড় প্রজেক্ট বাস্তবায়নে অত্যন্ত সুবিধাজনক ও কার্যকর। নিচে এর বিশ্লেষণ দেওয়া হলো:

  1. জটিলতা হ্রাস: বড় ও জটিল প্রোগ্রামকে ছোট ছোট অংশে ভাগ করার ফলে প্রতিটি অংশের জটিলতা কমে যায় এবং প্রোগ্রামারদের জন্য কোড লেখা ও নিয়ন্ত্রণ করা সহজ হয়।
  2. দলগত কাজ: মডিউলগুলো আলাদা হওয়ায় একাধিক প্রোগ্রামার একই সময়ে বিভিন্ন অংশের কাজ করতে পারেন। উদ্দীপকেও দেখা গেছে ম্যানেজার বিভিন্ন প্রোগ্রামারকে আলাদা দায়িত্ব দিয়েছেন, যা কাজের গতি বাড়ায়।
  3. ডিবাগিং ও টেস্টিং সহজ: পুরো প্রোগ্রাম একসাথে পরীক্ষা না করে প্রতিটি মডিউল আলাদাভাবে পরীক্ষা করা যায়। ফলে ভুল খুঁজে বের করা এবং সংশোধন করা অনেক দ্রুত হয়।
  4. কোড রিইউজ বা পুনঃব্যবহার: একটি মডিউলের কোড প্রয়োজনে অন্য প্রজেক্টে বা প্রোগ্রামের অন্য অংশে ব্যবহার করা যায়।
  5. সহজ ব্যবস্থাপনা: প্রজেক্ট ম্যানেজার সহজেই কাজের অগ্রগতি তদারকি করতে পারেন কারণ প্রতিটি মডিউলের কাজ নির্দিষ্ট থাকে।

পরিশেষে বলা যায়, হসপিটাল ম্যানেজমেন্টের মতো বড় ও জটিল সফটওয়্যার তৈরির ক্ষেত্রে 'সফটেক' কোম্পানির টপ-ডাউন পদ্ধতি গ্রহণ একটি সঠিক ও সময়োপযোগী সিদ্ধান্ত, যা প্রজেক্টের মান ও দক্ষতা উভয়ই বৃদ্ধি করে।

এমসিকিউ

১। প্রোগ্রামের ভুল ত্রুটি খুঁজে বের করে তা সমাধান করার পদ্ধতিকে কী বলে?

ক) ডিকোডিং
খ) এনকোডিং
গ) ডিবাগিং
ঘ) টেস্টিং

সঠিক উত্তর: গ) ডিবাগিং

ব্যাখ্যা: প্রোগ্রামে বিদ্যমান ভুল বা বাগ (Bug) খুঁজে বের করে তা সংশোধন করার প্রক্রিয়াকে ডিবাগিং বলা হয়। টেস্টিং হলো ভুল আছে কিনা তা যাচাই করা, আর ডিবাগিং হলো ভুলটি সংশোধন করা।


২। প্রোগ্রাম তৈরির সময় 'Bug' শব্দটি সর্বপ্রথম কে ব্যবহার করেন?

ক) চার্লস ব্যাবেজ
খ) লেডি এডা লাভলেস
গ) গ্রেস হপার
ঘ) বিল গেটস

সঠিক উত্তর: গ) গ্রেস হপার

ব্যাখ্যা: ১৯৪৫ সালে মার্ক-১ কম্পিউটারে কাজ করার সময় গ্রেস হপার একটি মথ (পোকা) খুঁজে পান যা কম্পিউটারকে অচল করে দিয়েছিল। তখন থেকেই প্রোগ্রামের ভুলকে 'বাগ' বলা শুরু হয়।


৩। কোন ধরনের ভুল কম্পিউটার নিজে থেকেই শনাক্ত করতে পারে?

ক) লজিক্যাল এরর
খ) সিনট্যাক্স এরর
গ) রানটাইম এরর
ঘ) ডেটা এরর

সঠিক উত্তর: খ) সিনট্যাক্স এরর

ব্যাখ্যা: সিনট্যাক্স এরর হলো প্রোগ্রামের ব্যাকরণগত ভুল। কম্পাইলার বা ইন্টারপ্রিটার কোড অনুবাদ করার সময় এই ভুলগুলো ধরে ফেলে এবং এরর মেসেজ দেয়।


৪। সি ভাষায় কোনো লাইনের শেষে সেমিকোলন (;) না দিলে কোন ধরনের ভুল হয়?

ক) Syntax Error
খ) Logical Error
গ) Runtime Error
ঘ) Execution Error

সঠিক উত্তর: ক) Syntax Error

ব্যাখ্যা: সি ভাষায় স্টেটমেন্টের শেষে সেমিকোলন দেওয়া একটি ব্যাকরণগত নিয়ম। এই নিয়ম না মানলে তা সিনট্যাক্স এরর হিসেবে গণ্য হয়।


৫। কোনটি লজিক্যাল এররের (Logical Error) উদাহরণ?

ক) বানান ভুল করা
খ) চলকের নাম ভুল করা
গ) গুণ করতে গিয়ে যোগ করা
ঘ) শূন্য দিয়ে ভাগ করা

সঠিক উত্তর: গ) গুণ করতে গিয়ে যোগ করা

ব্যাখ্যা: লজিক্যাল এরর হলো যুক্তির ভুল। যেমন যোগের বদলে গুণ বা ভুল সূত্র ব্যবহার করা। এক্ষেত্রে প্রোগ্রাম রান করে কিন্তু ভুল ফলাফল দেয়।


৬। প্রোগ্রামে শূন্য (0) দিয়ে কোনো সংখ্যাকে ভাগ করলে কোন ধরনের ভুল হয়?

ক) সিনট্যাক্স এরর
খ) রানটাইম এরর
গ) লজিক্যাল এরর
ঘ) লিংকিং এরর

সঠিক উত্তর: খ) রানটাইম এরর

ব্যাখ্যা: প্রোগ্রাম চলার সময় বা রান করার সময় যেসব ভুল ধরা পড়ে, তাকে রানটাইম এরর বলে। শূন্য দিয়ে ভাগ করা গাণিতিকভাবে অসংজ্ঞায়িত, তাই এটি রানটাইম এরর তৈরি করে এবং প্রোগ্রাম বন্ধ হয়ে যেতে পারে।


৭। ভুল ফলাফল প্রদর্শন প্রোগ্রামের কোন ধরনের ত্রুটি?

ক) সিনট্যাক্স
খ) লজিক্যাল
গ) রানটাইম
ঘ) হার্ডওয়্যার

সঠিক উত্তর: খ) লজিক্যাল

ব্যাখ্যা: লজিক্যাল এরর থাকলে প্রোগ্রাম কোনো এরর মেসেজ দেয় না, কিন্তু ব্যবহারকারী যে ফলাফল আশা করে তা না এসে ভুল ফলাফল আসে।


৮। প্রোগ্রাম ডিজাইনের কোন ধাপে অ্যালগরিদম ও ফ্লোচার্ট তৈরি করা হয়?

ক) সমস্যা বিশ্লেষণ
খ) প্রোগ্রাম ডিজাইন
গ) প্রোগ্রাম কোডিং
ঘ) প্রোগ্রাম রক্ষণাবেক্ষণ

সঠিক উত্তর: খ) প্রোগ্রাম ডিজাইন

ব্যাখ্যা: সমস্যা বিশ্লেষণের পর এবং কোডিং শুরু করার আগে প্রোগ্রাম ডিজাইন ধাপে সমাধানের রূপরেখা হিসেবে অ্যালগরিদম ও ফ্লোচার্ট তৈরি করা হয়।


৯। বড় প্রোগ্রামকে ছোট ছোট অংশে ভাগ করে সমাধান করার পদ্ধতিকে কী বলে?

ক) বটম-আপ ডিজাইন
খ) টপ-ডাউন ডিজাইন
গ) অবজেক্ট ওরিয়েন্টেড
ঘ) নন-স্ট্রাকচার্ড

সঠিক উত্তর: খ) টপ-ডাউন ডিজাইন

ব্যাখ্যা: টপ-ডাউন ডিজাইনে মূল সমস্যাটিকে ক্রমান্বয়ে ভেঙে ছোট ছোট মডিউল বা সাব-প্রোগ্রামে ভাগ করা হয়।


১০। সুডোকোড (Pseudo code) বলতে কী বোঝায়?

ক) ছদ্ম কোড
খ) মেশিন কোড
গ) সোর্স কোড
ঘ) অবজেক্ট কোড

সঠিক উত্তর: ক) ছদ্ম কোড

ব্যাখ্যা: সুডোকোড হলো প্রোগ্রামের খসড়া রূপ যা মানুষের বোধগম্য ভাষায় লেখা হয়। এটি আসল কোড নয়, তাই একে 'ছদ্ম কোড' বলা হয়।


১১। নিচের কোনটি টেস্টিং (Testing) এর প্রকারভেদ?

ক) ব্ল্যাক বক্স ও হোয়াইট বক্স
খ) টপ ও ডাউন
গ) সোর্স ও অবজেক্ট
ঘ) ইনপুট ও আউটপুট

সঠিক উত্তর: ক) ব্ল্যাক বক্স ও হোয়াইট বক্স

ব্যাখ্যা: সফটওয়্যার টেস্টিং মূলত দুই ধরনের হয়: ব্ল্যাক বক্স টেস্টিং (অভ্যন্তরীণ কোড না দেখে টেস্ট করা) এবং হোয়াইট বক্স টেস্টিং (অভ্যন্তরীণ গঠন বা কোড দেখে টেস্ট করা)।


১২। প্রোগ্রামে ব্যবহৃত অসংরক্ষিত শব্দ বা ভুল কিউওয়ার্ড (Keyword) ব্যবহার করলে কোন ভুল হয়?

ক) লজিক্যাল
খ) সিনট্যাক্স
গ) রানটাইম
ঘ) ডেটা

সঠিক উত্তর: খ) সিনট্যাক্স

ব্যাখ্যা: কিউওয়ার্ডের বানান ভুল করা (যেমন printf এর বদলে print লেখা) প্রোগ্রামের ভাষার নিয়মবহির্ভূত, তাই এটি সিনট্যাক্স এরর।


১৩। প্রোগ্রাম বাস্তবায়নের শেষ ধাপ কোনটি?

ক) টেস্টিং
খ) ডিবাগিং
গ) ডকুমেন্টেশন
ঘ) রক্ষণাবেক্ষণ

সঠিক উত্তর: ঘ) রক্ষণাবেক্ষণ

ব্যাখ্যা: প্রোগ্রাম তৈরি ও চালু করার পর এরর সংশোধন, নতুন ফিচার যুক্ত করা বা আপডেট রাখার কাজকে রক্ষণাবেক্ষণ বলে, যা প্রোগ্রাম উন্নয়নের সর্বশেষ ও চলমান ধাপ।


১৪। প্রোগ্রাম তৈরির সময় 'Dry Run' কেন করা হয়?

ক) কোড কম্পাইল করার জন্য
খ) লজিক যাচাই করার জন্য
গ) কোড রান করার জন্য
ঘ) সিনট্যাক্স ভুল ধরার জন্য

সঠিক উত্তর: খ) লজিক যাচাই করার জন্য

ব্যাখ্যা: ড্রাই রান হলো কম্পিউটার ব্যবহার না করে কাগজে-কলমে প্রোগ্রামের ধাপগুলো পরীক্ষা করা, যা মূলত লজিক বা যুক্তির নির্ভুলতা যাচাই করতে ব্যবহৃত হয়।


১৫। বিটা টেস্টিং (Beta Testing) কাদের দিয়ে করানো হয়?

ক) প্রতিষ্ঠানের নিজস্ব প্রোগ্রামার
খ) নির্বাচিত কিছু ব্যবহারকারী
গ) সিস্টেম এনালিস্ট
ঘ) প্রজেক্ট ম্যানেজার

সঠিক উত্তর: খ) নির্বাচিত কিছু ব্যবহারকারী

ব্যাখ্যা: সফটওয়্যার বাজারে ছাড়ার আগে প্রকৃত ব্যবহারকারীদের (Real Users) একটি ছোট গ্রুপের মাধ্যমে যে টেস্টিং করানো হয়, তাকে বিটা টেস্টিং বলে।


১৬। একটি আদর্শ প্রোগ্রামের গুণাবলি হলো—
i. সহজে পরিবর্তনযোগ্য
ii. ভুল সংশোধনযোগ্য
iii. দ্রুত নির্বাহযোগ্য

নিচের কোনটি সঠিক?
ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ঘ) i, ii ও iii

ব্যাখ্যা: একটি ভালো প্রোগ্রাম অবশ্যই রক্ষণাবেক্ষণ বা পরিবর্তন সহজ হতে হবে, ডিবাগ করা সহজ হতে হবে এবং রান টাইম বা নির্বাহের সময় কম হতে হবে।


১৭। প্রোগ্রাম ডিজাইনের ক্ষেত্রে ফ্লোচার্ট ব্যবহারের সুবিধা—
i. প্রোগ্রামের লজিক বোঝা সহজ হয়
ii. প্রোগ্রাম ও রক্ষণাবেক্ষণে সহায়তা করে
iii. কোডিং করতে সময় বেশি লাগে

নিচের কোনটি সঠিক?
ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ক) i ও ii

ব্যাখ্যা: ফ্লোচার্ট কোডিং সহজ করে, সময় বাড়ায় না। বরং এটি লজিক বুঝতে এবং পরবর্তীতে প্রোগ্রাম মডিফাই করতে সাহায্য করে।


১৮। রানটাইম এরর ঘটতে পারে যদি—
i. অসীম লুপ (Infinite loop) তৈরি হয়
ii. মেমোরি অপর্যাপ্ত হয়
iii. ঋণাত্মক সংখ্যার বর্গমূল নির্ণয় করা হয়

নিচের কোনটি সঠিক?
ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ঘ) i, ii ও iii

ব্যাখ্যা: এই তিনটি ক্ষেত্রই প্রোগ্রাম চলার সময় বা রান করার সময় সমস্যা তৈরি করে এবং প্রোগ্রাম অস্বাভাবিকভাবে বন্ধ হয়ে যেতে পারে।


নিচের উদ্দীপকটি পড় এবং ১৯ ও ২০ নং প্রশ্নের উত্তর দাও:
মি. এক্স একটি সি প্রোগ্রাম লিখলেন যেখানে int a=10, b=0, c; এবং c=a/b; স্টেটমেন্টটি ব্যবহার করলেন।

১৯। উদ্দীপকের প্রোগ্রামটি রান করলে কোন ধরনের এরর দেখাবে?

ক) Syntax Error
খ) Logical Error
গ) Runtime Error
ঘ) Linking Error

সঠিক উত্তর: গ) Runtime Error

ব্যাখ্যা: b=0 হওয়ায় c=a/b স্টেটমেন্টটি ১০ কে ০ দ্বারা ভাগ করার চেষ্টা করবে (Divide by Zero), যা গণিতে অসম্ভব। এটি প্রোগ্রাম রান করার সময় ধরা পড়ে, তাই এটি রানটাইম এরর।


২০। উক্ত সমস্যাটি সমাধানের উপায় কী?

ক) b এর মান ০ এর চেয়ে বড় নেওয়া
খ) সেমিকোলন তুলে দেওয়া
গ) a এর মান ০ করা
ঘ) ডেটা টাইপ পরিবর্তন করা

সঠিক উত্তর: ক) b এর মান ০ এর চেয়ে বড় নেওয়া

ব্যাখ্যা: ভাজক (divisor) বা b এর মান শূন্য বাদে অন্য কোনো সংখ্যা হলে ভাগ করা সম্ভব হবে এবং রানটাইম এররটি দূর হবে।


নিচের উদ্দীপকটি পড় এবং ২১ ও ২২ নং প্রশ্নের উত্তর দাও:
রিশাত তার আইসিটি প্রজেক্টের জন্য প্রথমে ইনপুট, প্রসেস এবং আউটপুট—এই তিনটি অংশে সমস্যাটিকে ভাগ করে নিল। এরপর সে ইনপুট অংশের জন্য কোড লেখা শুরু করল।

২১। রিশাত প্রোগ্রাম ডিজাইনের কোন পদ্ধতিটি ব্যবহার করছে?

ক) মডিউলার প্রোগ্রামিং
খ) অবজেক্ট ওরিয়েন্টেড
গ) ইভেন্ট ড্রাইভেন
ঘ) ভিজ্যুয়াল প্রোগ্রামিং

সঠিক উত্তর: ক) মডিউলার প্রোগ্রামিং

ব্যাখ্যা: মডিউলার প্রোগ্রামিং বা টপ-ডাউন ডিজাইনে পুরো প্রোগ্রামকে ছোট ছোট স্বাধীন অংশ বা মডিউলে ভাগ করা হয়। রিশাতও তার প্রজেক্টকে তিনটি মডিউলে ভাগ করেছে।


২২। রিশাতের গৃহীত পদ্ধতিতে—
i. এক মডিউলের ভুল অন্য মডিউলে প্রভাব ফেলে না
ii. একাধিক প্রোগ্রামার কাজ করতে পারে
iii. প্রোগ্রামটি জটিল হয়ে যায়

নিচের কোনটি সঠিক?
ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ক) i ও ii

ব্যাখ্যা: মডিউলার পদ্ধতিতে কাজ ভাগ করা থাকে বলে দলগত কাজ সহজ হয় এবং এক অংশের ভুল অন্য অংশকে সহজে প্রভাবিত করে না। এতে প্রোগ্রাম জটিল না হয়ে বরং সহজবোধ্য হয়।


২৩। হোয়াইট বক্স (White Box) টেস্টিং-এ মূলত কী পরীক্ষা করা হয়?

ক) শুধু আউটপুট
খ) ইন্টারফেস ডিজাইন
গ) ইন্টারনাল কোড স্ট্রাকচার
ঘ) ব্যবহারকারীর অভিজ্ঞতা

সঠিক উত্তর: গ) ইন্টারনাল কোড স্ট্রাকচার

ব্যাখ্যা: হোয়াইট বক্স টেস্টিং-এ টেস্টার প্রোগ্রামের ভেতরের গঠন, লজিক, লুপ এবং কন্ডিশনগুলো বিস্তারিতভাবে পরীক্ষা করেন।


২৪। অ্যালগরিদম ও ফ্লোচার্টের মূল পার্থক্য কোথায়?

ক) ভাষায়
খ) উপস্থাপনায়
গ) ব্যবহারে
ঘ) ফলাফলে

সঠিক উত্তর: খ) উপস্থাপনায়

ব্যাখ্যা: অ্যালগরিদম হলো বর্ণনামূলক ধাপ (text-based), আর ফ্লোচার্ট হলো সেই ধাপগুলোর চিত্রভিত্তিক রূপ (graphical representation)। তাই মূল পার্থক্য উপস্থাপনা শৈলীতে।


২৫। নিচের কোডটিতে কোন ধরনের ভুল আছে?
prntf("Hello World");

ক) লজিক্যাল এরর
খ) রানটাইম এরর
গ) সিনট্যাক্স এরর
ঘ) লিংকিং এরর

সঠিক উত্তর: গ) সিনট্যাক্স এরর

ব্যাখ্যা: সি ভাষায় সঠিক ফাংশনটি হলো printf। এখানে বানান ভুল করে prntf লেখা হয়েছে, যা কম্পাইলার চিনতে পারবে না। তাই এটি সিনট্যাক্স এরর।