Code-analyse met SonarQube

1. Overzicht

In dit artikel gaan we kijken naar statische broncode-analyse met SonarQube, een open-sourceplatform om de codekwaliteit te waarborgen.

Laten we beginnen met een kernvraag: waarom zou u de broncode in de eerste plaats analyseren? Heel eenvoudig gezegd, om kwaliteit, betrouwbaarheid en onderhoudbaarheid gedurende de levensduur van het project te garanderen; een slecht geschreven codebase is altijd duurder om te onderhouden.

Oké, laten we nu aan de slag gaan door de nieuwste LTS-versie van SonarQube te downloaden van de downloadpagina en onze lokale server in te stellen zoals beschreven in deze snelstartgids.

2. Analyse van broncode

Nu we zijn ingelogd, moeten we een token maken door een naam op te geven - dit kan onze gebruikersnaam zijn of een andere naam naar keuze en op de knop Genereren klikken.

We zullen het token later gebruiken bij het analyseren van onze project (en). We moeten ook de primaire taal (Java) en de build-technologie van het project (Maven) selecteren.

Laten we de plug-in definiëren in het pom.xml:

    org.sonarsource.scanner.maven sonar-maven-plugin 3.4.0.905 

De laatste versie van de plug-in is hier beschikbaar. Nu moeten we dit commando uitvoeren vanuit de root van onze projectdirectory om het te scannen:

mvn sonar: sonar -Dsonar.host.url = // localhost: 9000 -Dsonar.login = het gegenereerde token

We moeten vervangen het gegenereerde token met het token van bovenaf.

Het project dat we in dit artikel hebben gebruikt, is hier beschikbaar.

We hebben de host-URL van de SonarQube-server en de login (gegenereerde token) gespecificeerd als parameters voor de Maven-plug-in.

Na het uitvoeren van de opdracht zijn de resultaten beschikbaar op het projectendashboard - op // localhost: 9000.

Er zijn andere parameters die we kunnen doorgeven aan de Maven-plug-in of zelfs kunnen instellen via de webinterface; sonar.host.url, sonar.projectKey, en sonar. bronnen zijn verplicht, terwijl andere optioneel zijn.

Andere analyseparameters en hun standaardwaarden zijn hier. Merk ook op dat elke taal-plug-in regels heeft voor het analyseren van compatibele broncode.

3. Analyseresultaat

Nu we ons eerste project hebben geanalyseerd, kunnen we naar de webinterface op // localhost: 9000 en vernieuw de pagina.

Daar zien we de samenvatting van het rapport:

Gevonden problemen kunnen een bug, kwetsbaarheid, codegeur, dekking of duplicatie zijn. Elke categorie heeft een overeenkomstig aantal uitgiften of een percentagewaarde.

Bovendien kunnen problemen een van de vijf verschillende ernstniveaus hebben: blocker, critical, major, minor en info. Vlak voor de projectnaam staat een pictogram dat de Quality Gate-status weergeeft: geslaagd (groen) of mislukt (rood).

Als we op de projectnaam klikken, gaan we naar een speciaal dashboard waar we de specifieke problemen van het project in meer detail kunnen onderzoeken.

We kunnen de projectcode en activiteit zien en beheertaken uitvoeren vanaf het projectdashboard - elk beschikbaar op een apart tabblad.

Hoewel er een globaal is Problemen tab, het Problemen tabblad op het projectdashboard geef problemen weer die specifiek zijn voor het betreffende project:

Op het tabblad Problemen worden altijd de categorie, het ernstniveau, de tag (s) en de berekende inspanning (met betrekking tot de tijd) weergegeven die nodig is om een ​​probleem op te lossen.

Vanaf het tabblad Problemen is het mogelijk om een ​​probleem aan een andere gebruiker toe te wijzen, erop te reageren en het ernstniveau te wijzigen. Als u op het probleem zelf klikt, wordt meer informatie over het probleem weergegeven.

Het probleemtabblad wordt aan de linkerkant geleverd met geavanceerde filters. Deze zijn goed voor het opsporen van problemen. Dus hoe kan iemand weten of de codebase gezond genoeg is om in productie te worden genomen? Dat is waar Quality Gate voor is.

4. SonarQube Quality Gate

In deze sectie gaan we kijken naar een belangrijk kenmerk van SonarQube: Quality Gate. Vervolgens zullen we een voorbeeld zien van hoe u een aangepaste versie kunt instellen.

4.1. Wat is een kwaliteitspoort?

Een Quality Gate is een reeks voorwaarden waaraan het project moet voldoen voordat het in aanmerking kan komen voor productievrijgave. Het beantwoordt één vraag: kan ik mijn code in de huidige staat naar productie pushen of niet?

Het waarborgen van de codekwaliteit van "nieuwe" code terwijl bestaande wordt gerepareerd, is een goede manier om in de loop van de tijd een goede codebase te behouden. De Quality Gate vergemakkelijkt het opzetten van regels voor het valideren van elke nieuwe code die aan de codebase wordt toegevoegd bij latere analyse.

De voorwaarden die in de Quality Gate worden gesteld, zijn nog steeds van invloed op ongewijzigde codesegmenten. Als we kunnen voorkomen dat er na verloop van tijd nieuwe problemen ontstaan, zullen we alle problemen elimineren.

Deze aanpak is vergelijkbaar met het verhelpen van de waterlekkage uit de bron. Dit brengt ons bij een bepaalde term - Lekkageperiode. Dit is de periode tussen twee analyses / versies van het project.

Als we de analyse voor hetzelfde project opnieuw uitvoeren, toont het overzichtstabblad van het projectdashboard de resultaten voor de lekperiode:

Vanuit de webinterface is het tabblad Kwaliteitspoorten waar we toegang hebben tot alle gedefinieerde kwaliteitspoorten. Standaard, SonarQube manier was vooraf geïnstalleerd met de server.

De standaardconfiguratie voor SonarQube manier markeert de code als mislukt als:

  • de dekking op nieuwe code is minder dan 80%
  • percentage dubbele regels in nieuwe code is groter dan 3
  • onderhoudbaarheid, betrouwbaarheid of veiligheidsclassificatie is slechter dan A

Met dit inzicht kunnen we een kwaliteitspoort op maat maken.

4.2. Custom Quality Gate toevoegen

Ten eerste moeten we Klik op de Kwaliteitspoorten tabblad en klik vervolgens op het Creëer knop die aan de linkerkant van de pagina staat. We zullen het een naam moeten geven - baeldung.

Nu kunnen we de voorwaarden instellen die we willen:

Van de Voorwaarde toevoegen drop-down, laten we kiezen Blocker-problemen; het wordt onmiddellijk weergegeven in de lijst met voorwaarden.

We zullen specificeren is groter dan als de Operator, stel nul (0) in voor de Fout kolom en vink aan Over lekperiode kolom:

Dan klikken we op de Toevoegen knop om de wijzigingen door te voeren. Laten we nog een voorwaarde toevoegen volgens dezelfde procedure als hierboven.

We zullen selecteren problemen van de Voorwaarde toevoegen laten vallenen check Over lekperiode kolom.

De waarde van de Operator kolom wordt ingesteld op 'is minder dan" en we voegen één (1) toe als de waarde voor de Fout kolom. Dit betekent Als het aantal problemen in de nieuwe toegevoegde code minder is dan 1, markeert u de Quality Gate als mislukt.

Ik weet dat dit technisch niet logisch is, maar laten we het gebruiken om te leren. Vergeet niet op het Toevoegen knop om de regel op te slaan.

Een laatste stap: we moeten een project aan onze aangepaste Quality Gate koppelen. We kunnen dit doen door op de pagina naar beneden te scrollen naar de sectie Projecten.

Daar moeten we op Alles klikken en vervolgens ons project naar keuze markeren. We kunnen het net zo goed instellen als de standaard Quality Gate in de rechterbovenhoek van de pagina.

We zullen de broncode van het project opnieuw scannen, zoals we eerder deden met de opdracht Maven. Als dat is gebeurd, gaan we naar het tabblad Projecten en vernieuwen.

Dit keer voldoet het project niet aan de Quality Gate-criteria en zal het mislukken. Waarom? Omdat we dat in een van onze regels hebben gespecificeerd, zou het moeten mislukken als er geen nieuwe problemen zijn.

Laten we teruggaan naar het tabblad Quality Gates en de voorwaarde wijzigen voor problemen naar is groter dan. We moeten op de updateknop klikken om deze wijziging door te voeren.

Een nieuwe scan van de broncode zal deze keer rondgaan.

5. SonarQube integreren in een CI

SonarQube onderdeel maken van een continu integratieproces is mogelijk. Hierdoor mislukt de build automatisch als de code-analyse niet voldeed aan de Quality Gate-voorwaarde.

Om dit te bereiken, gaan we SonarCloud gebruiken, de in de cloud gehoste versie van de SonaQube-server. We kunnen hier een account aanmaken.

Van Mijn account> Organisaties kunnen we de organisatiesleutel zien, en deze staat meestal in het formulier xxxx-github of xxxx-bitbucket.

Ook van Mijn account> Beveiliging, kunnen we een token genereren zoals we deden in de lokale instantie van de server. Noteer zowel het token als de organisatiesleutel voor later gebruik.

In dit artikel gebruiken we Travis CI en maken we hier een account met een bestaand Github-profiel. Het laadt al onze projecten, en we kunnen de schakelaar omdraaien om Travis CI erop te activeren.

We moeten het token dat we op SonarCloud hebben gegenereerd, toevoegen aan Travis-omgevingsvariabelen. We kunnen dit doen door op het project te klikken dat we voor CI hebben geactiveerd.

Vervolgens klikken we op 'Meer opties'> 'Instellingen' en scrollen we omlaag naar 'Omgevingsvariabelen':

We zullen een nieuw item met de naam toevoegen SONAR_TOKEN en gebruik het gegenereerde token op SonarCloud als de waarde. Travis CI zal het versleutelen en verbergen voor openbare weergave:

Ten slotte moeten we een .travis.yml bestand naar de root van ons project met de volgende inhoud:

taal: java sudo: false install: true addons: sonarcloud: organisation: "your_organization_key" token: secure: "$ SONAR_TOKEN" jdk: - oraclejdk8 script: - mvn clean org.jacoco: jacoco-maven-plugin: prepareer-agent pakket sonar : sonar cache: mappen: - '$ HOME / .m2 / repository' - '$ HOME / .sonar / cache'

Vergeet niet om uw organisatiesleutel te vervangen door de hierboven beschreven organisatiesleutel. Door de nieuwe code vast te leggen en naar de Github-repo te pushen, wordt de Travis CI-build geactiveerd en op zijn beurt ook de sonarscanning geactiveerd.

6. Conclusie

In deze tutorial hebben we gekeken hoe je een SonarQube-server lokaal kunt opzetten en hoe je Quality Gate kunt gebruiken om de criteria te definiëren voor de geschiktheid van een project voor productierelease.

De SonarQube-documentatie bevat meer informatie over andere aspecten van het platform.


$config[zx-auto] not found$config[zx-overlay] not found