দাবিত্যাগ : এই নিবন্ধটি শুধুমাত্র মজা করার জন্য লেখা হয়েছে। কর্মক্ষেত্রে এটি পুনরাবৃত্তি করার চেষ্টা করবেন না। যাইহোক, বাড়িতে যা খুশি তাই করুন।
আমরা, ডেভেলপাররা, নিয়মিতভাবে বাগগুলির সম্মুখীন হই, এটা আমাদের কাজের অংশ মাত্র। অতএব, প্রথম নজরে, প্রশ্ন "আপনি কি উদ্দেশ্যমূলকভাবে একটি বাগ করতে পারেন?" সাধারণ মনে হতে পারে - "হ্যাঁ, অবশ্যই, আমি একটি বাগ লিখতে পারি।" যাইহোক, যদি আপনি এটি সম্পর্কে চিন্তা করেন, সবকিছু আর এত স্পষ্ট বলে মনে হয় না।
আসল বিষয়টি হল বাগটি ভাঙা কোডের মতো নয় । একটি বাগ একটি ত্রুটি, একটি সাধারণভাবে একটি ত্রুটি
কাজের প্রোগ্রাম।
সফ্টওয়্যার সমস্যাগুলির পরিপ্রেক্ষিতে "বাগ" শব্দটি 1947 সালে উদ্ভূত হয়েছিল যখন একটি মথ হার্ভার্ড মার্ক II কম্পিউটারে একটি ত্রুটি সৃষ্টি করেছিল। প্রকৌশলীরা আক্ষরিক অর্থে একটি রিলেতে আটকে থাকা একটি মথ দেখতে পান এবং তারা এটিকে "বাগ পাওয়া যাওয়ার প্রথম প্রকৃত ঘটনা" হিসাবে উল্লেখ করেছেন।
বিশ্ব গণিতের সূত্র দ্বারা ভালভাবে বর্ণনা করা হয়। এবং সূত্র আসলে অ্যালগরিদম হয়. অতএব, যদি আমরা কিছু ঘটনাকে গাণিতিকভাবে বর্ণনা করতে সক্ষম হই, তাহলে ফলাফলের সূত্রটি সংশোধন করা যাতে এটি শুধুমাত্র কখনও কখনও ভুল ফলাফল দেয় একটি অ-তুচ্ছ কাজ। যাইহোক, এটা হতাশ করার সময় নয়। সীমানা শর্ত আমাদের এখানে সাহায্য করতে আসতে পারে. আমরা এই সব দেখেছি if index == 0 {…} else if index == n-1 {…}
। সীমানার সাথে সবসময় কিছু ভুল থাকে 🤷♀️ সুতরাং, আসুন একটি বাগ তৈরি করার প্রথম ধারণাটি নোট করি - প্রান্তের ক্ষেত্রে উপেক্ষা করুন ।
সাধারণভাবে, অ্যারেগুলির মাধ্যমে পুনরাবৃত্তি করা সম্ভাব্য বাগগুলির একটি ভাণ্ডার। এবং তাদের মধ্যে সবচেয়ে সাধারণ হল সূচকের বাইরে । আপনি যদি এমন একটি জিনিসের উপর কখনও হোঁচট না খেয়ে থাকেন তবে আপনি কখনই কোড করেননি। দুর্ভাগ্যবশত, এই বাগটি এতটাই জনপ্রিয় যে লোকেরা অ্যারের জন্য নিরাপদ মোড়ক লিখতে শুরু করে, যেমন কিছু array[safe: index]
। তাই আজ, আপনার সহকর্মীরা এই জিনিসটি ছাড়া কোনো কোড অনুমোদন করবে না। আপনি চেষ্টা করতে পারেন, কিন্তু এটা অসম্ভাব্য...
প্রচলিত বাগগুলির মধ্যে স্ট্যাক ওভারফ্লো অন্তর্ভুক্ত রয়েছে। একটি পুনরাবৃত্ত অ্যালগরিদম অসীমভাবে পুনরাবৃত্তি করতে পারে যখন কোন প্রস্থান শর্ত নেই। পুনরাবৃত্তি এখানে ঐচ্ছিক বলে মনে হচ্ছে - লিখুন while true
, এবং আপনার কাজ শেষ। যাইহোক, আবার, বাগ জনপ্রিয়তা আমাদের বিরুদ্ধে খেলছে. ডেভেলপাররা অন্তহীন লুপের সম্ভাব্য সমস্যাগুলি সম্পর্কে ভালভাবে সচেতন, এবং তাদের চোখ অবশ্যই কোড-রিভিউতে এরকম কিছুর দিকে নজর দেবে 👮
এখনও আপনার কল্পিত পরিকল্পনাকে উৎপাদনে ঠেলে দিতে, প্রস্থান অবস্থার জন্য একটি গ্লোবাল ভেরিয়েবল ব্যবহার করার চেষ্টা করুন এবং এটিকে বাইরে থেকে শান্তভাবে পরিবর্তন করুন ।
var coditionCounter = 0; class A { func foo() { while coditionCounter < 10 { coditionCounter++; B.boo(); } } } class B { func boo() { coditionCounter--; } }
এটা মজার যে এমনকি ChatGPT বাগ লেখার ক্ষেত্রে সাহায্য করতে অস্বীকার করে। হয়তো আমার শুধু একটি প্রিমিয়াম সাবস্ক্রিপশন দরকার... 🤔
উজ্জ্বল দিক থেকে, AI সাধারণ নিয়মগুলির একটি সেট অফার করে যা বাগ-মুক্ত কোড লেখার ক্ষেত্রে অবদান রাখে: сcode in small increment, coding standards, write unit tests, and bla-bla-bla. আমরা বিপরীত জিনিস করার চেষ্টা করতে পারি - স্প্যাগেটি কোড লিখুন এবং SOLID সম্পর্কে ভুলে যান। যাইহোক, এইভাবে, আমরা লিখি সমস্ত কোডের উপর নিয়ন্ত্রণ হারিয়ে ফেলি । একটি মার্জিত পিনপয়েন্ট অস্ত্রের পরিবর্তে, আমরা নিয়ন্ত্রণহীন বিশৃঙ্খলা পাই, যা আমাদের প্রোগ্রামকে জয় করবে।
একটি বাগ তৈরির সমস্যা সমাধান করার সময়, সাবটাস্কগুলি নির্ধারণ করা মূল্যবান। প্রথমত, আমাদের কিছু বিরল প্রান্ত কেস নিয়ে আসা দরকার। দ্বিতীয়ত, আমাদের বাগটিকে নিয়মিত কোড হিসাবে ছদ্মবেশী করতে হবে যাতে এটি কোড পর্যালোচনা পাস করে। তৃতীয়ত, আমাদের QA বিভাগের মনোযোগ ভোঁতা করতে হবে। চতুর্থ, এখুনি ধরা পড়বেন না। কিন্তু এই ইতিমধ্যে ঐচ্ছিক.
আমার সাধারণ পরামর্শ নিম্নরূপ (এবং আপনি মন্তব্যে আপনার ভাগ করুন):
অ্যাক্সেস লেভেল ম্যানিপুলেট করুন । দ্বিগুণ ফিরে আসতে, সবচেয়ে অপ্রত্যাশিত স্থান থেকে গুরুত্বপূর্ণ প্যারামিটারের মান পরিবর্তন করুন। আপনি একটি VPN হিসাবে বেশ কয়েকটি ক্লাসের মাধ্যমে এটি করুন।
শিশু শ্রেণিতে কিছু অপ্রত্যাশিত যুক্তি প্রয়োগ করুন। সংক্ষেপে, SOLID-এ L নীতি ভাঙুন ।
class A { func decrease() { x--; } } class B: A { override func decrease() { x++; } }
বড় ফাংশন আপনার কপট পরিবর্তন লুকান. যত বেশি লাইন, তত ভাল - ভিড়ের মধ্যে হারিয়ে যান।
টান অনুরোধ একই নীতি ব্যবহার করুন. একটি ছোট পিআরে, লক্ষ্য করার সম্ভাবনা বেশি।
বাগটিকে ভাগে ভাগ করে নেওয়ার চেষ্টা করুন এবং তাদের বিভিন্ন টান অনুরোধে রাখুন। যদি সম্ভব হয়, তাহলে বিভিন্ন পর্যালোচকদের কাছেও।
আপনার QA-এর দুর্বলতা খুঁজে বের করুন এবং তার বিশ্বাস জয় করুন। অথবা চেক চলাকালীন কথোপকথন দিয়ে তাদের বিভ্রান্ত করুন।
যাইহোক, আপনি কি হাইজেনবাগের কথা শুনেছেন? এটি একটি বাগ যা গবেষণা/ ডিবাগিংয়ের সময় অদৃশ্য হয়ে যায় বা তার আচরণ পরিবর্তন করে। শ্রোডিঞ্জারের বিড়ালের মতো। নিখুঁত যদি সমাধানের সমস্যাটি আপনাকে বরাদ্দ করা না হয়।
একটি হাইজেনবাগের একটি সাধারণ উদাহরণ হল একটি বাগ যা একটি অপ্টিমাইজিং কম্পাইলারের সাথে প্রোগ্রামটি কম্পাইল করা হলে প্রদর্শিত হয়, কিন্তু যখন একই প্রোগ্রামটি অপ্টিমাইজেশন ছাড়াই কম্পাইল করা হয় তখন নয় (যেমনটি প্রায়শই এটি ডিবাগার দিয়ে পরীক্ষা করার উদ্দেশ্যে করা হয়)। ডিবাগ করার সময়, একটি অপ্টিমাইজ করা প্রোগ্রাম সাধারণত রেজিস্টারে যে মানগুলি রাখে তা প্রায়শই প্রধান মেমরিতে পুশ করা হয়।
নিজের উপর বিশ্বাস রাখো! ইতিহাস জানে যখন একটি বাগ খুব গুরুতর সংস্থাগুলিতে উত্পাদনে ভর্তি হয়েছিল।
আরিয়ান 5 ফ্লাইট 501: সবচেয়ে ব্যয়বহুল সফ্টওয়্যার বাগগুলির মধ্যে একটি 1996 সালে ঘটেছিল যখন ক্লাস্টার মিশন বহনকারী আরিয়ান 5 রকেটটি উত্তোলনের মাত্র 40 সেকেন্ড পরে বিস্ফোরিত হয়েছিল। ব্যর্থতা রকেটের নির্দেশিকা সিস্টেমের একটি সফ্টওয়্যার বাগ থেকে চিহ্নিত করা হয়েছিল।
NASA's Mars Climate Orbiter: 1999 সালে, NASA একটি সফটওয়্যার ত্রুটির কারণে Mars Climate Orbiter হারিয়েছিল। সফ্টওয়্যারটি মেট্রিক ইউনিট (নিউটন-সেকেন্ড) এর পরিবর্তে ইম্পেরিয়াল ইউনিট (পাউন্ড-সেকেন্ড) ব্যবহার করেছিল, যার ফলে মহাকাশযানটি মঙ্গলগ্রহের বায়ুমণ্ডলে পুড়ে যায়।
তদুপরি, কিছু বাগ বৈশিষ্ট্য হয়ে উঠতে পারে, যেমন মারিওতে দেয়াল-ঝাঁপানো বা সভ্যতায় মহাত্মা গান্ধের আচরণ …সম্ভবত।
একটি বাগ বিকাশ করা হল আপনার অ্যালগরিদমের মাধ্যমে চিন্তা করার এবং সম্ভাব্য সমস্যাগুলি পুঙ্খানুপুঙ্খভাবে অনুমান করার ক্ষমতা। সুতরাং, কোডে একটি বাগ রেখে যাওয়ার কোনো কারণ না থাকলেও, এটি এখনও বিবেচনা করার মতো।