Analýza kódu pomocou SonarQube

1. Prehľad

V tomto článku sa budeme zaoberať analýzou statického zdrojového kódu pomocou SonarQube - čo je open-source platforma na zabezpečenie kvality kódu.

Začnime základnou otázkou - prečo vlastne vôbec analyzovať zdrojový kód? Veľmi zjednodušene povedané, aby sa zabezpečila kvalita, spoľahlivosť a udržiavateľnosť počas celej životnosti projektu; zle napísaná základňa kódov je vždy nákladnejšia na údržbu.

Dobre, začnime stiahnutím najnovšej verzie LTS verzie SonarQube zo stránky na stiahnutie a nastavením nášho lokálneho servera, ako je uvedené v tejto príručke rýchleho začiatku.

2. Analýza zdrojového kódu

Teraz, keď sme prihlásení, sa od nás vyžaduje, aby sme vytvorili token zadaním mena - ktorým môže byť naše používateľské meno alebo ľubovoľné iné meno a kliknúť na tlačidlo generovania.

Token použijeme neskôr pri analýze našich projektov. Musíme tiež zvoliť primárny jazyk (Java) a technológiu zostavenia projektu (Maven).

Poďme definovať plugin v pom.xml:

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

Najnovšia verzia doplnku je k dispozícii tu. Teraz musíme tento príkaz spustiť z koreňa adresára nášho projektu, aby sme ho mohli skenovať:

mvn sonar: sonar -Dsonar.host.url = // localhost: 9000 -Dsonar.login = vygenerovaný token

Musíme vymeniť vygenerovaný token s tokenom zhora.

Projekt, ktorý sme použili v tomto článku, je k dispozícii tu.

Ako parametre doplnku Maven sme zadali adresu URL hostiteľa servera SonarQube a prihlásenie (vygenerovaný token).

Po vykonaní príkazu budú výsledky dostupné na hlavnom paneli Projekty - o // localhost: 9000.

Existujú ďalšie parametre, ktoré môžeme odovzdať doplnku Maven alebo dokonca nastaviť z webového rozhrania; sonar.host.adresa URL, sonar.projectKeya sonar.zdroje sú povinné, zatiaľ čo iné sú voliteľné.

Ostatné parametre analýzy a ich predvolené hodnoty sú tu. Upozorňujeme tiež, že každý jazykový doplnok má pravidlá pre analýzu kompatibilného zdrojového kódu.

3. Výsledok analýzy

Teraz, keď sme analyzovali náš prvý projekt, môžeme prejsť na webové rozhranie na adrese // localhost: 9000 a obnovte stránku.

Tam uvidíme súhrn správy:

Objavenými problémami môžu byť chyba, zraniteľnosť, vôňa kódu, pokrytie alebo duplikácia. Každá kategória má zodpovedajúci počet čísel alebo percentuálnu hodnotu.

Problémy môžu mať navyše jednu z piatich rôznych úrovní závažnosti: blokátor, kritický, hlavný, menší a Info. Tesne pred názvom projektu je ikona, ktorá zobrazuje stav brány kvality - vyhovel (zelený) alebo zlyhal (červený).

Kliknutím na názov projektu sa dostanete na vyhradený hlavný panel, kde môžeme podrobnejšie preskúmať problémy týkajúce sa konkrétneho projektu.

Vidíme kód projektu, aktivitu a vykonávať administračné úlohy z dashboardu projektu - každý je k dispozícii na samostatnej karte.

Aj keď existuje globálny Problémy karta, Problémy karta na paneli dashboardu projektu zobrazuje problémy špecifické pre samotný projekt:

Karta Problémy vždy zobrazuje kategóriu, úroveň závažnosti, značky a vypočítané úsilie (týkajúce sa času), ktoré bude potrebné na odstránenie problému.

Na karte Problémy je možné priradiť problém k inému používateľovi, komentovať ho a zmeniť jeho úroveň závažnosti. Kliknutím na samotný problém sa zobrazia ďalšie podrobnosti.

Karta Vydanie obsahuje sofistikované filtre naľavo. Sú dobré na identifikáciu problémov. Ako môže človek vedieť, či je základ kódu dostatočne zdravý na nasadenie do výroby? Na to slúži Quality Gate.

4. Brána kvality SonarQube

V tejto časti sa pozrieme na kľúčovú vlastnosť SonarQube - Quality Gate. Potom uvidíme príklad, ako nastaviť vlastný.

4.1. Čo je brána kvality?

Brána kvality je súbor podmienok, ktoré musí projekt splniť, aby mohol byť kvalifikovaný na uvedenie do výroby. Odpovedá na jednu otázku: môžem poslať svoj kód do výroby v súčasnom stave alebo nie?

Jedným z dobrých spôsobov, ako si v priebehu času udržať dobrú základňu kódov, je zabezpečenie kvality „nového“ kódu pri opravovaní existujúcich. Quality Gate uľahčuje nastavenie pravidiel pre validáciu každého nového kódu pridaného do kódovej základne pri následnej analýze.

Podmienky stanovené v bráne kvality stále ovplyvňujú nemodifikované segmenty kódu. Ak dokážeme zabrániť vzniku nových problémov, časom ich vylúčime.

Tento prístup je porovnateľný s riešením úniku vody zo zdroja. Týmto sa dostávame ku konkrétnemu pojmu - obdobiu úniku. Toto je obdobie medzi dvoma analýzami / verziami projektu.

Ak znova spustíme analýzu, na rovnakom projekte sa na karte prehľad na paneli dashboard projektu zobrazia výsledky za obdobie úniku:

Z webového rozhrania je na karte Quality Gates prístup k všetkým definovaným bránam kvality. Predvolene, SonarQube spôsobom bol predinštalovaný so serverom.

Predvolená konfigurácia pre SonarQube spôsobom označí kód ako neúspešný, ak:

  • pokrytie novým kódom je menej ako 80%
  • percento duplikovaných riadkov v novom kóde je väčšie ako 3
  • Udržateľnosť, spoľahlivosť alebo hodnotenie bezpečnosti je horšie ako v

S týmto porozumením môžeme vytvoriť vlastnú bránu kvality.

4.2. Pridanie vlastnej brány kvality

Najprv musíme klikni na Brány kvality kartu a potom kliknite na ikonu Vytvoriť tlačidlo ktorý je na ľavej strane stránky. Budeme mu musieť dať meno - baeldung.

Teraz môžeme nastaviť podmienky, ktoré chceme:

Z Pridať podmienku drop-down, poďme si vybrať Problémy s blokovaním; okamžite sa zobrazí na zozname podmienok.

Upresníme je väčší ako ako Operátor, nastavte nulu (0) pre Chyba stĺpec a skontrolovať Počas obdobia úniku stĺpec:

Potom klikneme na ikonu Pridať na vykonanie zmien. Pridajme ďalšiu podmienku podľa rovnakého postupu, ako je uvedené vyššie.

Vyberieme problémy z Pridať podmienku rozbaľovací zoznama skontrolovať Počas obdobia úniku stĺpec.

Hodnota Operátor stĺpec bude nastavený na „je menej než" a pridáme jeden (1) ako hodnotu pre Chyba stĺpec. To znamená ak je počet vydaní v novom pridanom kóde menej ako 1, označte bránu kvality ako zlyhanú.

Viem, že to nemá technický zmysel, ale využime to kvôli učeniu. Nezabudnite kliknúť na ikonu Pridať tlačidlo pre uloženie pravidla.

Jeden posledný krok, musíme pripojiť projekt k našej vlastnej bráne kvality. Môžeme tak urobiť posunutím stránky dole do sekcie Projekty.

Tam musíme kliknúť na Všetko a potom označiť náš projekt, ktorý si vyberieme. Môžeme ho tiež nastaviť ako predvolenú bránu kvality v pravom hornom rohu stránky.

Znovu naskenujeme zdrojový kód projektu, tak ako predtým pomocou príkazu Maven. Po dokončení prejdeme na kartu projekty a obnovíme stránku.

Projekt tentokrát nebude spĺňať kritériá brány kvality a zlyhá. Prečo? Pretože v jednom z našich pravidiel sme to špecifikovali, malo by to zlyhať, ak nenastanú nové problémy.

Vráťme sa na kartu Quality Gates a zmeňme podmienku pre problémy do je väčší ako. Aby sme túto zmenu vykonali, musíme kliknúť na tlačidlo aktualizovať.

Tentokrát prejde nová kontrola zdrojového kódu.

5. Integrácia SonarQube do CI

Je možné, že sa SonarQube stane súčasťou procesu kontinuálnej integrácie. Toto automaticky zlyhá v zostavení, ak analýza kódu nesplnila podmienku brány kvality.

Aby sme to dosiahli, budeme používať SonarCloud, čo je cloudová verzia servera SonaQube. Tu si môžeme vytvoriť účet.

V časti Môj účet> Organizácie vidíme kľúč organizácie, ktorý bude zvyčajne vo forme xxxx-github alebo xxxx-bitbucket.

Tiež z Môj účet> Zabezpečenie, môžeme vygenerovať token ako v miestnej inštancii servera. Poznačte si token aj kľúč organizácie pre ďalšie použitie.

V tomto článku budeme používať Travis CI a vytvoríme si tu účet s existujúcim profilom Github. Načíta všetky naše projekty a môžeme prepnúť prepínač na ľubovoľnom, čím aktivujeme Travis CI.

Potrebujeme pridať token, ktorý sme vygenerovali v SonarCloud, do premenných prostredia Travis. Môžeme to urobiť kliknutím na projekt, ktorý sme aktivovali pre CI.

Potom klikneme na „Ďalšie možnosti“> „Nastavenia“ a potom sa posunieme nadol na „Premenné prostredia“:

Pridáme nový záznam s menom SONAR_TOKEN a použite vygenerovaný token na SonarCloud ako hodnotu. Travis CI ho zašifruje a skryje pred verejným zobrazením:

Nakoniec musíme pridať a .travis.yml súbor do koreňa nášho projektu s nasledujúcim obsahom:

jazyk: java sudo: false inštalácia: true addony: sonarcloud: organizácia: "your_organization_key" token: secure: "$ SONAR_TOKEN" jdk: - oraclejdk8 skript: - mvn clean org.jacoco: jacoco-maven-plugin: balíček preparátu-agenta sonar : vyrovnávacia pamäť sonaru: adresáre: - '$ HOME / .m2 / repository' - '$ HOME / .sonar / cache'

Nezabudnite nahradiť svoj organizačný kľúč vyššie opísaným organizačným kľúčom. Zadaním nového kódu a stlačením Github repo sa spustí zostavenie Travis CI a následne sa aktivuje aj skenovanie sonaru.

6. Záver

V tomto tutoriáli sme sa zamerali na to, ako lokálne nastaviť server SonarQube a ako používať Quality Gate na definovanie kritérií vhodnosti projektu pre produkčné vydanie.

Dokumentácia SonarQube obsahuje viac informácií o ďalších aspektoch platformy.