צוות יורש מודול חיוב שאף אחד לא מבין במלואו. אין בו בדיקות שמגנות על התנהגות קיימת. מוצע ספרינט כדי "לנקות אותו", והתוכנית היא לכתוב מחדש את הליבה במבנה חדש. אף אחד לא יכול לומר איך הוא ידע שהגרסה החדשה עדיין גובה תשלום נכון מהלקוחות.
זהו תרחיש להמחשה, לא אירוע מתועד. הוא מתאר את הפער שפרויקט אימון רפקטורינג צריך לסגור: מהנדסים שיכולים לראות שהקוד מבולגן, אך עדיין לא יכולים לתכנן שיפור גבולי ולהראות שההתנהגות נשמרה.
מדריך זה מיועד למנהלי הנדסה ומנהלי פרויקטים. הוא מכסה כיצד לתאר את בעיית הביצועים, לאבחן את הפערים, להכין את התכנון ולתרגל אותו, לעבוד על מקרה ולהעריך האם המיומנות מועברת לעבודה אמיתית. הוא עוסק בתכנון הדרכה. הקוד, הבדיקות והכללים בתוכנית שלכם צריכים לעבור אימות על ידי מהנדסים בכירים במערך העבודה שלכם.
מהו פרויקט הדרכה לרפקטורינג?
פרויקט הכשרה בתחום רפקטורינג הוא עבודת עבודה מובנית על קוד מדור קודם, כאשר המטרה היא לבנות יכולות וכן לשפר את הקוד. הלומדים מתכננים שינוי קטן ומוגבל, מגנים על התנהגות קיימת באמצעות בדיקות, משפרים את העיצוב בצעדים קטנים ומראים ראיות לכך ששום דבר לא שבור. הקוד משתפר, וחשוב מכך, המהנדסים מתרגלים את שיקול הדעת הדרוש להם על חוב טכני אמיתי.
עובדות מהירות
| שאלה | תשובה קצרה |
|---|---|
| מהי המשימה? | תכנון ואישור שיפור קוד מדור קודם מוגבל. |
| מה אתה מקבל ציון? | ניתוח סיכונים, והוכחות לכך שההתנהגות הקיימת נשמרה. |
| האם כתיבה מחדש רחבה היא פרויקט הכשרה טוב? | בדרך כלל לא. זה מסתיר את המיומנות שמתרגלים ומקשה על הצגתה של התנהגות שמורה. |
| האם מספיק בוחן על שיפוץ תבניות? | לא. זה מאשר תנאים מוקדמים, אבל לא האם מהנדס יכול לתכנן ולאמת שינוי. |
| מי מאשר את התוכן? | מנהל הנדסה ומהנדס בכיר שמכיר את בסיס הקוד. |
| מה אימון לא יכול לתקן? | כלי בדיקה חסרים, לחץ שחרור, בעלות לא ברורה וחוסר זמן לעבודות תחזוקה. |
| איך אתה יודע שזה עבד? | מקרה חדש, שלא נראה, של קוד מדור קודם, שדורג על פי קריטריונים מוסכמים, עם מעקב אחר עבודה אמיתית. |
1. תאר את בעיית הביצועים
התחילו במשימה: תכננו ותאמו שיפור קוד מדור קודם מוגבל. "מוגבל" היא המילה החשובה. הלומד בוחר שינוי קטן מספיק כדי לסיים, ויכול לומר מה נמצא במסגרת ומה לא.
עוזר לדייק במונחים. מרטין פאולר מתאר ריפקטורינג כ... טכניקה מבוקרת לשיפור עיצוב של בסיס קוד קיים, המורכבת משינויים קטנים, המשמרים התנהגות. הביטוי "משמר התנהגות" הוא מה שמבדיל בין עיבוד מחדש לבין כתיבה מחדש, וזה מה שהאימון חייב להראות. מטאפורת החוב הטכני עצמה נטבע על ידי וורד קנינגהם, והדיון של פאולר הוא תזכורת שימושית לכך שניתן לקחת חובות במכוון ובתבונה, כך שלא כל מודול מבולגן הוא טעות שיש לתקן.
ספרו של מייקל פת'רס על קוד מדור קודם נוקט באותו קו בנוגע לתרגול. תיאורו של המוציא לאור אומר שהוא מלמד מפתחים לכתוב בדיקות המבטיחות הם לא משנים את האפליקציה בלי כוונה, ולהביא שליטה על תוכנה קיימת ללא כתיבה מחדש מלאה.
כתבו את הצהרת הביצועים במשפט אחד ובקשו ממנהל הנדסה לבדוק אותה: "בהינתן מודול מדור קודם ומטרה מוגדרת, המהנדס מציע שינוי מוגבל, מוסיף בדיקות שמזהמות את ההתנהגות הנוכחית, מבצע את השינוי בצעדים קטנים ומראה שההתנהגות נשמרת."
2. אבחון פערים בלמידה ובהקשר
לפני שאתם בונים משהו, השוו את המשימה הנדרשת עם מה שאתם מתרגלים בפעילויות הנוכחיות שלכם והעריכו. שלוש שאלות בדרך כלל מפרידות בין פער אימון לדברים אחרים:
- האם הפרקטיקה הנוכחית משתמשת במשימה האמיתית? אם האימון מכסה שחזור דפוסים בשקופיות, אבל אף אחד לא משנה קוד שלא נבדק, אזי אף אחד לא תרגל התנהגות מגינה. אם הערכה היא מבחן רב-ברירה על ריחות קוד, היא מודדת זכירה.
- מהי הדרישה הקוגניטיבית? בטקסונומיה המתוקנת של בלום, שיפוט האם שינוי בטוח נמצא ברמות הניתוח וההערכה, ועיצוב התוכנית והבדיקות מגיע לרמת היצירה. התאמת פעילויות לרמות אלו מכוסה במדריך שלנו ל... התאמת פעילויות למידה לטקסונומיה של בלום.
- האם משהו מלבד מיומנות מפריע? בדקו את כוח האדם, הכלים והנהלים. אם הבנייה אורכת שעה, אף אחד לא יבצע בדיקות לעתים קרובות. אם עבודות תחזוקה לעולם לא מתוכננות, מהנדסים יבצעו שיפוץ רק בסתר. דווחו על סיבות שאינן קשורות להכשרה לאנשים שיכולים לתקן אותן.
3. תכננו הכנה ותרגול מכוונים
ברגע שאתם יודעים אילו פערים אימון יכול לסגור, תנו לכל שלב תפקיד ייחודי.
הכנה. בדקו את הדרישות המוקדמות באמצעות אבחון קצר: כיצד פועלת מסגרת הבדיקה שלכם, מהו מבחן אפיון, וכיצד הצוות שלכם סוקר ומאחד. לימוד בקצב עצמי מתאים לשלב זה. בדיקת חזרה מאשרת רק את הדרישות המוקדמות.
תרגול. השתמשו בפרויקטים של שיפוץ שיטתי עם צורה ברורה. התחילו מדגימה קטנה ובטוחה, ולאחר מכן עברו לחלק אמיתי אך מוגבל של בסיס הקוד שלכם. קאטה של ורד מוזהב היא נקודת התחלה ידועה לשלב הראשון. קובץ ה-README שלו, המתוחזק על ידי אמילי באך, ממליץ לכתוב בדיקות לפני שינוי קוד וממסגר את התרגיל כאימון בצעדים קטנים, הרצת בדיקות לעתים קרובות ושיפור העיצוב טיפין טיפין. רצף הגיוני לכל פרויקט הוא: הגדרת המטרה והגבול, כתיבת בדיקות שלוכדות את מה שהקוד עושה היום, שינוי דבר אחד בכל פעם, הרצת הבדיקות לאחר כל שלב ורישומה של מה שלמדתם.
מָשׁוֹב. קשרו משוב להחלטות, לא לציון כולל. "חילצתם את היגיון ההנחה, אבל הבדיקות שלכם כיסו רק את הנתיב האושר, כך שלא יכולתם להבחין בשינוי העיגול" שימושי יותר מ"3 מתוך 5".
קלט חי של מדריך או סקירה אסינכרונית? קלט חי מוסיף את הערך הרב ביותר כאשר בחירה אינה חד משמעית, למשל האם להפסיק ולהוסיף מבחן חסר או להמשיך. סקירה אסינכרונית מספיקה כאשר לומדים משווים את התוכנית והמבחנים שלהם עם גרסת מומחה עם הערות. צוותים רבים משתמשים בשניהם: הכנה בקצב עצמי תחילה, ולאחר מכן מפגש מודרך על המקרים הקשים.
4. עבדו על דוגמה מציאותית
לדוגמה. מנהל הנדסה צריך לאמת את המקרה ואת קריטריוני התשובה לפני השימוש.
המקרה. פונקציה מדור קודם מחשבת סכום כולל של הזמנה, כולל הנחה, מס וחוק משלוח. אין לה בדיקות. צוות מציע לעצב מחדש את כל מודול החיוב כדי להפוך אותו ל"נקי יותר".
המשימה. הלומד מסביר מה היה עושה, מצטט את הראיות שהיה אוסף, ואומר איזה מידע או תמיכה נוספים הוא זקוק להם.
ניסיון ראשון. "הייתי מחלק את המודול לשלושה שירותים ומעביר את הלוגיקה, ואז בודק את המספרים בשלבים." הלומד בחר בשינוי גדול ובבדיקה ידנית מאוחרת. אין דרך לדעת אם הגרסה הישנה והחדשה תואמות לגבי מקרי קצה.
משוב וניסיון חוזר. הסוקר שואל מה הפונקציה עושה היום עבור סל ריק, הנחה שהופכת את הסכום לשלילי, ומקרה עיגול. בניסיון החוזר מבקש מהלומד לצמצם את ההיקף להתנהגות אחת ולומר כיצד יוכיח שהיא לא השתנתה.
ניסיון חזק יותר. "הייתי משאיר את מבנה המודול כרגע. הייתי לוכד את מה שפונקציית סך כל ההזמנה מחזירה היום עבור קבוצת קלטים, כולל מקרי הקצה, כבדיקות. לאחר מכן הייתי מחלץ את חישוב ההנחה לפונקציה משלה, מריץ את הבדיקות לאחר שלב בודד זה, ועוצר. הייתי מציין שלכלל המשלוח יש התנהגות שאני לא מבין ושואל עמית לפני שאני נוגע בו." שימו לב שתשובה זו מגבילה את השינוי, מגינה תחילה על ההתנהגות ומציינת את מה שאינו ידוע.
מדוע כל תגובה ניתנת להגנה או אינה שלמה. יש לשפוט כל אחד לפי קריטריונים שאושרו, ולא לפי העדפתו של הסוקר. הניסיון הראשון עשוי להיות כיוון הגיוני לטווח ארוך, אך הוא אינו שלם כתוכנית, משום שהוא אינו נושא ראיות להתנהגות משומרת. הניסיון החזק יותר הוא קטן, ניתן לבדיקה וכנה לגבי אי הוודאות.
5. הערכת יכולות והעברת תוכנית
ראיה ליכולת היא ביצועים על מקרה חדש של קוד מדור קודם שהלומד לא ראה. תנו ציון לניתוח הסיכונים ולראיות שההתנהגות נשמרה. רובריקה פשוטה משתמשת בסולם של 0 עד 2 לכל קריטריון:
| קריטריון | ראיות נצפות |
|---|---|
| ביצוע משימות | מתכנן ומאמת שיפור קוד מדור קודם מוגבל, ומתעד את הפעולה והראיות שמאחוריה. |
| הַנמָקָה | מסביר את האילוצים, החלופות וחוסר הוודאות, ובודק את הסיכונים ואת הראיות לכך שההתנהגות נשמרה. |
| גבולות | משתמש בהליכים מאושרים, ומבקש עזרה כאשר מידע או סמכות אינם מספיקים. |
עוגנים: 0 חסר או אינו נתמך, 1 חלקי עם השמטות רלוונטיות, ו-2 מלא ומוצדק על פי קריטריונים מוסכמים. הגדירו שגיאות קריטיות בנפרד, כגון שינוי התנהגות ללא בדיקה שהייתה שמה לב אליה, כך שציון כולל לא יכול להסתיר אחת כזו. רובריקה זו היא הצעה, לא תקן מוכנות מאומת: התאימו אותה עם מנהל הנדסה ובצעו פיילוט. המדריך שלנו ל עיצוב תרגול אינטראקטיבי עם משוב שימושי מראה כיצד לכתוב משוב המקושר להחלטות.
תכננו את ההעברה באופן מכוון. לאחר התרגיל, תנו לכל מהנדס חוב קטן ואמיתי לטפל בו עם סוקר, או ערכו סקירה קצרה על שינוי שנעשה לאחרונה ושבר משהו. בדקו את ההעברה לאחר חשיפה מתאימה לעבודה אמיתית, לא מיד לאחר הסדנה.
היכן שהעברת מידע אינטראקטיבית עוזרת
פורמטים אינטראקטיביים עוזרים, כאשר כולם צריכים להתחייב לפני שהם רואים את הקבוצה. בפגישה חיה, מנחה יכול להציג קטע קצר מהדורה מדור קודם, לבקש מכל מהנדס להגיש את השינוי הראשון שהוא היה מבצע וכיצד הוא היה מוכיח שהוא בטוח, ולאחר מכן לחשוף את הפריסה לפני הדיון. ניתן להריץ את אותה הנחיה בקצב אישי לצורך הכנה. AhaSlides תומך בלמידה אינטראקטיבית ובמעבר בין הגשה חיה לקצב אישי. זהו כלי מצגת ולמידה, לא מקום להרצת או ניתוח קוד, לכן הפעל את העיבוד מחדש עצמו בסביבה שלך. בדוק כל פונקציית כתיבה, משוב או דיווח ספציפית שאתה מתכנן להסתמך עליה מול זרימת העבודה שלך. לקבלת הדרכה בבחירת פורמטים, עיין במאמר שלנו בנושא מתי להשתמש בלמידה אדפטיבית, אינטראקטיבית וחיה.
מדוד מה השתנה
החליטו מראש מה יראה שהמהנדסים יכולים לבצע את המשימה. השוו את איכות ניתוח הסיכונים ואת הראיות להתנהגות שנשמרה במקרה שלא נראה, מול קו בסיס. הגדירו מי נכלל, את המכנה ואת התזמון. אם התוצאות משתפרות, בדקו מה עוד השתנה באותה תקופה, כגון כלי בדיקה חדשים, בנייה מהירה יותר או שינוי בעלות, לפני מתן קרדיט להכשרה.
אילוצים שעשויים להישאר
- זמן לעבודות תחזוקה. אם עבודות חוב לעולם לא מתוכננות, למהנדסים מיומנים עדיין אין מקום להשתמש במיומנות הזו.
- כלי בדיקה. ללא רתמת בדיקה שמישה או בנייה מהירה, קשה לקיים צעדים קטנים ובדיקות תכופות.
- כיסוי תיקים. מקרה אחד מהדור הקודם מראה כמה סוגי סיכון. ציון אינו מתאר את שיקול דעתו של מהנדס באופן כללי.
- שיפוט מתי לא לעשות רפקטורינג. חלק מהקודים עדיף להשאיר כבעלי אופי, להחליף אותם או להוציאם משימוש, והחלטה זו כרוכה ביותר ממיומנות.
- לְהַעֲבִיר. ביצוע בקאטה אינו זהה לביצוע במודול הפקה תחת לחץ אספקה.
יש לציין את הנקודות הללו מראש לספונסרים ולתכנן תיקונים נפרדים. הכשרה משפרת את מה שמהנדס יכול לתכנן ולהוכיח. היא לא יוצרת את הזמן או את הכלים.
שאלות נפוצות
מהו פרויקט הדרכה לרפקטורינג?
זוהי פרקטיקה מובנית על קוד מדור קודם שבה מהנדסים מתכננים שינוי קטן, מגנים על התנהגות קיימת באמצעות בדיקות, משנים את העיצוב בצעדים קטנים ומראים ששום דבר לא שבור.
האם כתיבה מחדש מלאה היא דרך טובה ללמוד על חוב טכני?
בדרך כלל לא. כתיבה מחדש היא משימה גדולה, קשה לאמת אותה ומסתירה את המיומנות שברצונך לבנות. שינוי מוגבל עם מבחנים שלוכדים את ההתנהגות הנוכחית הופך את ההיגיון לגלוי.
כיצד אתם מעריכים האם מהנדסים יכולים לבצע שיפוץ בבטחה?
תן מקרה חדש של קוד מדור קודם ודרג את ניתוח הסיכונים ואת הראיות לכך שההתנהגות נשמרה על פי קריטריונים מוסכמים. בוחן על דפוסי שחזור מאשר רק את הדרישות המוקדמות.
האם אתה צריך בסיס קוד לדוגמה עבור ההדרכה?
אתם צריכים מקום להתאמן בו בבטחה. קבוצות רבות מתחילות עם קאטה פומבית ואז עוברות לחלק מוגבל בקוד שלהן. מנהל ההנדסה שלכם צריך לאשר שהקוד מתאים.
איפה להתחיל
בחרו סוג קטן וחוזר של שינוי מדור קודם בבסיס הקוד שלכם. כתבו את הצהרת הביצועים, בקשו ממנהל הנדסה לאמת את המקרה ואת הבדיקות שיראו התנהגות משומרת, וניסחו רובריקה בת שלושה קריטריונים עם סולם מ-0 עד 2 ורשימת שגיאות קריטיות. ערכו פיילוט עם קבוצה קטנה לפני שאתם מפרסים אותו.
כדי לראות כיצד תרגיל קבלת החלטות רפקטורינג יכול להתבצע בשידור חי עם הצוות שלכם, ולעשות בו שימוש חוזר בקצב אישי לאחר מכן, עיינו ב-AhaSlides.








