Jak wdrożyliśmy SonarQube i dostrzegliśmy jego ogromny potencjał

Jak wdrożyliśmy SonarQube i dostrzegliśmy jego ogromny potencjał

Chcemy podzielić się doświadczeniem wdrożenia platformy do ciągłej analizy i mierzenia jakości kodu SonarQube w istniejące procesy rozwoju systemu DPO (uzupełnienie systemu depozytowo-rozliczeniowego „Alameda”) Krajowego Depozytu Papierów Wartościowych.

Krajowy Depozyt Papierów Wartościowych (grupa firm „Giełda Moskiewska”) jest jedną z kluczowych firm infrastruktury finansowej, przechowując i rejestrując papiery wartościowe emisji krajowych i zagranicznych o łącznej wartości ponad 50 bilionów rubli. Rosnąca liczba operacji realizowanych przez system oraz ciągły rozwój funkcjonalności wymagają utrzymania wysokiej jakości kodu źródłowego systemów. Jednym z narzędzi do osiągnięcia tego celu jest statyczny analizator SonarQube. W tym artykule opiszemy udane doświadczenie bezproblemowego wdrożenia statycznego analizatora SonarQube w istniejące procesy rozwoju naszego działu.

Krótko o dziale

W naszej kompetencji znajdują się następujące moduły: wypłaty dla klientów KDPW, elektroniczny obrót dokumentami (EOD), przetwarzanie wiadomości repozytoriów handlowych (rejestracja transakcji OTC), kanały elektronicznej współpracy między klientami a KDPW i wiele więcej. Ogólnie rzecz biorąc, to duża część pracy nad techniczną stroną działalności operacyjnej. Pracujemy na podstawie zgłoszeń. Zgłoszenia operatorów są przetwarzane przez analityków: zbierają oni wymagania klienta i przedstawiają nam swoją wizję, jak powinno to zostać wprowadzone do programu. Następnie standardowy schemat: rozwój kodu – testowanie – eksploatacja próbna – dostarczenie kodu do produkcyjnego obszaru bezpośredniemu zleceniodawcy.

Dlaczego właśnie SonarQube?

To doświadczenie naszego działu w implementacji platformy do kontroli jakości kodu – wcześniej robiliśmy to ręcznie, przeprowadzając jedynie przegląd kodu. Jednak rosnąca ilość pracy wymaga automatyzacji tego procesu. Dodatkowo w zespole są mniej doświadczone osoby, które nie są w pełni zaznajomione z wewnętrznymi regulacjami dotyczącymi rozwoju i mają skłonność do popełniania większej liczby błędów. W celu kontroli jakości kodu postanowiono wprowadzić analizator statyczny. Ponieważ SonarQube był już stosowany w niektórych systemach NPD, nie trzeba było długo wybierać. Wcześniej koledzy z innych działów analizowali przy jego pomocy kod mikrousług w systemie „Alameda” (własny system depozytowo-rozliczeniowy NPD), w CFT (system informacyjny do prowadzenia księgowości, bilansu, przygotowywania obowiązkowych i wewnętrznych raportów), a także w niektórych innych systemach. Na potrzeby eksperymentów postanowiliśmy rozpocząć od bezpłatnej wersji SonarQube. Przejdźmy zatem do naszego przypadku.

Proces wdrożenia

Mamy:

  • automatyczne budowanie systemu w TeamCity;
  • ustawiony proces wgrywania kodu przez MergeRequest z gałęzi feature do gałęzi master w GitLab (proces rozwoju zgodnie z GitHub Flow);
  • SonarQube, skonfigurowany do analizy kodu dla systemu DPO według harmonogramu.

Naszym celem: wprowadzić automatyczną analizę kodu do procesów CI/CD DPO.

Musimy ustawić: proces automatycznej weryfikacji kodu przez analizator statyczny przy każdym MergeRequest do głównej gałęzi.

Tj. docelowy obraz jest następujący: gdy tylko programista wprowadza zmiany w gałęzi feature, uruchamiana jest automatyczna weryfikacja pod kątem nowych błędów w kodzie. Jeśli błędów nie ma, zmiany mogą zostać zaakceptowane, w przeciwnym razie będą musiały zostać naprawione. Już na wczesnym etapie udało nam się wykryć pewną liczbę błędów w kodzie. System ma bardzo elastyczne ustawienia: można go konfigurować tak, aby działał pod konkretne zadania programistów, dla każdego systemu i stylu programowania.

Konfiguracja QualityGate w SonarQube

Analiza QualityGate to coś, co odkryliśmy w zakamarkach internetu. Początkowo używaliśmy innego, bardziej skomplikowanego podejścia, które w pewnym sensie nie było całkiem poprawne. Najpierw dwukrotnie uruchamialiśmy skanowanie przez SonarQube: skanowaliśmy gałąź funkcjonalną i gałąź, do której chcieliśmy zintegrować gałąź funkcjonalną, a następnie porównywaliśmy liczbę błędów. Ta metoda nie była stabilna i nie zawsze dawała poprawne wyniki. Potem dowiedzieliśmy się, że zamiast podwójnego uruchomienia SonarQube, można ustawić limit na dopuszczalną liczbę błędów (QualityGate) i analizować tylko tę gałąź, którą wdrażasz i porównujesz.

Jak wdrożyliśmy SonarQube i dostrzegliśmy jego ogromny potencjał

Na razie stosujemy dość prymitywną kontrolę kodu. Warto zauważyć, że SonarQube jest niekompatybilny z niektórymi językami programowania, w tym Delphi. Obecnie w naszym systemie analizowany jest tylko kod PLSql.

Działa to w ten sposób:

  • Analizujemy dla naszego projektu tylko kod PL/SQL.
  • W SonarQubeQualityGate jest ustawiony tak, aby liczba błędów nie wzrastała przy commicie.
  • Podczas pierwszego uruchomienia liczba błędów wyniosła 229. Jeśli liczba błędów przy commicie wzrasta, to merge nie jest dozwolony.
  • Następnie, pod warunkiem naprawienia błędów, można będzie ponownie skonfigurować QualityGate.
  • Można również dodawać nowe punkty do analizy, na przykład pokrycie kodu testami itd.

Schemat działania:

Jak wdrożyliśmy SonarQube i dostrzegliśmy jego ogromny potencjał

W komentarzach dotyczących pracy skryptu widać, że liczba błędów w gałęzi funkcjonalnej nie wzrosła. Zatem wszystko jest w porządku.

Jak wdrożyliśmy SonarQube i dostrzegliśmy jego ogromny potencjał

Pojawia się przycisk Merge.

Jak wdrożyliśmy SonarQube i dostrzegliśmy jego ogromny potencjał

W komentarzach dotyczących pracy skryptu widać, że liczba błędów w gałęzi funkcjonalnej przekroczyła dopuszczalną wartość. Zatem jest źle.

Jak wdrożyliśmy SonarQube i dostrzegliśmy jego ogromny potencjał

Przycisk Merge jest czerwony. Na ten moment nie ma zakazu wprowadzania zmian w kodzie z błędami, ale to zależy od uznania odpowiedzialnego dewelopera. W przyszłości można zakazać wprowadzania takich commitów do głównej gałęzi.

Jak wdrożyliśmy SonarQube i dostrzegliśmy jego ogromny potencjał

Samodzielna praca nad błędami

Następnie należy sprawdzić wszystkie błędy wykryte przez system, ponieważ SonarQube analizuje według własnych surowych standardów. To, co uznaje za błąd, w naszym kodzie może nie być błędem. Dlatego trzeba sprawdzić i zaznaczyć, czy to rzeczywiście błąd, czy też nie ma potrzeby dokonania poprawek w naszych warunkach. W ten sposób redukujemy liczbę błędów. Z czasem system nauczy się rozumieć te niuanse.

Do czego doszliśmy

Naszym celem było zrozumieć, czy warto w naszym przypadku automatyzować kontrolę kodu. I wynik spełnił oczekiwania. SonarQube umożliwia nam pracę z potrzebnymi językami, przeprowadza dość szczegółową analizę i ma potencjał uczenia się na podstawie wskazówek programistów. Ogólnie rzecz biorąc, jesteśmy zadowoleni z naszego pierwszego doświadczenia z SonarQube i planujemy rozwijać się w tym kierunku dalej. Oczekujemy, że w przyszłości będziemy mogli zaoszczędzić więcej czasu i wysiłku na kontrolę kodu, a także uczynić ją bardziej jakościową, eliminując czynnik ludzki. Być może w trakcie odkryjemy wady platformy lub, przeciwnie, jeszcze raz przekonamy się, że to świetna rzecz z dużym potencjałem.

W tym przeglądowym artykule opowiedzieliśmy o naszym zapoznaniu się z analizatorem staticznym SonarQube. Jeśli masz pytania, pisz proszę w komentarzach. Jeśli interesuje Cię ten temat, w nowej publikacji dokładniej opisujemy, jak prawidłowo wszystko skonfigurować i napisać kod, aby przeprowadzić tego typu kontrolę.

Autor tekstu: atanya

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster