Table of Contents
הבנת התפקיד של אספקת הנדסת תוכנה מודרנית
בפיתוח תוכנה הנדסית, הלחץ לספק עדכונים במהירות ללא להקריב איכות מעולם לא היה גבוה יותר.מחזורי פריסה קצרה יותר מאפשרים לצוותים להגיב לשינויי שוק, פרצות חתימות, ותכונות האנייה ששומרות על משתמשים.אבל קבוצות רבות מוצאות עצמן תקועות במחזור של שחרורים איטיים, שבו כל עדכון דורש בדיקות נרחבות, בדיקות ידניות, ואש באגים בלתי צפויים.
סיפוק אינו על כתיבת מחדש מאפס או רודף שלמות.זהו פעילות ממוקדת, מצטברת המפחיתה את החוב הטכני, משפרת את המודולריות, ומפשטת את בסיס הקוד.כאשר נעשה באופן שיטתי, ומספקת באופן ישיר את הזמן הנדרש לבניית, לבדוק ולפרוס תכונות חדשות. מאמר זה חוקר כיצד צוותי הנדסה יכולים למנף מחדש כדי לכווץ את זמני ההפצה תוך שמירה או הגדלת תוכנה.
מקור: A Foundation for Faster Releases
לפני צלילה במהירות הפריסה, זה עוזר להגדיר מה באמת מחייב.לספק הוא טכניקה מבוקרת לשיפור העיצוב של הקוד הקיים. פופולרי על ידי ספרו של מרטין FFLT:0refactoring:שיפור העיצוב של קוד קיים צופן קיים FLT:1, זה כרוך יישום שינויים קטנים משמר התנהגות - שינוי, תמצית, שיטות החלפת מצבים עם טיפול מקיף יותר, כאשר הוא מקיף יותר, כאשר הוא מגובה על ידי שינוי התנהגות קטן יותר.
המטרה העיקרית היא להפוך את הקוד לקל יותר להבין וזול יותר לשנות.כאשר הקוד נקי ומאורגן היטב, מפתחים מבלים פחות זמן לפענח לוגיקה, פחות זמן כתיבה ומחיקת תכונות חדשות, ופחות זמן לחכות לחבילות מבחן לרוץ.
כיצד להעריך באופן ישיר את מהירות ההפחתה
זמן ה Deployment הוא סכום של פעילויות רבות: סקירת קוד, ביצוע בדיקות, בניית איסוף, שילוב וגלגל. iv. Refactoring יכול לקצר כל אחד מהשלבים האלה. להלן הן הדרכים העיקריות המספקות להאיץ את העברת התוכנה.
בדיקה מהירה יותר ויותר אמינה
אחד מצוואר הבקבוקים הגדולים ביותר בפריסה הוא בדיקות.פונקציות מונוליטיות גדולות לעתים קרובות דורשות מקרים רבים של בדיקות לכסות את כל הענפים.כאשר בדיקות עצמם איטיות, מפתחים לדלג עליהם או לחכות יותר לפידבק.שיפור יכולת הבדיקה על ידי שובר מודולים מודולים גדולים ליחידות קטנות, עצמאיות בדיקה.לדוגמה, תמצית שגרת נתונים למחזור נפרד מאפשרת למפתחים לבחון את ההיגיון הזה בבידוד, מבלי להזיז דוח קבוע של פחות, בדיקה, גם כן, אשר מבצע פחות בעיות הפעלה מהירה יותר של זמןיות.
אינטגרציה
(הדגשה אפילו שינוי קטן יכולה להיות מסוכנת אם בסיס הקוד יש סבך והפיכה הדוקה.מספק צמצום ההפיכה על ידי הצגת ממשקים, זריקת תלות, או בבירור גבולות מודולים מוגדרים באופן רופף, שילוב שינוי באזור אחד יש השפעות קרועות מינימליות על אחרים.
Quicker Code Reviews
סקירת הקוד היא עוד צוואר בקבוק נפוץ.כאשר קוד קשה לקרוא, סוקרים שואלים שאלות נוספות, לבקש הסברים נוספים, ולוקח זמן רב יותר לאשר שינויים.קוד מספק עוקב אחר מוסכמות שמות עקביות, יש גבולות שיטה ברורה, ולהימנע מתצפיות עמוקות של קינון.הדינים יכולים להבין במהירות את הכוונה ואמת התיקון.זה מקטין את זמן הבחינה הממוצע משעות לימוד.
מיני-ממות הפקה
מחסומים שלעתים קרובות נכשלים מובילים לגלגלים, לאחר המוות, והעבודה מחדש - כולם למתוח את קו הזמן של הפריסה הכולל.מספק להפחית את שכיחות של באגים הייצור על ידי משיכת שגיאות לוגיקה מוסתרות במהלך הפיתוח. כאשר הקוד הוא פשוט יותר, ההסתברות של הצגת טיפות פגם עדין. יתר על כן, קוד משביע רצון מחדש הוא לעתים קרובות קל לפקח ולפענוח, כך כאשר משהו לא בסדר, זמן קצר יותר, זה אומר את הרזולוציה קצרה יותר.
גישה אסטרטגית לשיפור מהירות
לא כל השיפוץ מספק תשואה שווה על ההשקעה.כדי למקסם את השפעתה על זמן הפריסה, הצוותים צריכים לאמץ גישה אסטרטגית, מבוססת נתונים. להלן אסטרטגיות מוכחות.
זיהוי ועדיפות של נקודות חמות
התחל על ידי ניתוח ההיסטוריה של הפריסה שלך ואת יומני ביצוע הבדיקה. אילו מודולים לגרום לכשלים לבנות ביותר? אילו קבצים משתנים לעתים קרובות ביותר לקחת את הארוך ביותר כדי לבדוק? אלה הם נקודות חמות שלך - כמו איפה השיפוץ יניב את התמורה הגבוהה ביותר. השתמש מדדים באיכות קוד כגון מורכבות מחזורית, הפיכה בין אובייקטים, וקווים של עיכובים קודים (למשל, 20%) כדי למקדמים את הסימפטומים של פעילות גופנית אוטומטית של 2.
2.הספק בצעדים קטנים ובטוחים
פולחנים בקנה מידה גדול הם מסוכנים ולעתים קרובות backfire, הגדלת זמן הפריסה במקום להפחית את זה.במקום, לאמץ את ה-FLT:0baby-StepFLT:1 גישה: להפוך אחד קטן משביע רצון בזמן, לרוץ בדיקות אחרי כל שינוי, ולבצע מיד.טכניקה זו שומרת על כל שינוי בסיס קוד ומבטיחה כי שום צעד אחד לא פורץ את הבנייה כאשר כל אחד הוא מבצע קוד קטן, הוא עדיין קצר יותר, הוא מוסיף, הוא קצר יותר, הוא מוסיף, והמשך שיפור מהיר יותר, תוך כדי שיפור מהיר יותר.
3.אוטומטי מספק את בדיקות האבטחה
גם עם הכוונות הטובות ביותר, שיפור יכול לשנות התנהגות באופן בלתי נמנע, במיוחד בקוד מורשת שחסרה בדיקות.לפני מתן מחדש, להקים רשת בטיחות של בדיקות אוטומטיות המכסות את הנתיבים הקריטיים.אם כיסוי המבחן הקיים אינו מספיק, לכתוב בדיקות אפיון (נקראות גם בדיקות אמן זהוב) שלוכדות את ההתנהגות הנוכחית.
השתמש דגלים איכותיים כדי להפחית את ה Deployment
לעיתים קרובות כרוכה בשינויים ארכיטקטוניים המרחיבים שירותים או מודולים מרובים.שימוש בדגלים של FLT:0feature flagFLT:1 (הידועים גם על ידי משקפי) מאפשר לצוותים לפרוס את הקוד המאורגן לייצור בעודם עדיין מסלקים משתמשים להתנהגות הישנה.
5. הקמת בעלות קולקטיבית
כאשר רק אחד או שניים מפתחים מבינים מודול קריטי, כל שינוי הופך צוואר בקבוק.הספק משפר את יכולת הקריאה, אשר בתורו מעודד בעלות רחבה יותר של צוות.עודד תכנות, ביקורות קוד, ומפגשים לשיתוף ידע סביב אספקת צוותים עם בעלות קולקטיבית יכול למזג שינויים מהירים יותר כי אף אחד לא נדרש עבור כל ביקורת.זה מפיץ מומחיות מפחיתה את הזמן מיצירה למזג.
מחקרים: השפעה אמיתית-עולמית של סיפוק ב-Freloyment Times
ארגונים הנדסיים רבים תיעדו שיפורים משמעותיים לאחר מאמצים שיטתיים של סיפוק.
מקרה מחקר: חברת הנדסה אווירית
חברת תעופה גלובלית שמרה על בסיס סימולציה של שליטה אווירית שנכתב בפורטראן ו- C. הקוד צבר יותר מ-20 שנים של תיקונים, וכתוצאה מכך מודול מונוליטי יחיד שלקח שלושה שבועות כדי לערוך בדיקה מלאה ובדיקה.הפצה של כל עדכון הנדרש שלושה ימים של שילוב ידני.הצוות השקיעה שמונה שבועות בשיפוץ: הם הוציאו מודולים עצמאיים, החליפו את המדינה הגלובלית עם התלויות, שהוצגה ופותח, לאחר שבדקו מחדש, 45 שעות, ירידה של הניסויים בשבוע.
מקרה מחקר 2: פלטפורמת SaaS לשיתוף פעולה הנדסי
חברת SaaS בינונית המספקת כלים לשיתוף פעולה עם כשלי פריסה תכופים עקב ניהול המדינה UI מסבך את השינוי הנדרש בדיקות רגרסציה ידנית נרחבות, מה שגורם לצירופ של שבועיים עד סוף סוף. צוות ההנדסה אישר מחדש את שכבת המדינה באמצעות דפוס מופחת, תופעות לוואי מבודדות, והוסיף בדיקות צילום בתוך שלושה חודשים, זמן צנח לשלוש שעות, וירידה על ידי 60% נוספים של פיתוח מחדש.
המונחים: Common Refactorions
למרות היתרונות ברורים שלה, סיפוק לעתים קרובות נתקל התנגדות.אובייקטים משותפים כוללים "אין לנו זמן", "זה מסוכן מדי", או "זה לא ישפר את מהירות הפריסה".
"אין לנו זמן לספק"
זוהי מלכודת חשיבה לטווח קצר.הזמן שבילה סיפוק היום כמעט תמיד חוסך מספר פעמים כי כמות במהלך החודשים הקרובים.התחל עם micro-refactoring: תוך יישום תכונה חדשה, לנקות את הקוד המיידי שאתה נוגע בו.עם הזמן, זה "חוק הצופים הבנים" (לעזוב את מחניק המחנה מאשר שמצאת אותו) מניב שיפורים יציבים ללא צורך להפריד אופטימיזציה כדי לספק מחדש את ה-מידה לזמן מוגבל כדי לבנות תיק פריסה עסקית.
"זה עלול לשבור את הייצור"
מתן ללא בדיקות הוא אכן מסוכן.אבל הפתרון אינו להימנע משיפור - הוא להשקיע במבחנים קודם.התחל על ידי הוספת כמה בדיקות אינטגרציה ברמה גבוהה או בדיקות חוזים עבור האזורים שאתה מתכנן לשנות. ולאחר מכן מחדש, לבצע כל שינוי קטן ולהפעיל את חבילת הבדיקה לאחר כל שלב.
"זה לא יזרז את המחסומים"
אם צוואר הבקבוק של הפריסה שלך אינו איכות קוד אלא תשתיות (מכונות בנייה איטיות, שערי אישור ידניים או מגבלות רשת), סיפוק לבד לא יעזור.עם זאת, עבור רוב צוותי ההנדסה, מורכבות קוד היא תורמת עיקרית לבדיקות ועיכובים באינטגרציה. בצע ניתוח שורש של צינור הפריסה שלך.אם בעיות הקשורות קוד (כישלונות, התנגשויות מתמזגות), דירוג גבוה, שיפור הוא תרופה ישירה אם לא, כתובת הבקבוק הראשון, אז לשמור על מנת לשמור על בעיות ראשונות.
צמצום ההשפעה של מתן מחדש על זמן השבתה
כדי להצדיק ולדריך מאמצים, צוותים זקוקים למדדים.סימני ביצועים מרכזיים כוללים:
- (ב) [ה]הזמן של שינויים: [ה] זמן מהקוד מתחייב לפריסה מוצלחת לייצור.
- תדירות הפחתת הסיכון: 0 (FLT:1) כמה פעמים אתה מפיץ.אם שיפור הסיכון, הצוותים צריכים להרגיש בטוחים יותר פריסה.
- (ב) אם לא יצליח להחזיר את השירות (MTTR): אם ביטול הפריסה, כמה זמן לשחזר את השירות?
- שיעור הכשלים של ה-FLT:0 (שינוי: 0) שינוי שיעור הכשל: 1 אחוז הפריסה שגורם לכישלון.
- (FLT:0) פרמטרים מורכבים:FLT:1ential Complex, שמירה על יכולת אינדקס, ואת יחס החוב טק. אינדיקטורים מובילים אלה לעתים קרובות תואמים עם שיפורים פריסה מתפתל.
לעקוב אחר מדדים אלה לאורך זמן. השתמש בכלים שנבנו לתוך פלטפורמות CI /CD (למשל, GitLab CI / D Analytics, GitHub Actions תובנות) כדי לדמיין מגמות.כאשר אתה רואה זמן מוביל יורד ותדירות פריסה גדל, יש לך הוכחה קונקרטית כי refactoring הוא מספק ערך.
שיפור הפחתת התוספת ל-S CI/CD שלך
לא צריך להיות פעילות צד נפרדת מהפיתוח היומיומי.הצוותים היעילים ביותר מאופים אותה לתוך אינטגרציה מתמשכת וזרימות עבודה משלוח.
- (FLT:0) מספק רשימות בסקירה קוד: ibph:1 , Reviewers צריך לבדוק במפורש הזדמנויות לפשט קוד במהלך תהליך הביקורת.
- (FLT:0) כלי שימוש בסגנון linting and styleאכיפה:03FLT) 1:1 שימוש בכלים כמו ESLint, RuboCop, או Pylint כדי לאכוף דפוסים עקביים, צמצום הצורך במילוי ידני של פורמט.
- (ב) אם תגמול:0) בדיקות רגרסציה: FIRLT:1 (אם אספקת מחדש בטעות מאטה את הבדיקות או בונה, הצינור יכול להזהיר את הקבוצה.
- (FLT:0)Timeboxed refactoring ⁇ s: ⁇ FLT:1 ; כל כמה קידודים, להקצות יום אחד עבור "קוד גנן" - זמן מוכח עבור תשואות קטנות על פני בסיס הקוד.
תפקיד האדריכלות ב- Deployment Speed
בעוד ששיפור מתמקד בשיפורים ברמת הקוד, החלטות אדריכליות ממלאות תפקיד משלים. A monolith תמיד יהיה קשה יותר לפרוס מאשר ארכיטקטורת מיקרו-שירותי שותפים היטב.עם זאת, מעבר ממונוליטית למיקרו-שירותים הוא צורה של פיצוי בקנה מידה גדול שיש לו סיכון משמעותי.עבור רוב הקבוצות, שיפור משמעותי בתוך האדריכלות הקיימת - אישור גבולות, צמצום וניתוק חוזים מהירים יותר מאשר שיפור קוד פתוח, אך מאפשר לך להשיג תכונות מתקדמות במהירות גבוהה יותר.
המונחים: refactoring Discipline
מתן הוא לא פרויקט חד פעמי; זה תרגול מתמשך. כדי לשמור על המומנטום ולשמור על זמני הפריסה נמוך, לטפח תרבות צוות ערכים קוד נקי.מפתחי פרסים לעזוב קוד טוב יותר מאשר הם מצאו אותו. להפוך חלק מההגדרה שלך של כל סיפור משתמש או תכונה.סקירה רגילה קוד ישן שלא נגע בחודשים - זה יכול להיות מקור של עיכוב בעתיד.
מחויבות מנהיגות חשובה באותה מידה.אם מנהלים רק מודדים את התפוקה בספירת תכונה, רצון מחדש יהיה deprioritized. במקום זאת, לקשור ביקורות ביצועים על מדדים איכותיים כמו תדירות פריסה וזמן להוביל. מראה כי השקעה במימוש ישירות משרת מטרות עסקיות כגון מהירות יותר לשוק ועלויות תפעוליות מופחתות.
משאבים וקריאה נוספת
עבור צוותים המבקשים להעמיק את ההבנה שלהם של מתן אישור למהירות הפריסה, המשאבים הבאים מומלץ:
- (ב) ,0) שיפור העיצוב של קודר (קודש) 1:1 על ידי מרטין פוולר - המדריך הסופי למתן טכניקות.
- (ב) ,0) לעבוד ביעילות עם קוד מורשת 1:1 על ידי מייקל פילק - אסטרטגיות מעשיות לשיפוץ ללא בדיקות.
- (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (ב) ,0) , הזן של אספקת ה- 1:1 , מאמר מאגד על החשיבה שמאחורי שיפור יעיל.
מסקנה
מתן מחדש הוא לא רק תרגיל ניקוי קוד; זה מנוף אסטרטגי לצמצום זמני הפריסה בעדכוני תוכנה הנדסיים.על ידי ביצוע קוד יותר מבחן, צמצום הפיכה, ופשטת שילוב, סיפוק ישירות מקצר את הזמן מהתחייבות לייצור.צוותים אשר מאמצים התאמות מתקדמות, בדיקות שיפור ממוקדות דוחות מהירות יותר, ביקורות קוד, פחות, אירועים, ובסופו של דבר יותר תכופים, כדי להתחיל את ההשפעה של התפתחות מקצועית, היא פשוטה, כאשר היא פשוטה יותר, כלומר, היא יעילה יותר, כלומר, היא פשוטה יותר, היא יעילה יותר, כלומר, היא יעילה יותר, היא יעילה, כלומר, כלומר, היא פשוטה יותר, היא יעילה יותר, היא יעילה יותר, היא יעילה יותר, היא יעילה יותר, כלומר, כלומר, היא יעילה יותר, היא יעילה יותר, כלומר, היא יעילה יותר, היא יעילה יותר, היא יעילה יותר, כלומר, כדי להתחיל השפעה אסטרטגית של פעילות אסטרטגית של פעילות אסטרטגית של פעילות אסטרטגית של פעילות אסטרטגית של פעילות אסטרטגית של פעילות אסטרטגית של פעילות אסטרטגית של מערכת הפעלה מחדש של מערכת הפעלה מחדש של פעילות ניהולית, כאשר היא יעילה יותר, כאשר היא יעילה יותר, כאשר היא יעילה יותר, היא יעילה יותר, כאשר היא יעילה יותר, היא יעילה יותר, היא יעילה יותר, כאשר היא יעילה יותר, כאשר היא יעילה יותר, כאשר