כימיקלים ודגום; חומרים הנדסה
אישור לעומת כתב: הפיכת הבחירה הנכונה עבור מערכות הנדסה
Table of Contents
כאשר שמירה ושיפור מערכות הנדסה, ארגונים לעתים קרובות עומדים בפני החלטה ביקורתית: האם הם מספקים רכיבים קיימים או לשכתב אותם לחלוטין?הבנת ההבדלים, היתרונות והחסרונות של כל גישה חיונית לקבלת החלטות מושכלות כי תואמים עם מטרות הפרויקט ומגבלות משאבים. מאמר זה מספק מסגרת מקיפה להערכת ההסכמים, באמצעות דוגמאות בעולם האמיתי ותובנות מומחה להנחות את ההחלטה שלך.
הבנה מחדש
מתן כרוך בביצוע שיפורים מצטברים במערכות קיימות ללא שינוי פונקציונליות הליבה שלהם.זה נועד לשפר את איכות הקוד, קריאטיביות, ושמירה על יכולת תוך שמירה על ההתנהגות של המערכת. גישה זו משמשת לעתים קרובות כדי להפחית את החוב הטכני ולהכין מערכות לפיתוח עתידי.הספק אינו עומד להוסיף תכונות; זה על שיפור המבנה הפנימי של הקוד כך שינויים עתידיים הופכים קלים יותר, בטוחים ומהירים יותר.
שיפורים ושערי קוד
מתן מטרות בדרך כלל "ריקוד" - אינדיקטורים חיצוניים שבדרך כלל תואמים לבעיות עמוקות יותר במערכת.דוגמאות כוללות קוד משוכפל, שיטות ארוכות, שיעורים גדולים, והפיכה מוגזמת.על ידי חיסול הריחות האלה, הצוותים יכולים להפוך את בסיס הקוד ליותר מודולרי ומבחן. כלים כמו מנתחים סטטיים ו- IDE תכונות מחזרות (למשל, Rename, Extractup, משוך) לעזור לשותפים של שינויים רבים אלה.
מתי לעשות פיצוי
המימוש הוא יעיל ביותר כאשר המערכת הקיימת עדיין נשמעת מבנית, אך צברה חוב טכני מתון.זה גם מתאים כאשר ההיגיון העסקי מורכב ומופנם היטב, כמו rewrites סיכון לאבד ידע דומיין קשיח.צוותים המתרגלים תגמול מתמשך כחלק ממחזור הפיתוח שלהם (למשל, חוק הצופים) מוצאים כי הקוד נשאר בריא וצורך גדול עבור תיקון מחדש יכול להפחית את הסיכון באמצעות פריסה קטנה יותר.
הבנה מחדש
כתב, מצד שני, כרוך בפיתוח מערכת חדשה מאפס או באופן משמעותי לשנות את הקיים. שיטה זו היא בדרך כלל נבחר כאשר המערכת הנוכחית מיושן, מורכב מדי, או כבר לא לענות על הצרכים העסקיים. Rewriting יכול לספק התחלה חדשה, המאפשרת אדריכלות מודרנית וטכנולוגיות להיות מיושם. עם זאת, זה גם אומר למחוק שנים של תיקוני באגים, אופטימיזציה, ידע מוסדי ונקבר בקוד הישן.
ניו יורק מול בראונפילד רווייטס
טקס גרינפילד מתחיל עם סלטה ריקה, בניית המערכת בסביבה חדשה לחלוטין.זה קורה לעתים קרובות כאשר הפלטפורמה המקורית מיושן (למשל, נודדת מקובבול ל- Java) או כאשר המערכת חייבת להיות re-architected לחלוטין עבור דחיסות. a field חום rewrite להחליף באופן מצטבר חלקים של המערכת הקיימת תוך שמירה על אחרים - לפעמים נקרא "התקסטרואנטר" גישה היברידית המאפשרת זו.
מתי לכתוב
כתב מחדש מוצדק כאשר המערכת הנוכחית הגיעה לנקודה שבה השיפוץ יעלה יותר מאשר בנייה מחדש של אינדיקטורים כוללים: בסיס הקוד הוא בלתי-מוכיח, האדריכלות מונעת שינויים הכרחיים (למשל, לא ניתן לדרג אופקית), או ערימה הטכנולוגיה כבר לא נתמך. תרחיש אחר הוא כאשר המודל העסקי עבר כל כך דרמטי עד שהמערכת אינה יכולה להתאים ללא בנייה מלאה.
השוואת סיכונים ועלויות
שתי הגישות נושאות פרופילים שונים של סיכון ומבנים עלות.הבנת קבוצות אלה מסייעת לצוותים להתאים את בחירתם עם סובלנות סיכון ארגונית ומחזורי תקציב.
גורמי סיכון
(FLT:0) שיפור סיכונים: FLT:1 הסיכון הגדול ביותר הוא כי לא להשלים - זה הופך למעגל אינסופי של שיפורים קטנים בעוד הבעיות הבסיסיות של המערכת נמשכת.סיכון נוסף הוא "עייפות מספקת", שבו הצוות מאבד מוטיבציה כי התקדמות היא איטית ובלתי נראית לבעלי העניין.
(האזהרה המפורסמת ביותר מגיעה ממאמרו של ג'ואל Spolsky:2) "דברים שאסור לעשות, חלק I"FLT 3: 3, שם הוא טוען כי כתב חוזר מוביל לעתים קרובות למשלוח באגג'י, תכונות-פוכות מאוחר יותר.
ניתוח עלויות
מתן תפוצה עולה לאורך זמן.מחקר של המכון להנדסה תוכנה מצא כי תיקון פגם לאחר השחרור עולה 10-100x יותר מאשר תיקון זה במהלך עיצוב - אבל שיפור ספוג פגמים רבים מוקדם על ידי שיפור בהירות הקוד. Rewriting דורש השקעה גדולה upfront: אתה צריך להחזיר מחדש את האנאנליזה, לעצב מחדש, לפענח, ולהעריך את כל מה.
מסגרת החלטה למנהיגי הנדסה
בחירת בין תגמול וכתיבה מחדש תלויה בגורמים שונים כגון מורכבות מערכת, סדרי עדיפויות עסקיות, משאבים זמינים ומטרות לטווח ארוך.מסגרת ההחלטה הבאה יכולה לעזור להעריך את המצב הספציפי שלך.
הערכה של מערכת הבריאות
לבצע ניתוח שיטתי של בסיס הקוד באמצעות מדדים כמו מורכבות מחזורית, כיסוי קוד, הפיכה, צפיפות פגומה. כלים כמו SonarQube או CodeClimate יכול לספק נתונים אובייקטיביים.אם המערכת תופסת גרוע על שמירה, אבל ההיגיון העסקי יציב, סיפוק עשוי להיות מספיק.אם האדריכלות היא פגומה ביסודה (למשל, ספגטי מונוליטי שאינו יכול להיות מתוכנן), ייתכן שיש צורך reriteing עשוי להיות מספיק.
מטרות עסקיות Alignment
ממפה את ההחלטה הטכנית לתוצאות עסקיות.אם המטרה היא להאיץ את המשלוח המאפיין בתוך הרבעון הבא, מתן מחדש הוא בדרך כלל בטוח יותר.אם המטרה היא להיכנס לשוק חדש הדורש ביצועים שונים באופן קיצוני או מאפיינים מדרגים, טקס יכול להיות מוצדק.בעלי מוצר ובעלי עניין כדי להבהיר את "למה" לדוגמה, סטארט-אפ עשוי לבחור לשכתב במהירות כדי לחדד, בעוד שמערכת מורשת קריטית עשויה להעדיף תגמול כדי למנוע תגמול.
יכולת צוות וידע מוסדי
מתן מסתמך במידה רבה על הבנת המערכת הקיימת.אם הכותבים המקוריים עדיין בקבוצה, השיפוץ יעיל יותר.אם בסיס הקוד הוא קופסה שחורה עם תיעוד קטן, טקס עשוי להופיע מפתה - אבל הוא נושא את הסיכון לחזור על טעויות העבר.במקרה זה, לשקול "טקס עם שימור": לבנות את המערכת החדשה במקביל, אך לחלץ כללים עסקיים מן הקוד הישן באמצעות קריאה זהירה ובדיקה מתקדמת לפני מערכת הבדיקה.
דוגמאות אמיתיות בעולם
בחינת האופן שבו ארגונים אחרים לנווט את הבחירה הזו יכולה לספק תובנות מעשיות.
דוגמה: תגמול של Basecamp של HEY
כאשר מפתחים את שירות הדואר האלקטרוני HEY, צוות של Basecamp בחר לספק את בסיס הקוד של הרכבות הקיים במקום לשכתב מאפס.הם הוציאו באופן שיטתי לוגיקה דומיין לתוך אובייקטים בשירות, שיפור כיסוי המבחן, ומחקו קוד מת.זה אפשר להם לשלוח את המוצר על לוח הזמנים תוך שמירה על הקוד מבוסס על שמירה על קשר.
תגית: FreshBooks' Rewrite
(NewBooks, חברת תוכנה חשבונאית, שינתה את הפלטפורמה כולה מאפליקציית PHP מונוליטית למערכת מודרנית, מדרגית.ההחלטה הגיעה לאחר שנים של מאבק עם ביצועים ומגבלות אדריכליות אשר לא יכלו לתקן.הטקס לקח יותר מ 2 שנים ועלות עשרות מיליוני דולרים, אך היא אפשרה להם לשרת לקוחות גדולים יותר ולהקטין את עלויות התמיכה.
דוגמה: Martin Fowler's Refactoring Community
מרטין פיולר, מחבר הספר "העיקרי:0"מספק: שיפור העיצוב של קוד קיים של קוד צופן צופן LT:1, תומך זמן רב על כך שהוא מארגן מחדש את כתב העת.הוא טוען כי רוב המערכות יכולות להיות משופרות במידה רבה אם הצוותים משקיעים בבדיקות אוטומטיות ואינטגרציה רציפה.
מסקנה: לעשות את הבחירה הנכונה
הן מספקות והן לכתיבה מחדש את מקומם בניהול מערכת ההנדסה.הערכה זהירה של המצב הספציפי תוביל ארגונים לאסטרטגיה היעילה ביותר, איזון סיכונים, עלות ומוכנות עתידית.הדרך הנכונה כוללת לעתים קרובות שילוב: לספק את החלקים שהינם ניתנים להצלה, ולנסח מחדש רק רכיבים אלה שאינם מתאימים לתיקון.