فائدہ:
- AI کے ساتھ یونٹ ٹیسٹنگ، ایج کیسز، اور کوریج گیپ تجزیہ تیار کرنے کی صلاحیت
- تصریح کی بنیاد پر ٹیسٹ کی توقعات پرنٹ کرنے کی اہلیت، کوڈ کے موجودہ رویے کی نہیں۔
- یہ جانچنے کی اہلیت کہ آیا کوئی ٹیسٹ درحقیقت انجیکشن کی غلطیوں سے حفاظت کرتا ہے۔
تحریری ٹیسٹ سب سے زیادہ قیمت پیدا کرنے والے کاموں میں سے ایک ہے جسے زیادہ تر ڈویلپرز روک دیتے ہیں۔ ایک اچھا ٹیسٹ سویٹ اس بات کا ثبوت ہے کہ کوڈ توقع کے مطابق کام کرتا ہے اور مستقبل میں ہونے والی تبدیلیوں کے لیے لائف لائن ہے۔ مسئلہ یہ ہے کہ تحریری ٹیسٹ دہرائے جانے والے اور وقت طلب ہوتے ہیں - بالکل اسی قسم کا کام جہاں AI چمکتا ہے۔ لیکن ایک کیچ ہے: AI اکثر کوڈ کے موجودہ رویے کی جانچ کرتا ہے، اس طرز عمل کی نہیں جو اسے ہونا چاہیے۔ اس فرق کو سنبھالنا اس یونٹ کا جوہر ہے۔
اس یونٹ میں، آپ یونٹ ٹیسٹنگ سیکھیں گے (ٹیسٹنگ جو اکیلے کسی فنکشن کی جانچ کرتا ہے، تنہائی میں)، ایج کیس ٹیسٹ اور AI کے ساتھ ٹیسٹ ڈیٹا تیار کرنا؛ ٹیسٹ کوریج میں خلا کو ختم کرنا؛ اور AI ٹیسٹوں پر اندھا اعتماد کیوں خطرناک ہے۔
جانچ کے دو پہلو: فکسنگ رویہ بمقابلہ تصدیق
ایک ٹیسٹ دو مختلف مقاصد کو پورا کر سکتا ہے۔ پہلی توثیق ہے: یہ جانچتا ہے کہ کوڈ درست ہے، کہ یہ تفصیلات کے مطابق ہے۔ دوسرا رجعت تحفظ ہے: یہ آج کوڈ کے رویے کو منجمد کر دیتا ہے، لہذا اگر کوئی غلطی سے کل اسے تبدیل کر دیتا ہے، تو ٹیسٹ ٹوٹ جائے گا اور مطلع کر دے گا۔
AI مؤخر الذکر میں بہت اچھا ہے؛ یہ کوڈ کو دیکھتا ہے اور ایسے کیسز تیار کرتا ہے جو جانچتے ہیں کہ "یہ ابھی کیا کر رہا ہے۔" لیکن اگر کوڈ شروع سے ہی غلط ہے تو، AI اس غلط رویے کو "درست" کے طور پر پن کر سکتا ہے۔ لہذا آپ کو AI کے ذریعہ تیار کردہ ہر ٹیسٹ کے دعوے کا جائزہ لینا چاہئے: "کوڈ 42 دیتا ہے اور ٹیسٹ 42 کی توقع کرتا ہے" کا مطلب یہ نہیں ہے کہ 42 درست جواب ہے۔
احتیاط: اگر AI ٹیسٹ پاس کرتا ہے، تو اس کا مطلب یہ نہیں ہے کہ کوڈ "کام کر رہا ہے"؛ اس کا مطلب صرف یہ ہے کہ "یہ برتاؤ کرتا ہے جیسا کہ AI کی توقع ہے"۔ آپ وضاحت کو دیکھ کر فیصلہ کریں کہ توقع درست ہے یا نہیں۔
مرحلہ وار: AI کے ساتھ مضبوط ٹیسٹ لکھنا
- تفصیلات دیں، نہ صرف کوڈ۔ اگر آپ معلومات شامل کرتے ہیں "اس فنکشن کو یہ کرنا چاہئے"، AI درست توقع لکھ سکتا ہے؛ اگر آپ صرف کوڈ فراہم کرتے ہیں تو یہ موجودہ طرز عمل کی جانچ کرے گا۔
- ایج کیسز کے لیے پوچھیں۔ خالی، کالعدم، صفر، منفی، بہت بڑا، خراب فارمیٹ، ہم آہنگی — واضح طور پر خوش راہ کا دعویٰ کریں۔
- جانچ کے فریم ورک اور انداز کی وضاحت کریں۔ "پائیٹیسٹ کا استعمال کریں"، "آرنج-ایکٹ-اسسرٹ پیٹرن"، "ہر ٹیسٹ کو ایک چیز کی جانچ کرنے دیں" وغیرہ۔
- توقعات کی جانچ کریں (دعویٰ)۔ اس تصریح سے موازنہ کریں کہ ہر دعویٰ صحیح قدر کی جانچ کرتا ہے۔
- دائرہ کار میں خلا کو بند کریں۔ موجودہ ٹیسٹ دیں اور پوچھیں "کن برانچوں اور کیسز کا ٹیسٹ نہیں کیا گیا؟" آپ کو پوچھنا؛ پھر تیار کردہ اضافی ٹیسٹوں کی تصدیق کریں۔
تین چھوٹے کیسز
کیس 1 - 52% سے 85% تک کوریج۔ ایک سروس ماڈیول کی ٹیسٹ کوریج 52% تھی۔ ٹیم نے موجودہ ٹیسٹوں کو AI کو کھلایا، اس نے غیر جانچ شدہ شاخوں کی فہرست بنائی اور ان کے لیے ٹیسٹ تیار کیا۔ انسانی جائزے کے ساتھ، کوریج بڑھ کر 85 فیصد ہو گئی۔ اس عمل میں، AI نے ایک بگ برانچ میں ایک حقیقی بگ (ایک راستہ جس نے غلط ایرر کوڈ واپس کیا) کو بے نقاب کیا جس کا پہلے کبھی تجربہ نہیں کیا گیا تھا۔
کیس 2 - غلط توقعات کے تعین کا جال۔ ایک پیسے راؤنڈنگ تقریب اصل میں غلط تھا; 2.675 سے 2.67 تک گول کرنے کے بجائے، یہ 2.68 کے بجائے 2.67 کو گول کر رہا تھا۔ AI نے کوڈ کو دیکھا اور لکھا assert round_money(2.675) == 2.67 — غلطی کو "سچ" کے طور پر منجمد کرنا۔ جب ڈویلپر نے تصریح پڑھی تو اس نے توقع کو درست کیا اور اصل بگ پکڑ لیا۔ اصول کی جانچ کرنے سے، کوڈ کی نہیں، فرق پڑا۔
کیس 3 - کنارے ریاستی دھماکہ۔ تاریخ کی حد کے فنکشن کے لیے AI سے صرف "ایج کیسز" کے لیے پوچھتے وقت؛ اس نے 8 کیسز بنائے جیسے start=end، ریورس وقفہ، لیپ ایئر 29 فروری، مختلف ٹائم زونز اور صفر وقفہ۔ ان میں سے دو (ریورس اسپیسنگ اور لیپ سال) دراصل خرابی کا سبب بن رہے تھے۔ دستی طور پر ان معاملات پر غور کرنا اکثر چھوڑ دیا جاتا ہے۔ AI یہاں ایک "Edge-case brainstorming" پارٹنر بن گیا۔
چار کاپی ایبل ٹیمپلیٹس
تفصیلات پر مبنی ٹیسٹ جنریشن:
کردار: ایک ڈویلپر جو ٹیسٹ لکھتا ہے۔ فریم ورک: {{pytest/JUnit/Jest...}}. فنکشن کو کیا کرنا چاہیے (تفصیل): {{rule}} درج ذیل فنکشن کے لیے ٹیسٹ لکھیں۔ تصریح کے مطابق توقعات لکھیں، کوڈ کی موجودہ آؤٹ پٹ نہیں۔ ہیپی پاتھ + کم از کم 4 ایج کیسز شامل کریں۔ ہر ٹیسٹ کو ایک چیز کی جانچ کرنے دیں، وضاحتی نام استعمال کریں۔ {{فنکشن}}
ایج کیس دماغی طوفان:
کنارہ/ناکامی کے کیسز کی فہرست بنائیں جو اس فنکشن کی جانچ میں آزمائے جائیں (نال، کالعدم، بریک پوائنٹس، خراب فارمیٹ، کنکرنسی، بیرونی خرابی)۔ہر کیس کے لیے: ان پٹ، متوقع رویہ۔ ابھی کوڈ نہ لکھیں، صرف فہرست بنائیں۔{{function}}
کوریج گیپ تجزیہ:
ذیل میں افعال اور دستیاب ٹیسٹ ہیں۔ کن شاخوں، حالات اور کیسز کی جانچ نہیں کی گئی؟ کمیوں کی فہرست بنائیں اور صرف کمیوں کے لیے نئے ٹیسٹ لکھیں۔ موجودہ کو نہ دہرائیں۔ فنکشن:{{function}}ٹیسٹ:{{existing_tests}}
ٹیسٹ ڈیٹا / فرضی آبجیکٹ جنریشن:
{{function/service}} ٹیسٹ کے لیے حقیقت پسندانہ ٹیسٹ ڈیٹا بنائیں: درست نمونے، بارڈر کے نمونے اور غلط نمونے الگ الگ۔ بیرونی انحصار {{X}} کے لیے ایک سادہ فرضی رویہ تجویز کریں۔ حقیقی خفیہ ڈیٹا/PII استعمال کرنا؛ جعلی ڈیٹا بنائیں۔
کمزور فوری / مضبوط اشارہ
کمزور: "اس فنکشن کے لیے ایک ٹیسٹ لکھیں۔"
Strong: "pytest کے ساتھ۔ function apply_discount(total, percent) — قاعدہ: ڈسکاؤنٹ 0%–30% ہونا چاہیے، حد سے باہر ValueError پھینکنا چاہیے، نتیجہ 2 اعشاریہ پر ہونا چاہیے۔ اس اصول کے مطابق توقعات لکھیں (کوڈ کے لحاظ سے نہیں۔ خوش راہ + ان ایج کیسز: %3، منفی %3، %3، 0% = منفی)، %3۔ [کوڈ]"
وہ ریلیز کا مضبوط اصول دیتا ہے اور کہتا ہے کہ "توقع کو اصول کے مطابق لکھیں، کوڈ کے نہیں"؛ یہ ایک جملہ AI فکسنگ کے غلط برتاؤ کے جال کو بند کرتا ہے۔
ٹیسٹ کی قسم
AI کی شراکت
انسانی کنٹرول
مبارک روڈ یونٹ ٹیسٹنگ
تیز کنکال
کیا توقع درست ہے؟
ایج کیسز
وسیع دماغی طوفان
غیر متعلقہ کو ختم کریں۔
دائرہ کار کے فرق کو بھرنا
چھوڑی ہوئی شاخیں تلاش کرتا ہے۔
اہمیت کی تصدیق کریں۔
ٹیسٹ ڈیٹا/مذاق
حقیقت پسندانہ نمونہ تیار کرتا ہے۔
کوئی PII نہیں، حقیقت پسندی کا کنٹرول
ٹیسٹ معیار کا انتظام کرتے ہیں، اس کی ضمانت نہیں دیتے
ہائی ٹیسٹ کوریج اعتماد دیتی ہے، لیکن یہ گمراہ کن بھی ہو سکتا ہے: 100 فیصد کوریج کا مطلب ہے "ہر لائن چلائی گئی تھی،" نہیں "ہر لائن درست ہے۔" AI کے ساتھ کوریج بڑھانا آسان ہے۔ اصل قدر بامعنی توقعات لکھنے میں ہے۔ ٹیسٹ کی قدر یہ ہے کہ کوڈ ٹوٹ جانے پر آپ کو توڑنے اور متنبہ کرنے کی صلاحیت ہے۔ یہی وجہ ہے کہ AI سے تیار کردہ ٹیسٹ اس سوال پر مبنی ہیں کہ "کیا کوڈ تبدیل ہونے پر واقعی ٹوٹ جاتا ہے؟" سوال کے ساتھ اس کی جانچ کریں؛ جان بوجھ کر لائن توڑنا اور ٹیسٹ بریک (میوٹیشن آئیڈیا) دیکھنا اس بات کا ثبوت ہے کہ ٹیسٹ نے کام کیا۔
ٹپ: یہ دیکھنے کے لیے کہ آیا AI تحریری ٹیسٹ کام کرتا ہے، کوڈ میں ایک چھوٹا سا بگ بنائیں (جیسے a + سے a - کو تبدیل کریں) اور دیکھیں کہ آیا ٹیسٹ ٹوٹ جاتا ہے۔ اگر یہ نہیں ٹوٹتا ہے، تو یہ امتحان آپ کی حفاظت نہیں کرتا ہے۔
عام غلطیاں
- قاعدہ دیے بغیر ٹیسٹ مانگنا۔ ماڈل موجودہ رویے کو منجمد کرتا ہے۔ غلطی کو "سچ" کے طور پر ٹھیک کرتا ہے۔
- ان کو پڑھے بغیر توقعات کو قبول کرنا۔ جانچ گمراہ کن ہے اگر آپ یہ چیک نہیں کرتے ہیں کہ دعوی درست قدر کی جانچ کر رہے ہیں۔
- صرف خوشی کے راستے کی جانچ کرنا۔ حقیقی غلطیاں حاشیے پر رہتی ہیں۔ واضح طور پر ایج کیسز کے لیے پوچھیں۔
- مقصد کی گنجائش کو غلط سمجھنا۔ اعلی فیصد درست سلوک کی کوئی ضمانت نہیں ہے۔
- اصلی/پوشیدہ ڈیٹا کو ٹیسٹ ڈیٹا کے طور پر بنانا۔ کسٹمر کے ڈیٹا یا رازوں کو جانچ اور اسٹوریج میں داخل نہیں ہونا چاہئے؛ مصنوعی ڈیٹا تیار کریں۔
خلاصہ میں
AI تحریری ٹیسٹوں سے زیادہ دہرائے جانے والے بوجھ کو اٹھا لیتا ہے: یہ تیز کنکال، کنارے کے کیسز کی بڑی فہرستیں، اور کوریج گیپ کے تجزیے تیار کرتا ہے۔ لیکن سب سے اہم نکتہ توقعات کا ہے: AI کوڈ کے موجودہ رویے کی جانچ کرتا ہے، جبکہ جانچ کو تفصیلات کے مطابق لکھا جانا چاہیے۔ قاعدہ دیں، توقعات کو چیک کریں، ایج کیسز کو نافذ کریں، اور جانچیں کہ آیا ٹیسٹ واقعی بگ کو انجیکشن لگا کر حفاظت کرتے ہیں۔ ٹیسٹ کوریج ایک ٹول ہے، مقصد نہیں۔
درخواست کا کام
ایک فنکشن کا انتخاب کریں اور پہلے صرف اس کا کوڈ دے کر AI کو ٹیسٹ پرنٹ کریں۔ توقعات کو نوٹ کریں۔ پھر اسی فنکشن کے لیے تصریح (مطلوبہ رویہ) دیتے ہوئے دوبارہ ٹیسٹ پرنٹ کریں۔ دو ٹیسٹ سیٹوں کی توقعات کا موازنہ کریں: کیا کوئی مختلف ہے، جو ایک حقیقی بگ کو ظاہر کرتا ہے؟ آخر میں، تصدیق کریں کہ تیار کردہ ٹیسٹوں میں سے ایک نے کوڈ میں جان بوجھ کر بگ شامل کرکے اور ٹیسٹ کا وقفہ دیکھ کر کام کیا۔
چیک لسٹ
- [ ] میں تمیز کرتا ہوں کہ ٹیسٹ رویے کو درست کرنے یا اس کی تصدیق کرنے کے لیے ہے۔
- جب میں ٹیسٹ کی درخواست کرتا ہوں تو میں وہ قاعدہ (تفصیلات) دیتا ہوں جو کوڈ کی بجائے اپنی جگہ پر ہونا چاہیے۔
- [ ] میں ہر پیدا کردہ دعوے کا تصریح سے موازنہ کرتا ہوں۔
- [] میں واضح طور پر کنارے اور ناکامی کے معاملات کی درخواست کرتا ہوں۔
- میں فیصد کوریج کو ایک ٹول کے طور پر دیکھتا ہوں، مقصد کے نہیں۔
- [ ] میں جانچتا ہوں کہ آیا کوئی ٹیسٹ درحقیقت انجیکشن کی غلطیوں سے حفاظت کرتا ہے۔