דוגמה מינימלית הניתנת לשחזור היא המקבילה בקוד להראות למוסכניק את החלק היחיד שמרעיש במקום למסור לו את כל המכונית. אתם מסירים כל מה שלא נחוץ כדי לעורר את הבעיה, ואז מוודאים שמה שנשאר עדיין נכשל כשמישהו אחר מריץ אותו. תעשו את שני הדברים האלה נכון – מינימלית וניתנת לשחזור – ורוב השאלות יענו על עצמן.
אותו רעיון, ארבעה שמות
תיתקלו במושג תחת ראשי תיבות שונים, תלוי בקהילה. כולם מתכוונים לאותו דבר:
- reprex – נפוץ בעולם של R ו-tidyverse (מתוך החבילה
reprex). - MCVE – Minimal, Complete, and Verifiable Example, המונח ש-Stack Overflow הפיץ.
- MWE – Minimal Working Example, בשימוש נרחב בחוגי LaTeX ו-TeX.
- SSCCE – Short, Self-Contained, Correct (Compilable) Example, ותיק בקהילת Java.
אם מישהו מבקש מכם אחד מאלה, הוא רוצה את אותו הדבר: את קטע הקוד הרץ הקצר ביותר שמראה את הבאג.
לפני
צינור הנתונים שלי קורס שוב ושוב. הנה כל 600 השורות של הסקריפט שלי. אתמול זה עבד. מה לא בסדר?
אף אחד לא יכול להריץ 600 שורות שקשורות לנתונים ולהרשאות שאין לו. אין דרך לראות את הכשל, אז אין דרך לעזור.
אחרי
הסקריפט הזה, באורך 12 שורות, משחזר את הקריסה ב-Python 3.12. הוא בונה DataFrame בן 3 שורות בתוך הקוד (ללא קובץ חיצוני) וזורק
KeyError: 'price'בשורה האחרונה. ציפיתי שזה ידפיס את הסכום הכולל. מה אני מפספס?import pandas as pd df = pd.DataFrame({"item": ["a", "b", "c"], "cost": [1, 2, 3]}) print(df["price"].sum()) # KeyError here
עכשיו כל אחד יכול להדביק את זה, להריץ ולראות את השגיאה המדויקת תוך שניות. התיקון (העמודה היא cost, לא price) ברור ברגע שהדוגמה ניתנת להרצה.
איך בונים אחת
- התחילו מאפס. העתיקו את הקוד הכושל לקובץ חדש וריק.
- מחקו כל מה שלא קשור עד שמחיקת שורה אחת נוספת תגרום לשגיאה להיעלם.
- שלבו את הנתונים בתוך הקוד. החליפו קבצים, מסדי נתונים וסודות בכמה שורות קשיחות.
- הריצו את זה בעצמכם בסביבה נקייה כדי לוודא שזה עדיין נכשל באותו אופן.
- ציינו את ההתנהגות הצפויה לעומת בפועל ואת הגרסאות שלכם.
כשאתם מדווחים על באג ולא שואלים שאלת “איך עושים”, שתלו את ה-MRE שלכם ישירות בתבנית דיווח הבאג – השדות “שלבים לשחזור” ו"סביבה" בנויים בדיוק בשביל זה.
להדרכה המלאה על שאלות טכניות, ראו את המדריך שלנו על שאילת שאלות טובות ב-Stack Overflow.