দুইটি বিষয় প্রোগ্রামিং ক্যারিয়ারের জন্য চিরন্তন সত্য:-
- যে কোনো কিছুই ভুল হতে পারে, ভুল হয়ে যাবে।
- কোডে “বাগ” (সমস্যা) থাকা স্বাভাবিক।
প্রথমেই বাগ (Bug) কি তা আমাদের জানতে হবে। “বাগ” হলো সফ্টওয়্যারের মধ্যে কোনো ভুল বা ইরর, যা সফ্টওয়্যারটিকে সঠিকভাবে চলতে দেয় না।
বেশীরভাগ ডেভেলপার অনেক সময়ই স্বীকার করতে চায় না, যে তার কারণেই সফ্টওয়্যারের বাগ বা ত্রুটি তৈরী হয়েছে। এটা নিশ্চিত যে, বাগগুলো হচ্ছে ডেভেলপারের করা এক একটি ভুল। যেকোনো ভুল থেকেই অনেক কিছু শেখা যায় তাই বাগ এবং ডিবাগিংকে শেখার সুযোগ হিসাবে দেখার একটি ভাল কারণ হতে পারে।
ভালো কথা, বাগ থেকে ডিবাগিং এ চলে আসলাম! অনেক সময়ই বাগ খুঁজে বের করতে বেশ সময় লেগে যায়, এই বিশাল সময়কে বাচানোর জন্য ডিবাগিং করতে হয়। তবুও এখনো অনেক ডেভেলপার ডিবাগিংকে গুরুত্বপূর্ণ মনে করে না। অনেক সময় এমন কিছু পরিস্থিতিতে পড়তে হয়, তখন ডিবাগিং ছাড়া ডেভেলপমেন্ট প্রসেস এগিয়ে নিয়ে যাওয়া কষ্টকর হয়।ডিবাগিং করার মাধ্যমে এক্সপার্ট ডেভেলপার’রা তাদের কাজ অনেকটা সহজ করে নেয় ।
ডিবাগিং এবং প্রোগ্রামিং সম্পূর্ণরূপে ভিন্ন ধরণের প্রক্রিয়া। একটি ডিবাগিং সেশন শেষ হতে এক ঘন্টা, একদিন বা এক সপ্তাহ এমনকি তার চেয়েও বেশী সময় লাগতে পারে। সমস্যাটি খুঁজে বের করার পর সেটি সমাধানের খুব কাছাকাছি যেয়ে নতুন সমস্যা তৈরী হতে পারে। এজন্য সবচেয়ে ভালো উপায়ে ডিবাগিং করা অত্যন্ত গুরুত্বপূর্ণ ।
ভালোভাবে ডিবাগিং করতে হলে কিছু উপায় রয়েছে যা দিয়ে সমস্যা গুলো খুব দ্রুততার সাথে সমাধান করতে পারবেন।
প্রথমে সিস্টেমটি বোঝার চেষ্টা করুন:
আমরা প্রায়ই প্রথমে “সমস্যা বোঝার” এবং তারপরে “সিস্টেমটি বোঝার” ভুলটি করে থাকি। এটি অন্য রাউন্ডে হওয়া উচিত।কিছুদিন আগে আমি একজনকে একটি স্মার্ট ফর্মে একটি সমস্যা ডিবাগ করতে দেখছিলাম। কিছু মান ফর্মটিতে সঠিকভাবে আসছিল না, সে পুরো দুই দিন ধরে ফর্মটি ডিবাগ করছিলো অবশ্য সে কোনো সমস্যা খুঁজে পায়নি বলে হতাশ হয়ে পড়েছিলো। কোডে কোনও ভুল ছিল না।
পরে অবশ্য জানা যায়, যে মূল কোডের মধ্যে দুটি জায়গা থেকে একই সাথে ফর্মটি কল করা হয়েছিল। এতে বোঝা গেলো সমস্যাটি অন্য কারণে হয়েছিলো, ফর্মের মধ্যে নয়। এই সমস্যা মুহুর্তেই সমাধান করা যায়। তার দুই দিনের প্রচেষ্টার দেখে শেখা যায় সিস্টেমই বুঝতে পারার দক্ষতা কতখানি হওয়া উচিত
সিস্টেমটি কীভাবে কাজ করে তা না বুঝে আপনি সমস্যা ডিবাগ করতে পারবেন না। যত তাড়াতাড়ি আপনি এটি বুঝতে পারবেন, এক্ষেত্রে তত তাড়াতাড়ি সমস্যাটি সমাধান করতে পারবেন। সবসময় মনে রাখবেন, সিস্টেমটিতে কী করা উচিত, এটি কীভাবে ডিজাইন করা হয়েছে এবং কিছু ক্ষেত্রে কেন এটি সেভাবে ডিজাইন করা হয়েছিল সে সম্পর্কে আপনার ভালোভাবে বুঝে নেওয়া প্রয়োজন। আপনি যদি সিস্টেমের কিছু অংশ না বুঝতে পারেন তাহলে সমস্যাটি সমাধান হওয়ার পরিবর্তে নতুন সমস্যার জন্ম দিবে। তাই সিস্টেম সম্পর্কে ভালো ধারণা থাকা আবশ্যক।
ভিন্ন ভিন্ন স্টেপে সমস্যা সমাধান করুন:
অনেক ক্ষেত্রে বড় প্রজেক্টে কাজ করার সময় ডেটা হারিয়ে যাওয়ার সম্ভাবনা থাকে। হারিয়ে যাওয়া ডেটার রেকর্ড বের করা বা খুঁজে পাওয়া অনেক কষ্টের কাজ। তবে প্রোটোটাইপিং দিয়ে এধরণের সমস্যা সমাধান করা যায়। স্বাভাবিকভাবেই বড় সিস্টেমগুলো অনেক জটিল হয়। তাই সিস্টেম বেশ বড় হলে একটি সমস্যা নতুন অরেকটি সমস্যা তৈরী করতে পারে। তাই একটি পাওয়া গেলে সেটি আলাদা করে ডিবাগিং করে দেখা যেতে পারে। এক্ষেত্রে দ্রুত নির্দিষ্ট কোন কোডের কারণে ভুল হচ্ছে, সেটা বের করে সমাধান করা যাবে।
সুনির্দিষ্ট ভাবে সমস্যার সমাধান করা:
মনে করুন, আপনার দাঁত সমস্যা হয়েছে তাই আপনি একজন ডেন্টিস্টের কাছে গিয়েছেন। ডেন্টিস্ট আপনার কোন দাঁতে সমস্যা সেটি না খুঁজে আপনার সবতুলো দাঁতেই যদি আঘাত করে তাহলে কেমন হবে?
হুবুহু ঘটনা সফটওয়্যারের ক্ষেত্রেও হলে বড় বিপদ অপেক্ষা করছে। একটি নির্দিষ্ট সমস্যা একবারে পরিবর্তন করুন, এটি বাগ ফিক্সিংয়ের ক্ষেত্রে অনেক ভাল কাজে দিবে। সিস্টেমের বিভিন্ন অংশ পরিবর্তন করতে গেলে ছোট সমস্যাও বড় হয়ে যায়। এর জন্য সতর্ক থাকা উচিত যাতে একটি পরিবর্তন করতে গিয়ে অন্যটি পরিবর্তন না হয়ে যায়। একবার একটি অংশ পরিবর্তন করে থাকলে নতুন করে পরিবর্তন করার আগে ভেবে নেওয়া উচিত।
বাগ ফিক্স করা:
বাগ খুঁজে পাওয়া এবং চিহ্নিত করার পর ফিক্স করা এক ধরণের মজার কাজ। অনেক ডেভেলপার বাগ ফিক্স না করে কোড হাইড করে বা লুকিয়ে রাখে। এতে করেে ঐ সময়ে সমস্যা সমাধান হলেও, পরবর্তীতে অন্য সমস্যা দেখা দিতে পারে।যেটা পরবর্তীতে বিশাল সমস্যার জন্য দায়ী হয়। তাই এই ভুল সিদ্ধান্ত নেওয়া যাবেনা।
তাই সমস্যার পুরোপুরি সমাধান না করে কোডের ভিতরে সমস্যা রেখে দেওয়া একদম বোকামি। এইজন্য পরবর্তীতে কোড ডিবাগিং এর সময় অনেক ইরর দেখতে পাওয়া স্বাভাবিক।
সবশেষে, একটি সমাধান লগ রাখুন:
লগ (Log) একটি অত্যন্ত গুরুত্বপূর্ণ একটি বিষয়। আপনি বাগটি কিভাবে ফিক্স করলেন বা কোডের কোন অংশটি পরিবর্তন করেছেন তার একটি লগ রাখলে পরবর্তীতে যেকারো কাজ করতেই সুবিধা হবে। তাছাড়া একই সমস্যা বার বার সমাধানের কোনো মনেই হয় না। তাই যদি পূর্বের সমস্যাগুলোর একটি সাজানো লগ তৈরী করা থাকে তাহলে খুব সহজেই সমাধান বের করা যাবে।প্রবলেম সলভিং লগে আসলে কী ধরণের ডেটা রাখা হয়, তার একটা নমুনা নিচে তুলে ধরা হলো-
- লগটি অবশ্যই গোছানো হতে হবে,
- তারিখ / সময় নির্দিষ্ট করে রাখতে হবে,
- সংক্ষিপ্ত বিবরণ লিখে রাখতে হবে,
- সমস্যা প্রভাব / গুরুত্ব, বা কিভাবে হলো লিখতে হবে,
- বাগের প্রকারভেদ নির্নয় করতে হবে,
- বর্তমান অবস্থা লিখতে হবে,
- পরবর্তী পদক্ষেপের তারিখ (যদি থাকে) লিখতে হবে,
- সবশেষ কিভাবে সলভ হলো তা লিখে দিতে হবে।
লগ লিখে রাখলে পুরোতন সমস্যা আবার দেখা দিলে সেটা দ্রুত চিহ্নিত করে সলভ করা যায়। মনে হবে “আরে, আমি তো এটি আগে দেখেছি”! তাই আপনি অতীতে কীভাবে সমস্যাটি সমাধান করেছেন তা দ্রুত সার্চ করতে পারেন এই লগটি থেকে। এটি শুধুই আপনার সময় সাশ্রয় করে না বরং আত্মবিশ্বাসকে অভাবনীয় পর্যায়ে বৃদ্ধি করে।
সবশেষে বলতে চাই, ডিবাগিং অনেক কিছু শেখার সুযোগ তৈরী করে দেয় সব সময়। অবশ্যই, কখনও কখনও আপনি বুঝতে পারবেন যে আপনি এক বা একাধিক ভুল করেছেন যা তখন করা উচিত হযনি়। একজন আদর্শ ডেভেলপার হতে চাইলে অবশ্যই ডিবাগিং-এ খুব ভালোভাবে স্কিল ডেভেলপ করতে হবে।
স্কলার্স ব্লগে এটি আমার প্রথম আর্টিকেল! কেমন লাগলো কমেন্টে জানাতে ভুলবেন না! কমেন্টে জানালে নতুন করে লেখার উৎসাহ পাই।
আর্টিকেলটি পরিমার্জন ও সংস্করণ করেছেন – নাজির আহমেদ সাব্বির (সম্পাদক, কোর্সেবল স্কলার্স ব্লগ)।