יחידה 9 / 11

בדיקות רגרסיה, תחזוקת בדיקות ומאבק בבדיקות שביר

רווחים:

  • להבין את מטרת בדיקות רגרסיה ולהיות מסוגלים לבחור מבחנים ולייצר מקרי רגרסיה לפי שינויים עם בינה מלאכותית
  • יכולת לאבחן את גורמי השורש של בדיקות שבירות (תזמון, תלות בסדר, מצב משותף, תלות חיצונית) וליישם פתרונות קבועים מבלי לדכא את הסימפטום
  • יכולת לשמור על הדיסציפלינה של הפעלת החבילה המלאה לפני ההפצה תוך שמירה על חבילת הרגרסיה מהירה, עצמאית ואמינה על ידי ביטול בדיקות כפולות

התוכנה משתנה ללא הרף; כל תכונה חדשה, כל תיקון, יכול לשבור משהו שעבד בעבר. ההפרעה שלאחר מכן של פונקציה שעבדה בעבר נקראת רגרסיה. בדיקת רגרסיה היא בדיקה חוזרת של הפונקציונליות הקיימת עם כל שינוי כדי לתפוס את השפלות הללו. עם הזמן, חבילות הבדיקה הללו גדלות - אלפי בדיקות - ומתעוררות שתי בעיות גדולות: החבילה מאטה, ומבחנים מתקלקלים - מבחנים לא אמינים שלפעמים עוברים ולפעמים נכשלים באותו קוד - הורסים את האמון של הצוות בתוצאות הבדיקה. בינה מלאכותית (AI) היא כלי עזר רב עוצמה בשמירה על חבילת הרגרסיה מתוחזקת היטב, מהירה ואמינה. אבל האזהרה המרכזית נותרה בעינה: בעוד שבינה מלאכותית עשויה להציע "לעבור" מבחן שביר, היא יכולה לעתים קרובות לייצר תיקון שמכסה על באג אמיתי. התפקיד שלך הוא למצוא את הסיבה העיקרית לחוסר היציבות, לא לדכא את הסימפטום.

סיבות שורש לבדיקות שבירות

בדיקה שביר היא בעיית הבדיקות התחמנית ביותר: היא לא אמינה אם היא עוברת או נכשלת, מה שדוחף את הצוות להרגל של "זה בטח נתקע שוב, הרץ את זה שוב" - וההרגל הזה יתעלם יום אחד מבאג אמיתי כ"מתקלף". סיבות שורש עיקריות:

  • מצב תזמון/מרוץ: הבדיקה בודקת את התוצאה מבלי להמתין לסיום הניתוח. הסיבה הנפוצה ביותר.
  • תלות בהזמנה: בדיקות תלויות בנתונים שהשאירו זה את זה; זה נשבר כשהסדר משתנה.
  • מקרה משותף: מספר בדיקות משתמשות באותם נתוני בדיקה/משתמש, סותרים.
  • תלות חיצונית: רשת אמיתית, שירות צד שלישי, זמן מערכת, ערך אקראי.
  • הבדל סביבתי: עובר למקומון, נשאר ב-CI (סביבת אינטגרציה רציפה).
זהירות: מעבר מבחן שביר על ידי "ניסיון חוזר כמה פעמים" יסווה לעתים קרובות שגיאת מקבילות אמיתית. ניסיון חוזר הוא כלי אבחון, לא טיפול. מצא תחילה את סיבת השורש; השתמש רק בניסיון חוזר כמוצא אחרון לאי יציבות מתועדת, באמת חיצונית.

תחזוקת בדיקה: שמירה על בריאות החבילה

סוויטת הרגרסיה היא כמו גן; אם לא יטפלו, העשבים שוטים ישתלטו. AI מסייע בשלוש משימות תחזוקה:

1. ניקוי בדיקה שכפול/מיותר. עם הזמן מספר רב של מקרים מצטבר בבדיקה אותו דבר. AI מציעה לקבץ ולמזג בדיקות דומות.

2. אבחון בדיקה שביר. אתה נותן ל-AI את קוד הבדיקה ואת דפוס חוסר היציבות; מציע סיבות שורש אפשריות ופתרון קבוע.

3. בחירת/תעדוף מבחן. זה יקר להפעיל את כל החבילה עם כל שינוי. עם ניתוח ההשפעה של הבדיקה (בחירת בדיקות רלוונטיות בלבד על סמך קוד שונה), AI ממליצה אילו בדיקות צריכות לפעול קודם. עם זאת, החבילה המלאה לפני ההפצה היא חובה.

הסגר: ניהול נכון של בדיקות שביר

גילית שבדיקה שברירית, אבל אין לך זמן לתקן את סיבת השורש מיד. מה לעשות? ישנן שתי דרכים שגויות: למחוק את הבדיקה לחלוטין (ההתנהגות הזו כבר לא נשמרת בכלל) או להשתיק אותה בניסיון חוזר (לכסות את הבאג האמיתי). הדרך הנכונה היא להסגר (הפרדה זמנית של הבדיקה השבירה מהחבילה הראשית ומעקב אחריה ברשימה נפרדת). בדיקה בהסגר אינה מונעת מיזוג גרסאות, אלא נותרה חוב גלוי ומטופלת באופן קבוע. הנקודה הקריטית היא זו: הסגר הוא חדר המתנה, לא פח אשפה. אם רשימת ההסגר הולכת וגדלה, מדובר באזעקה שמצב הבדיקות של הצוות מתדרדר. AI יכול לבדוק מעת לעת את רשימת ההסגר שלך ולקבץ אותה לפי דפוסי שורש; הוא מאפשר פתרונות קולקטיביים על ידי חשיפת סיבות נפוצות, כגון "כל 6 הבדיקות מחוברות לאותו משתמש בדיקה משותף".

טיפ: הוסף "בעלים" ו"תאריך בדיקה אחרונה" לכל רשומת הסגר. הסגר נטוש הופך למזבלה קבועה; מבחנים שבירים חיים שם לנצח כי לאף אחד לא אכפת.

טבלת אסטרטגיית רגרסיה

סטטוס

אסטרטגיה

תפקיד של AI

תיקון קל

אזור מושפע + בדיקת עשן

בחר מבחנים רלוונטיים

תכונה חדשה

מודול קשור + אינטגרציה

הצע מקרה רגרסיה חדש

רפקטור גדול

חבילת רגרסיה מלאה

ניתוח פערי כיסוי

טרום שחרור

חבילה מלאה + חקר

הערכת עדיפות ומשך זמן

תיקון חי דחוף

נתיב ממוקד + קריטי

סט בדיקה מינימלי בטוח

הנחיה חלשה / הנחיה חזקה

חלש: "המבחן הזה לפעמים נכשל, תקן את זה".
חזק: "בדיקה זו נכשלת ב-3 מתוך 10 ריצות, קוד ללא שינוי. אבחן את סיבת הבסיס של אי-יציבות: יכול להיות תזמון/מירוץ, תלות בהזמנה, מצב משותף, תלות חיצונית או הבדל סביבתי. הראה איזו שורה בבדיקה מצביע על כל סיבה אפשרית. הצע פתרון קבוע; אל תציע פתרון לדיכוי סימפטומים כגון 'הוסף סיבה חוזרת לבדיקה: אם ברור שגיאה אפשרית לכתוב: קוד שגיאה. [יומן]."

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

ארבע תבניות הניתנות להעתקה

1) אבחון בדיקה שביר:

קוד הבדיקה הזה לפעמים עובר ולפעמים נכשל ללא שינוי. רשום את מועמדי השורש (גזע, תלות בסדר, מצב משותף, תלות חיצונית, שעון/אקראי, הבדל סביבתי) והצג את קו הראיות במבחן עבור כל אחד מהם. הצע פתרון קבוע; סמן פתרון מדכא כמו ניסיון חוזר כמוצא אחרון ובצידוק. בדיקה: [קוד] / דפוס חוסר יציבות: [כמה פעמים בכמה ריצות]

2) הצעת מקרה רגרסיה:

בוצע השינוי הבא: [שינוי/תקציר יחסי ציבור]. רשום התנהגויות נוכחיות ששינוי זה ישבור והצע מקרה מבחן רגרסיה לכל אחת מהן. הדגש במיוחד אזורים של תופעות לוואי ותלות משותפת.

3) ניקוי בדיקה כפול:

בדוק את חבילת הבדיקות למטה. קבץ מקרים כפולים או חופפים הבודקים את אותה התנהגות; הציעו אילו עליי לשמור ואילו עליי לשלב לכל קבוצה. הזהיר אם קיים סיכון לאובדן הכיסוי. מבחנים: [רשימה/קוד]

4) בחירת אפקט בדיקה:

הקבצים/הפונקציות הבאות השתנו: [רשימה]. מתוך חבילת הבדיקות הקיימת, בחרו והצדיקו את הבדיקות שעלי להריץ תחילה (אלה המקושרות ישירות/עקיפין לקוד שהשתנה). הערה: הזכירו לי שאני עדיין אפעיל את חבילת טרום ההפצה המלאה.

שלושה מיני תיקים

מקרה 1 - טעות אמיתית שסוסה על ידי ניסיון חוזר. צוות אחד הוסיף 3 ניסיונות חוזרים למבחן תשלום שנותר מדי פעם; המבחן תמיד היה "עובר" עכשיו. יישום "אבחון המבחן השביר" מצא שחוסר היציבות נובע ממצב מרוץ אמיתי: בעומס גבוה, אישור התשלום עבר לעיתים עיבוד כפול. במשך חודשים, ניסיון חוזר כיסה באג שיכול היה לגרום לאובדן כסף בפועל בזמן אמת. סיבת השורש תוקנה, נסה שוב הוסר.

מקרה 2 - החבילה התכווצה, המהירות עלתה. חבילת רגרסיה של 1,400 מבחנים ארכה 55 דקות. עם "ניקוי בדיקה כפול", 380 בדיקות התבררו ככפולות או מכוסות; התמזגו. החבילה צומצמה ל-900 בדיקות, הזמן הצטמצם ל-34 דקות, הכיסוי לא הצטמצם באופן מדיד. משוב מהיר יותר עודד את הצוות לבדוק בתדירות גבוהה יותר.

מקרה 3 - תלות בצו. מבחן תמיד יעבור באופן מקומי, אבל הוא ייכשל באקראי ב-CI. אבחון AI הראה שהבדיקה תלויה במשתמש שנוצר על ידי בדיקה אחרת, ב-CI היא נשברה כי הבדיקות רצו בסדר מקביל/שונה. כל בדיקה נעשתה כדי לקבוע את הנתונים שלה; חוסר ההחלטיות נגמר.

טעויות נפוצות

  • השתקת המבחן השביר עם ניסיון חוזר. מנסה שוב מבלי לחפש את הסיבה השורשית; מחפה על הטעות האמיתית.
  • תרבות "נתקעו שוב". התעלמות שגרתית מתוצאות אדומות; יום אחד, דילוג על הטעות האמיתית.
  • לא גוזם את החבילה בכלל. מאפשר לבדיקות כפולות להיערם ולהאט את החבילה.
  • תלות בין מבחנים. הבדיקות מבוססות על מצב/רצף שכיח; מקור לאי ודאות.
  • בודקים רק את החלק שהשתנה ודילוג על החבילה המלאה. קיצור דרך לפני ההפצה; תופעות לוואי נסתרות בורחות.
  • הסתמכות על תלות חיצונית. בדיקות המבוססות על רשת/שעון/ערך אקראי בפועל; לא יציב באופן טבעי.

לסיכום

בדיקת רגרסיה תופסת שינויים ששוברים פונקציות שעבדו בעבר; אבל ככל שהחבילות גדלות, האיטיות והבדיקות השבירות שוחקות את האמון. הסיבות העיקריות לבדיקות שבריריות הן בדרך כלל תזמון, תלות בסדר, מצב משותף ותלות חיצונית. AI הוא כלי עזר רב עוצמה באבחון, ניקוי ובחירת בדיקות; אבל דיכוי חוסר החלטיות בניסיון חוזר מחפה על טעויות אמיתיות. מצא את סיבת השורש, עשה בדיקות עצמאיות ודטרמיניסטיות, גזום את החבילה באופן קבוע, הרץ את החבילה המלאה לפני השחרור.

משימת יישום

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

רשימת בדיקה

  • [ ] אבחנתי את הסיבה העיקרית לבדיקה השברירית; לא דיכאתי את הסימפטום.
  • [ ] ראיתי בניסיון חוזר כמוצא אחרון מוצדק, לא כתרופה.
  • [ ] הפכתי את המבחנים לבלתי תלויים ודטרמיניסטיים (מבודד מתלות חיצונית).
  • [ ] גזמתי בדיקות כפולות/מיותרות מחבילת הרגרסיה.
  • [ ] בחרתי לבדוק על סמך השינוי, אבל הרצתי את החבילה המלאה לפני ההפצה.
  • [ ] לקחתי כל אדום ברצינות, נגד תרבות ה"נתקע שוב, תעבור".