آپ کی قابلِ اعتماد لائبریریز میں چھپے وہی چند مخصوص بگ (Bugs)
میں Langchain، Vite، اور Bat جیسی بڑی ریپوزٹریز کو چھوٹے چھوٹے اصلاحی کوڈ (fixes) بھیجنے میں وقت گزارتا ہوں۔
یہ پروجیکٹس مختلف زبانیں اور مختلف ڈومینز استعمال کرتے ہیں۔ ان کے مینٹینرز ماہر ہوتے ہیں۔
حیران کن بات بگ کی تعداد نہیں ہے۔ بلکہ ان کے پیٹرنز ہیں۔ زیادہ تر بگ وہی چند مخصوص شکلیں ہیں جو بس مختلف لباس پہنے ہوئے ہیں۔
ایک بار جب آپ ان شکلوں کو پہچان لیتے ہیں، تو آپ انہیں پروڈکشن تک پہنچنے سے پہلے ہی پکڑ سکتے ہیں۔ یہاں پانچ عام پیٹرنز ہیں جو مجھے نظر آتے ہیں:
غلط ان پٹ کیز (Wrong Input Keys) Langchain میں، ایک
renameفنکشنold_pathنامی کی (key) تلاش کر رہا تھا۔ جبکہ سسٹم نے اصل میںpathنامی کی بھیجی۔ اس سے کوڈ کریش ہو گیا۔ یہ ریویو میں کیوں بچ نکلتے ہیں: یونٹ ٹیسٹ پاس ہو گیا کیونکہ ڈویلپر نے دستی طور پر وہ ان پٹ تیار کیا تھا جو فنکشن کو چاہیے تھا، نہ کہ وہ ان پٹ جو سسٹم اصل میں بھیجتا ہے۔ چیک کرنے کا طریقہ: اگر کوئی فنکشن کسی کی (key) کو پڑھتا ہے، تو دیکھیں کہ وہ آبجیکٹ کہاں بنایا گیا ہے۔ اگر کوئی بھی اس کی کو سیٹ نہیں کر رہا، تو آپ کو ایک بگ مل گیا ہے۔ اصل کالر (caller) کے خلاف ٹیسٹ کریں۔ٹروتھینس ٹریپس (Truthiness Traps) ایک عام غلطی "truthiness" چیک کا استعمال کرنا ہے جب آپ کا مقصد یہ پوچھنا ہو کہ "کیا یہ ویلیو سیٹ ہے"۔ مثال:
const clause = defaultValue ? \DEFAULT ${defaultValue}` : '';` اگر ویلیو 0 ہے، تو کوڈ اس برانچ کو چھوڑ دے گا۔ 0 ایک حقیقی ویلیو ہے، لیکن یہ "falsy" ہے۔ چیک کرنے کا طریقہ: ہمیشہ 0، خالی اسٹرنگز، اور false کا ٹیسٹ کریں۔ اگر آپ کا کوڈ "غائب" اور "موجود لیکن صفر" کے درمیان فرق نہیں کر سکتا، تو وہ خراب ہے۔ان سائنڈ انٹیجر انڈر فلو (Unsigned Integer Underflow) Bat پروجیکٹ میں، ٹرمینل کی چوڑائی معلوم کرنے کے لیے ریاضی کا استعمال کیا گیا تھا۔ اگر چوڑائی بہت کم ہوتی، تو تفریق کے نتیجے میں انڈر فلو ہو جاتا۔ ان سائنڈ ٹائپس پر، یہ ایک بہت بڑی رقم میں بدل جاتا ہے یا کریش ہو جاتا ہے۔ چیک کرنے کا طریقہ: صارف کے ان پٹ کا استعمال کرتے ہوئے کسی بھی ان سائنڈ ٹائپ پر ہونے والی تفریق کے لیے "saturating subtraction" کی ضرورت ہوتی ہے۔ 0 اور 1 کے ساتھ ٹیسٹ کریں۔
انکوڈنگ اور ایج کیسز (Encoding and Edge Cases) ٹیکسٹ کے اصول تب تک سادہ لگتے ہیں جب تک آپ non-ASCII کریکٹرز نہ دیکھ لیں۔ Mistune کو اسٹیکڈ ڈیلیمیٹرز کے ساتھ مسائل کا سامنا تھا جو ایک جنریٹر پیدا کر سکتا ہے۔ Wenmode یونیکوڈ کمبائننگ مارکس کو ہینڈل کرتے وقت ناکام ہو گیا۔ یہ ریویو میں کیوں بچ نکلتے ہیں: ASCII ہر ٹیسٹ پاس کر لیتا ہے۔ بگ صرف اس ان پٹ کے ساتھ ظاہر ہوتے ہیں جو آپ خود ہاتھ سے ٹائپ نہیں کرتے۔ چیک کرنے کا طریقہ: ڈیفرینشل ٹیسٹ استعمال کریں۔ اپنے آؤٹ پٹ کا موازنہ کسی دوسرے، ثابت شدہ امپلیمنٹیشن سے کریں۔
غیر محفوظ پارسنگ (Unsafe Parsing) Vite میں ایک مڈل ویئر تھا جو بغیر کسی گارڈ کے URLs کو ڈیکوڈ کرتا تھا۔ ایک غلط
