Sonar-Open Source Project en Code Kwaliteit Monitoring
Olivier Gaudin, Freddy Mallet, SonarSource, http://www.sonarsource.com
Wat is Sonar ?
Sonar (nu SonarQube genoemd) is een open source platform dat wordt gebruikt door ontwikkelteams om de kwaliteit van de broncode te beheren. Sonar is ontwikkeld met een hoofddoelstelling in het achterhoofd: code quality management toegankelijk maken voor iedereen met minimale inspanning.
als zodanig biedt Sonar code analyzers, rapportagetools, defecten jacht modules en tijdmachine als kernfunctionaliteit. Maar het begint ook een plugin mechanisme waarmee de gemeenschap om de functionaliteit uit te breiden (meer dan 35 plugins beschikbaar), waardoor Sonar de one-stop-shop voor de kwaliteit van de broncode door het aanpakken van niet alleen ontwikkelaars, maar ook managers behoeften.
in termen van talen ondersteunt Sonar analyse van Java in de kern, maar ook van JavaScript, PHP, PL/SQL en Cobol via plugins (Open Source of commercieel) als de rapportage engine is taal agnostisch.
Sinds versie 2.0, Sonar stelt ter dekking van de kwaliteit op 7 assen en dus om te rapporteren over:
- Gedupliceerde code
- Coding standards
- Unit tests
- Complexe code
- Mogelijke bugs
- Ontwerp en architectuur
Sonar kan gebruikt worden voor éénmalige controles, maar is ontworpen voor de ondersteuning van de wereldwijde continue verbetering strategie op code in een bedrijf en kan daarom gebruikt worden als een gedeelde centrale opslagplaats voor de kwaliteit van het management.
website: https://www.sonarqube.org/
Productversie: Sonar 2.0
Licentie: LGPL V3
ondersteuning: https://www.sonarsource.com/support/
Plugins: https://docs.sonarqube.org/display/PLUG/Plugin+Library
waarom zou u de kwaliteit van de broncode beheren?
een goed geschreven programma is een programma waarbij de kosten van het implementeren van een functie constant zijn gedurende de gehele levensduur van het programma — Itay Maman
als een snelle intro, Dit is de beste definitie van broncode kwaliteit die ik kon vinden. Het wordt nog sterker als het andersom wordt gesteld: abadly written program is een programma waarbij de kosten van het implementeren van een functie in de loop van de tijd toenemen.
dat klinkt slecht, nietwaar?
We hebben allemaal situaties gezien waarin een nieuw project van start gaat, dat tot doel heeft om vanaf nul een toepassing in een geavanceerde technologie te ontwikkelen. Alles gaat erg snel; eerste, tweede, derde release en dan ineens begint de snelheid van het team te dalen. Vierde release is uitgesteld voor de derde keer, iets repareren breekt iets anders…
Wat gebeurt hier? Gezien de symptomen kunnen we ervan uitgaan dat het team onder andere lijdt aan technische schulden en dat stakeholders zich daar niet van bewust zijn en er dus niet mee om kunnen gaan.
maar dit zal hoogstwaarschijnlijk opgelost worden omdat het project nieuw is, zichtbaar is en daarom iemand het gaat verzorgen (dat kunnen we tenminste hopen).
maar dit voorbeeld was slechts een starter, omdat wij, IT-mensen, het grootste deel van onze tijd niet werken aan toepassingen waarvan de ontwikkeling minder dan 6 maanden geleden begon! Onze taak bestaat voornamelijk uit upgrades naar bestaande toepassingen. Dat is waar het grootste deel van het geld erin wordt uitgegeven, waar er minder zichtbaarheid is, waar er vaak een grote jaarlijkse enveloppe is om zoveel mogelijk te doen, waar er mensen zijn die de sleutel zijn omdat zij de enigen zijn die de code kunnen begrijpen,waar we geen idee hebben hoe lang een verandering gaat duren, waar regressies vaak voorkomen en mensen bang zijn om veranderingen aan te brengen. En er is in principe geen aandacht van de business op dat, gewoon doen!
het beheren van de kwaliteit van de broncode draait allemaal om het optimaliseren van de ROI, omdat het u zichtbaarheid en dus meer controle geeft over:
- hoe moeilijk onderhoud zal zijn, wat kunnen we verwachten
- het feit dat het niet erger wordt
- het feit dat enige aandacht moet worden besteed aan het kritieke deel van het systeem, om bijvoorbeeld de dekking door unit tests te vergroten, cycli te onderdrukken, duplicaties te verwijderen
verder geeft het een back-up voor ontwikkelaars om hun hand op te steken wanneer ze geloven dat refactoring nodig is die een beetje zou toevoegen aan achange maar een goede ROI zou hebben.
hoe de kwaliteit van de broncode te beheren?
er zijn zeven technische assen die moeten worden bekeken bij het uitvoeren van broncodeanalyse van een project en Sonar kan het beheer van alle zeven ondersteunen. In het Sonarteam noemen we ze graag de 7 hoofdzonden van de ontwikkelaar:
- niet-naleving van coderingsnormen en beste praktijken
- geen opmerkingen in de broncode, vooral in openbare API ‘ s
- dubbele regels code
- complexe component of/en een slechte verdeling van complexiteit over componenten
- geen of lage codedekking door eenheidstests, vooral in complex deel van het programma
- potentiële bugs
- met een spaghetti-ontwerp (pakketcycli)…)
de eerste stap bij het doen van broncode kwaliteitsmanagement is echt om te bepalen welke van die assen zijn belangrijk voor u en in welke mate.Vervolgens moet op basis van de huidige situatie een plan worden opgesteld om het streefniveau te bereiken (dat zou kunnen zijn om een hoog kwaliteitsniveau te handhaven). Heel belangrijk is om klein te beginnen en groter te gaan wanneer het volledig wordt overgenomen door het hele ontwikkelingsteam.
laten we nu eens kijken hoe Sonar te gebruiken in deze aanpak.
Kwaliteitsprofielen
Sonar maakt het mogelijk om meerdere kwaliteitsprofielen te beheren om het vereiste niveau aan te passen aan het type project (alleen ondersteuning, nieuw project,kritische toepassing, technische lib…). Het beheren van een profiel bestaat uit:
coderingsregels activeren / deactiveren
drempelwaarden definiëren voor metrics voor automatische alarmering
project / profielassociatie definiëren
Dashboards
Sonar bevat 2 dashboards die het grote plaatje geven om hints te krijgen waar er problemen kunnen zijn en om projecten te vergelijken:
- een geconsolideerde weergave die alle projecten toont
- een projectdashboard is ook beschikbaar op modules en pakketten niveau
jachtgereedschap
om te bevestigen dat wat een probleem lijkt te zijn echt een probleem is, biedt Sonar een jachtgereedschapset waarmee Van overzicht naar kleinste details kan worden gegaan:
- drill op elke weergegeven maat om te zien wat er achter
- classes clouds zit om minder gedekte klassen te vinden door unit tests
- hotspots om op een pagina de meest en de minste bestanden
- en een multi-entry (duplicatie, dekking, schendingen, tests succes…) bronviewer ter bevestiging van de bevindingen met het jachtgereedschap
tijdmachine
ongetwijfeld is het zeer belangrijk te weten waar een aanvraag staat. Maar nog belangrijker is de evolutie ervan te kennen en te begrijpen.Inderdaad, wat is het waard om te weten dat er 20% van de code dekking door unittests? Is het goed of slecht? Is het antwoord anders als het twee maanden geleden 15% of 25% was? TimeMachine maakt het mogelijk om de evolutie te bekijken en het verleden opnieuw af te spelen, vooral omdat het versies van het project
registreert hoe werkt Sonar?
Sonar is gemaakt van een vrij eenvoudige en flexibele architectuur die bestaat uit drie componenten:
- een set van broncode analyzers die zijn gegroepeerd in een maven plugin en worden geactiveerd op aanvraag. De analyzers gebruiken configuratie opgeslagen in de database. Hoewel Sonar afhankelijk is van Maven om analyse uit te voeren, is het in staat om Maven en niet-Maven projecten te analyseren.
- een database om niet alleen de resultaten van de analyse, de projecten en de globale configuratie voort te zetten, maar ook om de historische analyse voor tijdmachine bij te houden. 5 database engines worden momenteel ondersteund: Oracle, MySQL, Derby (alleen demo), PostgreSQL en MS SQLServer
- een web rapportage tool om code kwaliteit dashboards weer te geven op projecten, jagen op defecten, check TimeMachine en om analyse te configureren.
als onderdeel van de analysatoren, gebruikt Sonar core de beste tools om overtredingen van de coderingsregels op te sporen (PMD, Checkstyle), potentiële bugs op te sporen(Findbugs) en de dekking te meten aan de hand van unit tests (Cobertura, Clover). Maar wat maakt Sonar echt uniek is Squid, zijn eigen code analyzer die niet alleen ontleedt broncode, maar ook byte code en mengt de resultaten.
omdat de analyse door een maven-plugin wordt uitgevoerd, kan Sonar gemakkelijk worden gestart in “continue integratie” – omgevingen.
Use case on Apache commons-collection project
een vereiste om Sonar uit te voeren is om Java en Maven op de box te installeren. Als dit het geval is, kunt u Sonar in 5 eenvoudige stappen uitvoeren:
1. Download de distributie van https://www.sonarqube.org/downloads / en unzip het
2. Open een console en start de server:
> $SONAR_HOME \ bin \ windows-x86-32 \ StartSonar.vleermuis op windows
> $SONAR_HOME/bin//sonar.sh op andere platforms
3. Open een console waar u de broncode wilt uitchecken en voer uit:
svn co http://svn.apache.org/viewvc/commons/proper/collections/trunk/.
4. Voer MVN install sonar uit: sonar in dezelfde map
5. Browse http://localhost:9000
de startpagina van de applicatie toont de lijst met projecten onder kwaliteitscontrole met een paar configureerbare metrics.
om in te zoomen, kunt u gewoon op het project klikken en het dashboard krijgen
vanaf daar heb je toegang tot een reeks jachtgereedschappen, waaronder:
de hotspot om meer te weten te komen over de bestanden die “the most” of “the least” bevatten …
Maar ook, welke gegeven in het dashboard is aanklikbaar om te springen tobehind de scène en een overzicht krijgen van de gegeven door de onderliggende component
Elk jacht tool uiteindelijk brengt de jager naar de bron code op de plek waar de prooien worden gemarkeerd
De Sonar Ecosysteem
Er is een zeer dynamisch ecosysteem rond Sonar
- Een actieve community gemaakt van de 300+ mensen op de gebruiker mailing lijst en 150+ mensen op de ontwikkeling mailing list
- 35+ plugins op de forge (http://docs.codehaus.org/display/SONAR/Sonar+Plugin+Library/) die zijn verdeeld in vier categorieën
- Integratie met externe programma ‘ s zoals Jira, Hudson, Bamboe, GateIn, AnthillPro, Menigte
- Rechtstreeks in het verlengde van de core functionaliteit door het toevoegen van nieuw gedrag, het berekenen van geavanceerde gegevens of het consolideren van projecten, het toevoegen van nieuwe gegevens
- dekking Toevoegen van talen als PL/SQL, ActionScript3
- Integratie met IDEs om gebreken informatie over de code zijn wanneer het wordt bewerkt
- 3,000+ downloads per maand
- Een core development team onder leiding van SonarSource (http://www.sonarsource.com)
Conclusie
Na de massale adoptie van continue integratie motoren en Tests gedreven ontwikkelingspraktijken, het beheer van de kwaliteit van de bron ziet eruit als de natuurlijke volgende stap voor de ontwikkeling teams in hun inspanning van industrialisatie. Sonar maakt het mogelijk om dit doel te bereiken met weinig inspanningen en met plezier.
in 2010 zal het Sonarplatform zich blijven ontwikkelen, met als belangrijkste ontwikkelingsassen het behandelen van nieuwe talen en het verbeteren van de integratie met IDE ‘ s.