کدنویسی با AI

AI testing و debugging

AI testing و debugging — راهنمای فارسی از مجموعهٔ «کدنویسی با AI» در وبلاگ آیرا. بازنویسی‌شده با تمرکز روی کاربر ایرانی و روایت شناخت پیوسته.

نوشتهٔ به‌روزرسانی: ۴ دقیقه مطالعه
تصویر مقالهٔ AI testing و debugging

یکی از مهم‌ترین چیزهایی که باید در مورد کدنویسی با AI بدونی اینه: AI خوبه در نوشتن کد، ولی در تست کردن و debug کردنش — اگه بدانی چطور ازش استفاده کنی — می‌تونه به‌مراتب قوی‌تر باشه. خیلی از توسعه‌دهنده‌ها از AI برای تولید کد استفاده می‌کنن ولی وقتی bug پیدا می‌شه یا test می‌خوان بنویسن، سراغ AI نمی‌رن. این یه فرصت از دست رفته‌ست.

چرا AI در debugging خوبه

خطاها یه ساختار دارن. Stack trace‌ها، error message‌ها، و رفتار غیرمنتظره کد معمولاً از یه دسته محدود مشکلات میان: null pointer، race condition، type mismatch، مشکل encoding، خطای async، و... . AI مدل‌های زبانی میلیون‌ها قطعه کد و bug مشابه دیدن و pattern‌شناسی‌شون قوی‌تر از اغلب ماست.

این به این معنا نیست که AI همیشه جواب درست می‌ده — بلکه یعنی می‌تونه فضای احتمالات رو خیلی سریع‌تر از تو محدود کنه.

تکنیک ۱: Stack Trace رو مستقیم بده

بدترین کاری که می‌تونی بکنی اینه که بگی «کدم کار نمی‌کنه». بهترین کاری که می‌تونی بکنی اینه که بگی:

این error میده:
TypeError: Cannot read property 'map' of undefined
    at ProductList.render (ProductList.jsx:42)
    at updateFunctionComponent (react-dom.development.js:17435)

این context کدمه:
[کد مربوطه]

با این اطلاعات، AI می‌تونه مستقیماً بگه: «این خطا معمولاً وقتی پیش میاد که products هنوز undefined‌ه — احتمالاً data هنوز load نشده. اینجا یه optional chaining یا یه loading state اضافه کن.»

تکنیک ۲: Rubber Duck Debugging با AI

تکنیک کلاسیک Rubber Duck Debugging اینه که مشکلت رو برای یه اردک لاستیکی توضیح بدی — چون خود توضیح دادن اغلب باعث می‌شه جواب رو پیدا کنی. AI این روش رو upgrade می‌کنه: اردک جواب می‌ده.

پرامپت موثر: «می‌خوام مشکل رو برات توضیح بدم. فقط گوش بده و در آخر بگو چه سؤالاتی از این توضیح داری.»

این رویکرد کمک می‌کنه مشکل رو از زاویه‌ای ببینی که خودت نمی‌دیدی.

تکنیک ۳: تست‌نویسی — بذار AI unit test بنویسه

یکی از کارهایی که AI در اون بی‌نظیره اینه: با یه تابع موجود، برات unit test بنویسه. مخصوصاً edge case‌هایی که خودت بهشون فکر نکردی.

پرامپت نمونه:

این تابع Python دارم:

def parse_persian_date(date_str):
    # ...

برام unit test بنویس که این موارد رو cover کنه:
- ورودی معتبر
- ورودی null
- فرمت اشتباه
- تاریخ‌های مرزی (اول و آخر ماه)
- سال کبیسه

AI معمولاً edge case‌هایی رو می‌آره که تو بهشون فکر نکردی — مثل whitespace اضافه در string، کاراکترهای Unicode عجیب، یا اعداد خیلی بزرگ.

تکنیک ۴: Test-Driven Development با راهنمایی AI

یه workflow موثر اینه: ۱. اول به AI بگو «می‌خوام تابعی بسازم که X کنه. قبل از نوشتن کد، unit test‌هاشو بنویس» ۲. Test‌ها رو review کن — ببین آیا همه چیزی که می‌خوای رو cover می‌کنن ۳. بعد از تأیید، بگو «حالا تابع رو بنویس که این test‌ها pass بشن»

این روش کمک می‌کنه از همون اول مشخص باشه «تابع باید چیکار کنه» نه فقط «چطور کار کنه».

تکنیک ۵: Code Review با AI

قبل از اینکه کدت رو merge کنی، به AI بگو:

این کد رو review کن. دنبال این مشکلات بگرد:
- Security vulnerabilities
- Memory leaks احتمالی
- Edge case‌های نادیده‌گرفته‌شده
- بهبود performance
- کدهای تکراری که می‌شه refactor کرد

AI یه code reviewer خستگی‌ناپذیره — هیچ‌وقت عجله نداره، هیچ‌وقت بی‌حوصله نمی‌شه، و از چشمش چیز زیادی دور نمی‌مونه (البته همه‌چیز رو پیدا نمی‌کنه، ولی بیشتر از اون چیزیه که بی‌review می‌ذاشتیش بره).

تکنیک ۶: «چرا این کد غلطه» بپرس، نه «این کد رو درست کن»

فرق مهمی هست بین اینکه بگی «این bug رو fix کن» و اینکه بگی «توضیح بده چرا این کد رفتار اشتباه داره».

وقتی AI توضیح می‌ده «مشکل اینه که X اتفاق می‌افته چون Y»، تو می‌فهمی مشکل اصلاً کجاست. اگه مستقیم fix بخوای، ممکنه AI یه patch سطحی بده که root cause رو حل نکنه.

محدودیت‌های واقعی

چند جا AI debugging ضعیفه و باید بدونی:

Race condition و concurrency bug‌ها: این‌ها timing-dependent‌ان و AI نمی‌تونه واقعاً runtime رو شبیه‌سازی کنه. می‌تونه راهنمایی کنه ولی نه guarantee.

Bug‌های environment-specific: «روی mac کار می‌کنه، روی linux نه» معمولاً نیاز به اطلاعاتی داره که AI نمی‌تونه داشته باشه — filesystem path‌ها، permissions، system library versions.

Production bug‌های پیچیده با log حجیم: AI با log چند هزار خطی کلافه می‌شه. خودت باید ابتدا با grep و ابزارهای log analysis اطلاعات رو فیلتر کنی.

Security vulnerability‌های پیچیده: برای SQL injection، XSS، و مشکلات امنیتی جدی‌تر، AI یه نقطه شروع خوبه ولی نه جایگزین یه security audit واقعی.

ابزارهای AI مخصوص debugging

GitHub Copilot Chat: inline توی VS Code، می‌تونی مستقیم روی کد توضیح‌خواهی کنی.

Cursor: ویرایشگری که model کل codebase رو می‌بینه — برای debugging مشکلاتی که چند فایل درگیرن مفیده.

AiraCode: CLI agent که با project context آشناست. وقتی AiraCode می‌دونه ساختار پروژه‌ات چیه، debug suggestion‌هاش به context پروژه مرتبط‌ترن. اگه قبلاً گفتی «من از PostgreSQL و SQLAlchemy استفاده می‌کنم»، یادش می‌مونه — لازم نیست هر بار توضیح بدی.

یه workflow کامل

یه مثال واقعی از یه workflow debug با AI:

۱. Bug report می‌گیری: «صفحه پرفایل کاربر گاهی blank لود می‌شه» ۲. به AI می‌دی: error log + کد component + network request مربوطه ۳. AI می‌گه: «احتمالاً race condition بین fetch user data و render هست — اینجا loading state اضافه کن» ۴. اضافه می‌کنی، مشکل حل نشد ۵. برمی‌گردی: «با این تغییر هنوز گاهی blank می‌شه — فقط کمتر» ۶. AI می‌گه: «پس root cause عمیق‌تره — بذار Network tab رو چک کنیم، request دومی هست؟» ۷. می‌بینی که دو request به API می‌ره و دومی null برمی‌گردونه ۸. مشکل پیدا می‌شه: یه re-render غیرضروری باعث fetch دوم می‌شه

این رفت‌وبرگشت — که هر دور اطلاعات بیشتری می‌ده — کار debugging با AI رو واقعی می‌کنه. یه پیام، یه جواب کافی نیست.

همچنین بخوان

#کدنویسی با AI

ادامهٔ مسیر

همهٔ مقاله‌ها ←

بیشتر در «کدنویسی با AI»