מבוא ל- JaCoCo

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

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

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

2. תצורת Maven

על מנת להתחיל לעבוד עם JaCoCo, עלינו להכריז על תוסף Maven זה שלנו pom.xml קוֹבֶץ:

 org.jacoco jacoco-maven-plugin 0.7.7.201606060606 דוח הכנת סוכן הכנת דוח חבילה 

הקישור שסופק כאן לפני כן תמיד יוביל אותך לגרסה האחרונה של התוסף במאגר המרכזי של maven.

3. דוחות כיסוי קוד

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

ציבורי בוליאני isPalindrome (String inputString) {if (inputString.length () == 0) {return true; } אחר {char firstChar = inputString.charAt (0); char lastChar = inputString.charAt (inputString.length () - 1); מחרוזת אמצע = inputString.substring (1, inputString.length () - 1); return (firstChar == lastChar) && isPalindrome (באמצע); }}

כל מה שאנחנו צריכים עכשיו זה פשוט JUnit מִבְחָן:

@ מבחן ציבורי בטל כאשרEmptyString_thenAccept () {Palindrome palindromeTester = Palindrome new (); assertTrue (palindromeTester.isPalindrome ("")); }

הפעלת הבדיקה באמצעות JUnit תניע אוטומטית את סוכן JaCoCo, ובכך היא תיצור דוח כיסוי ב פורמט בינארי בספריית היעד - יעד / jacoco.exec.

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

החדשות הטובות הן שאנחנו יכולים להשתמש ב- ג'קוקו: דווח מטרה במטרה ליצור דוחות כיסוי קוד קריאים במספר פורמטים - למשל. HTML, CSV ו- XML.

כעת אנו יכולים להסתכל למשל ב יעד / אתר / ג'קוקו / index.html דף כדי לראות כיצד נראה הדוח שנוצר:

בעקבות הקישור המופיע בדוח - Palindrome.java נוכל לקדוח תצוגה מפורטת יותר עבור כל מחלקת Java:

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

4. ניתוח דוחות

הדו"ח שלנו מציג 21% כיסוי הוראות, 17% כיסוי סניפים, 3/5 עבור מורכבות ציקלומטית וכולי.

38 ההוראות המוצגות על ידי JaCoCo בדו"ח מתייחסות ל הוראות bytecode בניגוד להוראות קוד Java רגילות.

דוחות JaCoCo עוזרים לך לנתח חזותית את כיסוי הקוד באמצעות יהלומים עם צבעים לענפים וצבעי רקע לשורות:

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

אותו קוד צבע חל על צבע הרקע, אך עבור כיסוי קווים.

JaCoCo מספק בעיקר שלושה מדדים חשובים:

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

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

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

5. פירוט רעיונות

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

כדי לאסוף נתוני כיסוי, JaCoCo משתמש ב- ASM לצורך מכשור קוד בזמן אמת, ומקבל אירועים מה- ממשק כלי JVM בתהליך:

אפשר גם להפעיל את סוכן JaCoCo במצב שרת, במקרה זה, אנו יכולים להריץ את הבדיקות שלנו איתו jacoco: dump כיעד, ליזום בקשת dump.

תוכל לעקוב אחר קישור התיעוד הרשמי לקבלת פרטים מעמיקים יותר אודות עיצוב JaCoCo.

6. ציון כיסוי קוד

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

על מנת להשיג 100% כיסוי קוד עלינו להציג בדיקות המכסות את החלקים החסרים המוצגים בדוח הראשוני:

@ מבחן ציבורי בטל כאשר Palindrom_thenAccept () {Palindrome palindromeTester = Palindrome new (); assertTrue (palindromeTester.isPalindrome ("צהריים")); } @Test ציבורי בטל כאשר NearPalindrom_thanReject () {Palindrome palindromeTester = Palindrome new (); assertFalse (palindromeTester.isPalindrome ("ניאון")); }

עכשיו אנחנו יכולים לומר שיש לנו מספיק בדיקות כדי לכסות את כל הקוד שלנו, אבל כדי לוודא את זה, בואו נפעיל את הפקודה Maven mvn jacoco: דווח לפרסום דוח הסיקור:

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

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

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

אנו יכולים לעשות זאת על ידי הוספת הדברים הבאים חשבון המטרה שלנו pom.xml קוֹבֶץ:

 צ'ק צ'ק צ'ק PACKAGE LINE COVEREDRATIO 0.50 

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

ה ג'קוקו: לבדוק המטרה היא כָּרוּך ל תאשרכדי שנוכל להריץ את פקודת Maven - לוודא נקי לבדוק אם הכללים מכובדים או לא. היומנים יראו משהו כמו:

[שגיאה] נכשל ביצוע הביצוע org.jacoco: jacoco-maven-plugin: 0.7.7.201606060606: בדיקה (jacoco-check) בבדיקת מוטציה של הפרויקט: בדיקות הכיסוי לא התקיימו.

7. מסקנה

במאמר זה ראינו כיצד להשתמש בתוסף JaCoCo maven כדי ליצור דוחות כיסוי קוד עבור פרויקטים של Java.

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

אתה יכול לבדוק את הדוגמה המובאת במאמר זה בקישור פרויקט GitHub.