
Vi vill dela med oss av vÄr erfarenhet av att implementera plattformen för kontinuerlig analys och mÀtning av kodkvalitet SonarQube i de befintliga utvecklingsprocesserna för DPO-systemet (komplettering till depÄ- och clearingredovisningssystemet "Alameda") vid den nationella avrÀkningsdeponeringen.
Den nationella avrÀkningsdeponeringen (gruppen av företag "Moskva-börsen") Àr ett av de nyckelföretag inom den finansiella infrastrukturen, som förvarar och redovisar vÀrdepapper frÄn ryska och utlÀndska utgivare till ett vÀrde av över 50 biljoner rubel. Det vÀxande antalet transaktioner som systemet utför, samt den kontinuerliga utvecklingen av funktionalitet, krÀver att vi upprÀtthÄller en hög kodkvalitet i systemen. Ett av verktygen för att nÄ detta mÄl Àr den statiska kodanalysatorn SonarQube. I denna artikel kommer vi att beskriva vÄr framgÄngsrika erfarenhet av sömlös implementering av den statiska analysatorn SonarQube i de befintliga utvecklingsprocesserna i vÄr avdelning.
Kort om avdelningen
VĂ„ra kompetenser omfattar följande moduler: utbetalningar till NRD:s kunder, elektronisk dokumenthantering (EDO), behandling av meddelanden frĂ„n handelsdepotet (registrering av OTC-transaktioner), elektroniska interaktionskanaler mellan kunder och NRD, och mycket mer. Sammanfattningsvis en stor mĂ€ngd arbete med den tekniska sidan av den operationella verksamheten. Vi arbetar pĂ„ begĂ€ran. BegĂ€rningar frĂ„n operatörerna behandlas av analytiker: de samlar krav frĂ„n kunden och presenterar sin vision för hur detta ska implementeras i programmet. DĂ€refter följer en standardprocess: kodutveckling â testning â pilotdrift â leverans av koden till produktionsmiljön till den direkta bestĂ€llaren.
Varför just SonarQube?
Det hĂ€r Ă€r vĂ„r avdelnings första erfarenhet av att implementera en plattform för kodkvalitetskontroll â tidigare gjorde vi detta manuellt genom att enbart göra code review. Men den vĂ€xande arbetsvolymen krĂ€ver automatisering av denna process. Dessutom finns det nyare medarbetare i teamet som inte Ă€r helt bekanta med interna utvecklingsregler och tenderar att göra fler misstag. För kodkvalitetskontroll har vi beslutat att införa en statisk analysator. Eftersom SonarQube redan anvĂ€nts i vissa system inom NDR, var det ingen lĂ„ng valprocess. Tidigare har kollegor frĂ„n andra avdelningar analyserat koden för mikrotjĂ€nster i systemet "Alameda" (NDR:s egen system för deponerings- och clearingredovisning), i CFT (informationssystem för bokföring, balansrĂ€kning, samt förberedelse av obligatoriska och interna rapporter), och i nĂ„gra andra system. För experimenten beslöt vi oss för att börja med den kostnadsfria versionen av SonarQube. LĂ„t oss nu gĂ„ vidare till vĂ„rt fall.
Implementeringsprocess
Vi har:
- automatisk systemuppbyggnad i TeamCity;
- processen för att ladda upp kod via MergeRequest frÄn feature-grenen till master-grenen i GitLab (utvecklingsprocess enligt GitHub Flow) Àr instÀlld;
- SonarQube, konfigurerat för att analysera koden för DPO-systemet enligt schema.
VÄrt mÄl: införa automatiserad kodanalys i CI/CD-processerna för DPO.
Behöver stÀllas in: processen för automatisk kontroll av koden med den statiska analysatorn vid varje MergeRequest i huvudgrenen.
Det vill sÀga, den önskade bilden Àr följande: sÄ snart en utvecklare laddar upp Àndringar i feature-grenen, startar en automatisk kontroll för att upptÀcka nya fel i koden. Om inga fel finns tillÄts godkÀnnande av Àndringarna, annars mÄste felen ÄtgÀrdas. Redan i det tidiga skedet har vi kunnat identifiera ett visst antal fel i koden. Systemet har mycket flexibla instÀllningar: det kan anpassas sÄ att det fungerar för specifika uppgifter, för varje system och programmeringsstil.
InstÀllning av QualityGate i SonarQube
Analys av QualityGate Àr nÄgot vi stötte pÄ i djupet av internet. Ursprungligen anvÀnde vi en annan, mer komplicerad och pÄ vissa sÀtt felaktig metod. Först körde vi en skanning genom SonarQube tvÄ gÄnger: vi skannade feature-grenen och grenen dit vi planerade att slÄ samman feature-grenen, och jÀmförde sedan antalet fel. Denna metod var inte stabil och gav inte alltid rÀtt resultat. Sedan fick vi veta att man istÀllet för att köra SonarQube tvÄ gÄnger kan sÀtta en grÀns för antal tillÄtna fel (QualityGate) och analysera endast den gren som man laddar upp och jÀmför.

För nÀrvarande anvÀnder vi fortfarande en ganska primitiv kodgranskning. Det bör noteras att SonarQube inte Àr kompatibelt med vissa programmeringssprÄk, inklusive Delphi. För nÀrvarande analyserar vi endast PLSql-kod för vÄrt system.
Det fungerar sÄ hÀr:
- Vi analyserar endast PL/SQL-kod för vÄrt projekt.
- QualityGate i SonarQube Àr instÀllt sÄ att antalet fel inte ökar med varje commit.
- Antalet fel vid första körningen blev 229. Om antalet fel vid commit ökar, sÄ tillÄts inte sammanslagning.
- Vid ÄtgÀrdande av fel kan QualityGate stÀllas om.
- Det gÄr ocksÄ att lÀgga till nya punkter för analys, till exempel kodtÀckning med tester osv.
Arbetsflöde:

I kommentarerna frÄn skriptets arbete syns det att antalet fel i feature-grenen inte har ökat. SÄ allt Àr bra.

Knappen Merge blir tillgÀnglig.

I kommentarerna frÄn skriptets arbete syns det att antalet fel i feature-grenen har blivit fler Àn tillÄtet. SÄ det Àr dÄligt.

Merge-knappen Àr röd. För nÀrvarande finns det inget förbud mot att ladda upp Àndringar med felaktig kod, men det görs pÄ ansvarig utvecklares eget godtycke. I framtiden kan sÄdana commits förbjudas i huvudgrenen.

SjÀlvstÀndigt arbete med felen
Det Àr nödvÀndigt att kontrollera alla fel som systemet identifierat, eftersom SonarQube analyserar efter sina strikta standarder. Det som anses vara ett fel av SonarQube, kan i verkligheten i vÄr kod sÄvÀl vara en icke-frÄga. DÀrför mÄste vi kontrollera och notera om detta Àr ett verkligt fel, eller om det som vi har verkar vara i god ordning. PÄ sÄ sÀtt minskar vi antalet fel. Med tiden kommer systemet att lÀra sig att förstÄ dessa nyanser.
Vad har vi kommit fram till
VÄrt mÄl var att förstÄ om det var rimligt att automatisera kodgranskning i vÄrt fall. Och resultatet har övertrÀffat förvÀntningarna. SonarQube lÄter oss arbeta med de sprÄk vi behöver, gör en ganska noggrann analys och har potentialen att lÀra sig av utvecklarnas tips. Sammanfattningsvis Àr vi nöjda med vÄr första erfarenhet av att anvÀnda SonarQube och planerar att fortsÀtta utvecklas inom detta omrÄde. Vi förvÀntar oss att vi i framtiden kommer att kunna spara mer tid och kraft pÄ kodgranskning och göra den av högre kvalitet genom att eliminera den mÀnskliga faktorn. Kanske kommer vi under processen att upptÀcka plattformens brister, eller Ä andra sidan, bli övertygade om att det verkligen Àr nÄgot bra med stor potential.
I denna översiktsartikel har vi berÀttat om vÄr bekantskap med den statiska analysatorn SonarQube. Om du har nÄgra frÄgor, skriv gÀrna i kommentarerna. Om du Àr intresserad av detta Àmne, kommer vi i en ny publikation att mer detaljerat beskriva hur man korrekt stÀller in allt och skriver kod för att göra en sÄdan kontroll.
Textens författare:
KĂ€lla: habr.com
