
Soovime jagada oma kogemusi SonarQube'i platvormi juurutamisel, mis võimaldab pidevat koodi kvaliteedi analüüsi ja mõõtmist olemasolevates DPO (deposiit- ja kliiringusüsteemi "Alameda" täiendus) arendusprotsessides Rahvuslikus Arveldusdepoos.
Rahvuslik Arveldusdepoo (Moskva Börsi grupi ettevõte) on üks finantsinfrastruktuuri võtmeettevõtteid, mis hoiab ja arvestab Venemaa ja välismaiste emitentide väärtpabereid kogusummas üle 50 triljoni rubla. Süsteemi teostatavate operatsioonide kasvav maht ja pidev funktsionaalsuse täiustamine nõuavad süsteemide lähtekoodi kõrge kvaliteedi säilitamist. Üks tööriist selle eesmärgi saavutamiseks on staatiline analüsaator SonarQube. Selles artiklis kirjeldame sujuvat SonarQube'i staatilise analüsaatori juurutamise kogemust meie osakonna olemasolevates arendusprotsessides.
Osakonnast lühidalt
Meie kompetentsi kuuluvad järgmised moodulid: NRD klientidele maksete teostamine, elektrooniline dokumendihaldus (EDO), kauplemisdepoo sõnumite töötlemine (ülevaatamata tehingute registreerimine), elektroonilise suhtluse kanalid klientide ja NRD vahel ning palju muud. Kokkuvõttes on meil suur koormus töö tehnilise poolega operatiivtegevuses. Me tööleme vastavalt taotlustele. Operatsioonide taotlusi töötlevad analüütikud: nad koguvad tellija nõudmisi ja esitavad meile oma nägemuse sellest, kuidas see programmisesse peaks mahtuma. Edasi rakendatakse standardset skeemi: koodi väljatöötamine – testimine – katsekäitamine – koodi tarnimine otse tellijale tootmisprotsessi.
Miks just SonarQube?
See on meie osakonna esimene kogemus kvaliteedikontrolli platvormi rakendamisel - varem tegime seda käsitsi, tehes ainult koodile ülevaate. Kuid kasvav töömaht nõuab selle protsessi automatiseerimist. Lisaks on meeskonnas ka kogenematuid töötajaid, kes ei tunne arenduse sisereegleid ja kipuvad rohkem vigu tegema. Kvaliteedikontrolli jaoks otsustati rakendada staatilist analüsaatorit. Kuna SonarQube oli juba kasutusel mõnedes NRD süsteemides, ei pidanud kaua valima. Varasemad kolleegid analüüsisid selle abil mikroteenuste koodi süsteemis „Alameda” (NRD enda depoo-kliiringu arvestuse süsteem), CFT-s (infosüsteem raamatupidamise, bilansi ning kohustusliku ja sisearuande koostamiseks) ja mõnedes teistes süsteemides. Katsetamiseks otsustasime alustada SonarQube tasuta versioonist. Nii et liigume edasi meie juhtumiga.
Rakendamisprotsess
Meil on:
- automaatne süsteemi kogumine TeamCitys;
- on seadistatud koodi laadimise protsess MergeRequest'ide kaudu feature-haru master-haru GitLabis (arenduse protsess vastavalt GitHub Flow'le);
- SonarQube, seadistatud DPO süsteemi koodi analüüsimiseks ajakava järgi.
Meie eesmärk: rakendada automaatne koodi analüüs CI/CD protsessides DPO-st.
Peame seadistama: staatilise analüsaatori automaatne koodi kontrollimise protsess iga MergeRequest'i puhul põhiharu.
T.e. sihtruum on järgmine: kui arendaja laadib muudatused feature-harusse, käivitatakse automaatne kontroll uute vigade leidmiseks koodis. Kui vigu ei ole, on muudatuste vastuvõtmine lubatud, vastasel juhul tuleb vead parandada. Juba algusest suutsime tuvastada teatud arvu vigu koodis. Süsteemil on väga paindlikud seaded: seda saab konfigureerida nii, et see töötaks konkreetsete arendajate ülesannete, iga süsteemi ja programmeerimisstiili järgi.
QualityGate seadistamine SonarQubes
QualityGate analüüs on asi, mille oleme leidnud interneti sügavadest nurkadest. Alguses kasutasime me teistsugust lähenemist, mis oli keerulisem ja mingil viisil mitte just õige. Esiteks käivitasime skaneerimise SonarQube'is kaks korda: skaneerisime feature-haru ja haru, kuhu plaanisime feature-haru liita, ning seejärel võrdlesime vigade arvu. See meetod ei olnud stabiilne ja ei andnud alati õiget tulemust. Siis saime teada, et kahe skaneerimise asemel saab määrata vigade lubatud piiri (QualityGate) ja analüüsida ainult seda haru, mida sa laadid ja mille võrreldakse.

Praegu kasutame me endiselt üsna primitiivset koodikontrolli. Tasub märkida, et SonarQube ei ühildu mõnede programmeerimiskeeltega, sealhulgas Delphiga. Hetkel analüütime meie süsteemis ainult PLSql koodi.
See töötab nii:
- Me analüüsime meie projekti jaoks ainult PL/SQL koodi.
- SonarQube'is on QualityGate seadistatud nii, et vigade arv ei suureneks koos commit'iga.
- Esimese käivitamise ajal oli meie vigade arv 229. Kui commit'i ajal vigade arv suureneb, siis merge ei ole lubatud.
- Edasi, tingimusel et vead parandatakse, saab QualityGate'i uuesti seadistada.
- Samuti saab lisada uusi analüüsi punkte, näiteks koodi testide katvust jne.
Töö skeem:

Skripti kommentaarides on näha, et feature-haru vigade arv ei ole suurenenud. Seega on kõik korras.

Kättesaadav on nupp Merge.

Skripti kommentaarides on näha, et feature-haru vigade arv on ületanud lubatud piiri. Seega on kõik HALVASTI.

Merge nupp on punane. Praegu ei ole keeldu, et lisada muudatusi vigase koodi tõttu, kuid see toimub vastutava arendaja otsusel. Tulevikus võib keelata selliste commit'ide tegemise põhiharusse.

Töötamine vigadega iseseisvalt
Seejärel on vajalik kontrollida kõiki süsteemi tuvastatud vigu, kuna SonarQube analüüsib oma rangete standardite järgi. Mis tahes asja, mida ta peab vipuks, ei pruugi meie koodis olla tõeline viga. Seetõttu on vajalik kontrollida ja märkida, kas see on tõeliselt viga või pole meie tingimustes parandamiseks vajadust. Nii vähendame vigade arvu. Aja jooksul õpib süsteem neid nüansse mõistma.
Kuhu me jõudsime
Meie eesmärgiks oli mõista, kas on mõttekas automatiseerimise raames koodi kontrolli tõlkida. Ja tulemus ületas ootusi. SonarQube võimaldab meil töötada vajalike keeltes, teeb üsna kvaliteetset analüüsi ja omab potentsiaali õppida arendajate soovitustest. Üldiselt oleme rahul oma esimese kogemusega SonarQube'iga ja plaanime selles suunas edasi areneda. Ootame, et tulevikus suudame rohkem aega ja energiat koodi kontrollimiseks kokku hoida ning muuta selle kvaliteet paremaks, vähendades inimfaktorit. Võimalik, et protsessi käigus avastame platvormi puudusi või vastupidi, kinnitame veel kord, et see on äge vahend suure potentsiaaliga.
Selles ülevaateartiklis rääkisime oma tutvumisest staatilise analüsaatori SonarQube'iga. Kui teil on küsimusi, kirjutage julgelt kommentaarides. Kui see teema huvitab teid, siis järgmises postituses räägime juba põhjalikumalt, kuidas kõik õigesti seadistada ja kirjutada koodi, et sarnast kontrolli teostada.
Teksti autor:
Allikas: habr.com
