ה-AI שלך כותב בדיקות שלעולם לא יכולות להיכשל
אתה מבקש מה-AI בדיקות. הוא נותן לך שתים-עשרה בדיקות ירוקות. ה-CI שלך עובר. אתה ממזג את הקוד. שלושה ימים לאחר מכן, באג מגיע ל-production. אתה מסתכל על הבדיקות. הן עברו, אבל הן לא בדקו כלום.
בדיקה ירוקה היא לא הוכחה. היא השערה. AI כותב השערות שלעולם לא נכשלות.
הסתכל על הפונקציה הזו:
func Discount(total int) int {
if total > 100 {
return total - 10
}
return total
}
AI עשוי לכתוב את הבדיקה הזו:
func TestDiscount(t *testing.T) {
got := Discount(150)
if got < 0 {
t.Errorf("result should not be negative")
}
}
הבדיקה הזו ירוקה. היא מריצה את הקוד, אז ה-coverage שלך נראה טוב. אבל הבדיקה בודקת רק אם התוצאה קטנה מאפס. אם תשנה את ההנחה לשגיאה מתמטית, הבדיקה תישאר ירוקה. היא לא בודקת התנהגות. היא רק בודקת שהאורות דולקים.
זו מלכודת. coverage סופר שורות שנגעת בהן. הוא לא סופר assertions שבאמת משנות. דו"ח coverage של 90% יכול להסתיר קוד שבור.
ה-AI רוצה את הדרך הקצרה ביותר לאור ירוק. הוא בוחר ב-soft assertions וב-mocks שלא בודקים כלום.
כדי לתקן זאת, השתמש בכלל אחד: בדוק שהבדיקה יודעת איך להיכשל.
שנה את הקוד שלך בכוונה. אם הבדיקה נשארת ירוקה, הבדיקה חסרת תועלת. תזרוק אותה.
בדיקה אמיתית נראית כך:
func TestDiscount(t *testing.T) {
if got := Discount(150); got != 140 {
t.Errorf("Discount(150) = %d, want 140", got)
}
}
אם תשבור את הלוגיקה, הבדיקה הזו תהפוך לאדומה מיד. היא "נושכת".
אי אפשר לעשות זאת ידנית עבור כל בדיקה. השתמש ב-mutation testing במקום. כלים כמו Gremlins ב-Go מחילים שינויים קטנים על הקוד שלך. הם בודקים אם הבדיקות שלך תופסות את השינויים.
אם שינוי לא גורם לבדיקה להיכשל, יש לך חור ב-suite שלך.
אני משתמש בזה עבור קוד של AI. אני לא נותן ל-AI להצהיר שהעבודה שלו הסתיימה. אני מריץ gate. הכלי מבצע mutation לקוד. אם הבדיקה נשארת ירוקה, ה-AI חייב לכתוב אותה מחדש. ה-AI לא מחליט אם בדיקה היא טובה. ה-mutation הוא שמחליט.
אף בדיקת AI לא נכנסת ל-codebase שלי מבלי להוכיח שהיא יכולה להיכשל. בדיקה שלא יכולה להיכשל היא גרועה יותר מבדיקה שאינה קיימת. בדיקה חסרה היא דבר מובן מאליו. בדיקה מזויפת היא מסוכנת.
תפסיקו לסמוך על אורות ירוקים. בדיקה שווה רק את האדום שהיא יכולה לייצר.
Source: https://dev.to/ohugonnot/your-ai-writes-tests-that-can-never-fail-3i57
קהילת למידה אופציונלית: https://t.me/GyaanSetuAi
