ניתוח קוד עם SonarQube

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

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

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

בסדר, עכשיו בואו נתחיל בהורדת גרסת ה- LTS העדכנית ביותר של SonarQube מדף ההורדה והגדרת השרת המקומי שלנו כמתואר במדריך זה להפעלה מהירה.

2. ניתוח קוד המקור

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

נשתמש באסימון בשלב מאוחר יותר בשלב ניתוח הפרויקטים שלנו. עלינו גם לבחור את השפה הראשית (Java) ואת טכנולוגיית ה- build של הפרויקט (Maven).

בואו נגדיר את התוסף ב- pom.xml:

    org.sonarsource.scanner.maven sonar-maven-plugin 3.4.0.905 

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

סונאר mvn: סונאר -Dsonar.host.url = // localhost: 9000 -Dsonar.login = האסימון שנוצר

אנחנו צריכים להחליף האסימון שנוצר עם האסימון מלמעלה.

הפרויקט בו השתמשנו במאמר זה זמין כאן.

ציינו את כתובת ה- URL המארחת של שרת SonarQube ואת הכניסה (אסימון שנוצר) כפרמטרים עבור התוסף Maven.

לאחר ביצוע הפקודה, התוצאות יהיו זמינות בלוח המחוונים של פרויקטים - בכתובת // localhost: 9000.

ישנם פרמטרים אחרים שנוכל להעביר לתוסף Maven או אפילו להגדיר אותם מממשק האינטרנט; sonar.host.url, sonar.projectKey, ו סונאר.מקורות חובה בעוד שאחרים הם אופציונליים.

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

3. תוצאת ניתוח

כעת לאחר שניתחנו את הפרויקט הראשון שלנו, נוכל לעבור לממשק האינטרנט בכתובת // localhost: 9000 ורענן את הדף.

שם נראה את סיכום הדו"ח:

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

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

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

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

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

כרטיסיית הבעיות מציגה תמיד את הקטגוריה, רמת החומרה, התגיות והמאמץ המחושב (לגבי זמן) שיידרש לתיקון הבעיה.

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

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

4. שער האיכות של SonarQube

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

4.1. מהו שער איכות?

שער איכות הוא מערכת תנאים שעל הפרויקט לעמוד לפני שהוא יכול להיות זכאי לשחרור הייצור. זה עונה על שאלה אחת: האם אני יכול לדחוף את הקוד שלי לייצור במצב הנוכחי או לא?

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

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

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

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

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

תצורת ברירת המחדל עבור דרך SonarQube מסמן את הקוד ככושל אם:

  • הכיסוי בקוד חדש הוא פחות מ 80%
  • אחוז השורות המשוכפלות בקוד חדש גדול מ -3
  • יכולת התחזוקה, האמינות או דירוג האבטחה גרועים מ- A

מתוך הבנה זו, אנו יכולים ליצור שער איכות מותאם אישית.

4.2. הוספת שער איכות מותאם אישית

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

כעת אנו יכולים לקבוע את התנאים שאנו רוצים:

מ ה הוסף תנאי נפתח, בואו נבחר בעיות חוסם; זה יופיע מיד ברשימת התנאים.

נפרט גדול מ כמו מַפעִיל, הגדר אפס (0) עבור ה- שְׁגִיאָה טור ובדוק תקופת דליפה טור:

ואז נלחץ על ה- לְהוֹסִיף כפתור כדי לבצע את השינויים. בואו נוסיף תנאי נוסף בעקבות אותה הליך כנ"ל.

אנחנו נבחר נושאים מ ה הוסף תנאי להפילולבדוק תקופת דליפה טור.

הערך של ה- Oטורף העמודה תוגדר כ- “זה פחות מ" ונוסיף אחד (1) כערך עבור שְׁגִיאָה טור. זה אומר אם מספר הבעיות בקוד החדש שנוסף קטן מ- 1, סמן את שער האיכות ככושל.

אני יודע שזה לא הגיוני טכני, אבל בואו נשתמש בזה לשם למידה. אל תשכח ללחוץ על לְהוֹסִיף כדי לשמור את הכלל.

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

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

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

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

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

סריקה חדשה של קוד המקור תעבור הפעם.

5. שילוב SonarQube ב- CI

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

כדי שנוכל להשיג זאת, אנו נשתמש ב- SonarCloud שהיא הגרסה המתארחת בענן של שרת SonaQube. אנחנו יכולים ליצור חשבון כאן.

מהחשבון שלי> ארגונים, אנו יכולים לראות את מפתח הארגון, והוא בדרך כלל יהיה בטופס xxxx-github אוֹ xxxx-bitbucket.

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

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

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

לאחר מכן, נלחץ על "אפשרויות נוספות"> "הגדרות" ואז נגלול מטה אל "משתני סביבה":

נוסיף ערך חדש עם השם SONAR_TOKEN והשתמש באסימון שנוצר ב- SonarCloud כערך. Travis CI יצפין ויסיר אותו מהציבור הציבורי:

לבסוף, עלינו להוסיף א .travis.yml הקובץ לשורש הפרויקט שלנו עם התוכן הבא:

שפה: java sudo: false install: תוספות אמיתיות: sonarcloud: organization: "your_organization_key" token: secure: "$ SONAR_TOKEN" jdk: - סקריפט oraclejdk8: - mvn נקי org.jacoco: jacoco-maven-plugin: סונאר חבילת הכנת סוכן : מטמון סונאר: ספריות: - '$ HOME / .m2 / מאגר' - '$ HOME / .sonar / cache'

זכור להחליף את מפתח הארגון שלך במפתח הארגון המתואר לעיל. ביצוע הקוד החדש ולחיצה על ריפו של Github יגרום לבניית Travis CI ובתורו גם להפעיל את סריקת הסונאר.

6. מסקנה

במדריך זה בדקנו כיצד להקים שרת SonarQube באופן מקומי וכיצד להשתמש ב- Quality Gate כדי להגדיר את הקריטריונים להתאמת פרויקט לשחרור הייצור.

בתיעוד SonarQube יש מידע נוסף על היבטים אחרים של הפלטפורמה.