Refactoring

ארגון הקוד מחדש (נקרא גם Refactoring) הוא תהליך של שיפור קוד קיים על ידי שימוש בטכניקות שמשנות את המבנה הפנימי של הקוד מבלי לשנות את ההתנהגות החיצונית שלו. 

שיפור הקוד הקיים בא לידי ביטוי בקריאות הקוד, יעילות הקוד מבחינת סיבוכיות ריצה ומקום, והפיכת הקוד למודולרי  הניתן להרחבה בקלות.

Refactoring יכול להיעשות במספר טכניקות:

 מחיקת שכפולים בקוד ומעבר לפונקציות המבצעות פעולות סדרתיות החוזרות על עצמן
 מתן שמות משמעותיים למשתנים או פונקציות
 מעבר לשימוש במחלקות - מעבר לתכנות מונחה עצמים
 מחיקת קוד מיותר
 שינוי ייצוג המשתנים - לדוגמה: בשפת python ניתן לחסוך פי 2 במקום על ידי מעבר מייצוג int64 לint32 כאשר מזהים שאין צורך ב64 סיביות לתוכן הספציפי של הנתונים.

ישנן סביבות עבודה, כגון ויז'ואל סטודיו, המספקות כלים לביצוע refactoring באופן אוטומטי או אוטומטי-למחצה.

תהליך ה-Refactoring מורכב משלושה שלבים:
 זיהוי נקודות פוטנציאליות ל-Refactoring
 החלת טכניקת ה-Refactoring הרלוונטית לאותה נקודה
 בדיקה שההתנהגות החיצונית של הקוד לא השתנתה

יתרונות Refactoring לעומת בניית הקוד מחדש:
 Refactoring אורך פחות זמן באופן משמעותי מתכנות מחדש, בהנחה שהאדם שמבצע את השינוי מכיר היטב את הקוד ואת הפונקציונליות שלו
 המשך שיווק התוצר בכל שלב
 לו"ז צפוי (לאחר הערכה על פי קטע קוד קטן)

היסטוריה 

בעבר לא בוצע Refactoring בשלבי פיתוח. דוגמה לכך, היא קובצי CVS (משנת 1984) אשר אינם כוללים תיעוד של שינוי או העברה של קבצים ותיקיות. 
אף על פי ש-Refactoring היה מוכר לפני שנים רבות, וויליאם פ. אופדיק ידוע בתור הראשון שבחן נושא זה, הגם שהתאוריה והמיכון היו זמינים לפני כן. 

מרטין פאולר בספרו: שיפור העיצוב של קוד נוכחי הוא התייחסות קנונית.
השימוש הידוע הראשון במושג "Refactoring" הוצא לאור לספרות בספטמבר 1990, מאמר של ויליאם פ. אופדיק וראלף א. ג'ונסון. בתיזה של אופדיק שפורסמה ב-1992, הוא השתמש שנית במונח זה.
מונח ה-Refactoring היה בשימוש בשפת התכנות Forth מאז שנות השמונים המאוחרות של המאה הקודמת. פרק שש בספרו של ליאו ברודי מוקדש לנושא זה. 
בשיטת ה-eXtreme Programming, חילוץ מתודה בשיטת ה-Refactoring הוא נחוץ כמו ב-Forth, שבירת המתודה למתודות קטנות יותר.

ראו גם 
 סיבוכיות קוד

קישורים חיצוניים 
 Visual Studio Express–יכולות Refactoring
 Sniff Out That Smelly Code
 צחצח והברק מאת יואל ספולסקי
 הגדרה של Refactoring - מאת וייס שי
 הנדסת תוכנה - Refactoring - שקף 67 בהרצאה בנושא עבודה עם קוד קיים - מאת ראובן יגל

תכנות