
Želimo deliti izkušnje pri uvajanju platforme za neprekinjeno analizo in merjenje kakovosti kode SonarQube v obstoječe procese razvoja sistema DPO (dodatka k sistemu depozitarno-kirinškega računovodstva „Alameda“) Nacionalnega poroštvenega depozitarja.
Nacionalni poroštveni depozitar (skupina podjetij „Moskovska borza“) je ena izmed ključnih podjetij finančne infrastrukture, ki hrani in vodi vrednostne papirje ruskih in tujih izdajateljev v skupni vrednosti več kot 50 bilijonov rubljev. Rastoči obseg transakcij, ki jih izvaja sistem, ter neprekinjeno povečanje funkcionalnosti zahtevata ohranjanje visoke kakovosti izvorne kode sistemov. Eden izmed orodij za dosego tega cilja je statični analizator SonarQube. V tem članku bomo opisali uspešno izkušnjo brezhibnega uvajanja statičnega analizatorja SonarQube v obstoječe procese razvoja našega oddelka.
Na kratko o oddelku
V naši pristojnosti so naslednji moduli: izplačila strankam NRD, elektronsko poslovanje (EP), obdelava sporočil trgovskega depozitarja (registracija OTC poslov), kanali elektronskega sodelovanja med strankami in NRD ter še mnogo več. Na splošno gre za obsežno delo na tehnični strani operativne dejavnosti. Delujemo na podlagi zahtevkov. Zahteve operaterjev obdelujejo analitiki: zbirajo zahteve naročnika in nam predstavljajo svojo vizijo, kako naj bi to bilo vključeno v program. Nato sledijo standardni postopki: razvoj kode – testiranje – pilotno obratovanje – dostava kode končnemu naročniku.
Zakaj prav SonarQube?
To je prvi izkušnja naše oddelka pri uvedbi platforme za nadzor kakovosti kode – prej smo to počeli ročno, izvajali smo le code review. Vendar pa naraščajoči obseg dela zahteva avtomatizacijo tega procesa. Poleg tega so v ekipi tudi neizkušeni zaposleni, ki niso povsem seznanjeni z notranjimi predpisi razvoja in so nagnjeni k več napakam. Za nadzor kakovosti kode je bilo odločeno, da uvedemo statični analizator. Ker je bil SonarQube že uporabljen v nekaterih sistemih NPD, izbira ni bila težka. Prej so kolegi iz drugih oddelkov s pomočjo SonarQube analizirali kodo mikroservisov v sistemu „Alameda“ (lastni sistem depozitarsko-klirinških evidenc NPD), v CFT (informacijski sistem za vodenje računovodstva, bilanc, pripravo obveznega in notranjega poročanja) ter v nekaterih drugih sistemih. Za eksperimente smo se odločili, da začnemo z brezplačno različico SonarQube. Torej, preidimo k našemu primeru.
Postopek uvajanja
Imamo:
- avtomatska gradnja sistema v TeamCity;
- nastavljen je proces nalaganja kode preko MergeRequest iz feature-vejice v master-vejico v GitLab (postopek razvoja po GitHub Flow);
- SonarQube, nastavljen za analizo kode za sistem DPO po urniku.
Naš cilj: uvesti avtomatsko analizo kode v CI/CD procese DPO.
Treba je nastaviti: postopek avtomatskega preverjanja kode s statičnim analizatorjem pri vsakem MergeRequest v glavno vejo.
T.j. ciljna slika je naslednja: takoj ko razvijalec naloži spremembe v feature-vejo, se izvede avtomatska preverba za nove napake v kodi. Če napak ni, je dovoljeno sprejeti spremembe, sicer bo treba popraviti napake. Že v začetni fazi smo uspeli odkriti določeno število napak v kodi. Sistem ima zelo fleksibilne nastavitve: lahko ga nastavite tako, da deluje pod specifičnimi nalogami razvijalcev, za vsak sistem in stil programiranja.
Nastavitev QualityGate v SonarQube
Analiza QualityGate je stvar koju smo pronašli u mračnim kutcima interneta. U početku smo koristili drugi pristup, složeniji i na neki način ne potpuno ispravan. Prvo smo dvaput pokretali skeniranje preko SonarQube: skenirali smo feature granu i granu u koju smo planirali spojiti feature granu, a zatim smo uspoređivali broj grešaka. Ova metoda nije bila stabilna i nije uvijek davala ispravan rezultat. Onda smo saznali da umjesto dvostrukog pokretanja SonarQube-a možemo postaviti limit na broj dopuštenih grešaka (QualityGate) i analizirati samo onu granu koju šaljemo i uspoređujemo.

I dalje koristimo prilično primitivnu provjeru koda. Treba napomenuti da SonarQube nije kompatibilan s nekim programskim jezicima, uključujući Delphi. Trenutno analiziramo samo PLSql kod za naš sustav.
Radi to ovako:
- Za naš projekt analiziramo samo PL/SQL kod.
- U SonarQube je podešen QualityGate tako da se broj grešaka ne povećava s commitom.
- Broj grešaka prilikom prvog pokretanja iznosio je 229. Ako broj grešaka prilikom commita postane veći, merge nije dozvoljen.
- Nakon ispravka grešaka, QualityGate će se moći ponovno postaviti.
- Također, moguće je dodavati nove stavke za analizu, poput pokrivenosti koda testovima itd.
Shema rada:

U komentarima rada skripte vidi se da se broj grešaka u feature grani nije povećao. Znači, sve je u redu.

Postaje dostupna dugme Merge.

U komentarima rada skripte vidi se da je broj grešaka u feature grani prešao dopuštenu granicu. Znači, sve je loše.

Dugme Merge je crveno. Trenutno ne postoji zabrana za unos promjena po greškovnom kodu, ali se to čini prema procjeni odgovornog programera. U budućnosti se može zabraniti unos takvih commit-a u glavnu granu.

Samostalni rad na greškama
Nakon toga potrebno je provjeriti sve identifikovane greške od strane sustava, jer SonarQube analizira prema svojim strogim standardima. Ono što on smatra greškom, u našem kodu možda zapravo nije greška. Stoga je potrebno provjeriti i označiti, je li to zapravo greška ili je nešto što u našim uvjetima nije potrebno ispraviti. Tako smanjujemo broj grešaka. Tokom vremena sustav će naučiti razumjeti te nijanse.
Kam smo prišli
Naš cilj je bil razumeti, ali se v našem primeru splača prenesti preverjanje kode na avtomatizacijo. In rezultat je presegla pričakovanja. SonarQube nam omogoča delo z jeziki, ki jih potrebujemo, natančno analizira in ima potencial, da se uči iz namigov razvijalcev. Na splošno smo zadovoljni z našim prvim izkušnjam z uporabo SonarQube in nameravamo napredovati v tej smeri. Pričakujemo, da bomo v prihodnosti lahko prihranili več časa in energije pri preverjanju kode ter to naredili bolj kakovostno, z odpravo človeškega faktorja. Morda bomo v procesu odkrili pomanjkljivosti platforme ali pa se bomo še enkrat prepričali, da je to odlična stvar z velikim potencialom.
V tem preglednem članku smo opisali naše srečanje s statičnim analizatorjem SonarQube. Če imate kakšna vprašanja, prosim, pišite v komentarjih. Če vas ta tema zanima, bomo v novi objavi podrobneje opisali, kako vse pravilno nastaviti in napisati kodo, da izvedemo takšno preverjanje.
Avtor besedila:
Izvor: habr.com
