יצירת נתוני בדיקה סינתטיים: גישות ומימוש

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

תחומי פיתוח AI

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

מה נשבר בלי נתוני בדיקה סינתטיים

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

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

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

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

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

מה נותנת יצירה: השפעות מדידות

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

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

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

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

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

דליפת נתונים נעלמת כסוג של אירוע. עותק של מסד נתונים יצרני במעגל בדיקות או במכונה של קבלן — הדרך הנפוצה ביותר החוצה, והיא גם הפחות מורגשת: גישה פורמלית קיימת, ואף אחד לא חוקר את האירוע.

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

השוואת גישות לנתונים סינתטיים

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

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

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

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

כיצד נבנית היצירה: שלבי עבודה הנדסית

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

שלבי יישום

  1. מיפוי מקורות. מתעדים מערכות, פורמטים של ייצוא, היקפים, מקומות אחסון של נתונים אישיים וכללי האנונימיזציה שלהם.
  2. פרופיול נתונים וקשרים. מחשבים התפלגויות, קרדינליות של שדות, שיעורי חסרים, קורלציות וכללי שלמות פניות — בלי זה המחולל מייצר «הזמנות בלי לקוחות».
  3. הגדרת כללי יצירה. קובעים טיפוסים וטווחים, ספרי עזר, אינווריאנטים עסקיים כמו התאמת סכומים, תרחישים נפרדים לשילובים נדירים וגבוליים.
  4. הרכבת המחולל. מגדירים מצבים: צילום מבנה, ערכה בהיקף הנדרש, שחזוריות לפי זרע קבוע — בדיקה שנפלה מנתחים על אותה ערכה.
  5. קבלת ערכות. משווים מדדים למקוריים ומריצים בדיקות: הן צריכות ליפול על פגמים שהושתלו ולא להידלק על נתונים נקיים.
  6. מסירת נהלי עדכון. מתארים כיצד לשנות כללים כשמשתנה הסכמה, היכן נמצאות תצורות וכיצד מנוהלות גרסאות של ערכות.

סדר כזה הופך את היצירה לחזרתית: שינוי בסכמת המקור לא שובר בדיקות בשקט.

מה מוסרים לידיים: חפצי עבודה ונהלים

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

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

כמה שבועות אחרי המסירה, בנייה מחדש לסכמה חדשה תריץ בעצמך — בלי לחזור אלינו על כל שינוי.

מקרה בוחן: קיצרנו הכנה ידנית של סביבות

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

בנינו מחולל שקורא את הסכמה של PostgreSQL ובונה ערכה עקבית: מפתחות זרים, אילוצים וסדר הכנסה משוחזרים בדיוק כמו במסד אמיתי. ערכים אישיים מוחלפים בערכים סבירים, והמצב ההתחלתי של המחולל מקובע בתצורה — אותה ערכה משוחזרת בהרצה חוזרת.

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

מה השתנה

הרכבת הערכה אורכת דקות במקום חמישה ימים, שיעור התרחישים הגבוליים המכוסים עלה מ-40% ל-95%, ותיקוני נתונים ידניים יצאו מתהליך השחרור. מהנדסים כבר לא ממתינים לסביבה: מסד נקי עולה בפקודה אחת.

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

מה לעשות אם אנונימיזציה כבר הוטמעה

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

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

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

המיגרציה מתבצעת בהדרגה. תחילה היצירה מכסה את מה שהעותק לא נותן: היקף להרצות עומס, מקרים גבוליים, מחלקות נדירות. ערכות ייחוס לרגרסיה נשארות על נתונים אנונימיים, והתהליך לא נשבר — משתנה רק המקור של חלק מהערכות.

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

ספקות טכניים: דליפות ושחזוריות

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

האם נתונים אמיתיים יכולים להיכנס לסינתטיקה?

המחולל עובד על תיאור סכמה, התפלגויות וכללי קישוריות, ולא על ייצוא ממעגל הייצור. חיתוך אמיתי נלקח רק להשוואת התפלגויות — כשהוא אנונימי ובשלב הניתוח, והוא אינו נכנס לערכה המוגמרת.

איך לוודא שהערכה איכותית?

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

האם הערכה ניתנת לשחזור במכונה אחרת?

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

מה קורה אחרי שינוי בסכמה?

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

האם הערכה תעמוד בבדיקות עומס?

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

נדון במשימה ונחזור עם אומדן ותוכנית

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

מצדנו נחזיר:

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

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