בדיקות איכות לתוכן מוצר

Updated 2026-09-05

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

הגדירו חוזה איכות לפני יצירה

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

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

בדיקהראיה שימושיתבדיקת המשך
זהות ו-revision מקורהשוואת שדות מדויקתתרגום טבעי
ערכים מוגניםשוויון scalar עם טיפוסמפרט מקור נכון
Markup ומצייני מקוםParser וספירות אסימוניםטענות מוצר מדויקות
בדיקת טענהמיפוי טענה למקורהצלחת ייבוא חנות
קריאה חוזרת מהיעדהשוואה בין מאושר לשמורביצועים מסחריים

השוו ערכים מוגנים לאחר הרכבה

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

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

function checkProtected(source, candidate) {
  const issues = [];
  if (candidate.sourceRevision !== source.sourceRevision) {
    issues.push({ code: "STALE_SOURCE", field: "sourceRevision" });
  }
  const keys = new Set([
    ...Object.keys(source.protected),
    ...Object.keys(candidate.protected),
  ]);
  for (const field of keys) {
    const hasSource = Object.prototype.hasOwnProperty.call(source.protected, field);
    const hasCandidate = Object.prototype.hasOwnProperty.call(candidate.protected, field);
    if (!hasSource || !hasCandidate ||
        !Object.is(source.protected[field], candidate.protected[field])) {
      issues.push({ code: "PROTECTED_FIELD_CHANGED", field });
    }
  }
  return issues;
}

שמרו עיצוב מספרים נפרד מערכים

מספר מקומי עשוי להיראות שונה ועדיין לייצג אותה כמות שנשמרה. MDN מתעד את Intl.NumberFormat להצגה המותאמת ל-locale. החילו עיצוב לאחר בחירת הערך המוסמך; אל תבקשו ממודל שפה לשחזר מחיר ממחרוזת מטבע מרונדרת.

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

אמתו ריבוי מצייני מקום ו-markup

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

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

function samePlaceholderCounts(sourceTokens, candidateTokens) {
  const counts = new Map();
  for (const token of sourceTokens) {
    counts.set(token, (counts.get(token) ?? 0) + 1);
  }
  for (const token of candidateTokens) {
    if (!counts.has(token)) return false;
    counts.set(token, counts.get(token) - 1);
  }
  return [...counts.values()].every((count) => count === 0);
}

מקרה: שדות תקינים, ניסוח שעדיין דורש תיקון

סוכן תרגום שהוגדר במפורש ל-gpt-5.6-luna עם reasoning מסוג xhigh יצר 20 תיקוני יפנית ו-20 תיקוני גרמנית מ-20 מוצרים סינתטיים. בדיקות סכמה, זהות ושדות מוגנים דטרמיניסטיות עברו לכל 40 השורות המורכבות. מחיר, מטבע, חומר ומידות הועתקו מהמקור; תיקונים שנוצרו יכלו לשנות רק title ו-description עבור ה-SKU וה-locale שזוהו.

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

צילום מסך של דוח בדיקת המוצר הסינתטי המקומי עם אפס הפרות סכמה או זהות ובדיקת דובר שפת אם וסוחר ממתינה; טיוטת DEMO-003 המתוקנת נראית.
דוח בדיקת קטלוג סינתטי מקומי ממקרה Luna xhigh. כל 40 השורות עברו בדיקות סכמה וזהות מתועדות; אישור סמנטי עדיין ממתין לאחר תיקוני בדיקת AI ביפנית.
הסברים באנגלית לשינויים בטיוטות היפנית האמיתיות; raw-ja.json שומר את הפלט המקורי.
מוצר סינתטימשמעות המקורתיקון בדיקת AI ביפנית
DEMO-003: sketch padגיבוי מקרטוןהוסרה משמעות לא נתמכת של קרטון גלי
DEMO-010: storage basketשתי ידיות צד בסך הכולמספר הידיות הכולל הובהר כדי להסיר עמימות

בדקו את ייצוא הבדיקה לצד הייבוא

OWASP מתאר formula injection בגיליונות ומציין שטרנספורמציות בטיחות שונות בין צרכנים. התייחסו לתאי ספק ולתאים שנוצרו כאל קלטים לא מהימנים. השתמשו במדיניות serialization שנבדקה עבור כלי הגיליון בפועל ובדקו את ה-artifact שנשמר, לא רק טבלה בזיכרון.

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

קשרו אישור למועמד המדויק

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

ב-artifacts של המקרה, תיקוני היפנית המתוקנים ותיקוני הגרמנית מורכבים לשורות שמסומנות review_status: unreviewed. שני הדוחות שומרים translation_semantic_review: pending. תיקון בסיוע AI הוא שלב revision, לא חתימת דובר שפת אם או סוחר. שמרו מועמדים גולמיים ומתוקנים, ואז בקשו מהבודק המתאים לאשר את הטקסט המדויק שייכנס לחבילת ייבוא.

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

הבדיקה של המקרה המקומי מפעילה שמירת שדות מקור, SKU כפול, SKU חסר ועקיפת מחיר אסורה. הרכבה מחדש לקריאה בלבד של תיקוני היפנית והגרמנית השמורים משחזרת את שני הפלטים המאומתים. לקטלוג רחב יותר הוסיפו בדיקות לדקדוק מצייני המקום, markup ומדיניות revisions שלכם; העוזרים להמחשה לעיל הם דוגמאות נפרדות ולא המאמת ששימש ל-40 השורות האלה.

זה היה מקרה תרגום מקומי שהוגדר ל-Luna, ללא קריאת Astra או gateway וללא ייבוא חנות אמיתי. הכלי לא חשף usage של API, מזהי בקשות או חיוב; שני הפלטים שומרים usage ועלות null. השתמשו בתוצאה המבנית כדי לעבור לבדיקה סמנטית, ואז בדקו את מתאם החנות המורשה בנפרד.

node --test examples/commerce-localization-case/case.test.mjs

שאלות נפוצות

האם תגובה שתקינה לפי JSON עדיין יכולה להיות לא בטוחה לייבוא?

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

מדוע להשוות שדות מוגנים אם המודל אינו יכול לערוך אותם?

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

האם אפשר לאמת טענות ברשימת מילים מותרות?

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

האם התאמת שמות מצייני מקום מספיקה?

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

מה המקרה של 40 השורות ביסס?

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