מבוא ל- FindBugs

1. סקירה כללית

FindBugs הוא כלי קוד פתוח המשמש לביצוע ניתוח סטטי על קוד Java.

במאמר זה נבחן הגדרת FindBugs בפרויקט Java ושילובו ב- IDE ובבניית Maven.

2. תוסף FindBugs Maven

2.1. תצורת Maven

על מנת להתחיל ליצור דוחות ניתוח סטטי, ראשית עלינו להוסיף את תוסף FindBugs לתוכנת שלנו pom.xml:

   org.codehaus.mojo findbugs-maven-plugin 3.0.4 

אתה יכול לבדוק את הגרסה האחרונה של התוסף ב- Maven Central.

2.2. יצירת דוחות

עכשיו שיש לנו את התוסף Maven מוגדר כראוי, בואו ניצור את תיעוד הפרויקט באמצעות ה- אתר mvn פקודה.

הדוח ייווצר בתיקיה יעד / אתר בספריית הפרויקטים תחת השם findbugs.html.

אתה יכול גם להפעיל את mvn findbugs: gui פקודה להפעלת ממשק GUI לדפדוף בדוחות שנוצרו עבור הפרויקט הנוכחי.

ניתן גם להגדיר את תוסף FindBugs כושל בנסיבות מסוימות - על ידי הוספת מטרת הביצוע חשבון לתצורה שלנו:

 org.codehaus.mojo findbugs-maven-plugin 3.0.4 בדיקה מקסימלית 

ה מַאֲמָץ - כאשר הוא ממקסם, מבצע ניתוח שלם ומדויק יותר, וחושף יותר באגים בקוד, עם זאת, הוא גוזל יותר משאבים ולוקח יותר זמן להשלים.

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

תוכל גם לשפר את תהליך יצירת הדוחות ולקחת שליטה רבה יותר על הניתוח על ידי הוספת תצורה בסיסית כלשהי להצהרת התוסף:

 org.baeldung.web.controller. * FindNullDeref FindReturnRef 

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

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

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

3. תוסף Eclipse של FindBugs

3.1. הַתקָנָה

ההתקנה של IDE של תוסף FindBugs היא די פשוטה - אתה רק צריך להשתמש בתכונת עדכון התוכנה ב- Eclipse, עם אתר העדכונים הבא: //findbugs.cs.umd.edu/eclipse.

כדי לוודא כי FindBugs מותקן כראוי בסביבת הליקוי שלך, חפש את האפשרות שכותרתה FindBugs תחת Windows -> העדפות -> Java.

3.2. דוחות גלישה

על מנת להפעיל ניתוח סטטי על פרויקט באמצעות תוסף FindBugs Eclipse, עליך ללחוץ לחיצה ימנית על הפרויקט בסייר החבילות ואז ללחוץ על האפשרות שכותרתה למצוא באגים.

לאחר ההשקה, Eclipse מציג את התוצאות מתחת לחלון Bug Explorer כפי שמוצג בתמונה למטה:

החל מגרסה 2, FindBugs החלה לדרג באגים בסולם שבין 1 ל -20 כדי למדוד את חומרת הליקויים:

  • הכי מפחיד: מדורגת בין 1 ל -4.
  • מַפְחִיד: מדורגת בין 5 ל -9.
  • מטריד: מדורגת בין 10 ל 14.
  • מדאיג: מדורגת בין 15 ל -20.

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

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

3.3. תצורת ליקוי חמה

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

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

FindBugs מחלקים פגמים בקטגוריות רבות:

  • נְכוֹנוּת - אוסף באגים כלליים, למשל לולאות אינסופיות, שימוש בלתי הולם ב שווים(), וכו
  • תרגול גרוע, למשל טיפול בחריגים, זרמים נפתחים, השוואת מיתרים וכו '
  • ביצועים, למשל חפצים סרק
  • נכונות מרובת הברגה - אוסף סתירות לסינכרון ובעיות שונות בסביבה מרובת שרשראות
  • בִּנאוּם - אוספת בעיות הקשורות לקידוד והבינלאומיות של היישומים
  • פגיעות של קוד זדוני - אוסף נקודות תורפה בקוד, למשל. קטעי קוד שניתן לנצל על ידי תוקפים פוטנציאליים
  • בִּטָחוֹן - אוסף חורי אבטחה הקשורים לפרוטוקולים ספציפיים או הזרקות SQL
  • מְסוּכָּן - אוסף ריחות קוד, למשל. השוואות חסרות תועלת, בדיקות אפס, משתנים שאינם בשימוש וכו '

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

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

תוכל למצוא את רשימת הבאגים הממצה שזוהה על ידי FindBugs בכתובת דף תיעוד רשמי.

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

4. תוסף FindBugs IntelliJ IDEA

4.1. הַתקָנָה

אם אתה אוהד IntelliJ IDEA, וברצונך להתחיל לבדוק את קוד Java באמצעות FindBugs, אתה יכול פשוט לתפוס את חבילת התקנת התוספים מהאתר הרשמי של JetBrains ולחלץ אותו לתיקיה% INSTALLATION_DIRECTORY% / plugins. הפעל מחדש את ה- IDE שלך ואתה טוב ללכת.

לחלופין, אתה יכול לנווט אל הגדרות -> תוספים ולחפש בכל מאגרי התוסף FindBugs.

בזמן כתיבת מאמר זה, הגרסה 1.0.1 של התוסף IntelliJ IDEA יצאה לדרך,

כדי לוודא שתוסף FindBugs מותקן כראוי, בדוק אם קיימת האפשרות שכותרתה "ניתוח קוד פרויקט" תחת ניתוח -> FindBugs.

4.2. דוחות גלישה

על מנת להפעיל ניתוח סטטי ב- IDEA, לחץ על "ניתוח קוד פרויקט", תחת ניתוח -> FindBugs, ואז חפש את פאנל FindBugs-IDEA כדי לבדוק את התוצאות:

אתה יכול להשתמש בעמודה השנייה של הפקודות בצד שמאל של צילום המסך, כדי לקבץ פגמים באמצעות גורמים שונים:

  1. קבץ לפי קטגוריית באגים.
  2. קבץ לפי כיתה.
  3. קבץ לפי חבילה.
  4. קבץ לפי דירוג באגים.

ניתן גם לייצא את הדוחות בפורמט XML / HTML על ידי לחיצה על כפתור "ייצוא" בעמודה הרביעית של הפקודות.

4.3. תְצוּרָה

דפי העדפות התוספים של FindBugs בתוך IDEA די מובן מאליו:

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

ניתן לגשת לחלונית ההעדפות בתוך IDEA, על ידי לחיצה על סמל "העדפות התוסף" מתחת לחלונית FindBugs-IDEA.

5. ניתוח דוחות לפרויקט האביב למנוחה

בחלק זה נשליך מעט על ניתוח סטטי שנעשה על פרויקט מנוחת האביב הזמין ב- Github כדוגמה:

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

השיטה מתעלמת מערך החזר יוצא דופן:

File fileServer = קובץ חדש (fileName); fileServer.createNewFile ();

כפי שאתה בוודאי יכול לנחש, FindBugs מתלונן על העובדה שאנחנו זורקים את ערך ההחזר של ה- createNewFile () שיטה. תיקון אפשרי יהיה לאחסן את הערך המוחזר במשתנה שהוכרז לאחרונה, ואז לרשום משהו משמעותי באמצעות רמת יומן הרישום DEBUG - למשל. "הקובץ בשם אינו קיים ונוצר בהצלחה”אם הערך המוחזר נכון.

השיטה עשויה להיכשל בסגירת הזרם למעט חריגה: פגם מסוים זה ממחיש מקרה שימוש טיפוסי לטיפול בחריגים המציע תמיד סגור זרמים בא סוף כל סוף לַחסוֹם:

נסה את {DateFormat dateFormat = SimpleDateFormat חדש ("yyyy_MM_dd_HH.mm.ss"); מחרוזת fileName = dateFormat.format (תאריך חדש ()); File fileServer = קובץ חדש (fileName); fileServer.createNewFile (); בתים [] בתים = file.getBytes (); BufferedOutputStream זרם = BufferedOutputStream חדש (FileOutputStream חדש (fileServer)); stream.write (בתים); stream.close (); החזיר "העלת בהצלחה" + שם משתמש; } לתפוס (חריג e) {return "לא הצלחת להעלות" + e.getMessage (); }

כאשר נזרק חריג לפני ה- stream.close () הוראה, הזרם לעולם אינו סגור, ולכן עדיף תמיד להשתמש ב- סוף כל סוף{} חסום לסגירת זרמים שנפתח במהלך א לְנַסוֹת/לתפוס שגרה.

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

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

6. מסקנה

במאמר זה סקרנו את נקודות המפתח הבסיסיות לשימוש והתאמה אישית של FindBugs בפרויקט Java.

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

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

קוד המדגם בו השתמשנו לניתוח סטטי זמין ב- Github.