লাভ:
- ত্রুটি বার্তা, স্ট্যাক ট্রেস এবং ক্ষুদ্রতম প্রজনন উদাহরণ সহ AI-তে একটি বাগ কার্যকরভাবে বর্ণনা করার ক্ষমতা
- ধাপে ধাপে অনুমান এবং সংকুচিত করে মূল কারণ খুঁজে বের করার জন্য AI এর সাথে একটি পদ্ধতিগত ডিবাগিং প্রবাহ চালানোর ক্ষমতা
- AI এর প্রস্তাবিত সংশোধনটি পুনরুত্পাদন এবং রিগ্রেশন পরীক্ষার মাধ্যমে প্রকৃতপক্ষে সমস্যার সমাধান করেছে তা যাচাই করার ক্ষমতা
ডিবাগিং হল কেন একটি প্রোগ্রাম প্রত্যাশার চেয়ে ভিন্ন আচরণ করছে তা খুঁজে বের করা এবং এটি ঠিক করা এবং এটি বেশিরভাগ ইঞ্জিনিয়ারদের অনেক সময় ব্যয় করে। ভাল ডিবাগিং অনুমান করার খেলার উপর ভিত্তি করে নয়, তবে পদ্ধতিগত সংকীর্ণ করার উপর ভিত্তি করে: লক্ষণটি স্পষ্ট করুন, অনুমান করুন, অনুমান পরীক্ষা করুন, মূল কারণটি দেখুন। এআই এই চক্রের একটি অত্যন্ত শক্তিশালী অংশীদার; তবে আপনি যদি তাকে সঠিক তথ্য দেন তবেই। "কোড কাজ করে না, এটি ঠিক করুন" বলা এআইকে অনুমান করতে এবং কম্বল পরামর্শ দিতে বাধ্য করে। এটিকে সম্পূর্ণ ত্রুটি বার্তা, স্ট্যাক ট্রেস এবং ক্ষুদ্রতম প্রজনন নমুনা দিন এবং একসাথে আপনি মূল কারণটি খুঁজে পাবেন।
এই ইউনিটে আমরা দেখব কীভাবে AI-তে একটি বাগকে কার্যকরভাবে বর্ণনা করা যায়, ধাপে ধাপে অনুমানগুলিকে সংকুচিত করা যায় এবং রিগ্রেশন পরীক্ষার মাধ্যমে যাচাই করা যায় যে প্রস্তাবিত ফিক্স আসলেই সমস্যার সমাধান করে। মনে রাখবেন: একটি বাগ "ফিক্সিং" এবং "বাগের লক্ষণ দমন" দুটি ভিন্ন জিনিস; মূল কারণ খুঁজে না পেয়ে সংশোধন করা ত্রুটিটিকে অন্য জায়গায় নিয়ে যায়।
ধারণা: স্ট্যাক ট্রেস: ত্রুটির সময় কোন ফাংশনগুলিকে কী ক্রমে কল করা হয়েছিল তা দেখানো একটি ডাম্প। ন্যূনতম রিপ্রো: সবচেয়ে সহজ, সংক্ষিপ্ততম কোড/ইনপুট যা ত্রুটিটিকে ট্রিগার করে। মূল কারণ: সমস্যার আসল উৎস, লক্ষণ নয়। রিগ্রেশন টেস্টিং: পরীক্ষা যা নিশ্চিত করে যে একই ত্রুটি পুনরাবৃত্তি না হয়।
এআই থেকে একটি বাগ বর্ণনা করা
AI এর মূল কারণ খুঁজে পাওয়ার সম্ভাবনা আপনার দেওয়া তথ্যের গুণমানের সাথে সরাসরি সমানুপাতিক। একটি ভাল ত্রুটির বিবরণের মধ্যে রয়েছে: আপনি কী করার চেষ্টা করেছেন, আপনি কী আশা করছেন, কী ঘটেছে, সঠিক ত্রুটির পাঠ্য এবং স্ট্যাক ট্রেস, জড়িত কোড, পরিবেশ (ভাষা/সংস্করণ/ওএস), এবং ক্ষুদ্রতম নমুনা যা ত্রুটি তৈরি করেছে।
- লক্ষণটি স্পষ্ট করুন। বিন্যাসে "প্রত্যাশিত X, বাস্তবায়িত Y"।
- সম্পূর্ণ ত্রুটি পাঠ্য এবং স্ট্যাক ট্রেস আটকান। এটাকে ছোট করবেন না, সেন্সর করবেন না, কিন্তু কাঠামো ভেঙ্গে দেবেন না।
- ক্ষুদ্রতম প্রজনন দিন। ন্যূনতম ইনপুট এবং কোড যা ত্রুটিকে ট্রিগার করে।
- পরিবেশ নির্দিষ্ট করুন। ভাষা সংস্করণ, লাইব্রেরি সংস্করণ, রানটাইম পরিবেশ।
কার্যকরী ত্রুটি বর্ণনা প্রম্পট: "আমি একটি বাগ ডিবাগ করছি। তথ্য:- আমি যা করার চেষ্টা করছি: [X]- প্রত্যাশিত আচরণ: [Y]- প্রকৃত আচরণ: [Z]- সম্পূর্ণ ত্রুটির বার্তা এবং স্ট্যাক ট্রেস: [পেস্ট]- পরিবেশ: [ভাষা/সংস্করণ, লাইব্রেরি/সংস্করণ]- [প্রথম একটি কোড যোগ করুন] সরাসরি কোড যোগ করুন। সম্ভাব্যতার ক্রমানুসারে সম্ভবত মূল কারণগুলি এবং প্রতিটির জন্য কোন চেকটি যাচাই করতে হবে তা আমাকে বলুন।"
হাইপোথিসিস দ্বারা সংকীর্ণ প্রবাহ
পদ্ধতিগত ডিবাগিং হল একের পর এক সম্ভাবনা দূর করার শিল্প। অনুমান তৈরি করতে AI ব্যবহার করুন এবং প্রতিটি অনুমান পরীক্ষা করার জন্য পরীক্ষাটি ডিজাইন করুন; তারপর পরীক্ষা চালান এবং ফলাফল ফেরত দিন। এই চক্রটি এলোমেলো পরিবর্তন এবং বন্ধ করার অভ্যাসের তুলনায় অনেক দ্রুত, যাকে "শটগান ডিবাগিং" বলা হয়।
বাইনারি অনুসন্ধান (দ্বিভাগ) হেল্পার প্রম্পট: "এই ত্রুটিটি গতকাল ছিল না, এটি আজ আছে। আমি খুঁজে বের করতে চাই যে শেষ 20টি পরিবর্তনের মধ্যে কোনটি দ্বিখণ্ডের সাথে ত্রুটি এনেছে। আমাকে একটি ধাপে ধাপে পরিকল্পনা দিন: ফলাফলের উপর নির্ভর করে আমি কোন পয়েন্টে পরীক্ষা করব, কোন অর্ধেকে যেতে হবে। এছাড়াও প্রতিটি ধাপে ঠিক কী পরীক্ষা করতে হবে তা আমাকে বলুন।"
লগ সন্নিবেশ কৌশল প্রম্পট: "আমি ত্রুটিটি খুঁজে পাচ্ছি না কারণ আমি এই ফাংশনে মধ্যবর্তী মানগুলি দেখতে পাচ্ছি না। আমাকে বলুন কোন পয়েন্টে আমাকে লগ লাইন যোগ করতে হবে যা কোন ভেরিয়েবলগুলি মুদ্রণ করে। প্রতিটি লগের জন্য একটি 'আমি এই লগ থেকে কী শিখব' ব্যাখ্যা যোগ করুন। এছাড়াও সতর্কতাগুলি নির্দিষ্ট করুন যা আমাকে আত্মবিশ্বাসী ডেটা লগিং করা থেকে বাধা দেবে।"
টিপ: আপনি যদি একটি ত্রুটি সমাধান করতে না পারেন, তবে বেশিরভাগ সময় সমস্যাটি এমন কোথাও হয় যেখানে আপনি ভুলভাবে ধরে নিয়েছেন৷ AI কে জিজ্ঞাসা করুন "আমার কোন অনুমান ভুল হতে পারে?" জিজ্ঞাসা আপনার অন্ধত্ব ভাঙ্গবে. সবচেয়ে কঠিন ভুলগুলি সেই জায়গায় লুকিয়ে থাকে যেখানে আপনি বলেন "আমি নিশ্চিত যে এটি সঠিকভাবে কাজ করছে"।
দুর্বল প্রম্পট / শক্তিশালী প্রম্পট
দুর্বল:"আমার কোড একটি ত্রুটি দেয়, এটি ঠিক করুন: [কোডের 200 লাইন]"(ফলাফল: AI জানে না এটি কী ত্রুটি, কী প্রত্যাশিত; এটি অনুমানের উপর ভিত্তি করে সাধারণ পরামর্শ দেয়, বেশিরভাগই অকেজো।) STRONG:"আমি NullPointerException পেয়েছি। প্রত্যাশিত: ব্যবহারকারীর তালিকা ফেরত দেওয়া উচিত। প্রকৃত: ট্র্যাকেডেস কল করতে হবে। [পেস্ট]।পরিবেশ: জাভা 17. ন্যূনতম পুনরাবৃত্তি: এটি ঘটে যখন ব্যবহারকারীর তালিকা খালি থাকে, কিন্তু যখন এটি পূর্ণ হয় তখন নয়: [কোড] মূল কারণটি ব্যাখ্যা করুন এবং কেন খালি তালিকাটি ট্রিগার করা হয়েছে তা ব্যাখ্যা করুন৷"
শক্তিশালী প্রম্পটটি প্রসঙ্গে ত্রুটি রাখে: কোন ক্ষেত্রে এটি ঘটে (খালি তালিকা), কোন ক্ষেত্রে এটি ঘটে না (সম্পূর্ণ তালিকা)। এই একক সূত্র ("খালি হলে ঘটে") প্রায় সরাসরি মূল কারণ নির্দেশ করে। যেহেতু এই তথ্য দুর্বল প্রম্পটে পাওয়া যায় না, তাই AI অন্ধ অনুমান করে।
ফিক্স যাচাই করা হচ্ছে
একটি ফিক্স শুধুমাত্র একটি বাস্তব সমাধান যদি এটি তিনটি জিনিস করে:
নিয়ন্ত্রণ
প্রশ্ন
কিভাবে যাচাই করবেন
ত্রুটি চলে গেছে?
একই এন্ট্রি কি এখন কাজ করে?
আবার ন্যূনতম রিপ্রো চালান
কোন নতুন ত্রুটি?
আর কিছু কি ভেঙে গেছে?
পুরো টেস্ট স্যুট চালান
এটা পুনরাবৃত্তি হবে না?
একই ত্রুটি আবার ঘটবে?
এই দৃশ্যের জন্য রিগ্রেশন পরীক্ষা যোগ করুন
মূল কারণ খুঁজে না পেয়ে করা সংশোধনগুলি প্রায়শই উপসর্গটিকে দমন করে। উদাহরণ স্বরূপ, একটি নাল ত্রুটির উপর চকচকে "Skip if null" দিয়ে আসল কারণ, "কেন ডাটা শূন্য আসছে?" অদৃশ্য, এবং ত্রুটি অন্য কোথাও পুনরাবৃত্তি হয়.
মিনি কেস
কেস 1 — উপসর্গ দমন ফাঁদ. একটি দল একটি ট্রাই-ক্যাচ দিয়ে মাঝে মাঝে একটি শূন্য ত্রুটি নীরব করে দেয়; ত্রুটিটি অদৃশ্য হয়ে যায় কিন্তু 2 সপ্তাহ পরে ডেটা অনুপস্থিত হয়। আসল কারণ হল একটি পরিষেবা টাইমআউটের সময় নাল ফেরত দেয়। আপনি যখন AI কে জিজ্ঞাসা করেন "কেন এটি শূন্য হচ্ছে?", মূল কারণটি বেরিয়ে আসে; আসল ফিক্স করতে 1 ঘন্টা সময় লাগে কিন্তু স্থায়ী।
কেস 2 — ন্যূনতম রিপ্রো পাওয়ার। একটি বিকাশকারী একটি বাগ ঠিক করতে পারে না যা বলে যে "এটি কিছুক্ষণের মধ্যে একবার ক্র্যাশ হয়।" এটি AI এর পরামর্শের সাথে ক্ষুদ্রতম ইনপুটে ত্রুটি হ্রাস করে: সমস্যাটি শুধুমাত্র তুর্কি অক্ষর (এনকোডিং ত্রুটি) ধারণকারী ফাইলের নামগুলির সাথে ঘটে। যখন অনিশ্চয়তার 300টি লাইনকে 5 লাইনে কমিয়ে ডেফিনিটিভ রিপ্রোর করা হয়, তখন সমাধানটি সুস্পষ্ট হয়ে ওঠে।
কেস 3 - অ্যান্টি-রিগ্রেশন পরীক্ষা। AI তারিখ গণনার ত্রুটি ঠিক করে। প্রকৌশলী এতে সন্তুষ্ট নন; ভুল পরিস্থিতির জন্য একটি রিগ্রেশন পরীক্ষা যোগ করে (মাসের শেষ, 31 জানুয়ারি + 1 মাস)। 4 মাস পরে যখন আরেকটি পরিবর্তন একই এলাকায় স্পর্শ করে, পরীক্ষাটি লাল হয়ে যায় এবং বাগটি উৎপাদনে পৌঁছানোর আগেই ধরা পড়ে।
সাধারণ ভুল
- এর অর্থ "এটি কাজ করছে না, এটি ঠিক করুন"। ত্রুটি পাঠ্য, প্রত্যাশা এবং রিপ্রো ছাড়াই, এআই অনুমান করে।
- স্ট্যাক ট্রেস দিচ্ছে না। স্ট্যাক ট্রেস প্রায়ই সরাসরি মূল কারণ নির্দেশ করে।
- এলোমেলো পরিবর্তন করতে থাকুন। একটি হাইপোথিসিস স্থাপন না করে পরীক্ষা সময় নষ্ট করে।
- উপসর্গ দমন এবং মূল কারণ অনুপস্থিত. ত্রুটি অন্যত্র পুনর্জন্ম হয়.
- রিগ্রেশন টেস্টিং দিয়ে ফিক্স সুরক্ষিত করা হচ্ছে না। একই ত্রুটি ভবিষ্যতে নীরবে ফিরে আসে।
সংক্ষেপে
কার্যকরী ডিবাগিং হল পদ্ধতিগত সংকীর্ণ, অনুমান করা নয়। AI-কে সম্পূর্ণ ত্রুটির পাঠ্য, স্ট্যাক ট্রেস, ন্যূনতম প্রজনন এবং পরিবেশের তথ্য প্রদান করলে মূল কারণ খুঁজে পাওয়ার সম্ভাবনা দ্রুত বৃদ্ধি পায়। অনুমান তৈরি করতে AI ব্যবহার করুন এবং প্রতিটি অনুমান পরীক্ষা করার জন্য পরীক্ষাটি ডিজাইন করুন; আপনি পরীক্ষা চালান. একটি ফিক্স "সম্পন্ন" বিবেচনা করুন শুধুমাত্র যখন আপনি দেখতে পাবেন যে বাগটি চলে গেছে, কোন নতুন বাগ প্রবর্তন করা হয়নি এবং এটি রিগ্রেশন টেস্টিং দ্বারা সুরক্ষিত।
আবেদন টাস্ক
একটি বাস্তব বা কৃত্রিম ত্রুটি বিবেচনা করুন. প্রথমে ত্রুটিটিকে ক্ষুদ্রতম প্রজননে কমিয়ে দিন (কোন ইনপুটটিতে এটি ঘটে, যেখানে এটি হয় না)। কার্যকরী বাগ রেসিপি প্রম্পট ব্যবহার করে, AI-কে 3টি মূল কারণ অনুমান এবং প্রতিটির জন্য একটি যাচাইকরণ পদক্ষেপ জিজ্ঞাসা করুন। একের পর এক অনুমানগুলি পরীক্ষা করে মূল কারণ খুঁজুন, এটি ঠিক করুন, তারপর লিখুন এবং এই দৃশ্যের জন্য একটি রিগ্রেশন পরীক্ষা চালান যাতে দেখা যায় যে বাগটি চলে গেছে এবং পরীক্ষাটি সুরক্ষা প্রদান করে।
চেকলিস্ট
- [ ] আমি লক্ষণটিকে "প্রত্যাশিত বনাম উপলব্ধি" হিসাবে ব্যাখ্যা করেছি।
- [ ] আমি AI-তে সম্পূর্ণ ত্রুটির পাঠ্য এবং স্ট্যাক ট্রেস দিয়েছি।
- আমি ত্রুটিটিকে ক্ষুদ্রতম প্রজননে কমিয়ে দিয়েছি।
- একের পর এক অনুমান পরীক্ষা করে আমি মূল কারণ খুঁজে পেয়েছি।
- [ ] উপসর্গ দমন করার পরিবর্তে, আমি মূল কারণ ঠিক করেছি।
- [ ] আমি একই ত্রুটির জন্য একটি রিগ্রেশন পরীক্ষা যোগ করেছি এবং চালিয়েছি।