ניסוי: נתתי לסונט לכתוב כמה בדיקות לאתר
אחרי שלמדנו ש AI יודע לכתוב קוד חדש וגם לעדכן קוד ולתקן באגים רציתי לתת לו לכתוב כמה בדיקות לאתר כדי לראות איך זה עובד ואיך הוא מסתדר עם ריילס. התוצאות לא רעות - בואו נראה מה יצא טוב ומה היה צריך עוד דחיפה.
1. נקודת התחלה - מה בודקים
הפרומפט הראשון שהפתיע אותי לטובה היה כשנתתי ל AI (דרך קרסור) את כל קוד האתר ופשוט ביקשתי שיציע לי מה לבדוק. קלוד ידע להשוות בין הקוד לבין הבדיקות הקיימות והצביע על מספר מקומות שלא נבדקו או שלא נבדקו בצורה מספיק מקיפה. הפרומפט התחיל ב:
Context: I'm a new developer starting to work on this code
Create a roadmap for getting to know the most important parts of it
אחרי שהוא מיפה את הקוד המשכתי עם:
find 5 flows that are not tested
ה AI באמת הדפיס 5 אזורים בקוד שלא נבדקו מספיק טוב. בחרתי אחד מהם וביקשתי לקבל 5 הצעות לבדיקות שאפשר לכתוב. את כל זה עשיתי במצב Ask כדי שלא יתחיל עדיין לכתוב קוד.
2. מימוש הבדיקות
אחרי שקיבלתי רשימת Test Cases למימוש המשכתי עם הפרומפט הבא:
Implement the following tests using my current rubocop settings.
Instead of mocking, when you need to work with PDF files generate the real ones and verify they were generated as planned.
ופה צריך להבהיר - מניסויים שעשיתי עד עכשיו עם AI הוא מאוד אוהב ליצור מימושי Stub להמון דברים כדי לחדד את הבדיקה, גם במחיר של בדיקה פחות טובה. אני מוסיף את הבקשה שלא יבנה Mock-ים כשאני צריך ממנו בדיקות. אם אני כן רוצה מימוש Stub למשהו במערכת אני מחלק את זה לשני שלבים, קודם כל בונה מימוש Stub בצורה שאפשר להשתמש בה במספר בדיקות בתשתית הבדיקה שלי ואז במימוש הבדיקה ממליץ ל AI להשתמש בתשתית הקיימת.
3. תוצאות ותיקונים
האתר כתוב בריילס ולכן גם הבדיקות וגם הבעיות בהן ספציפיות לריילס. אני ממליץ לכם לבצע ניסויים דומים עם המערכות שלכם כדי לראות איך הסיפור עובד בעולם הספציפי שלכם, אבל לריילס כן יש כמה מאפיינים כלליים שאני חושב שעושים פה חיים קלים ל AI, הכי חשוב זה שיש דרך מאוד סטנדרטית לכתוב בדיקות. מאפיין נוסף ספציפי של האתר שלי הוא שיש כבר בדיקות קיימות ולכן היה לקלוד על מה להתבסס.
למרות זאת ולמרות שהמימוש בגדול היה נכון היו כמה בעיות:
קלוד המציא שמות של פונקציות שנראה לו הגיוני שיהיו. הוא צדק כי היו פונקציות שעשו את מה שהוא רצה פשוט קראו להן בשמות אחרים. בכל אופן את זה היה קל לתקן.
בריילס הפקודה
update
מעדכנת מידע בבסיס הנתונים ואם מוסיפים לה סימן קריאה היא גם זורקת Exception אם העדכון נכשל. בשלב ה Setup של בדיקה מאוד חשוב לשים סימן קריאה אחרי update כי אחרת העדכון נכשל בצורה שקטה ואתם לא מבינים למה הבדיקה נכשלה. קלוד לא חשב על זה.את הערכים ל enum-ים הוא לפעמים כתב נכון ולפעמים המציא ערכים. הפעם אני לוקח אחריות על הטעות כי ההגדרה של ה enum היתה קצת מעורפלת.
ההערות שלו לא תמיד התאימו לקוד. במצבים כאלה ההערה היתה נכונה אבל הקוד שהוא יצר לא היה נכון.
למרות שביקשתי 5 בדיקות הוא מימש בסוף 8. מתוכן אחת כללה מימוש ריק עם הערת Todo שמסבירה מה צריך לבדוק.
סך הכל החוויה לא היתה רעה. הייתי רוצה ש Cursor יציעו מנגנון למחוק אוטומטית חלק או את רוב ההערות של ה AI, אבל אין ספק שההכוונה של ה AI גם בהחלטה מה לבדוק וגם במימוש המבנה הבסיסי של הבדיקות על בסיס תשתית בדיקות קיימת במערכת דחפה אותי לכתוב בדיקות שביום אחר לא הייתי טורח לכתוב.