تستنویسی و دیباگ با هوش مصنوعی؛ از خطا تا تست رگرسیون
برای رفع باگ با هوش مصنوعی از کجا شروع کنیم؟ بازتولید خطا، بررسی علت، نوشتن تست رگرسیون و سنجش اصلاح با مثال فرم و پرامپتهای فارسی.

برای دیباگ با هوش مصنوعی، خطا را قابل بازتولید کن، علت را در کد پیدا کن و اصلاح را با تست بررسی کن. مدل میتواند فرضیه و تغییر پیشنهاد بدهد، اما توضیح قانعکننده بهتنهایی نشان نمیدهد مشکل حل شده است. در این راهنما، یک خطای فرم را تا تست رگرسیون دنبال میکنیم و برای هر مرحله پرامپت قابل استفاده میدهیم.
قبل از درخواست اصلاح، چه اطلاعاتی آماده کنیم؟
این پنج مورد معمولاً از چسباندن کل مخزن مفیدترند:
- رفتار فعلی: چه اتفاقی میافتد و با چه مراحلی؟
- رفتار مورد انتظار: نتیجهٔ درست چیست؟
- شواهد: متن خطا، پاسخ درخواست یا لاگ مرتبط.
- محدوده: فایل یا مؤلفهٔ مربوط و آخرین تغییر مرتبط.
- محیط: نسخهٔ زبان یا چارچوب، سیستمعامل و فرمان اجرای تست.
کلید API، توکن، رمز و اطلاعات مشتری را از نمونهٔ لاگ حذف کن. اگر مسئله فقط در یک محیط دیده میشود، تفاوت تنظیمات و مراحل اجرا را هم بنویس.
مثال: دوبار کلیک، دو درخواست
فرض کن کاربر روی دکمهٔ ثبت سفارش دوبار کلیک میکند و فرم دو درخواست میفرستد. درخواست اولیه را اینطور بنویس:
با دو کلیک سریع روی ثبت سفارش، دو درخواست ارسال میشود. تا وقتی درخواست اول در جریان است، درخواست دوم نباید ارسال شود. پس از خطا، کاربر باید بتواند دوباره تلاش کند. فایل فرم و مسیر ارسال را بررسی کن و قبل از ویرایش، علت احتمالی و شواهدش را بگو.
ممکن است علت، ثبت دوبارهٔ رویداد یا آزادشدن زودهنگام وضعیت ارسال باشد. از مدل بخواه هر فرضیه را به فایل و مسیر اجرای مشخص وصل کند. جملهٔ «یک debounce اضافه کن» بدون بررسی رفتار، هنوز تشخیص علت نیست.
ابتدا تستی بنویس که خطای اصلی را نشان دهد
تست رگرسیون باید پیش از اصلاح شکست بخورد. اگر از ابتدا پاس میشود، احتمالاً رفتار مشکلدار را پوشش نمیدهد.
با ابزار تست موجود پروژه، ارسال دوباره هنگام درخواست در جریان را بازتولید کن. پاسخ درخواست را در تست کنترل کن تا قبل از کاملشدن آن، کلیک دوم انجام شود. تست باید روی نسخهٔ فعلی شکست بخورد. برای این کار وابستگی جدید اضافه نکن مگر اینکه لازم باشد و دلیلش را توضیح بده.
در این مثال، بهتر است تست خودِ رفتار را بسنجد: تعداد درخواستها و امکان تلاش دوباره. تستی که فقط نام متغیر isSubmitting را در فایل جستوجو میکند، چنین چیزی را ثابت نمیکند.
اصلاح محدود، با پوشش مسیر خطا
بعد از تأیید تشخیص و تست، تغییر را بخواه:
علت ارسال دوباره را با کمترین تغییر لازم رفع کن. مسیر موفقیت و خطا باید وضعیت ارسال را آزاد کنند. ظاهر فرم، قرارداد API و تغییرات قبلی من را نگه دار. سپس همان تست و تستهای مرتبط را اجرا کن.
این چهار حالت را بررسی کن:
| حالت | انتظار |
|---|---|
| یک کلیک | یک درخواست ارسال شود |
| کلیک دوم هنگام ارسال | درخواست تازهای ایجاد نشود |
| خطای درخواست | پیام خطا دیده شود و تلاش دوباره ممکن باشد |
| پاسخ موفق | مسیر موفقیت قبلی همچنان کار کند |
برای جلوگیری از ثبت سفارش تکراری در کل سامانه، ممکن است سازوکار سمت سرور هم لازم باشد. تست دکمه چنین تضمینی نمیدهد؛ بررسی آن را با قرارداد API و رفتار واقعی سرور ادامه بده.
وقتی متن خطا مشخص است
برای خطایی مثل Cannot read properties of undefined فقط خاموشکردن استثنا را نخواه. مدل باید منشأ داده و حالتهای ممکن را بررسی کند:
این خطا در ProductList دیده میشود. بررسی کن داده قبل از رسیدن به مؤلفه چه شکلهایی دارد. حالت بارگذاری، فهرست خالی و شکست دریافت داده را از هم جدا کن. اگر optional chaining پیشنهاد میدهی، توضیح بده کاربر در هر حالت چه چیزی میبیند.
ممکن است ?.map از توقف صفحه جلوگیری کند، اما خطای دریافت داده را پنهان کند. معیار درست، رفتار صفحه برای کاربر است. برای بررسی تغییرات پیش از ادغام، راهنمای بازبینی کد با هوش مصنوعی را ببین.
تست واحد، تست یکپارچه و بررسی مرورگر چه تفاوتی دارند؟
تست واحد یک بخش محدود را بررسی میکند. تست یکپارچه ارتباط چند بخش را میسنجد. بررسی مرورگر نشان میدهد مسیر قابل مشاهده برای کاربر چه رفتاری دارد. برای یک خطای رابط، ممکن است هر سه لازم باشند.
در پایان از دستیار گزارش مشخص بخواه:
نام تستها و فرمانهای واقعاً اجراشده، نتیجهٔ هر کدام و موارد بررسینشده را بنویس. مشخص کن کدام نتیجه از تست خودکار آمده و کدام رفتار در مرورگر بررسی شده است.
اگر پایگاه داده یا سرویس لازم در دسترس نیست، آن را شکست یا موفقیت برنامه حساب نکن. آن بخش هنوز بررسی نشده است.
اجرای این روش با آیرا کد
آیرا کد در پوشهٔ پروژه اجرا میشود و با دسترسیهای نشست میتواند فایلهای مرتبط را بخواند، تغییر ایجاد کند و فرمان تست را اجرا کند. از راهنمای نصب شروع کن و بعد نشست را در پروژه باز کن:
cd path/to/project
aira
پرامپتهای همین صفحه را با فایلها و رفتار پروژهٔ خودت کامل کن. برای بررسی اولیه بدون شروع ویرایش، حالت برنامهریزی و مجوزها را بشناس. راهنمای عملی برنامهنویسی با هوش مصنوعی این مراحل را یکجا دنبال میکند.
چه زمانی اطلاعات بیشتری لازم است؟
خطاهای همزمانی، تفاوت شبکه، تنظیمات محیط و مشکلاتی که فقط زیر بار رخ میدهند، ممکن است با یک نمونهٔ کد تشخیص داده نشوند. از مدل بخواه مشاهدهای پیشنهاد بدهد که بین فرضیهها فرق بگذارد: زمان درخواستها، ترتیب رویدادها یا مقدار یک تنظیم مشخص. با همان شاهد ادامه بده، نه با بازنویسی تصادفی بخشهای بیشتر.
قدم بعدی برای یک باگ فعلی: مراحل بازتولید و نتیجهٔ مورد انتظارش را بنویس، یک تست شکستخورده بساز و سپس اصلاح را بررسی کن.
ادامهٔ مسیر
همهٔ مقالهها ←
بازبینی کد با هوش مصنوعی (AI Code Review)
هوش مصنوعی چطور کد را بازبینی میکند، چه باگهایی را واقعاً پیدا میکند و کجا اشتباه میکند؛ با مقایسهٔ ابزارها.

آیرا کد چیست؟ دستیار برنامهنویسی با هوش مصنوعی در ترمینال
آیرا کد چه کار میکند؟ راهنمای نصب روی ویندوز، مک و لینوکس، حافظهٔ پروژه، پرداخت ریالی و انتخاب یک کار واقعی برای شروع کدنویسی با هوش مصنوعی.

پرامپتنویسی برای کدنویسی
اکثر توسعهدهندههایی که از ChatGPT یا Claude برای کد میپرسن، همون روزهای اول یه تجربهٔ مشترک دارن: «مدل یه چیز عمومی داد که به دردم نخورد.» این مشکل مدل…

Context-aware refactoring با AI
بیشتر توسعهدهندهها با ابزارهای AI کد مینویسن، ولی وقتی نوبت به refactoring میرسه، هنوز بیشتر کار رو دستی انجام میدن. چرا؟ چون refactoring بدون context، خطرناکه.
بیشتر در «کدنویسی با AI»
- آیرا کد یا Cursor؟ مقایسهٔ محیط کار، حافظه و هزینه
- مقایسهٔ آیرا کد و GitHub Copilot برای برنامهنویسی
- از جونیور تا سینیور در عصر هوش مصنوعی؛ نقشهای که مسیر رشد را حذف نمیکند
- نقشهٔ رشد Cursor؛ متدی که به یک میلیارد دلار درآمد سالانه رسید
- اولین ۲۰ کاربر محصول را از کجا پیدا کنیم؟ نقشهٔ عملی Base44
- AiraCode اکنون افزونهٔ کروم اختصاصی خودش را دارد: کنترل مرورگر واقعی تو از ترمینال
- جدول کامل قیمت مدلهای هوش مصنوعی برای کدنویسی (آپدیت شهریور ۱۴۰۵)
- Ox Alpha؛ مدل کدنویسی رایگان با کانتکست یک میلیونی و چیزی که باید قبل از استفاده بدونی
- کدنویسی با هوش مصنوعی چیست؟
- Cursor، ویرایشگر کدنویس هوشمند
- GitHub Copilot، راهنمای کامل
- Windsurf (سابق Codeium)
- Claude Code، Anthropic CLI کدنویسی
- استفاده از آیرا کد کنار Cursor؛ راهنمای گردش کار مشترک
- Aider، pair programming روی ترمینال
- Continue.dev، IDE-agnostic AI
- Cline، autonomous coding agent
- Bolt.new، Lovable و v0، ساخت اپ با پرامپت
- Devin AI، اولین مهندس نرمافزار هوشمند
- Vibe coding چیست؟
- Agentic coding، نسل جدید کدنویسی
- MCP servers برای کدنویسی
- Sub-agents در Claude Code
- Plan mode چیست و چرا اهمیت دارد
- Tab completion هوشمند
- Multi-file edit با AI
- AI برای DevOps
- آیندهٔ کدنویسی با AI
- چرا Cursor و Copilot هر روز با یه غریبه میبینندت