فائدہ:
- AI کے ساتھ معنی خیز دعوے کے ساتھ یونٹ، انضمام اور ایج کیس ٹیسٹ تیار کرنے کی صلاحیت
- AI سپورٹ کے ساتھ منظم طریقے سے ٹیسٹ کوریج، محدود اقدار اور منفی منظرنامے نکالنے کی صلاحیت
- اس بات کی تصدیق کرنے کی اہلیت کہ AI کے ذریعہ تیار کردہ ٹیسٹ دراصل رویے کی تصدیق کرتے ہیں اور صرف موجودہ کوڈ کو نہیں دہراتے ہیں۔
ٹیسٹنگ وہ طریقہ کار ہے جو ثابت کرتا ہے کہ سافٹ ویئر دراصل وعدے کے مطابق برتاؤ کرتا ہے۔ ایک اچھا ٹیسٹ سویٹ آپ کو سیکنڈوں میں بتاتا ہے کہ آیا تبدیلی کسی چیز کو توڑ دیتی ہے اور انجینئر کو اعتماد کے ساتھ کام کرنے کی آزادی دیتی ہے۔ AI ٹیسٹ تحریر کے سب سے زیادہ تھکا دینے والے اور سب سے زیادہ چھوڑے جانے والے حصے کو تیز کرتا ہے: بہت سارے منظرنامے، بریک پوائنٹس، اور منفی معاملات پیدا کرنا۔ لیکن یہاں ایک ڈرپوک جال ہے: AI ایسے ٹیسٹ لکھ سکتا ہے جو کوڈ کے موجودہ (شاید ناقص) رویے کی تصدیق کرتا ہے، نہ کہ اس کے قیاس کردہ رویے کی؛ یا یہ خالی ٹیسٹ تیار کر سکتا ہے جو ہمیشہ پاس ہوتے ہیں، حقیقت میں کسی چیز کی جانچ نہیں کرتے۔ ٹیسٹ کی اہمیت اس بات میں نہیں ہے کہ آیا یہ پاس ہو جاتا ہے، بلکہ اس بات میں ہے کہ آیا یہ صحیح چیز کی جانچ کرتا ہے اور غلط ہونے پر سرخ ہو جاتا ہے۔
اس یونٹ میں، آپ سیکھیں گے کہ بامعنی دعووں کے ساتھ یونٹ، انٹیگریشن اور ایج کیس ٹیسٹ کیسے تیار کیے جاتے ہیں۔ ٹیسٹ کوریج، بریک پوائنٹس، اور منفی پہلوؤں کو منظم طریقے سے کیسے نکالا جائے؛ اور ہم دیکھیں گے کہ آپ کیسے چیک کر سکتے ہیں کہ AI جو ٹیسٹ تیار کرتا ہے وہ دراصل رویے کی توثیق کرتا ہے۔
تصورات: یونٹ ٹیسٹنگ: تنہائی میں ایک فنکشن/کلاس کی جانچ کرتا ہے۔ انٹیگریشن ٹیسٹنگ: ٹیسٹ کہ ایک سے زیادہ حصے صحیح طریقے سے کام کرتے ہیں۔ اصرار: ایک بیان جو یہ جانچتا ہے کہ نتیجہ توقع کے برابر ہے۔ یہ امتحان کا دل ہے۔ کوریج: کوڈ کا کتنا حصہ ٹیسٹ کے ذریعے چلایا جاتا ہے۔ اعلی کوریج معیار کی ضمانت نہیں دیتا۔
معنی خیز ٹیسٹ تیار کرنا
ایک اچھا امتحان تین چیزیں واضح طور پر کرتا ہے: یہ ایک ریاست قائم کرتا ہے، یہ ایک عمل کرتا ہے، یہ نتیجہ پر زور دیتا ہے۔ AI پر ٹیسٹ پرنٹ کرتے وقت، اس بات کی وضاحت کریں کہ آپ کس طرز عمل کی تصدیق کرنا چاہتے ہیں اور اسے کن منظرناموں کا احاطہ کرنا چاہیے۔ بصورت دیگر، یہ سطحی ٹیسٹ تیار کرتا ہے جو ہمیشہ پاس ہوتے ہیں۔
- جانچنے کے لیے رویے کی وضاحت کریں۔ "حق کے طور پر کیا شمار ہوتا ہے؟" سوال کا واضح جواب دیں۔
- منظر نامے کی قسمیں پوچھیں۔ عام، حد، منفی، خرابی کی حالت۔
- بامعنی دعوی درآمد کریں۔ اس نے صرف "غلطی نہیں پھینکی"، اس نے "صحیح قدر لوٹائی"۔
- ٹیسٹ کی درستگی کو چیک کریں۔ جب آپ جان بوجھ کر کوڈ کو توڑتے ہیں تو کیا ٹیسٹ سرخ ہو جاتا ہے؟
جامع ٹیسٹ جنریشن پرامپٹ: "مندرجہ ذیل 'Applydiscount(amount, coupon)' فنکشن کے لیے یونٹ ٹیسٹ لکھیں۔ درج ذیل زمروں میں کم از کم ایک منظر نامے رکھیں: (1) عام درست کوپن، (2) بریک پوائنٹس (0 رقم، 100% ڈسکاؤنٹ)، (3) منفی (غلط رقم کے طور پر)، (3) منفی (غلط رقم کے طور پر)، کوپن کی رقم (4)۔ ہر ٹیسٹ میں کنکریٹ کی متوقع قدر (صرف 'کام' نہیں)
باؤنڈری ویلیو ایکسٹرکشن پرامپٹ: "اس فنکشن کے ان پٹس کے لیے باؤنڈری ویلیو کا تجزیہ کریں۔ ہر پیرامیٹر کے لیے 'بالکل باؤنڈری پر'، 'باؤنڈری کے بالکل نیچے'، 'باؤنڈری کے بالکل اوپر' کی قدروں کو ٹیبل کے طور پر نکالیں۔ پھر ان ٹیسٹ کے منظرناموں کی فہرست بنائیں جو ان حدود کا احاطہ کریں۔ [دستخط]"
احتیاط: ہائی ٹیسٹ کوریج (مثلاً 90%) یہ ثابت نہیں کرتی کہ کوڈ درست ہے۔ کوریج پیمائش کرتا ہے کہ کتنی قطاریں چلائی گئیں۔ ایسا نہیں ہے کہ وہ لائنیں صحیح نتیجہ پیدا کرتی ہیں۔ بامعنی دعوی کے بغیر ٹیسٹ کوریج کو بڑھاتا ہے لیکن کسی چیز کی ضمانت نہیں دیتا۔ دعوے کا مواد معیار کا تعین کرتا ہے، دعووں کی تعداد نہیں۔
ٹیسٹ خود ٹیسٹنگ: دی لاجک آف میوٹیشن
یہ سمجھنے کا سب سے عملی طریقہ ہے کہ آیا AI سے تیار کردہ ٹیسٹ واقعی کام کرتا ہے جان بوجھ کر کوڈ (میوٹیشن ٹیسٹنگ منطق) کو توڑنا ہے۔ ایک شرط کو ریورس کریں، ایک + نشان بنائیں -؛ اگر کوئی ٹیسٹ سرخ نہیں ہوتا ہے، تو آپ کے ٹیسٹ دراصل اس طرز عمل کو برقرار نہیں رکھتے ہیں۔
کمزوری کا شکار کرنے کا اشارہ: "مجھے بتائیں کہ اس کوڈ میں کون سے ممکنہ کیڑے درج ذیل ٹیسٹ نہیں پکڑ سکتے۔ 5 چھوٹے تغیرات تجویز کریں جو کوڈ میں کیے جاسکتے ہیں (مثال کے طور پر >= کی بجائے >، - کے بجائے +) اور ہر ایک کے لیے اشارہ کریں کہ آیا موجودہ ٹیسٹ اسے پکڑ لیں گے۔ جو نہیں پکڑے گئے ہیں، ان کے لیے ٹیسٹ کی تجویز کریں جو کہ [code:]test کو شامل کیا جائے۔"
کمزور پرامپٹ / مضبوط اشارہ
کمزور: "اس فنکشن کے لیے ایک ٹیسٹ لکھیں۔" (نتیجہ: عام طور پر ایک خوش کن منظر، کمزور دعوی؛ غلطیاں یاد آتی ہیں۔) مضبوط: "اس 'passwordStrong' فنکشن کے لیے ایک ٹیسٹ لکھیں۔ قاعدہ: کم از کم 8 حروف، 1 بڑے حروف، 1 ہندسوں کی ضرورت ہے۔ مندرجہ ذیل منظرناموں کو الگ الگ ٹیسٹ کے طور پر ڈھانپیں: بالکل 8 حروف (حد)، 7 حروف نہیں، کوئی حد نہیں، 7 حروف نہیں خالی سٹرنگ، صرف خالی جگہیں، بہت لمبی (1000 حروف) ہر ٹیسٹ میں واضح طور پر متوقع صحیح/غلط قدر کا دعوی کریں اور ٹیسٹ کو اس کے مطابق نام دیں۔
طاقتور پرامپٹ قواعد اور مکمل باؤنڈری منظرنامے دیتا ہے۔ باؤنڈری جوڑے جیسے "بالکل 8/7 حروف" غلطیاں کرنے کی سب سے عام جگہیں ہیں (الجھاؤ> کے ساتھ>=)۔ کمزور پرامپٹ ان حدود کو نظرانداز کرتا ہے اور غلطی کو پیداوار میں لے جاتا ہے۔
ٹیسٹ کی اقسام اور کہاں استعمال کرنا ہے۔
ٹیسٹ کی قسم
یہ کیا تصدیق کرتا ہے؟
AI کی شراکت
توجہ
یونٹ
سنگل فنکشن/کلاس
کثیر منظرنامے تیزی سے تیار کرتا ہے۔
معنی خیز دعویٰ درکار ہے۔
انضمام
ایک ساتھ کام کرنے والے حصے
منظر نامہ اور فرضی ڈیٹا ڈرافٹ
حقیقی لت والا سلوک
ختم/قبول کریں۔
صارف کا پورا بہاؤ
مرحلہ وار فہرست اور توقع
ٹوٹنے کا شکار
رجعت
پرانی غلطی واپس نہیں آرہی
غلطی کی مخصوص جانچ
ہر فکس میں شامل کیا جانا چاہئے۔
چھوٹے کیسز
کیس 1 - وہ امتحان جو ہمیشہ پاس ہوتا ہے۔ AI ایک فنکشن میں 12 ٹیسٹ لکھتا ہے اور وہ سب پاس ہو جاتے ہیں۔ انجینئر مشکوک ہو جاتا ہے اور جان بوجھ کر فنکشن کی واپسی کی قیمت کو بگاڑ دیتا ہے۔ صرف 3 ٹیسٹ سرخ ہو جاتے ہیں۔ دیگر 9 ٹیسٹوں میں معنی خیز دعوے شامل نہیں ہیں۔ اتپریورتن شکار سے جانچ کو تقویت ملتی ہے۔ حقیقی تحفظ 9 منظرناموں میں حاصل کیا جاتا ہے۔
کیس 2 - حدود کی خرابی۔ عمر کی توثیق کے فنکشن کو "18 اور اس سے زیادہ درست ہے" کہنا چاہیے لیکن >18 لکھا ہوا ہے، یعنی عمر 18 کو مسترد کر دیا گیا ہے۔ غلطی ٹیسٹنگ میں فوری طور پر ظاہر ہوتی ہے کیونکہ AI بریک پوائنٹ تجزیہ کے ذریعے "بالکل 18" منظر نامہ تیار کرتا ہے۔ ایک واحد حد ٹیسٹ کسی بھی حقیقی صارف کی شکایات کو روکتا ہے۔
کیس 3 - موجودہ طرز عمل کو درست کرنا۔ جب AI سے کہا جاتا ہے کہ "اس کوڈ کی بنیاد پر ایک ٹیسٹ لکھیں"، تو یہ ایک ایسا ٹیسٹ تیار کرتا ہے جو کوڈ میں پہلے سے موجود راؤنڈنگ غلطی کو "درست" کے طور پر قبول کرتا ہے۔ جب انجینئر ضرورت کے مطابق ٹیسٹ پرنٹ کرتا ہے (متوقع درست قیمت) نہ کہ کوڈ کے، تو ٹیسٹ سرخ ہو جاتا ہے اور اصل غلطی ہوتی ہے۔ ٹیسٹ کوڈ سے نہیں توقع سے اخذ کیا جانا چاہئے۔
عام غلطیاں
- بے معنی دعویٰ۔ "غلطی نہیں پھینکی" کافی نہیں ہے۔ صحیح قدر کی تصدیق ہونی چاہیے۔
- معیار کے ساتھ الجھا ہوا دائرہ۔ اعلی کوریج درست نتائج کی کوئی ضمانت نہیں ہے۔
- کوڈ کے ذریعہ ٹیسٹ پرنٹ کرنا۔ موجودہ غلطی کو "سچ" میں درست کرتا ہے۔ ٹیسٹ توقعات سے حاصل ہونے چاہئیں۔
- حد کی اقدار کو چھوڑنا۔ مبہم > کے ساتھ >= سب سے عام غلطی ہے۔ باؤنڈری جوڑوں کی جانچ ہونی چاہیے۔
- ٹیسٹ کا خود آڈٹ نہیں کرنا۔ ایسا ٹیسٹ جو آپ کے کوڈ کو توڑنے پر سرخ نہیں ہوتا ہے تحفظ فراہم نہیں کرتا ہے۔
خلاصہ میں
ایک اچھا ٹیسٹنگ سویٹ اعتماد کے ساتھ تبدیلیاں کرنے کی کلید ہے۔ AI تیزی سے بہت سارے منظرنامے، حدود، اور منفی حالات پیدا کرتا ہے۔ لیکن اگر یہ ضروریات کے بجائے کوڈ سے ٹیسٹ حاصل کرتا ہے، تو یہ موجودہ کیڑے ٹھیک کر سکتا ہے یا بے معنی ٹیسٹ لکھ سکتا ہے جو ہمیشہ پاس ہوتے ہیں۔ ہر ٹیسٹ میں ٹھوس متوقع قدر پر زور دیں، پابند جوڑے شامل کریں، اور تصدیق کریں کہ آپ کے ٹیسٹ اصل میں جان بوجھ کر کوڈ کو توڑ کر حفاظت کرتے ہیں۔ دعوے کا مواد، دائرہ کار کی تعداد نہیں، معیار کا تعین کرتا ہے۔
درخواست کا کام
ایک فنکشن کا انتخاب کریں اور اسے ایک جامع ٹیسٹ جنریشن پرامپٹ کے ساتھ چار زمروں (عام، حد، منفی، غلطی) میں ٹیسٹ تیار کرنے کو کہیں۔ ہر ٹیسٹ میں ٹھوس متوقع قدر کا دعوی کریں۔ پھر ٹیسٹ کے خطرے کے شکار پرامپٹ کو چلائیں، کوڈ میں 5 چھوٹے تغیرات تجویز کریں، اور یہ جانچنے کے لیے ٹیسٹ چلائیں کہ وہ کس کو پکڑتے ہیں۔ کم از کم ایک اتپریورتن کے لیے ایک نیا ٹیسٹ شامل کریں جو نہیں پکڑا گیا تھا اور دکھائیں کہ یہ اب سرخ رنگ میں ہے۔
چیک لسٹ
- میں نے ٹیسٹوں کو متوقع/درست رویے کی بنیاد پر پرنٹ کیا، کوڈ کی نہیں۔
- میں نے عام، حد، منفی اور خرابی کے منظرناموں کا احاطہ کیا۔
- میں نے ہر ٹیسٹ میں ٹھوس متوقع قدر پر زور دیا۔
- میں نے بارڈر جوڑوں کا تجربہ کیا (صرف اوپر سے نیچے / بالکل اوپر سے نیچے)۔
- [ ] جان بوجھ کر کوڈ کو توڑ کر، میں نے تصدیق کی کہ ٹیسٹ سرخ ہو گئے ہیں۔
- میں نے ناقابل شناخت تغیرات کے لیے ایک نیا ٹیسٹ شامل کیا۔