میں نے اپنی ٹیم کے AI کوڈ کا آڈٹ کیا۔ یہاں وہ سب ہے جو ہمیں ملا۔

میری ٹیم نے ریکارڈ رفتار سے کوڈ تیار کرنے کے لیے AI کا استعمال کیا۔ ہم نے ایک تہائی وقت میں فیچرز مکمل کر لیے۔ ہماری رفتار (velocity) بہترین نظر آ رہی تھی۔ ہماری ٹیسٹ کوریج 91% تک پہنچ گئی۔

پھر ہم ایک مشکل رکاوٹ سے ٹکرا گئے۔

ہمیں پروڈکشن بگ (production bugs) کا سامنا کرنا پڑا جنہیں ٹھیک کرنا مشکل تھا۔ ایک سادہ ریفیکٹر (refactor) میں چار دن کے بجائے چار ہفتے لگ گئے۔ ایک نئے ملازم نے مجھے بتایا کہ کوڈ صاف ستھرا تو تھا لیکن اسے سمجھنا ناممکن تھا۔

ہم نے کوڈ بیس (codebase) کا آڈٹ کرنے میں تین ہفتے صرف کیے۔ ہمیں ایسا تکنیکی قرض (technical debt) ملا جسے کوئی بھی اسکینر نہیں پکڑ سکتا تھا۔ یہ قرض آرکیٹیکچرل (architectural) تھا۔ یہ بیہیویئرل (behavioral) تھا۔

AI ٹولز آپ کے پرامپٹ (prompt) میں موجود فوری مسئلے کو حل کرتے ہیں۔ وہ مقامی کام (local task) کے لیے بہتر کام کرتے ہیں۔ وہ پورے سسٹم کو نہیں سمجھتے۔ انہیں یہ نہیں معلوم کہ آپ جلد ہی کن سروسز کو ختم کرنے کا ارادہ رکھتے ہیں۔ انہیں آپ کے طویل مدتی ڈیٹا ماڈلز (data models) کے بارے میں علم نہیں ہوتا۔

اس کا نتیجہ ایسا کوڈ ہے جو مقامی طور پر تو درست ہے لیکن عالمی سطح پر کمزور (fragile) ہے۔

ہمیں چار مخصوص پیٹرنز (patterns) ملے:

  1. چھپے ہوئے ایج کیسز (Hidden Edge Cases) AI ایسا کوڈ لکھتا ہے جو آپ کے دیے گئے ٹیسٹ پاس کر لے۔ یہ اپنی غلطیوں کے لیے ٹیسٹ لکھنے میں ماہر نہیں ہے۔
  • حل: ایک انجینئر کو کوڈ دیکھے بغیر اپنے کسی ساتھی کو سمجھانا چاہیے۔ اگر وہ اسے نہیں سمجھا سکتا، تو وہ اسے مرج (merge) نہیں کر سکتا۔
  1. ٹیسٹ کوریج تھیٹر (Test Coverage Theater) AI ایسے ٹیسٹ تیار کرتا ہے جو موجودہ کوڈ کو کور کرتے ہیں۔ یہ اس بات کے لیے ٹیسٹ نہیں لکھتا کہ سسٹم کو اصل میں کیسا کام کرنا چاہیے۔
  • حل: ہر AI ٹیسٹ سویٹ (test suite) کو ایک مخالفانہ جائزے (adversarial review) سے گزرنا چاہیے۔ دوسرے انجینئر کو کوڈ کو توڑنے (break کرنے) کی کوشش کرنی چاہیے۔
  1. غیر مرئی کپلنگ (Invisible Coupling) AI کسی پرامپٹ کو جلدی حل کرنے کے لیے ڈیپینڈنسیز (dependencies) شامل کر دیتا ہے۔ یہ آپ کے بلنگ یا یوزر ماڈیولز میں نوٹیفیکیشن لاجک کو شامل کر سکتا ہے۔ اس سے بعد میں سروسز کو الگ کرنا ناممکن ہو جاتا ہے۔
  • حل: AI کے ذریعے متعارف کرائی گئی کسی بھی نئی ڈیپینڈنسی کی منظوری ایک سینئر انجینئر کو دینی چاہیے۔
  1. سطحی ایرر ہینڈلنگ (Shallow Error Handling) AI اکثر ایسے ایرر بلاکس لکھتا ہے جو مکمل نظر آتے ہیں لیکن حقیقی سسٹم کی ناکامیوں کو سنبھالنے میں ناکام رہتے ہیں۔
  • حل: ہم 'چینج ٹیسٹ' (change test) کا استعمال کرتے ہیں۔ ہم یہ پیمائش کرتے ہیں کہ ایک چھوٹا سا بدلاؤ کرنے پر کتنی فائلیں خراب ہوتی ہیں۔ زیادہ اثر (high impact) کا مطلب ہے زیادہ کپلنگ (high coupling)۔

AI دشمن نہیں ہے۔ آپ کو AI کے ساتھ ایک جونیئر انجینئر کی طرح پیش آنا چاہیے۔ آپ کو رہنمائی فراہم کرنی چاہیے، توقعات طے کرنی چاہئیں، اور آؤٹ پٹ کو درست کرنے کے لیے اپنے فیصلے کا استعمال کرنا چاہیے۔

ٹولز مخصوص کاموں (tasks) میں بہترین ہیں۔ وہ مکمل ذمہ داری (job) نبھانے میں بہترین نہیں ہیں۔

Source: https://dev.to/emilywoodsnyc/i-spent-3-weeks-auditing-my-teams-ai-generated-code-here-is-what-we-found-1kj5

Optional learning community: https://t.me/GyaanSetuAi