فائدہ:
- مصنوعی ذہانت کے ساتھ یونٹ، انضمام اور UI ٹیسٹ تیار کرنے کی صلاحیت ٹیسٹنگ اہرام اور کور کی حد اور خرابی کے حالات کے ساتھ ساتھ خوش کن حالات کے مطابق
- خالی/ بیکار ٹیسٹوں اور پھولی ہوئی کوریج کو یہ چیک کرکے ختم کرنے کی اہلیت کہ ہر ٹیسٹ سے پیدا ہونے والی حقیقت میں ایک رویے کی توثیق ہوتی ہے۔
- اس بات کو یقینی بنانا کہ ٹیسٹ بگ پکڑتا ہے اور AI کو یہ بتا کر اسے بگ ٹھیک کرنے سے روکتا ہے کہ کوڈ کو کیا کرنا چاہیے
کوڈ لکھنا آدھا کام ہے۔ یہ ثابت کرنا کہ کوڈ صحیح طریقے سے کام کرتا ہے باقی نصف ہے۔ موبائل ایپس کا سامنا سینکڑوں مختلف آلات، اسکرین کے سائز، آپریٹنگ سسٹم کے ورژن، اور صارف کے رویے سے ہوتا ہے۔ ان سب کو دستی طور پر جانچنا ناممکن ہے۔ اسی لیے خودکار ٹیسٹنگ (کوڈ ٹیسٹنگ کوڈ — ٹیسٹنگ جو انسانی کلک کے بغیر چلتی ہے) موبائل کوالٹی کی ریڑھ کی ہڈی ہے۔ AI ٹیسٹ لکھنے میں ناقابل یقین حد تک موثر ہے کیونکہ ٹیسٹ لکھنا بالکل اسی قسم کا پیٹرن کام ہے جو اسے پسند کرتا ہے: مخصوص آدانوں کے لیے مخصوص رویے کی توثیق کرنا۔ اس یونٹ میں، ہم AI کے ساتھ یونٹ ٹیسٹنگ، انٹرفیس ٹیسٹنگ اور آٹومیشن کو تیز کرنے کا طریقہ سیکھیں گے، لیکن انسانی آنکھوں کے ذریعے ٹیسٹ کے معیار کو یقینی بنائیں گے۔
ٹیسٹنگ اہرام: کیا جانچنا ہے اور کتنا
ایک صحت مند جانچ کی حکمت عملی ایک پرامڈ سے ملتی جلتی ہے۔ بیس میں یونٹ ٹیسٹ کی ایک بڑی تعداد شامل ہے (فوری ٹیسٹنگ جو کسی ایک فنکشن یا کلاس کو تنہائی میں جانچتا ہے)؛ وہ تیز اور سستے ہیں. درمیان میں کم انضمام کی جانچ ہے (یہ جانچنا کہ متعدد حصے کیسے کام کرتے ہیں)۔ سب سے اوپر کم سے کم UI/اینڈ ٹو اینڈ ٹیسٹنگ ہے (اسکرین پر کلک کرکے ٹیسٹنگ کی جاتی ہے جیسا کہ صارف کرتا ہے)؛ وہ حقیقت پسندانہ لیکن سست اور نازک ہیں۔ AI ہر پرت میں مدد کرتا ہے، لیکن سب سے زیادہ قیمت بنیاد پر ہے: تیزی سے کاروباری منطق کے یونٹ ٹیسٹ تیار کرنا۔
ٹیسٹ کی قسم
دائرہ کار
رفتار
AI کی کارکردگی
یونٹ ٹیسٹنگ
سنگل فنکشن/کلاس
بہت تیز
بہت اعلی
انضمام
interlayer
درمیانہ
اعلی
UI / آخر سے آخر تک
تمام اسکرین اسٹریم
سست
درمیانہ (نازک)
ٹپ: جب AI کو "اس فنکشن کے لیے ٹیسٹ تیار کرنے" کے لیے کہتے ہیں، تو واضح طور پر ایج کیسز کے لیے پوچھیں: خالی ان پٹ، null، منفی نمبر، بہت بڑی قدر، نیٹ ورک کی خرابی۔ AI آسانی سے خوشگوار راستہ پیدا کرتا ہے۔ اصل غلطیاں سرحدوں میں چھپ جاتی ہیں اور اگر آپ انہیں وہاں نہیں چاہتے تو باہر کود جاتی ہیں۔
AI کے ساتھ ٹیسٹ لکھنے کے مراحل
- جانچنے کے لیے رویے کی وضاحت کریں۔ "اس فنکشن کو اس ان پٹ کو یہ آؤٹ پٹ دینا چاہیے۔"
- فریم ورک کی وضاحت کریں۔ Android پر JUnit + MockK، iOS پر XCTest، Espresso (Android) یا XCUITest (iOS) UI کے لیے۔
- حد کی ریاستوں کے لئے پوچھیں۔ خوشگوار منظر نامہ + خرابی + بریک پوائنٹس۔
- فرضی اشیاء کا نظم کریں۔ بیرونی انحصار جیسے کہ نیٹ ورک اور ڈیٹا بیس کو جانچ کے لیے نقل کیا جاتا ہے (اصل سروس کے بجائے فرضی - کنٹرول شدہ موک)۔
- ٹیسٹ چلائیں اور تصدیق کریں۔ کیا امتحان پاس ہوتا ہے، کیا یہ واقعی کسی معنی خیز چیز کی تصدیق کرتا ہے؟
پانچواں مرحلہ اہم ہے۔ AI بعض اوقات بیکار ٹیسٹ تیار کرتا ہے جو "ہمیشہ پاس ہوتے ہیں"۔ مثال کے طور پر، ایک ایسا ٹیسٹ جو کسی چیز کی تصدیق نہیں کرتا یا اس کے اپنے جعلی ڈیٹا کو چیک نہیں کرتا۔ پاس ہونے والا امتحان اور ایک قیمتی امتحان مختلف چیزیں ہیں۔
احتیاط: صرف اس وجہ سے کہ AI پیدا کر سکتا ہے اس کا مطلب یہ نہیں ہے کہ ٹیسٹ درست ہے۔ بعض اوقات AI کوڈ کے موجودہ (شاید ناقص) رویے کو "درست" کے طور پر قبول کرتا ہے اور اسی کے مطابق ٹیسٹ لکھتا ہے۔ اس طرح کی جانچ بگ کو پکڑنے کے بجائے اسے ٹھیک کرتی ہے۔ آپ تعین کرتے ہیں کہ ٹیسٹ کی کیا توقع ہے؛ اے آئی کو بتائیں کہ اسے کیا کرنا چاہیے، نہ کہ کوڈ کیا کرتا ہے۔
ٹیسٹ کوریج کی پیمائش اور غلط فہمی۔
ٹیسٹ کوریج (ٹیسٹ کے ذریعہ کوڈ کا کتنا فیصد چلایا جاتا ہے) ایک مفید لیکن گمراہ کن میٹرک ہے۔ 90% کوریج سے پتہ چلتا ہے کہ 90% کوڈ پر عمل درآمد ہو چکا ہے۔ لیکن یہ تصدیق نہیں کی گئی ہے کہ وہ لائنیں صحیح طریقے سے کام کر رہی ہیں۔ ایک ایسا ٹیسٹ جو ایک لائن چلاتا ہے اور نتیجہ کی جانچ نہیں کرتا ہے دائرہ کار کو بڑھاتا ہے لیکن سیکیورٹی فراہم نہیں کرتا ہے۔ مقصد زیادہ تعداد نہیں بلکہ بامعنی توثیق ہے۔ آپ AI کے ساتھ تیزی سے اسکیل کر سکتے ہیں، لیکن اس بات کو یقینی بنائیں کہ ہر ٹیسٹ دراصل ایک رویے کی جانچ کرتا ہے۔
تین چھوٹے مقدمات
کیس 1 - سرحدی صورتحال پکڑی گئی۔ AI سے بینکنگ ایپلی کیشن میں رقم کی منتقلی کے فنکشن کے ٹیسٹ کے لیے کہا گیا تھا، اور خاص طور پر "منفی رقم" اور "بیلنس سے زیادہ" منظرنامے شامل کیے گئے تھے۔ ٹیسٹ نے انکشاف کیا کہ منتقلی کو منفی رقم کے ساتھ بلاک نہیں کیا گیا تھا۔ یہ پیداوار میں سیکورٹی کا ایک بڑا خطرہ ہو گا۔ ایک لائن کنٹرول شامل کر کے بند کر دیا گیا۔ سبق: باؤنڈری ٹیسٹ سب سے قیمتی ٹیسٹ ہیں۔
کیس 2 - جعلی ٹیسٹ۔ ایک ٹیم کو AI کے ذریعہ تیار کردہ 40 یونٹ ٹیسٹوں کے ساتھ کوریج کو 85 فیصد تک بڑھانے سے راحت ملی۔ معائنہ کے دوران، یہ دیکھا گیا کہ زیادہ تر ٹیسٹوں نے حقیقت میں کسی آؤٹ پٹ کی تصدیق نہیں کی، انہوں نے صرف فنکشن کو کال کیا اور assertTrue(true) لکھا۔ کوریج زیادہ تھی لیکن تحفظ صفر تھا۔ ٹیسٹوں کو درست کیا گیا اور حقیقی توثیق کے ساتھ دوبارہ لکھا گیا۔ سبق: کوریج نمبر جھوٹ بول سکتے ہیں۔
کیس 3 - UI ٹیسٹنگ تیز ہو گئی۔ ایک ای کامرس ٹیم نے 20 منٹ میں AI کے ساتھ ایڈ ٹو کارٹ فلو کی XCUITest اسکرپٹ لکھی۔ ہاتھ سے لکھا جاتا تو آدھا دن لگ جاتا۔ AI نے اندازہ لگایا اسکرین عنصر شناخت کنندگان؛ ٹیم نے انہیں اصلی کوڈ سے ملایا اور انہیں ٹھیک کیا۔ ڈرافٹ کی رفتار حقیقی ہے، لیکن شناخت کنندہ کی تصدیق انسانی کام ہے۔
کمزور فوری / مضبوط اشارہ
کمزور پرامپٹ: "اس فنکشن کے لیے ایک ٹیسٹ لکھیں۔"
طاقتور پرامپٹ: "JUnit5 + MockK کے ساتھ اس کوٹلن فنکشن کے لیے یونٹ ٹیسٹ تیار کریں۔ فنکشن: رقم کی منتقلی (رقم، ذریعہ، ہدف)۔ جانچنے کے لیے برتاؤ (کوڈ کو کیا کرنا چاہیے):- درست منتقلی کا کامیاب ہونا ضروری ہے- منفی یا صفر کی رقم کو مسترد کیا جانا چاہیے- بیلنس سے زیادہ رقم کو مسترد کیا جانا چاہیے، سوائے ایک مناسب چیز کے نیٹ ورک کو ٹیسٹ کرنے کے لیے مناسب چیز کو مسترد کرنا چاہیے۔ وضاحتی ہونا چاہیے، بیرونی سروس کا مذاق اڑائیں، خالی دعویٰ نہ لکھیں۔"
کاپی کرنے کے قابل ٹیمپلیٹس
یونٹ ٹیسٹ ٹیمپلیٹ: "اس فنکشن کے لیے [Language] کے لیے [JUnit/XCTest] یونٹ ٹیسٹ بنائیں۔ متوقع برتاؤ: [کیا کرنا ہے]۔ شامل کریں: خوش منظر، null ان پٹ، بریک پوائنٹس، ایرر کیس۔ ہر ٹیسٹ کو ایک رویے کی تصدیق کرنے دیں؛ معنی خیز دعویٰ استعمال کریں؛ فرضی [کوڈ]"
UI ٹیسٹنگ ٹیمپلیٹ: "[Espresso/XCUITest] کے ساتھ درج ذیل بہاؤ کا UI ٹیسٹ لکھیں: [صارف کا بہاؤ مرحلہ وار]۔ ایکسیسبیلٹی آئی ڈی کے ساتھ اسکرین عناصر کو منتخب کریں، متن کے بجائے id استعمال کریں۔ انتظار کی حکمت عملی شامل کریں۔ مجھے عنصر ids کو اصل کوڈ سے ملانے کی یاد دلائیں۔"
ٹیسٹ آڈٹ ٹیمپلیٹ: "ان ٹیسٹوں کی جانچ کریں: 1) کیا وہ حقیقت میں کسی آؤٹ پٹ/رویے کی تصدیق کرتے ہیں یا وہ کالعدم ہیں؟ 2) کیا وہ حد کے معاملات کا احاطہ کرتے ہیں؟
کوریج آپٹیمائزیشن ٹیمپلیٹ: "اس کلاس کے غیر جانچے گئے حصوں کی شناخت کریں اور معنی خیز ٹیسٹ تجویز کریں۔ حقیقی خطرے والے راستوں کو ترجیح دیں، نہ کہ صرف کوریجز کی تعداد۔ [code]"
عام غلطیاں
- صرف خوش منظر کی جانچ کر رہا ہے۔ غلطیوں کو حد کی حالتوں میں محفوظ کیا جاتا ہے۔ ان سے کھلے دل سے پوچھیں۔
- خالی / بیکار ٹیسٹ کو قبول کرنا۔ assertTrue (true) قسم کے ٹیسٹ دائرہ کار کو بڑھاتے ہیں اور کوئی تحفظ فراہم نہیں کرتے ہیں۔
- اے آئی کے ہونے سے اس بات کی تصدیق ہوتی ہے کہ کوڈ کیا کر رہا ہے۔ جانچ کو توقع کرنی چاہیے کہ کوڈ کو کیا کرنا چاہیے۔ بصورت دیگر یہ بگ کو ٹھیک کرتا ہے۔
- مقصد کے لیے اسکوپ نمبر کو غلط کرنا۔ 90% کوریج کا مطلب 90% درستگی نہیں ہے۔
- UI ٹیسٹنگ میں متن سے لنک کرنا۔ جب متن بدل جاتا ہے تو ٹیسٹ ٹوٹ جاتا ہے۔ مستحکم شناخت کنندہ (id) استعمال کریں۔
- طنز کو غلط طریقے سے ترتیب دینا۔ "یونٹ ٹیسٹ" جو اصل سروس کو کال کرتا ہے سست اور ٹوٹنے والا ہوگا۔
خلاصہ میں
ٹیسٹنگ موبائل کوالٹی کی ریڑھ کی ہڈی ہے، اور AI اس علاقے میں خاص طور پر یونٹ ٹیسٹنگ میں بہت موثر ہے۔ ٹیسٹنگ پرامڈ کی پیروی کریں: بہت سے یونٹس، درمیانے درجے کا انضمام، تھوڑا سا UI ٹیسٹنگ۔ خوش کن منظر نامے کے ساتھ ساتھ معاملات اور غلطی کے راستوں کو محدود کرنے کے لیے واضح طور پر AI سے پوچھیں۔ اس بات کو یقینی بنائیں کہ پیدا ہونے والا ہر ٹیسٹ دراصل ایک رویے کی توثیق کرتا ہے۔ خالی ٹیسٹ اور فلایا ہوا کوریج گمراہ کن ہے۔ سب سے اہم بات یہ ہے کہ اے آئی کو بتائیں کہ کوڈ کو کیا کرنا چاہیے، نہ کہ یہ کیا کرتا ہے، اس لیے ٹیسٹ بگ پکڑتا ہے، اسے ٹھیک نہیں کرتا۔
درخواست کا کام
کاروباری منطق کے فنکشن کے لیے "یونٹ ٹیسٹ ٹیمپلیٹ" کا استعمال کرتے ہوئے AI سے ٹیسٹ کی درخواست کریں (مثلاً ڈسکاؤنٹ کیلکولیشن یا فارم کی توثیق) اور واضح طور پر حد کے کیسز (نال، منفی، بہت بڑے) کی وضاحت کریں۔ تیار کردہ ٹیسٹ چلائیں، پھر وہی ٹیسٹ "ٹیسٹ آڈٹ ٹیمپلیٹ" کے ساتھ آڈٹ کرائیں۔ کم از کم ایک کمزور ٹیسٹ تلاش کریں، اسے مضبوط کریں، اور ٹیسٹ کریں کہ آیا ٹیسٹ فنکشن کی اصل غلطی کو پکڑتے ہیں (ایک چھوٹا سا بگ شامل کرکے)۔
چیک لسٹ
- میں نے ٹیسٹ پرامڈ (ترجیحی یونٹ) کے لیے مناسب پرت کا انتخاب کیا
- میں خوش کن منظر نامے کے علاوہ حد اور غلطی کے معاملات چاہتا تھا۔
- میں نے تصدیق کی کہ ہر ٹیسٹ میں ایک معنی خیز دعویٰ ہوتا ہے۔
- میں نے اے آئی کو بتایا کہ کوڈ کو کیا کرنا چاہیے، نہ کہ یہ کیا کرتا ہے۔
- میں نے اصل خطرے کے راستوں پر توجہ مرکوز کی، کوریجز کی تعداد پر نہیں۔
- [ ] میں نے UI ٹیسٹوں میں مستحکم شناخت کنندہ استعمال کیا، میں متن کا پابند نہیں تھا۔