SonarQube, czyli jak zadbać w firmie o jakość i bezpieczeństwo kodu?

Analiza jakości oraz bezpieczeństwa kodu to bardzo ważna część programowania. Jej zautomatyzowanie umożliwia użycie specjalnych narzędzi, których przykładem może być SonarQube. W jakich projektach może się przydać? Jakie są wady i zalety stosowania SonarQube? Odpowiedzi na te i inne pytania znajdują się w niniejszym artykule.

 

 

SonarQube – podstawowe funkcje

 

Platforma SonarQube stanowi narzędzie służące do ciągłej analizy statycznej kodu pod względem jakości. Jej stosowanie pozwala na automatyczne wykrywanie błędów, słabych punktów, które obniżają bezpieczeństwo oraz tzw. code smells. Narzędzie potrafi także odnaleźć zdublowane fragmenty kodu, co umożliwia zredukowanie jego ilości. Główne korzyści wynikające ze stosowania SonarQube to poprawa jakości i bezpieczeństwa tworzonego kodu, a także kontrola oraz zmniejszenie długu technologicznego.

Podstawowe funkcje SonarQube to analiza kodu źródłowego, w wyniku której przedstawiona zostaje ogólna ocena jakości oraz lista przypadków, w których zdefiniowane wcześniej reguły zostały złamane. Mogą to być sztywne reguły, które składają się na nieedytowalny profil Sonar way lub własne standardy określone w ramach Quality Gate.

Podstawowa funkcjonalność SonarQube dotyczy również bezpieczeństwa tworzonych aplikacji. Dedykowany moduł jest w stanie prześledzić ścieżkę, którą pokonują potencjalnie zmanipulowane przez atakującego dane i dzięki temu wykryć wrażliwe miejsca w kodzie, które są narażone na atak. Narzędzie zapewnia również wsparcie dla wielu znanych API, które mogą być zarówno źródłem, jak i celem potencjalnego ataku. SonarQube umożliwia konfigurację pod kątem pracy z autorskimi frameworkami, np. w zakresie sanityzacji kodu. Dzięki temu możliwa jest ochrona przed atakami typu SQL Injection, Code Injection czy Server-Side Request Forgery (SSRF).

 

 

W jakich projektach może przydać się SonarQube?

 

SonarQube to narzędzie, które może przydać sie zarówno w przypadku małych, jak i dużych projektów. W przypadku tych drugich narzędzie bada jakość kodu i wskazuje błędy, które mogą wynikać z przyzwyczajeń poszczególnych programistów i dodatkowo zaciemniać strukturę kodu. Platforma obsługuje prawie 30 języków, w tym między innymi Java, PL/SQL, Cobol, C/C++ i C#. Co więcej, SonarQube dodatkowo obsługuje różne wtyczki, także te napisane pod konkretny język, który dotąd nie był przez nią obsługiwany. Pozwala to znacząco rozszerzyć funkcjonalność SonarQube, a jego użytkownik ma dyspozycji tak naprawdę cztery komponenty tego narzędzia, do których należy baza danych, wtyczki, analizator oraz serwer.

 

 

SonarQube – wady i zalety stosowania

 

Podstawowe korzyści stosowania platformy SonarQube to poprawa jakości oraz bezpieczeństwa tworzonego kodu. Narzędzie umożliwia również jego optymalizację, a także dostosowanie do wcześniej określonych zasad kodowania. SonarQube potrafi również znaleźć powielone fragmenty kodu, co pozwoli go odpowiednio zredukować. Dzięki temu tworzony kod jest zrozumiały nie tylko dla jego autora, ale również dla całego zespołu programistów pracujących nad projektem. SonarQube analizuje również tworzony kod pod względem bezpieczeństwa, co umożliwia wykrycie jego słabych punktów, które mogą być celem lub źródłem ataku. Pozwala to przebudować kod już na etapie jego tworzenia.

Czy SonarQube ma jakieś wady? Oczywiście, że tak, ponieważ każde rozwiązanie posiada słabe strony. W przypadku SonarQube najczęściej wymieniana jest konieczność integracji z innymi narzędziami, co m.in. pozwoli analizować kod na bieżąco, w trakcie jego tworzenia.

 

 

Z czym warto zintegrować SonarQube?

 

SonarQube z pewnością warto zintegrować z narzędziem Sonarlint, czyli rozszerzeniem dostępnym dla wszystkich najpopularniejszych IDE. Z punktu widzenia programistów zdecydowanie poprawia to użyteczność platformy, ponieważ pozwala wykrywać ewentualne nieprawidłowości w kodzie już w momencie jego pisania. Po integracji na platformie pojawia się dodatkowa zakładka, która wyświetla listę problemów wykrytych w aktualnie otwartym pliku. Każda pozycja zawiera również szczegółowy opis błędu, co znacznie usprawnia pracę programisty w zakresie tworzenia czystego kodu. Pozwala także poszerzyć wiedzę w konkretnym obszarze dzięki definicjom oraz przykładom przedstawionym w regułach.

Przydatna może okazać się również integracja z systemami kontroli wersji, takimi jak Git, czy SVN. SonarQube zapewnia dla nich domyślne wsparcie, a dane pobrane z systemu kontroli wersji podczas skanowania umożliwiają odblokowanie funkcjonalności dotyczących:

  • automatycznego przypisywania wykrytych błędów do konkretnego autora,
  • możliwości dokonywania adnotacji przy podglądzie kodu z poziomu interfejsu graficznego,
  • identyfikacji nowego kodu.

Ciekawym rozwiązaniem jest również integracja z narzędziami Continuous Integration, ponieważ skanowanie SonarQube można uruchomić jako jeden z kroków w wykorzystywanym procesie CI. Jest to możliwe, ponieważ platforma łatwo integruje się z najpopularniejszymi narzędziami, np. Azure DevOps, czy Jenkins. W praktyce build uzyska status failed każdorazowo, gdy nie zostaną spełnione wymagania określone przez Quality Gate.

 

 

Czy warto w przedsiębiorstwie stosować SonarQube?

 

Możliwości, które oferuje platforma SonarQube sprawiają, że jej stosowanie w przedsiębiorstwie jest bardzo przydatne. Narzędzie pozwala automatycznie wykrywać nieprawidłowości w kodowaniu, co sprawia że programista szybciej tworzy kod o prawidłowej jakości. Co więcej tworzony kod jest w pewnym sensie standaryzowany i zgodny z regułami, które przyjęła dana firma. Dzięki temu poszczególni programiści szybciej i dokładniej rozumieją kod tworzony przez innych członków zespołu. Pozwala to również efektywniej wdrożyć do niego kolejnych developerów. Należy również wspomnieć kwestię poprawy bezpieczeństwa kodu, co sprawi, że tworzone rozwiązania są bardziej odporne na ataki. Z pewnością docenią to zarówno użytkownicy aplikacji, jak i jej właściciele.

 

 

Inne funkcje SonarQube

 

W poprzednich akapitach opisano podstawową funkcjonalność SonarQube, która sprowadza się do analizy jakości oraz bezpieczeństwa kodu. Należy jednak mieć świadomość, że platforma posiada również wiele innych funkcji, do których należy m.in.:

  • import danych wygenerowanych za pomocą przeznaczonych dla danego języka programowania narzędzi, dotyczących wykonanych testów oraz pokrycia testami. Dane te mogą zostać później wykorzystane np. do zdefiniowania Quality Gate;
  • import danych wygenerowanych przez zewnętrzne narzędzia, np. SpotBugs, Checkstyle, czy ESLint;
  • możliwość konfiguracji skanowania dla jobów GitLab CI/CD (automatyczne wykrywanie branchy i Merge Request’ów);
  • możliwość agregowania wielu aplikacji w jeden projekt zarządzany według wspólnie określonych reguł;
  • funkcjonalność Portfolio, która umożliwia project managerom i team leaderom uzyskanie globalnego spojrzenia na aktualny stan projektów między innymi pod kątem jakości, gotowości do wydania. Fukcja ta pozwala również na obserwację trendów oraz słabych punktów, a także eksport dokumentacji do formatu PDF;
  • wizualizacja ułatwiająca analizowanie aktualnych statusów oraz śledzenie historii zmian;
  • rozszerzenie dostępnych funkcjonalności dzięki instalacji plugin’ów umożliwiających integrację z zewnętrznymi narzędziami do analizy, a także obsługę dodatkowych języków programowania.

SonarQube to wielofunkcyjna platforma, która jest szeroko wykorzystywana przez programistów. Jej możliwości doceniają zarówno samodzielni developerzy, jak i duże przedsiębiorstwa stawiające na innowacje, które używają SonarQube do monitorowania jakości realizowanych projektów.