69 AI کے ذریعے لکھے گئے ٹیسٹوں نے ایک Python ماڈیول کو پاس کیا، تاہم ایک تجربے سے معلوم ہوا کہ ایک ہدف شدہ (targeted) ٹیسٹ جنریشن کے طریقے نے 53 میں سے 44 شامل کیے گئے (injected) نقائص کو پکڑ لیا۔ پورے ہفتے کے آخر تک جاری رہنے والا یہ پروٹو ٹائپ موجودہ لارج لینگویج ماڈلز (LLM) کی ٹیسٹ لکھنے کی صلاحیت میں ایک بنیادی کمزوری کو ثابت کرتا ہے: فیڈ بیک لوپ کے بغیر جو یہ چیک کرے کہ آیا کوئی ٹیسٹ واقعی کسی معلوم نقص (defect) پر فیل ہوتا ہے یا نہیں، تیار کردہ ٹیسٹ سیٹ بے عیب نظر آ سکتا ہے جبکہ وہ انہی بگز (bugs) کو نظر انداز کر رہا ہو جنہیں اسے بے نقاب کرنا تھا۔
یہ تجربہ کیوں اہم ہے
خودکار ٹیسٹ جنریشن کوڈ اور کوریج (coverage) کے درمیان فرق کو کم کرنے کا وعدہ کرتی ہے، خاص طور پر جب ڈویلپرز یونٹ ٹیسٹ تیار کرنے کے لیے LLMs پر انحصار کرتے ہیں۔ زیادہ تر عوامی بینچ مارکس کامیابی کا اندازہ لائن کوریج (line coverage) کی پیمائش سے کرتے ہیں—یعنی آیا ٹیسٹ کے دوران کوڈ کی ہر لائن چلتی ہے۔ یہ پیمانہ گمراہ کن ہو سکتا ہے: ایک لائن چل تو سکتی ہے لیکن ٹیسٹ اس کے درست طرزِ عمل (behavior) کی تصدیق نہ کرے۔ میوٹیشن ٹیسٹنگ (Mutation testing) اس اندھے پن کو دور کرتی ہے، جس میں جان بوجھ کر سورس کوڈ کو خراب کیا جاتا ہے (جیسے موازنہ بدلنا، کوئی سٹیٹمنٹ ڈیلیٹ کرنا وغیرہ) اور یہ دیکھا جاتا ہے کہ آیا موجودہ ٹیسٹ اس تبدیلی کو پکڑ پاتے ہیں یا نہیں۔ اگر میوٹ شدہ (mutated) ورژن اب بھی پاس ہو جاتا ہے، تو اس کا مطلب ہے کہ ٹیسٹ سیٹ نے ایک حقیقی نقص کو نظر انداز کر دیا۔
تجربے میں LLM کو ٹیسٹ تیار کرنے کے لیے پرامپٹ (prompt) دینے کے تین طریقوں کا موازنہ کیا گیا:
- Bulk prompting – "مزید ٹیسٹ" کی ایک واحد درخواست نے 69 ٹیسٹ تیار کیے جو غیر تبدیل شدہ کوڈ پر تو پاس ہو گئے لیکن 53 میوٹیشنز میں سے صرف 9 کو پکڑ سکے۔
- One-test-per-call, untargeted – ماڈل سے بار بار ایک ہی ٹیسٹ کے لیے کہا گیا لیکن نقائص کے بارے میں کوئی رہنمائی نہیں دی گئی؛ اس نے صرف 2 میوٹیشنز کو پکڑا۔
- Targeted prompting with a mutation-testing gate – ماڈل نے ہر اس میوٹیشن کو دیکھا جسے چھوڑ دیا گیا تھا اور اسے ایسا ٹیسٹ لکھنے کے لیے کہا گیا جو میوٹ شدہ کوڈ پر فیل ہو جائے لیکن صاف (clean) ورژن پر پاس ہو جائے۔ اس طریقے سے 44 کامیاب ٹیسٹ حاصل ہوئے۔
واضح فرق—44 بمقابلہ 9 یا 2—یہ ظاہر کرتا ہے کہ ایک محدود اور نقص پر مبنی فیڈ بیک لوپ، AI کے ذریعے تیار کردہ ٹیسٹوں کی نقص تلاش کرنے کی صلاحیت کو ڈرامائی طور پر بہتر بنا سکتا ہے۔
میوٹیشن ٹیسٹنگ گیٹ (mutation-testing gate) کیسے کام کرتا ہے
- میوٹیشنز شامل کرنا (Inject mutations) – ہارس (harness) اصل سورس میں چھوٹے اور منظم تبدیلیاں کرتا ہے (مثلاً کسی کنڈیشنل کو الٹ دینا، کوئی لائن ہٹا دینا)۔ ہر میوٹیشن ایک ممکنہ بگ (bug) کی نمائندگی کرتی ہے۔
- موجودہ ٹیسٹ سیٹ چلانا – اگر سیٹ اب بھی پاس ہو جاتا ہے، تو میوٹیشن کا پتہ نہیں چل سکا۔
- LLM کو پرامپٹ دینا – ماڈل کو مخصوص میوٹیشن دی جاتی ہے اور اسے ایسا ٹیسٹ تیار کرنے کے لیے کہا جاتا ہے جو میوٹ شدہ کوڈ پر فیل ہو لیکن اصل کوڈ پر کامیاب رہے۔
- نئے ٹیسٹ کی تصدیق کرنا – ٹیسٹ کو صرف اسی صورت میں رکھیں اگر وہ صاف کوڈ پر پاس ہو اور میوٹ شدہ ورژن پر فیل ہو۔
- تکرار (Iterate) – ہر غیر پکڑی گئی میوٹیشن کے لیے یہی عمل دہرائیں۔
"گیٹ" (gate) دراصل یہی تصدیقی مرحلہ ہے۔ یہ ہر اس ٹیسٹ کو فلٹر کر دیتا ہے جو ہدف شدہ نقص کے حوالے سے حساسیت نہیں دکھاتا، اس بات کو یقینی بناتے ہوئے کہ ہر برقرار رکھا گیا ٹیسٹ نقص کی نشاندہی کرنے کی ثابت شدہ اہمیت رکھتا ہو۔
اعداد و شمار سے حاصل ہونے والے اسباق
- نہ پہنچنے والا کوڈ (Unreached code) مس شدہ نقائص کی وجہ بنتا ہے – پختہ کوڈ بیسز (codebases) میں، بہت سی لائنیں موجودہ ٹیسٹوں کے ذریعے کبھی استعمال نہیں ہوتیں۔ تجربے سے معلوم ہوا کہ زیادہ تر غیر شناخت شدہ میوٹیشنز ایسے ہی ناقابل رسائی علاقوں میں تھیں۔
- گیٹ غلط وجہ سے درست ٹیسٹوں کو مسترد کر دیتا ہے – ہر مسترد شدہ ٹیسٹ صاف کوڈ پر پاس ہوا تھا؛ گیٹ نے انہیں اس لیے ختم کر دیا کیونکہ وہ مخصوص میوٹیشن پر فیل نہیں ہوئے۔ ایک ٹیسٹ بالکل درست ہو سکتا ہے لیکن زیرِ غور نقص کے لیے غیر متعلقہ ہو سکتا ہے۔
- ہدف شدہ ٹیسٹ انتہائی مخصوص ہوتے ہیں – 44 کامیاب ٹیسٹوں میں سے، 36 نے بالکل ایک میوٹیشن کو پکڑا۔ ٹیسٹ سیٹ وسیع دعووں (assertions) کے بجائے محدود چیکس کا مجموعہ بن گیا، جس سے مینٹین ایبلٹی (maintainability) اور اوور فٹنگ (over-fitting) کے بارے میں سوالات اٹھتے ہیں۔
نتائج کن پہلوؤں کا احاطہ نہیں کرتے
اس طریقے کی طاقت—یعنی کسی معلوم نقص پر اس کی توجہ—اس کی عمومی حیثیت کو بھی محدود کرتی ہے۔ ڈیزائن کے مطابق، ماڈل کو نئے اور غیر دیکھے ہوئے بگ تلاش کرنے کی ترغیب نہیں دی جاتی؛ یہ صرف پیش کردہ میوٹیشنز کا "جواب دینا" سیکھتا ہے۔ ایک ایسا ٹیسٹ جو صرف ایک انجینئر شدہ تبدیلی پر فیل ہوتا ہے، وہ حقیقی دنیا کے ریگریشنز (regressions) کے خلاف اعتماد فراہم نہیں کر سکتا جو مختلف انداز میں ظاہر ہوتے ہیں۔ مزید برآں، تجربے میں جان بوجھ کر ایک چھوٹا ماڈیول اور ہاتھ سے تیار کردہ ہارس استعمال کیا گیا؛ اس طریقے کو بڑے اور متنوع کوڈ بیسز تک پھیلانے سے کارکردگی کی رکاوٹیں (performance bottlenecks) اور زیادہ انجینئرنگ اخراجات سامنے آ سکتے ہیں۔
AI سے چلنے والی ٹیسٹنگ کے اثرات
- میٹرکس اہمیت رکھتے ہیں – صرف لائن کوریج پر انحصار کرنے سے تحفظ کا غلط احساس ہو سکتا ہے۔ میوٹیشن ٹیسٹنگ (Mutation testing) رویے پر مبنی ایک بہتر پیمانہ فراہم کرتی ہے، اور اسے ایویلیوایشن لوپ (evaluation loop) میں شامل کرنے سے ابتدائی طور پر خامیوں کا پتہ چل سکتا ہے۔
- فیڈ بیک لوپس آؤٹ پٹ کو بہتر بناتے ہیں – گیٹ (gate) سے حاصل ہونے والا ڈرامائی فائدہ اس بات پر زور دیتا ہے کہ LLMs کو ون شاٹ جنریشن کے بجائے تکراری اور اصلاحی پرامپٹس (iterative, corrective prompts) سے فائدہ ہوتا ہے۔
- ٹولنگ میں شفافیت ضروری ہے – مصنف نے خود پیمائشی ہارنس (measurement harness) میں 11 بگ دریافت کیے، جس کی وجہ سے شروع میں رپورٹ شدہ کامیابی کی شرح ضرورت سے زیادہ نظر آ رہی تھی۔ نتائج کے ساتھ ہارنس کو شائع کرنے سے کمیونٹی کو ایویلیوایشن پائپ لائن کا آڈٹ کرنے اور اسے بہتر بنانے کا موقع ملتا ہے۔
آگے کیا دیکھنا ہے
- ہائبرڈ پائپ لائنز – وسعت کے لیے بلک ٹیسٹ جنریشن اور گہرائی کے لیے ہدف شدہ میوٹیشن پر مبنی ریفائنمنٹ کو یکجا کرنے سے ایک متوازن سوٹ حاصل ہو سکتا ہے جو کوڈ کو کور کرنے کے ساتھ ساتھ رویے کی تصدیق بھی کر سکے۔
- خودکار ہارنس تصدیق – جیسے جیسے زیادہ محققین میوٹیشن ٹیسٹنگ کو ایک بینچ مارک کے طور پر اپنائیں گے، چھپی ہوئی پیمائشی غلطیوں سے بچنے کے لیے ایسے ٹولز اہم ہو جائیں گے جو اپنے میوٹیشن سیٹس اور ایگزیکیوشن پائپ لائنز کی خود بخود تصدیق کر سکیں۔
- جنرلائزیشن اسٹڈیز – مستقبل کے کام میں اس بات کا تجربہ کیا جانا چاہیے کہ کیا گیٹ کے ذریعے تیار کردہ ٹیسٹ غیر دیکھے ہوئے بگ یا پروڈکشن ماحول میں لاگو ہونے پر اپنی تاثیر برقرار رکھتے ہیں، تاکہ محدودیت کے خدشے کو دور کیا جا سکے۔
خلاصہ
ایک سادہ، میوٹیشن ٹیسٹنگ فیڈ بیک لوپ ایک ایسے LLM کو جو پاس ہونے والے مگر بے کار ٹیسٹ لکھتا ہے، ایک ایسے ٹول میں بدل سکتا ہے جو حقیقت میں غلطیوں کو دریافت کرتا ہے۔ تجربہ ظاہر کرتا ہے کہ ایسے گیٹ کے بغیر، AI سے تیار کردہ ٹیسٹ صرف کوریج کا ایک ظاہری ڈھانچہ بننے کا خطرہ رکھتے ہیں، اور ان بگوں کو پکڑنے میں ناکام رہتے ہیں جنہیں انہیں پکڑنا چاہیے تھا۔ ڈویلپرز اور محققین دونوں کے لیے، ٹیسٹ جنریشن کو رویے پر مرکوز تصدیق (behavior-focused validation) کے ساتھ جوڑنا اب اختیاری نہیں رہا—یہ اس بات کو یقینی بنانے کا واحد طریقہ ہے کہ خودکار ٹیسٹنگ کوڈ بیس میں حقیقی تحفظ فراہم کرے۔
