
Želimo podijeliti iskustvo implementacije platforme za kontinuiranu analizu i mjerenje kvalitete koda SonarQube u postojeće procese razvoja sustava DPO (dopuna sustava depozitarnog i klirinškog obračuna „Alameda”) Nacionalnog klirinškog depozitara.
Nacionalni klirinški depozitar (grupa kompanija „Moskovska burza”) jedna je od ključnih kompanija financijske infrastrukture, čuva i evidentira vrijednosne papire ruskih i stranih emitenta u iznosu većem od 50 trilijuna RUB. Rastući obujam operacija koje sustav provodi, kao i kontinuirano povećavanje funkcionalnosti zahtijevaju održavanje visoke kvalitete izvornih kodova sustava. Jedan od alata za postizanje ovog cilja je statički analitičar SonarQube. U ovom članku opisujemo uspješno iskustvo neprekidne implementacije statičkog analitičara SonarQube u postojeće procese razvoja našeg odjela.
Kratko o odjelu
U našoj nadležnosti su sljedeći moduli: isplate klijentima NRD-a, elektronička razmjena dokumenata (ERD), obrada poruka trgovačkog depozitara (registracija izvanburzovnih transakcija), kanali elektroničke interakcije između klijenata i NRD-a i mnogo toga drugog. Uglavnom, veliki dio posla na tehničkoj strani operativnog poslovanja. Radimo na temelju zahtjeva. Zahtjeve operatera obrađuju analitičari: oni prikupljaju zahtjeve klijenata i predstavljaju nam svoju viziju kako to treba biti implementirano u programu. Nakon toga slijedi standardna shema: razvoj koda – testiranje – pilotska eksploatacija – isporuka koda na produkcijski kontur izravnom naručitelju.
Zašto baš SonarQube?
Ovo je prvo iskustvo našeg odjela u implementaciji platforme za kontrolu kvalitete koda – ranije smo to radili ručno, provodili smo samo kod pregled. Međutim, rastući volumen posla zahtijeva automatizaciju ovog procesa. Osim toga, u timu imamo i neiskusne zaposlenike koji nisu u potpunosti upoznati s internim pravilnicima razvoja i skloni su činiti više grešaka. Odluka je donesena da se za kontrolu kvalitete koda implementira statički analizator. Kako je SonarQube već korišten u nekim sustavima NRD-a, dugo se nije razmišljalo. Ranije su kolege iz drugih odjela analizirale uz pomoć njega kod mikroservisa u sustavu "Alameda" (vlastiti sustav depozitarnog-kirinskog računovodstva NRD-a), u CFT-u (informacijski sustav za vođenje računovodstva, bilance, priprema obvezne i interne izvještaje) i u još nekim drugim sustavima. Za eksperiment odlučili smo početi s besplatnom verzijom SonarQube-a. Dakle, pređimo na naš slučaj.
Proces implementacije
Imamo:
- automatska izgradnja sustava u TeamCity-u;
- postavljen proces slanja koda putem MergeRequest-a iz feature grane u master granu u GitLab-u (proces razvoja prema GitHub Flow-u);
- SonarQube, postavljen za analizu koda za sustav DPO prema rasporedu.
Naš cilj: implementirati automatsku analizu koda u CI/CD procese DPO.
Treba postaviti: proces automatske provjere koda pomoću statičkog analizatora pri svakom MergeRequest-u u glavnu granu.
To jest, ciljana slika je sljedeća: čim programer pošalje promjene u feature granu, pokreće se automatska provjera kako bi se utvrdilo ima li novih grešaka u kodu. Ako grešaka nema, promjene se mogu prihvatiti, inače će biti potrebno ispraviti greške. Već u početnoj fazi uspjeli smo identificirati određeni broj grešaka u kodu. Sustav ima vrlo fleksibilne postavke: može se konfigurirati na način da radi prema specifičnim zadacima programera, za svaku sustav i stil programiranja.
Postavka QualityGate-a u SonarQube-u
Analiza QualityGate predstavlja koncept koji smo pronašli u dubinama interneta. Isprva smo koristili drugačiji pristup, složeniji i s neke strane ne potpuno ispravan. Prvo smo dvaput pokretali skeniranje putem SonarQube-a: skenirali smo feature granu i granu u koju smo planirali integirati feature granu, a zatim smo uspoređivali broj grešaka. Ova metoda nije bila stabilna i nije uvijek davala točne rezultate. 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 dodajemo 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:
- Analiziramo samo PL/SQL kod za naš projekt.
- U SonarQube-u je QualityGate postavljen 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 moguće je ponovno postaviti QualityGate.
- Također je moguće dodavati nove stavke za analizu, na primjer, pokrivenost koda testovima itd.
Shema rada:

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

Dostupna je gumb Merge.

U komentarima rada skripte vidljivo je da je broj grešaka u feature-grani premašio dozvoljeno. Znači, sve je LOŠE.

Gumb Merge je crven. Trenutno ne postoji zabrana za dodavanje promjena s greškom kodom, ali to se radi prema nahođenju 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 greške koje je sustav otkrio jer SonarQube analizira prema svojim strogim standardima. Ono što smatra greškom možda u našem kodu nije greška. Stoga je potrebno provjeriti i označiti, doista li je to greška ili ono što nije potrebno ispraviti u našim uvjetima. Na taj način smanjujemo broj grešaka. S vremenom će se sustav naučiti razumjeti te nijanse.
Do čega smo došli
Naš cilj je bio razumjeti je li u našem slučaju opravdano prevesti provjeru koda na automatizaciju. I rezultat je ispunio očekivanja. SonarQube nam omogućuje rad s jezicima koji su nam potrebni, provodi prilično kvalitetnu analizu i ima potencijal učiti na savjetima programera. U cjelini, zadovoljni smo našim prvim iskustvom s SonarQube-om i planiramo se dalje razvijati u tom smjeru. Očekujemo da ćemo u budućnosti uštedjeti više vremena i truda na provjeri koda i učiniti je kvalitetnijom, uklanjajući ljudski faktor. Moguće je da ćemo u procesu otkriti nedostatke platforme ili, suprotno, ponovo se uvjeriti da je to sjajna stvar s velikim potencijalom.
U ovom pregledu smo pisali o našem upoznavanju sa statičkim analizatorom SonarQube. Ako imate pitanja, slobodno ih postavite u komentarima. Ako vas zanima ova tema, u novoj publikaciji ćemo detaljnije opisati kako pravilno sve postaviti i napisati kod za sličnu provjeru.
Autor teksta:
Izvor: habr.com
