Analiza koda sa SonarQube

1. Pregled

U ovom ćemo članku razmatrati statičku analizu izvornog koda pomoću SonarQube - platforme otvorenog koda za osiguravanje kvalitete koda.

Počnimo s ključnim pitanjem - zašto uopće analizirati izvorni kod? Vrlo jednostavno, kako bi se osigurala kvaliteta, pouzdanost i održivost tijekom životnog vijeka projekta; loše napisana baza kodova uvijek je skuplja za održavanje.

U redu, krenimo sada preuzimanjem najnovije LTS verzije SonarQube sa stranice za preuzimanje i postavljanjem lokalnog poslužitelja kako je navedeno u ovom brzom vodiču.

2. Analiza izvornog koda

Sad kad smo prijavljeni, od nas se traži da stvorimo token navodeći ime - koje može biti naše korisničko ime ili bilo koje drugo odabrano ime i kliknite gumb generiranja.

Token ćemo upotrijebiti kasnije u trenutku analize naših projekata. Također moramo odabrati primarni jezik (Java) i tehnologiju izrade projekta (Maven).

Definirajmo dodatak u pom.xml:

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

Najnovija verzija dodatka dostupna je ovdje. Sada ovu naredbu moramo izvršiti iz korijena direktorija našeg projekta da bismo je skenirali:

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

Moramo zamijeniti generirani-token s žetonom odozgo.

Projekt koji smo koristili u ovom članku dostupan je ovdje.

Kao parametre za dodatak Maven odredili smo URL hosta poslužitelja SonarQube i prijavu (generirani token).

Nakon izvršavanja naredbe, rezultati će biti dostupni na nadzornoj ploči Projekti - na // localhost: 9000.

Postoje i drugi parametri koje možemo proslijediti dodatku Maven ili ih čak postaviti s web sučelja; sonar.host.url, sonar.projectKey, i sonar.izvori su obvezni, dok su drugi neobavezni.

Ovdje su ostali parametri analize i njihove zadane vrijednosti. Također imajte na umu da svaki dodatak za jezik ima pravila za analizu kompatibilnog izvornog koda.

3. Rezultat analize

Sada kada smo analizirali svoj prvi projekt, možemo ići na web sučelje na // localhost: 9000 i osvježite stranicu.

Tamo ćemo vidjeti sažetak izvješća:

Otkriveni problemi mogu biti greška, ranjivost, miris koda, pokrivenost ili umnožavanje. Svaka kategorija ima odgovarajući broj izdanja ili postotnu vrijednost.

Štoviše, problemi mogu imati jednu od pet različitih razina ozbiljnosti: bloker, kritičan, glavni, sporedni i info. Neposredno ispred naziva projekta nalazi se ikona koja prikazuje status Quality Gate - proslijeđenog (zeleno) ili neuspjelog (crveno).

Klikom na naziv projekta doći ćete do posebne nadzorne ploče gdje možemo detaljnije istražiti probleme koji su specifični za projekt.

Kôd projekta, aktivnost i izvršavanje administrativnih zadataka možemo vidjeti s nadzorne ploče projekta - svaki dostupan na zasebnoj kartici.

Iako postoji globalno Pitanja na kartici Pitanja kartica na nadzornoj ploči projekta prikazuje probleme specifične samo za projekt:

Kartica problema uvijek prikazuje kategoriju, razinu ozbiljnosti, oznake i proračunati napor (s obzirom na vrijeme) koji je potreban za ispravljanje problema.

Na kartici problema moguće je dodijeliti problem drugom korisniku, komentirati ga i promijeniti razinu ozbiljnosti. Klikom na sam problem prikazat će se više detalja o problemu.

Kartica izdanja dolazi s sofisticiranim filtrima s lijeve strane. To je dobro za određivanje problema. Pa kako se može znati je li kodna baza dovoljno zdrava za uvođenje u proizvodnju? Tome služe Vrata kvalitete.

4. SonarQube Kvalitetna vrata

U ovom ćemo odjeljku pogledati ključnu značajku SonarQube - Quality Gate. Tada ćemo vidjeti primjer kako postaviti prilagođeni.

4.1. Što su kvalitetna vrata?

Vrata kvalitete skup su uvjeta koje projekt mora ispuniti prije nego što se kvalificira za puštanje u proizvodnju. Odgovara na jedno pitanje: mogu li svoj kod gurnuti u proizvodnju u trenutnom stanju ili ne?

Osiguravanje kvalitete koda "novog" koda uz popravljanje postojećih jedan je dobar način da se tijekom vremena održi dobra baza koda. Quality Gate olakšava postavljanje pravila za provjeru valjanosti svakog novog koda dodanog u bazu kodova pri naknadnoj analizi.

Uvjeti postavljeni u okviru Vrata kvalitete i dalje utječu na neizmijenjene segmente koda. Ako uspijemo spriječiti nove probleme, s vremenom ćemo ukloniti sve probleme.

Ovaj pristup usporediv je s popravljanjem curenja vode iz izvora. To nas dovodi do određenog pojma - razdoblje curenja. Ovo je razdoblje između dvije analize / verzije projekta.

Ako ponovimo analizu, na istom projektu, kartica pregled nadzorne ploče projekta prikazat će rezultate za razdoblje curenja:

Kroz web sučelje, kartica Quality Gates je mjesto na kojem možemo pristupiti svim definiranim vratima kvalitete. Prema zadanim postavkama, SonarQube način došao predinstaliran s poslužiteljem.

Zadana konfiguracija za SonarQube način označi kôd kao neuspješan ako:

  • pokrivenost novim kodom manja je od 80%
  • postotak dupliciranih redaka na novom kodu veći je od 3
  • sposobnost održavanja, pouzdanost ili sigurnost lošija je od A

S tim razumijevanjem možemo stvoriti prilagođena vrata kvalitete.

4.2. Dodavanje prilagođenog ulaza kvalitete

Prvo, trebamo Klikni na Kvalitetna vrata a zatim kliknite na Stvoriti dugme koja se nalazi na lijevoj strani stranice. Trebat ćemo mu dati ime - baeldung.

Sada možemo postaviti željene uvjete:

Od Dodaj uvjet padajući izbor, birajmo Problemi s blokerima; odmah će se pojaviti na popisu uvjeta.

Navest ćemo je veći od kao Operater, postaviti nulu (0) za Pogreška stupac i provjera Preko razdoblja curenja stupac:

Zatim ćemo kliknuti na Dodati gumb za izvršenje promjena. Dodajmo još jedan uvjet slijedeći isti postupak kao gore.

Mi ćemo odabrati izdanja od Dodaj uvjet padajućii provjeriti Preko razdoblja curenja stupac.

Vrijednost Operator stupac bit će postavljen na "je manje od " a mi ćemo dodati jedan (1) kao vrijednost za Pogreška stupac. To znači ako je broj izdanja u novom dodanom kodu manji od 1, označite Quality Gate kao promašen.

Znam da ovo nema tehničkog smisla, ali iskoristimo ga radi učenja. Ne zaboravite kliknuti na Dodati gumb za spremanje pravila.

Posljednji korak, moramo priložiti projekt na naša prilagođena vrata kvalitete. To možemo učiniti pomicanjem stranice prema odjeljku Projekti.

Tamo moramo kliknuti na Sve, a zatim označiti naš odabrani projekt. Možemo ga postaviti i kao zadani Vrata kvalitete u gornjem desnom kutu stranice.

Ponovno ćemo skenirati izvorni kod projekta, kao i prije s naredbom Maven. Kad je to gotovo, idemo na karticu projekata i osvježiti.

Ovaj put projekt neće udovoljiti kriterijima Quality Gate i propasti. Zašto? Budući da smo u jednom od naših pravila to odredili, trebalo bi propasti ako nema novih problema.

Vratimo se na karticu Vrata kvalitete i promijenimo uvjet za izdanja do je veći od. Moramo kliknuti gumb za ažuriranje da bismo izvršili ovu promjenu.

Ovaj put proći će novo skeniranje izvornog koda.

5. Integriranje SonarQube u CI

Moguće je učiniti SonarQube dijelom procesa kontinuirane integracije. Ovo će automatski propasti izgradnju ako analiza koda nije zadovoljila uvjet Gate Quality.

Da bismo to postigli, koristit ćemo SonarCloud koji je verzija SonaQube poslužitelja u oblaku. Ovdje možemo stvoriti račun.

U odjeljku Moj račun> Organizacije možemo vidjeti ključ organizacije i on će obično biti u obliku xxxx-github ili xxxx-bitbucket.

Također iz Moj račun> Sigurnost, možemo generirati token kao što smo to učinili u lokalnoj instanci poslužitelja. Zabilježite i token i ključ organizacije za kasniju upotrebu.

U ovom ćemo članku koristiti Travis CI i ovdje ćemo stvoriti račun s postojećim Github profilom. Učitavat će sve naše projekte, a mi možemo uključiti bilo koji prekidač kako bismo na njemu aktivirali Travis CI.

Moramo dodati token koji smo generirali na SonarCloudu varijablama Travisovog okruženja. To možemo učiniti klikom na projekt koji smo aktivirali za CI.

Zatim ćemo kliknuti "Više opcija"> "Postavke", a zatim se pomaknite dolje do "Varijable okruženja":

Dodati ćemo novi unos s imenom SONAR_TOKEN i upotrijebite generirani token na SonarCloud-u kao vrijednost. Travis CI šifrirat će ga i sakriti od javnosti:

Na kraju moramo dodati a .travis.yml datoteka u korijen našeg projekta sa sljedećim sadržajem:

jezik: java sudo: lažno instaliranje: istiniti dodaci: sonarcloud: organizacija: "vaša_organizacija_ključ" žeton: siguran: "$ SONAR_TOKEN" jdk: - oraclejdk8 skripta: - mvn clean org.jacoco: jacoco-maven-plugin: pripremite-agent paket sonar : predmemorija sonara: direktoriji: - '$ HOME / .m2 / repozitorij' - '$ HOME / .sonar / cache'

Ne zaboravite zamijeniti ključ organizacije gore opisanim ključem organizacije. Predajom novog koda i pritiskom na Github repo pokrenut će se Travis CI build, a zauzvrat će se aktivirati i sonarno skeniranje.

6. Zaključak

U ovom smo uputstvu pogledali kako lokalno postaviti SonarQube poslužitelj i kako koristiti Quality Gate za definiranje kriterija za podobnost projekta za produkcijsko izdanje.

Dokumentacija SonarQube sadrži više informacija o ostalim aspektima platforme.