יחידה 4 / 12

סקירת קוד ואיתור שגיאות

רווחים:

  • יכולת להשתמש ב-AI כמסנן סקירה ראשוני עם קטגוריות ותגי חומרה
  • יכולת לסנן ממצאים עם המוח האנושי כדי לאמת/לשגוי חיובי/ליישם
  • יכולת לאכוף דרישות אישור אנושי על כללים עסקיים, ארכיטקטורה והחלטות קריטיות לאבטחה

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

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

על מה AI טוב ורע בסקירה

טוב עבור: פספוסים של בדיקת Null, דליפות משאבים (קובץ/קישור נותרו פתוחים), חריגים שלא נתפסו, תנאים שגויים בעליל (>= במקום >), הצעות שינוי שמות, קריאות, מקרה קצה חסר, ריחות אבטחה פשוטים (כמו שרשור מחרוזת SQL), זיהוי קוד כפול.

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

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

שלבי סקירה שיטתית

  1. תן את ההקשר. הוסף את מטרת השינוי, הנושא הרלוונטי וקריטריוני הקבלה, אם יש, להנחיה. סקירה חסרת תכלית מייצרת פרשנות חסרת תכלית.
  2. חלק את זה לקטגוריות. בקשו מהמודל לסווג את הממצאים כ"באג/אבטחה/ביצועים/קריאה/סגנון"; אז אתה מפריד בין הקריטי לרעש.
  3. בקש תווית חומרה. תן לכל ממצא דירוג "גבוה/בינוני/נמוך" וכלול "סיבה" ו"תיקון מומלץ".
  4. סנן אותו במו עיניך. העריכו כל ממצא: האם הוא אמיתי (אמת), האם הוא חיובי כוזב (כתוב הצדקה), האם חסר משהו (הוסף ידע משלך).
  5. אמת נתיבים קריטיים באופן ידני. קרא ובצע מסלולים הכוללים כסף, זהות, הרשאות ומחיקת נתונים בעצמך מבלי להסתמך על AI.

שלושה מיני מארזים

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

מקרה 2 - חיסול חיובי כוזב. ה-AI סימן "בעיית ביצועים אפשרית" בלופ. המבקר סגר זאת כחיובי שגוי, ביודעו שהלולאה פועלת רק עם מקסימום 5 אלמנטים (היא עוברת בלולאה על ה-enum). הדוגמנית, שלא ידעה את ההקשר, הזהירה; האדם שהכיר את ההקשר קיבל את ההחלטה הנכונה.

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

ארבע תבניות הניתנות להעתקה

סקירה מכוונת תכלית, מסווגת:

תפקיד: סוקר קוד קפדני. מטרת השינוי: {{purpose / issue}}סקור את ההבדל הזה. ספק ממצאים בקטגוריות הבאות: [באג] [אבטחה][ביצועים] [קריאה] [סגנון]. לכל ממצא: file:row, חומרה (גבוה/בינונית/נמוכה), סיבה, תיקון מומלץ. סמן "אפשרי" אם אינך בטוח. אתה לא מכיר את כללי העסקים; שאל אותי לגבי מקומות שדורשים כללים.{{diff}}

כדי להתכונן לסקור את הקוד שלך:

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

ציד מקרה קצה:

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

סריקת ריח אבטחה (הקרנה מוקדמת):

חפש ריחות אבטחה נפוצים בקוד זה: שרשור SQL/פקודה, קלט לא מאומת, סוד מוטבע בלתי ניתן לשינוי, ביטול סדרה לא מאובטח, חוסר בדיקת הרשאות. הפרד את הממצאים ל"ודאי / סביר / ידע". מדובר במיון ראשוני; זה לא פסק דין סופי.{{code}}

הנחיה חלשה / הנחיה חזקה

חלש: "יש טעות ביח"צ הזה?"
חזקה: "מטרה: הוסף הנחה של קופון לסך הכולל של העגלה (ההנחה חייבת להיות לא יותר מ-30% - אינך יכול לאמת את הכלל הזה בעצמך, רק תגיד לי אם הקוד מטיל גבול עליון). בדוק הבדל; תן ממצאים לפי קטגוריה + חומרה + הצעה לתיקון, סמן 'אפשרי' אם לא בטוח. [הבדל]"

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

סוג מציאת

אמינות AI

תפקידו של האדם

בדיקת ריק/שגיאה חסרה

גבוה

אמת והחל

קריאה/סגנון

גבוה

בחר לפי העדפה

ריח אבטחה פשוט

בינוני

סיים, סרוק עם רכב

ציות לכללים עסקיים

נמוך

זה לגמרי אנושי.

במקביל/ארכיטקטורה

נמוך

נדרשת סקירת מומחה

סקירת AI אינה תחליף לסקירה אנושית

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

טיפ: קרא את רשימת הממצאים שה-AI מייצר כ"דברים שצריך לבדוק" ולא כ"לעשות". או לאמת והחל כל פריט או רשום במשפט אחד מדוע עברת אותו; עקבות זו הופכת את הביקורת לניתנת לביקורת.

טעויות נפוצות

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

לסיכום

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

משימת יישום

בחר יחסי ציבור/הבדלים אמיתיים או עדכניים. ראשית, בקש מה-AI לבדוק אותו עם התבנית "סקירת קטגוריה מכוונת-אובייקטיבית". שים את הממצאים בטבלה והחליט עבור כל אחד מהם: נכון (אימתתי), חיובי שגוי (הנה ההיגיון שלי), או שיש ליישם. לאחר מכן צא לסיור בעצמך ונסה למצוא לפחות דבר אחד (במיוחד כלל עסקי או מקרה קצה) שה-AI חסר ורשום אותו.

רשימת בדיקה

  • [ ] אני משתמש בסקירת AI כמסנן ראשון, לא כאישור.
  • [ ] אני מוסיף את המטרה ואת קריטריוני הקבלה להנחיית הביקורת.
  • [ ] אני מפריד בין הממצאים לרעש לפי קטגוריות ומאוד רוצה אותם.
  • [ ] אני מסנן במודע כל ממצא כדי לאשר/שגוי חיובי/ליישם.
  • [ ] כאדם, אני בודק כללים עסקיים ותאימות ארכיטקטונית.
  • [ ] אני דורש אישור ממהנדס מוסמך לשינויים קריטיים לבטיחות.