Blog:

Betere code door statische code analyse

Published on okt 03, 2019
By Kees / Software Developer

Bij Fourtress staat testen centraal. Een goed getest product valt minder snel om en zorgt voor minder problemen als het in productie gaat. Op dit moment wordt er binnen de interne projecten voornamelijk getest met unit-tests. Om meer bij te kunnen dragen aan de kwaliteit van de code, hebben we gekeken naar een oplossing. Eén van de mogelijke gevonden opties is SonarQube!

SonarQube is een statische code analyse tool die wordt gebruikt voor de kwaliteitswaarborging van softwareprojecten. Door het uitvoeren van scans kan er aan de hand van parameters de kwaliteit van verschillende applicaties worden berekend. Deze data wordt vervolgens getoond in een dashboard die als communicatie-tool dient voor de ontwikkelaar. Het in kaart brengen van verbeteringen zal de codekwaliteit verbeteren. Hoe werkt het en wat hebben we er precies aan?

Quality Profiles/Gates

Om een uitspraak te doen over de kwaliteit moet er eerst bepaald worden wat die kwaliteit precies inhoudt. Dit doen we met Quality Profiles. Deze profielen bevatten een lijst aan regels waaraan de code moet voldoen. Na een scan wordt gekeken of deze regels overtreden worden, indien dat het geval is worden ze toegevoegd bij de bijhorende categorie; Bug, Vulnerability, Code Smell of Security Hotspots.

Als de metingen zijn gedaan kan de kwaliteit bepaald worden. Dit wordt gedaan aan de hand van Quality Gates. Hierin staan definities over wat de waardes mogen zijn voor een geslaagde scan. Enkele voorbeelden zijn: “De Code Coverage moet hoger zijn dan 60%” of “Er mogen maximaal 5 Code Smells zijn”. De resultaten van de Quality Gates worden vervolgens getoond in een dashboard zodat de ontwikkelaar snel kan zijn waar alle verbeter punten liggen.

Way of Working

Vanaf het dashboard kan je dieper ingaan op de problemen die door de SonarQube analyse zijn gevonden. Zoals eerder vermeld zijn er enkele onderwerpen binnen SonarQube die worden gemeten zoals de complexiteit van je code, in hoe ver je code te onderhouden is, kwetsbaarheden, hoeveelheid code en hoeveelheid gedupliceerde code. Deze statistieken worden bepaald door de gevonden bugs, code fouten, test dekking, OWASP report en SANS report. Het is belangrijk om vroegtijdig rekening te houden met deze potentiële fouten om in de toekomst veel tijd te besparen met het oplossen van bugs en slordige code.

Door SonarQube in het software ontwikkel proces te verwerken, kunnen problemen voorkomen worden. Voorheen werd een nieuw geschreven stuk code handmatig gecontroleerd en vervolgens samengevoegd met de bestaande code. Uiteindelijk wordt gedurende het testen ontdekt dat de nieuwe code heeft gezorgd voor falende testen. Dit resulteert in een nieuwe cyclus waarin de gevonden fout opgelost moet worden en vervolgens opnieuw geverifieert moet worden door een test. SonarQube kan er echter voor zorgen dat het probleem vroegtijdig ontdekt wordt en meteen opgelost kan worden door de ontwikkelaar. Dit kan gedaan worden door een analyse uit te voeren op de nieuw geschreven code of door gebruik te maken van extensies/plug-ins (voor zowel Intellij & Visual Studio Code,) zoals SonarLint, in je software ontwikkel omgeving. Een SonarQube analyse kan automatisch uitgevoerd wanneer nieuwe code is ontdekt en voordat de nieuwe code wordt samengevoegd met de huidige code, hierdoor wordt er niet onnodig getest en wordt de foute code niet opnieuw gebruikt door andere ontwikkelaars. Daarnaast kunnen er problemen opgelost worden, terwijl een ontwikkelaar met de implementatie bezig is door gebruik te maken van SonarLint. Hierdoor kunnen problemen meteen opgelost worden en kan een SonarQube analyse gebruikt worden als een laatste bevestiging voordat de nieuwe code samengevoegd wordt met de huidige code.

SonarQube toevoegen aan een bestaand project kan veel inzichten bieden. Dit zal terug te zien zijn op het dashboard van het project door de verschillende letters en kleuren bij de verschillende onderwerpen. Dit zal initieel veel rood zijn, maar gedurende het verwerken van de gevonden fouten zullen de quality gates slagen en dit reflecteert zich weer terug op het dashboard.

Integratie

Het dashboard van SonarQube is tevens ook te integreren in andere programma’s. Een voorbeeld hiervan is Jenkins. Door SonarQube toe te voegen aan je Jenkins pipeline, kun je SonarQube in je software ontwikkel proces integreren en wordt er automatisch een analyse uitgevoerd. Daarnaast heb je een programma zoals Grafana die de gegevens van SonarQube overzichtelijker maakt voor de ontwikkelaar of stakeholder. We zijn deze technieken binnen onze Test Guild volop aan het toepassen, zo hebben wij al een eigen Grafana dashboard opgezet voor het onderhouden van onze dashboards en statistieken. Mocht je ervaringen of tips over Grafana hebben, neem dan gerust contact met ons op!

Geschreven door Rick Mittendorff & Kees Werson