
Rádi bychom se podělili o zkušenosti s implementací platformy pro kontinuální analýzu a měření kvality kódu SonarQube do stávajících vývojových procesů systému DPO (doplňkový systém pro depozitářské a clearingové účetnictví „Alameda“) Národního centrálního depozitáře.
Národní centrální depozitář (skupina společností „Moskva Exchange“) je jednou z klíčových společností finanční infrastruktury, která uchovává a eviduje cenné papíry ruských a zahraničních emitentů v celkové hodnotě přes 50 bilionů rublů. Rostoucí objem operací prováděných systémem a neustálé rozšiřování funkčnosti vyžaduje udržení vysoké kvality zdrojového kódu systémů. Jedním z nástrojů pro dosažení tohoto cíle je statický analyzátor SonarQube. V tomto článku popíšeme úspěšnou zkušenost s bezproblémovou implementací statického analyzátoru SonarQube do stávajících vývojových procesů našeho oddělení.
Krátce o oddělení
Naší kompetencí jsou následující moduly: platby klientům NRD, elektronický dokumentový oběh (EDO), zpracování zpráv obchodního depozitáře (registrace OTC obchodů), kanály elektronické komunikace mezi klienty a NRD a mnoho dalšího. Obecně se jedná o významnou část práce na technické stránce provozní činnosti. Pracujeme na základě žádostí. Žádosti operátorů zpracovávají analytici: shromažďují požadavky zákazníka a představují nám svou vizi toho, jak by to mělo být implementováno v programu. Dále standardní postup: vývoj kódu – testování – pilotní provoz – dodání kódu na produkční prostředí přímo zákazníkovi.
Proč právě SonarQube?
Toto je naše první zkušenost s implementací platformy pro kontrolu kvality kódu — dříve jsme to dělali ručně, prováděli jsme pouze code review. Růst objemu práce však vyžaduje automatizaci tohoto procesu. Kromě toho v týmu jsou i méně zkušení zaměstnanci, kteří nejsou zcela obeznámeni s interními pravidly vývoje a mají tendenci dělat více chyb. Pro kontrolu kvality kódu bylo rozhodnuto implementovat statický analyzátor. Protože SonarQube již byl používán v některých systémech NRD, nebylo třeba dlouho vybírat. Dříve kolegové z jiných oddělení analyzovali jeho pomocí kód mikroslužeb v systému „Alemida“ (vlastní systém depozitárně-k Clearingového účetnictví NRD), v CFT (informační systém pro vedení účetnictví, bilance, přípravu povinné a vnitřní reportace) a v některých dalších systémech. Rozhodli jsme se začít s bezplatnou verzí SonarQube. Tak pojďme k našemu případu.
Proces implementace
Máme:
- automatická sestava systému v TeamCity;
- je nastaven proces nahrávání kódu prostřednictvím MergeRequest z feature-branch do master-branch v GitLab (vývojový proces podle GitHub Flow);
- SonarQube, nastavený pro analýzu kódu pro systém DPO podle rozvrhu.
Naším cílem: implementovat automatickou analýzu kódu do CI/CD procesů DPO.
Je třeba nastavit: proces automatické kontroly kódu statickým analyzátorem při každém MergeRequestu do hlavní větve.
T.j. cílový obraz je následující: jakmile vývojář nahraje změny do feature-branch, spustí se automatická kontrola na výskyt nových chyb v kódu. Pokud žádné chyby nejsou, mohou být změny přijaty, jinak je třeba chyby opravit. Již v počátečním stádiu jsme mohli identifikovat určité množství chyb v kódu. Systém má velmi flexibilní nastavení: může být nakonfigurován tak, aby pracoval na konkrétní úkoly vývojářů, pro každý systém a styl programování.
Nastavení QualityGate v SonarQube
Analýza QualityGate je věc, kterou jsme objevili v hlubinách internetu. Zpočátku jsme používali jiný přístup, složitější a z určitého hlediska ne zcela správný. Nejprve jsme dvakrát spustili skenování přes SonarQube: skenovali jsme feature-branch a branch, do které jsme plánovali sloučit feature-branch, a poté porovnávali počet chyb. Tato metoda se nevyznačovala stabilitou a ne vždy poskytovala správné výsledky. Poté jsme zjistili, že místo dvojího spuštění SonarQube lze nastavit limit na počet povolených chyb (QualityGate) a analyzovat pouze tu větev, kterou vkládáme a porovnáváme.

Zatím používáme poměrně primitivní kontrolu kódu. Je třeba poznamenat, že SonarQube není kompatibilní s některými programovacími jazyky, včetně Delphi. V současné době analyzujeme pouze kód PLSQL pro náš systém.
Funguje to takto:
- Pro náš projekt analyzujeme pouze kód PL/SQL.
- V SonarQube je nastaven QualityGate tak, aby se počet chyb nezvyšoval s každým commitem.
- Při prvním spuštění jsme měli 229 chyb. Pokud se počet chyb při commitu zvyšuje, merge není povolen.
- Dále, pokud se chyby opraví, bude možné znovu nastavit QualityGate.
- Také je možné přidávat nové položky k analyzování, například pokrytí kódu testy atd.
Schéma práce:

V komentářích skriptu je vidět, že počet chyb ve feature-branch se nezvýšil. To znamená, že vše je v pořádku.

Je dostupné tlačítko Merge.

V komentářích skriptu je vidět, že počet chyb ve feature-branch překročil povolený limit. To znamená, že je to špatné.

Tlačítko Merge je červené. V tuto chvíli neexistuje zákaz pro odesílání změn s chybovým kódem, ale toto se provádí na uvážení zodpovědného vývojáře. Do budoucna je možné zakázat přidávání takových commitů do hlavní větve.

Samostatná práce na chybách
Dále je nutné zkontrolovat všechny chyby, které systém zjistil, protože SonarQube analyzuje podle svých přísných standardů. To, co považuje za chybu, může ve skutečnosti v našem kódu být v pořádku. Proto je třeba zkontrolovat a poznamenat, zda se skutečně jedná o chybu, nebo zda není nutné nic opravovat v našich podmínkách. Tímto způsobem snižujeme počet chyb. S časem se systém naučí chápat tyto nuance.
K čemu jsme došli
Naším cílem bylo pochopit, zda má smysl automatizovat kontrolu kódu v našem případě. A výsledek naplnil očekávání. SonarQube nám umožňuje pracovat s potřebnými jazyky, nabízí velmi kvalitní analýzu a má potenciál učit se na základě podnětů od vývojářů. Celkově jsme spokojeni s našimi prvními zkušenostmi s používáním SonarQube a plánujeme v této oblasti dále růst. Očekáváme, že v budoucnu ušetříme více času a sil na kontrolu kódu a zlepšíme její kvalitu tím, že odstraníme lidský faktor. Možná při tom objevíme nedostatky platformy, nebo naopak znovu potvrdíme, že je to skvělá věc s velkým potenciálem.
V tomto přehledovém článku jsme hovořili o našem seznámení se statickým analyzátorem SonarQube. Pokud máte jakékoliv dotazy, prosím, pište do komentářů. Pokud vás toto téma zajímá, v novém příspěvku podrobněji popíšeme, jak správně vše nastavit a napsat kód, aby bylo možné provádět podobnou kontrolu.
Autor textu:
Zdroj: habr.com
