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