اگر امروز درخواستهای ادغام کد (Pull Request) تولیدشده توسط هوش مصنوعی را تأیید میکنید، احتمالاً خطرناکترین باگها را از دست میدهید؛ چون این کدها بهشدت متقاعدکننده بهنظر میرسند. در ۱۰ ژوئن ۲۰۲۶، یکی از متخصصان شرکت 137Foundry چارچوبی تخصصی را شرح داد که میتواند بخش قابلتوجهی از نشتهای عملیاتی را تنها در ۱۵ دقیقه برای هر PR شناسایی کند. این چارچوب حاصل یک سال بررسی دقیق درخواستهای ادغام تولیدشده توسط AI در پروژههای مختلف مشتریان است.
اکثر توسعهدهندگان با کدهای AI همانطور برخورد میکنند که با کدهای انسانی رفتار میکنند و تمرکز خود را بر تناسب معماری و قراردادهای نامگذاری میگذارند. اما دستیارهای AI حالتهای شکست منحصربهفردی را معرفی میکنند — مانند توهم APIها (Hallucinated APIs) و رانش نسخهها (Version Drift) — که برای شناسایی آنها نیاز به یک «عضله ذهنی» متفاوت است. این چکلیست یک گذر سریع و پربازده است که باید روی هر PR تولیدشده توسط AI اجرا شود. توجه داشته باشید که این تنها مسیر بازبینی نیست؛ دانش دامنه (Domain Knowledge)، بازبینی امنیتی و ویژگیهای عملکردی همچنان کاربرد دارند. هدف این است که یک گذر ساختاری در ابتدای فرآیند اجرا شود تا خطاهای خاص AI پیش از شروع بازبینی عمیق منطق، شکار شوند.
گذر تأیید ساختاری
اولین اولویت، تأیید وجود واقعی وابستگیهای کد است. طبق اعلام 137Foundry، این سریعترین برد در این لیست است و برای یک PR با اندازه معمولی، کمتر از دو دقیقه زمان میبرد. شما باید هر دستور import را باز کنید و بررسی کنید که آیا آن بسته در مخازنی مانند PyPI برای پایتون، npm registry برای نود، یا مسیرهای ماژول در زبان Go واقعاً وجود دارد یا خیر. دستیارهای AI مکرراً کدهایی تولید میکنند که برای یک نسخه اصلی (Major Version) از کتابخانه درست هستند، اما با نسخهای که در پروژه شما نصب شده است، متفاوتاند. این بررسی هم موارد «بستههای توهمزده» و هم موارد «عدم تطابق نسخه» را که در آن API مورد استفاده در نسخه نصبشده شما وجود ندارد، شناسایی میکند.
سپس باید تأیید کنید که هر تابع و متد نامبرده واقعاً وجود دارد. این مرحله برای یک PR معمولی بین ۳ تا ۵ دقیقه زمان میبرد. کد را بخوانید و هر فراخوانی تابع یا متدی را که نامش را فوراً نمیشناسید، شناسایی کنید. آن را در مستندات کتابخانه جستجو کنید تا تأیید شود که امضای تابع (Function Signature) با کد مطابقت دارد.
موفقیت در import به معنای وجود متد نیست. برای مثال، یک دستیار AI ممکن است متد client.refresh_token_safe() را تولید کند، در حالی که کلاینت واقعی فقط از client.refresh_token() پشتیبانی میکند. در این حالت، import با موفقیت انجام میشود اما فراخوانی متد با شکست مواجه میگردد. برای تأیید، از منابع حقیقت زیر استفاده کنید:
- Mozilla Developer Network (MDN): مرجع استاندارد برای جاوااسکریپت و APIهای پلتفرم وب.
- Python Standard Library Docs: مرجع برای قابلیتهای داخلی پایتون.
- GitHub READMEs/Official Sites: منبع حقیقت برای بستههای شخص ثالث.
تست استرس منطق
کدهای تولیدشده توسط AI تقریباً همیشه در «مسیر خوشبینانه» (Happy Path) درست هستند اما در موارد خاص (Edge Cases) بهطور خاموش میشکنند. این کندترین بررسی است — که ۵ تا ۱۰ دقیقه زمان میبرد — اما پس از رفع مشکلات ساختاری، بیشترین ارزش را دارد. شما باید بخش عمدهی بازبینی را صرف اجرای ذهنی کد در برابر نقاط شکست مشخص زیر کنید:
- ورودیهای خالی: تست برای لیستهای خالی، رشتههای خالی، یا مقادیر null/None.
- اندازه مجموعهها: تست مجموعههایی که تنها یک عضو دارند.
- مقیاس ورودی: تست ورودیهای بسیار حجیم و بزرگ.
- جداکنندههای داخلی: تست ورودیهایی که حاوی همان کاراکتر جداکنندهای هستند که کد در داخل خود از آن استفاده میکند.
- کدگذاری: تست یونیکد (Unicode) در ورودیهایی که کد فرض میکند ASCII هستند.
- مسائل زمانی: تست موارد خاص مناطق زمانی و محاسبات تاریخی که در مرزهای تغییر ساعت تابستانی (Daylight Saving) میشکنند.
- همروندی (Concurrency): تست ورودیهای همزمانی که کد فرض میکند به صورت متوالی (Sequential) پردازش میشوند.
- دقت: جستجو برای مقایسههای اعداد اعشاری (Floating-point) که در برابری دقیق شکست میخورند یا خطاهای off-by-one در صفحهبندی (Pagination).
اگر موردی مدیریت نشده و در دادههای واقعی شما وجود دارد، یک تست concrete (عینی) برای بازتولید آن بنویسید. این کار یک نگرانی تئوریک را به یک رفع باگ قابل تأیید و یک بازتولید تمیز برای اصلاحیه تبدیل میکند.
اعتبارسنجی شبکه ایمنی
وقتی یک PR شامل تست است، باید مطمئن شوید که رفتار کد تست میشود، نه فرضهای AI. این کار معمولاً برای فایلهای تست معمولی ۲ تا ۳ دقیقه زمان میبرد. یک حالت شکست رایج، «تستهای توتولوژیک» (Tautological Tests) است؛ جایی که دستیار هم یک پیادهسازی باگدار را تولید میکند و هم تستی را میسازد که ادعا میکند همان رفتار باگدار درست است. در این حالت، تستها «پاس» میشوند چون با پیادهسازی ناقص موافقاند.
به این حالتهای شکست خاص دقت کنید:
- تستهای غیر-اثباتی (Non-assertive): تستهایی که کد را اجرا میکنند اما هیچ ادعای معناداری (Assertion) ندارند. تستی که فقط چک میکند استثنایی (Exception) پرتاب نشده است، تستی برای «این کد کرش نمیکند» است، نه تستی برای «درستی کد».
- فرضهای مشترک: تستهایی که در آنها دادههای تست و خروجی مورد انتظار، هر دو از همان مسیر کدی مشتق شدهاند که دستیار تولید کرده است.
برای رفع این مشکل، مطمئن شوید که حداقل یک تست برای هر رفتار، از یک پاسخ صحیح شناختهشده استفاده میکند که بهطور مستقل از پیادهسازی AI محاسبه شده است. این کار مانع از آن میشود که تست صرفاً با یک مسیر منطقی غلط موافقت کند.
بررسی نهایی همراستایی
آخرین گام، یک مقایسه سریع بین کد و توضیحات PR است. این ارزانترین بررسی است و کمتر از یک دقیقه زمان میبرد. دستیارهای AI گاهی از هدف اصلی فاصله میگیرند و مثلاً یک بازنویسی (Refactor) ۲۰۰ خطی تولید میکنند در حالی که تنها ۵۰ خط درخواست شده بود.
برای هر فایل در diff بپرسید: آیا این فایل در توضیحات ذکر شده است و آیا تغییرات با توصیفات مطابقت دارد؟ اگر فایلی تغییر کرده اما ذکر نشده است، ممکن است یک «پاکسازی مرتبط» بیضرر باشد، یا یک پرچم قرمز باشد که نشان میدهد دستیار تصمیم گرفته چیزی را بازنویسی کند که شما نخواستهاید.
خودکارسازی بار کاری
برای سرعت بخشیدن به این بررسیهای دستی، 137Foundry پیشنهاد میکند ابزارهای خاصی را در خط لوله CI ادغام کنید تا چندین دقیقه از زمان هر PR پسگرفته شود:
- بررسی بستهها: اجرای
pip install -r requirements.txt(یا معادل آن) روی هر PR برای شناسایی بستههای توهمزده پیش از شروع بازبینی. - بررسیکنندههای نوع (Type Checkers): استفاده از Mypy برای پایتون، TypeScript برای JS، یا تایپینگ قوی در Go و Rust برای شناسایی خودکار مشکلات امضای توابع.
- لینترها (Linters): پیکربندی لینترهای تیمی برای شناسایی پارامترهای توهمزده، زیرا اکثر این موارد باعث ایجاد هشدارهای لینتر میشوند.
- گاردهای Assertion: استفاده از Test Runnerهایی که اگر تستی فاقد Assertion باشد، بیلد را شکست دهند تا حالت شکست «فقط کرش نمیکند» کشف شود.
در حالی که این ابزارها بار دستی را کاهش میدهند، جایگزین بازبینی انسانی نیستند؛ آنها صرفاً به انسان اجازه میدهند روی بخشهایی تمرکز کند که نیاز به قضاوت دارند.
گردش کار تیمی و پذیرش
پذیرش یک دستیار کدنویسی AI، شکل بار کاری بازبینی را تغییر میدهد. پیش از این، بیشتر زمان صرف درک تغییرات میشد. اکنون، زمان صرف تأیید این میشود که قطعات ساختاری (Importها، فراخوانی توابع، پارامترها) واقعی هستند و تغییرات با توضیحات مطابقت دارد. این یک عضله متفاوت است که توسعه یافتنش چند هفته زمان میبرد.
برای تیمهایی که در حال مقیاسبندی این فرآیند هستند، این روند باید بر اساس رایجترین حالتهای شکست در استک تکنولوژی خاص آنها تکرار و اصلاح شود. در حالی که پلتفرمهایی مانند GitHub و OpenAI راهنماهای منتشرشدهای درباره AI در بازبینی کد و بهرهوری توسعهدهنده ارائه میدهند، اینها مواد پشتیبان هستند و جایگزینی برای یک چکلیست منضبط و دقیق نیستند.
برای کسانی که نیاز به یک گردش کار کامل عیبیابی بعد از ظهور باگ در محیط عملیاتی دارند، راهنمای طولانیتر 137Foundry درباره عیبیابی کدهای AI، ترتیب خاص بررسی توهمات API، اختلافات نسخه و منطقهای بهطور خاموش غلط را پوشش میدهد. با تمرکز بر حالتهای شکست خاص AI به جای برخورد با کد AI مانند کد انسانی، تیمها میتوانند اکثریت سطح باگها را پیش از استقرار کد شناسایی کنند.
گام بعدی شما
- بررسی تمام importهای PRهای اخیر خود و تطبیق آنها با نسخههای نصبشده در محیط Local.
- اضافه کردن یک تست با «پاسخ مستقل» (Independent Answer) به هر ویژگی جدیدی که توسط AI نوشته شده است.
- پیکربندی یک Type Checker سختگیر در CI برای کاهش زمان بازبینی دستی امضاهای توابع.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو