هوش مصنوعی برای تست نرم‌افزار: سناریو، داده و گزارش باگ

بخش سخت تست، فکر کردن به حالت‌هایی است که کسی به آن‌ها فکر نکرده. بخش کند، نوشتن همان چیزهاست. این دو را از هم جدا کنید تا بفهمید کجا کمک می‌گیرید.

🍊 تیم نارنگی ⏱ 5 دقیقه مطالعه
نوشتن سناریو و داده‌ی تست نرم‌افزار با کمک هوش مصنوعی

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

اینجا یک تفکیک مهم هست. بخش سختِ تست، فکر کردن به حالت‌هایی است که هیچ‌کس به آن‌ها فکر نکرده. بخش کندِ تست، نوشتن همان حالت‌هاست. مدل‌های زبانی در بخش دوم خوب‌اند و در بخش اول فقط تا حدی که شما اطلاعات داده باشید.

سناریوی تست از روی نیازمندی

ورودی هرچه دقیق‌تر، خروجی هرچه مفیدتر. اگر فقط بنویسید «برای فرم ثبت‌نام تست بنویس»، بیست مورد بدیهی می‌گیرید. اگر قواعد واقعی را بدهید، مواردی می‌گیرید که خودتان هم جا انداخته بودید.

این قابلیت را تست کن:

شرح: [توضیح دقیق قابلیت]
قواعد اعتبارسنجی: [فهرست هر قاعده]
نقش‌های کاربری: [مهمان / کاربر عادی / ادمین]
وابستگی‌های بیرونی: [درگاه پرداخت، پیامک، ...]

موارد تست را در چهار دسته بده:
۱) مسیر موفق
۲) اعتبارسنجی ورودی (شامل مقادیر مرزی)
۳) خطای سرویس بیرونی (تایم‌اوت، پاسخ ناقص)
۴) هم‌زمانی و وضعیت (دو تب باز، دکمه‌ی دوبار)

قالب هر مورد: عنوان | پیش‌شرط | گام‌ها | نتیجه‌ی انتظاری
موارد تکراری را حذف کن.

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

💡 یک جمله که خروجی را عوض می‌کند

به انتهای پرامپت اضافه کنید: «سه فرضی را که در شرح بالا صریح نگفته‌ام ولی برای تست لازم است، فهرست کن و از من بپرس.» مدل معمولاً دقیقاً همان ابهام‌هایی را پیدا می‌کند که بعداً در محیط عملیاتی به باگ تبدیل می‌شوند.

داده‌ی تست فارسی

این یکی از معدود جاهایی است که خروجی تقریباً بدون ویرایش قابل استفاده است — به شرطی که صریح بخواهید داده‌ی بد هم بسازد. مدل به‌طور پیش‌فرض داده‌ی تمیز می‌سازد و داده‌ی تمیز چیزی را نمی‌شکند.

۳۰ ردیف داده‌ی تست برای جدول کاربران بساز.
ستون‌ها: نام | موبایل | ایمیل | تاریخ تولد | آدرس

نیمی معتبر و نیمی مسئله‌دار باشد. حتماً این‌ها را بیاور:
- نام با نیم‌فاصله و نام با «ي» و «ك» عربی
- نام تک‌حرفی و نام ۸۰ کاراکتری
- موبایل با +۹۸، با ۰۰۹۸، بدون صفر، با فاصله وسط
- تاریخ شمسی، میلادی، و ۳۰ اسفند سال غیرکبیسه
- آدرس با اعداد فارسی و آدرس با ایموجی
- ایمیل با حروف بزرگ و با نقطه‌ی اضافه

خروجی: CSV با جداکننده‌ی ویرگول، بدون توضیح.

«۳۰ اسفند سال غیرکبیسه» را حتماً نگه دارید. تبدیل تاریخ شمسی، منبع دائمی باگ در نرم‌افزارهای ایرانی است و این یک ردیف، بیشتر از بیست ردیف سالم ارزش دارد.

گزارش باگ که برنامه‌نویس بتواند بازتولید کند

گزارش‌های ضعیف دو مشکل مشترک دارند: توصیف احساس به‌جای مشاهده («صفحه قاطی می‌کند») و نبود گام‌های دقیق. مدل در تبدیل یادداشت خام به گزارش ساختاریافته خوب عمل می‌کند.

از این یادداشت خام، گزارش باگ بساز:
[یادداشت من]

قالب:
عنوان (یک خط، شامل کجا و چه)
محیط (مرورگر، نسخه، نقش کاربر)
گام‌های بازتولید (شماره‌دار، بدون گام اضافه)
نتیجه‌ی فعلی / نتیجه‌ی انتظاری
شدت با یک جمله دلیل

اگر اطلاعاتی برای بازتولید کم است، اول فهرستش کن.

تست خودکار: تا کجا بسپاریم

نوشتن تست واحد برای تابعی که کدش را می‌دهید، معمولاً خوب جواب می‌دهد. تست یکپارچگی و end-to-end نتیجه‌ی متغیرتری دارد، چون مدل ساختار پروژه و شناسه‌های عناصر صفحه را نمی‌بیند.

کارکیفیت خروجیچه چیزی باید بدهید
تست واحد یک تابع خالصخوبکد کامل تابع
تست واحد با وابستگیمتوسطامضای وابستگی‌ها و ابزار mock
تست APIخوبنمونه‌ی درخواست و پاسخ واقعی
تست رابط کاربریضعیف تا متوسطHTML یا شناسه‌های دقیق عناصر
تست کارایی و بارضعیففقط برای طرح سناریو مفید است
ساخت داده‌ی تستخیلی خوبساختار جدول و قواعد
⚠️ تست همیشه‌سبز

شایع‌ترین اشکال کد تست تولیدشده این است که چیزی را می‌سنجد که همیشه درست است — مثلاً بررسی می‌کند خروجی null نیست، به‌جای اینکه مقدار درست را چک کند. قبل از پذیرفتن هر تست، عمداً کد را خراب کنید و ببینید تست قرمز می‌شود یا نه. اگر نشد، آن تست ارزشی ندارد.

مرز امنیتی: چه چیزی را نچسبانید

وسوسه‌ی کپی‌کردن لاگ کامل خطا زیاد است، ولی لاگ محیط عملیاتی معمولاً پر از چیزهایی است که نباید بیرون برود: توکن نشست، شماره تماس کاربر، رشته‌ی اتصال دیتابیس. ردیابی پشته و پیام خطا را نگه دارید، مقادیر متغیرها را جایگزین کنید. تفصیل این بحث در مقاله‌ی امنیت اطلاعات آمده است.

کاری که نمی‌کند

  • باگ‌های ناشی از فرض‌های نانوشته را پیدا نمی‌کند. مدل فقط چیزی را می‌بیند که نوشته‌اید؛ باگ واقعی معمولاً همان‌جایی است که کسی چیزی را ننوشته چون بدیهی می‌دانست.
  • اولویت نمی‌دهد. پنجاه مورد تست به شما می‌دهد بدون اینکه بداند کدام‌شان برای کسب‌وکار شما حیاتی است.
  • جای تست دستی اکتشافی را نمی‌گیرد. نشستن پای محصول و بازی‌کردن با آن، هنوز بهترین راه پیدا کردن مشکلات عجیب است.

الگوی کلی همان چیزی است که در مقاله‌ی اشتباهات رایج هم دیده می‌شود: خروجی را پیش‌نویس بدانید، نه نتیجه. و اگر با پرامپت‌ها راحت نیستید، راهنمای پرامپت‌نویسی نقطه‌ی شروع بهتری است.

جمع‌بندی

سپردن نوشتن به ابزار و نگه‌داشتن فکر کردن برای خودتان — این خلاصه‌ی کل ماجراست. سناریو، داده و گزارش باگ، سه کار پرحجم و کم‌فکرند که ساعت‌ها وقت می‌گیرند و کسی از انجام دادنشان لذت نمی‌برد.

یک عادت هم بسازید: هر تستی که تولید شد، یک بار عمداً بشکنیدش. تستی که با کد خرابِ عمدی هم سبز می‌ماند، فقط عدد پوشش را بالا برده. برای شروع می‌توانید همین حالا در نارنگی یکی از این پرامپت‌ها را روی یک تابع واقعی امتحان کنید. برای فهرست کامل‌تر موارد امنیتی، راهنمای تست امنیتی OWASP مرجع خوبی است.

مطالب مرتبط:

پرسش‌های پرتکرار

می‌شود کل تست را به هوش مصنوعی سپرد؟ +
نه. مدل از روی توضیح شما سناریو می‌سازد، پس فقط چیزهایی را می‌بیند که گفته‌اید. باگ‌های واقعی معمولاً از جایی می‌آیند که کسی فرض کرده بود مشکلی ندارد — و آن فرض در متن نیامده است.
داده‌ی تست تولیدشده برای فرم‌های فارسی قابل اعتماد است؟ +
برای حجم زیاد و تنوع بله، ولی حتماً بگویید داده‌ی مرزی هم بسازد: نیم‌فاصله، «ی» عربی، صفر ابتدای شماره موبایل و تاریخ شمسی. بدون درخواست صریح، خروجی معمولاً تمیز و بی‌خطر است که دقیقاً همان چیزی نیست که تست به آن نیاز دارد.
کد تست خودکاری که تولید می‌کند را می‌شود مستقیم اجرا کرد؟ +
اجرا معمولاً می‌شود، ولی مرور لازم است. شایع‌ترین مشکل، تست‌هایی است که همیشه سبز می‌شوند چون شرط واقعی را چک نمی‌کنند. یک تست همیشه‌سبز از نبودن تست بدتر است، چون حس امنیت کاذب می‌دهد.
می‌توانم لاگ و خطای واقعی محیط عملیاتی را کپی کنم؟ +
اگر توکن، شماره تماس، ایمیل کاربر یا رشته‌ی اتصال دیتابیس در آن هست، اول پاکشان کنید. ردیابی پشته و پیام خطا معمولاً بی‌خطرند؛ مقادیر متغیرها اغلب نیستند.
برای تست نفوذ و امنیت هم قابل استفاده است؟ +
برای فهمیدن اینکه چه چیزی را باید تست کرد و ساختن چک‌لیست بله. برای اینکه بگوید سیستم شما امن است نه — مدل کد اجرانشده‌ی شما را نمی‌بیند و نتیجه‌ی اسکن واقعی را ندارد.
#تست نرم‌افزار #سناریوی تست #داده تست #گزارش باگ #تست خودکار
به‌دردِ کسی می‌خورد؟ تلگرام واتساپ
🍊

خواندنش خوب بود — حالا امتحانش کن

هرچه در این صفحه خواندی، همین حالا داخلِ نارنگی قابلِ اجراست. ثبت‌نام با شماره‌ی موبایل، نارنگیِ رایگانِ شروع، بدونِ نیاز به کارت یا تحریم‌شکن.

بدونِ نصب هم کار می‌کند — ولی در اپ سریع‌تر است