اگر تا به حال ساعتها روی هزاران خط لاگ گشتهاید تا یک خطای ساده مثل «تقسیم بر صفر» را بیابید، میدانید این روند چقدر فرسایشی است. طبق گزارش tratt.net در ۹ ژوئن ۲۰۲۶، ابزاری به نام Shrink Ray و دیگر کاهشدهندههای مورد آزمون، این عذاب را خودکار میکنند و اغلب حجم دادههای ورودی را تا ۹۹٪ کاهش میدهند تا باگها بهوضوح «بیرون بزنند».
بسیاری از برنامهنویسان هنوز به دستورات ساده چاپ (print) یا دیباگرهای سنگین متکی هستند. اما وقتی یک برنامه با یک ورودی عظیم کرش میکند، فضای جستوجو برای یافتن علت خطا، فراتر از توان تحلیل انسانی است. در اینجا کاهشدهنده مورد آزمون (Test-case reducer) — که شبیه مجسمهسازی است که تکههای اضافی سنگ را میتراشد تا شکل اصلی اثر نمایان شود — وارد عمل میشود. همانطور که در تحلیلهای پیشین ما دربارهی بهینهسازی کد اشاره کردیم، حذف دستی دادهها اغلب بیفایده است؛ چون حذف یک بخش ممکن است کرش را بهکلی متوقف کند، در حالی که حذف جفتهای مجزایی از دادهها، تنها راه رسیدن به کوچکترین نمونه معیوب است.
این ابزارها با جفت کردن برنامه و یک تست جذابیت (Interestingness test) — که شبیه غربالی است که فقط دانههای معیوب را نگه میدارد و بقیه را میریزد — عمل میکنند. بر اساس مستندات tratt.net، این ابزارها میتوانند حجم یک برنامه تصادفی C را در عرض چند دقیقه بیش از ۶۰٪ کاهش دهند. تکنیکهای کلیدی آنها عبارتند از:
- کاهش موازی (Parallel Reduction): ابزار Shrink Ray از پردازش موازی و قوانین معنایی برای حذف بایتهای غیرضروری استفاده میکند.
- اجبار تعیینگرا (Determinism Forcing): برای رفع باگهای متغیر (flaky)، توسعهدهنده میتواند شرط بگذارد که خطا حتماً در تمام $n$ اجرای متوالی ظاهر شود.
- ترفند شمارنده سراسری (Global Counter Hack): کاربران میتوانند ابزار را هدایت کنند تا بهجای اندازه فایل، روی «طول ردپای اجرا» (تعداد دستورات اجرا شده) بهینهسازی کند.

این رویکرد، عیبیابی را از یک جستوجوی دستی و خستهکننده به یک مسئلهی بهینهسازی برنامهریزیشده تبدیل میکند. شما با تغییر معیارهای «جذابیت»، ابزار را مجبور میکنید کوتاهترین مسیر رسیدن به کرش را پیدا کند. برای یک توسعهدهنده، این یعنی زمان کمتری برای غرق شدن در جزئیات و زمان بیشتر برای اعمال اصلاحات واقعی.
گام بعدی شما
- اگر با یک باگ غیرقطعی دستوپنجه نرم میکنید، یک اسکریپت ساده شل (shell script) بهعنوان تست جذابیت بنویسید.
- این اسکریپت را در یک کاهشدهنده اجرا کنید تا لایههای نویز حذف شوند و خطای منطقی هسته برنامه نمایان شود.
- بررسی کنید کدام بخش از ورودی شما واقعاً باعث کرش میشود تا دامنه جستوجو در کد را محدود کنید.
اما داستان سختافزاری این تحولات حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.

گفتگو