باگ را قبل از تعمیر کوچک کن؛ Minimal Reproduction بساز
کاربر میگوید «گاهی خراب میشود» و تو بین چند فایل و سرویس مختلف حدس میزنی علت کجاست.
اول ورودی، محیط و قدمهایی را پیدا کن که خطا را قابل تکرار میکنند. باگی که نتوانی دوباره بسازی، معمولاً سختتر و تصادفیتر تعمیر میشود.
چطور دقیقتر به موضوع نگاه کنیم؟
- متن خطا، ورودی، نسخه و محیط را قبل از تغییر کد ثبت کن.
- قدمهای بازتولید را به کوتاهترین مسیر ممکن کاهش بده.
- وابستگیها و دادههای غیرضروری را یکییکی حذف کن تا ببینی خطا هنوز رخ میدهد یا نه.
- بعد از اصلاح، همان reproduction را دوباره اجرا و یک مورد نزدیک به آن را هم بررسی کن تا فقط علامت را پنهان نکرده باشی.
چرا این موضوع مهم است؟
هر متغیر اضافه فضای جستوجو را بزرگ میکند. نمونه حداقلی کمک میکند علت از همزمانی، داده، state یا محیط جدا شود.
سؤالهایی که معمولاً بعدش پیش میآید
اگر خطا تصادفی است چه؟
زمان، concurrency، شبکه و state را log کن و دنبال الگوی رخداد بگرد؛ تکرارپذیری میتواند آماری باشد نه صددرصد.
از کجا بفهمم نمونه واقعاً حداقلی است؟
اگر حذف یک جزء دیگر باعث ناپدیدشدن مسئله میشود، به مرز مفیدی رسیدهای.
