ٹیسٹ جنریشن کے لیے AI: کہاں یہ مددگار ہے اور کہاں یہ دھوکہ دیتا ہے
AI تیزی سے ٹیسٹ لکھتا ہے۔ یہ ایسے ٹیسٹ بھی لکھتا ہے جو دیکھنے میں تو اصلی لگتے ہیں لیکن غلط چیزوں کی تصدیق کرتے ہیں۔ ہو سکتا ہے کہ آپ کا کوڈ کوریج (coverage) بڑھتا ہوا نظر آئے، لیکن آپ کا کوڈ پھر بھی خراب ہی رہے۔
AI مخصوص کاموں کے لیے بہترین ہے۔ اسے ان کاموں کے لیے استعمال کریں:
- ایک اچھے نمونے سے مزید کام نکالنا۔ اگر آپ ایک بہترین ٹیسٹ لکھتے ہیں، تو AI بالکل اسی انداز میں مزید دس ٹیسٹ لکھ سکتا ہے۔
- بار بار کی ٹائپنگ کو سنبھالنا۔ اسے setup blocks، teardown، اور factory helpers کے لیے استعمال کریں۔
- ابتدائی ڈھانچہ (scaffolding) تیار کرنا۔ یہ آپ کو خالی فائل کے مقابلے میں ایڈیٹر تک تیزی سے پہنچاتا ہے۔
خطرہ تب شروع ہوتا ہے جب آپ AI کو "کنٹریکٹ" (contract) کا فیصلہ کرنے دیتے ہیں۔
اگر آپ AI کو کوئی فنکشن دیں اور اس سے ٹیسٹ مانگیں، تو یہ کوڈ کو پڑھتا ہے اور اس چیز کی جانچ کرتا ہے جو کوڈ فی الحال کر رہا ہے۔ یہ اس چیز کی جانچ نہیں کرتا جو کوڈ کو کرنا چاہیے۔ اس سے ایک بند دائرہ (closed loop) بن جاتا ہے۔ AI ایک مفروضہ قائم کرتا ہے، کوڈ لکھتا ہے، اور پھر ایسے ٹیسٹ لکھتا ہے جو اسی مفروضے سے مطابقت رکھتے ہوں۔
جب پروڈکشن (production) میں بگ (bug) آتے ہیں، تو وہ اس لیے آتے ہیں کیونکہ ٹیسٹ سوٹ بگ کے ساتھ تھا۔
ان تین جالوں سے ہوشیار رہیں:
امپلیمنٹیشن (Implementation) پر مبنی ٹیسٹ AI اکثر بزنس رولز (business rules) کے بجائے لاجک پاتھ (logic paths) کو ٹیسٹ کرتا ہے۔ اگر آپ کوئی چھوٹی سی اندرونی تفصیل تبدیل کرتے ہیں، تو ٹیسٹ ٹوٹ جاتے ہیں چاہے نتیجہ اب بھی درست ہی کیوں نہ ہو۔ یہ ریفیکٹورنگ (refactoring) کو ایک ڈراؤنا خواب بنا دیتا ہے۔
سطحی ایج کیسز (Shallow edge cases) AI نل (nulls)، خالی اسٹرنگز (empty strings)، اور زیرو (zeros) کو ٹیسٹ کرنے میں اچھا ہے۔ یہ سب واضح ہیں۔ یہ "ڈومین ایجز" (domain edges) نہیں ڈھونڈ سکتا۔ یہ آپ کے مخصوص ٹائم زون بگ، آپ کے ڈیٹا بیس کی پیچیدگیاں، یا آپ کے منفرد بزنس رولز سے واقف نہیں ہوتا۔
کمزور مکس (Brittle mocks) AI ہر چیز کو مِک (mock) کرنا پسند کرتا ہے۔ اس سے دو مسائل پیدا ہوتے ہیں:
- مِک غلط ہے۔ یہ کسی API کے ایسے فرضی ورژن کی نقل کرتا ہے جو حقیقت سے میل نہیں کھاتا۔
- مِک امپلیمنٹیشن کو جام کر دیتا ہے۔ یہ حتمی نتیجے کے بجائے اس بات کو ٹیسٹ کرتا ہے کہ آپ کا کوڈ دوسرے فنکشنز کو کیسے کال کرتا ہے۔
AI کو صحیح طریقے سے کیسے استعمال کریں:
"ارادے" (intent) کو AI کی پہنچ سے دور رکھیں۔
- پہلے کنٹریکٹ لکھیں۔ ہر ٹیسٹ کے لیے سادہ انگریزی میں ایک جملہ لکھیں۔ مثال کے طور پر: "Expired codes must return the original amount."
- وہ جملے AI کو دے دیں۔ اسے اس کے اسپرشنز (assertions) لکھنے دیں، لیکن معنی آپ فراہم کریں۔
- حدود (boundaries) پر مِک کریں۔ صرف بیرونی APIs یا ڈیٹا بیس کو مِک کریں۔ اپنے اندرونی ماڈیولز کے اصلی ورژن استعمال کریں۔
- ایک ڈومین ایج کیس خود ہاتھ سے لکھیں۔ جب بھی آپ ایک فنکشن مکمل کریں، وہ ایک چیز لکھ لیں جو آپ کو پریشان کرتی ہے۔ اسے AI کے لیے پرامپٹ (prompt) کے طور پر استعمال کریں۔
AI ایک پروڈکٹیوٹی ٹول (productivity tool) ہے، سوچنے کا متبادل نہیں۔ اسے ٹیسٹ کا باڈی (body) لکھنے کے لیے استعمال کریں، لیکن اسے کبھی یہ فیصلہ نہ کرنے دیں کہ ٹیسٹ کس مقصد کے لیے ہے۔
Source: https://dev.to/nazar_boyko/ai-for-test-generation-where-it-helps-and-where-it-lies-jhm
Optional learning community: https://t.me/GyaanSetuAi
