Sonar: PHP code quality

July 21st, 2012 | 7 min read | Code quality, PHP, sonar

Sonar is een code quality management platform dat zeer populair is bij Java-gebruikers, maar dit platform beschikt ook over plugins die integratie mogelijk maakt met andere programmeertalen waaronder C, COBOL, C#, Visual Basic en nog veel meer.In deze tutorial ga ik uitleggen hoe je Sonar werkende krijgt in combinatie met XAMPP. Je zal dit ook werkende moeten krijgen met wamp of een ander pakket, maar ik werk al enkele jaren met XAMPP dus vandaar.

Installatie Sonar

Sonar is te downloaden vanaf sonarsource.org. Eenmaal gedownload kan je in de map conf een bestand sonar.properties vinden. Hier kan je eventueel enkele aanpassingen aan maken waar Sonar z’n data zal persisteren.

Ik heb hier gekozen voor MySQL omdat ik uiteindelijk toch met XAMPP zal werken en deze database hier standaard bij zit. Je kan ook de standaard instellingen behouden waardoor Sonar naar een interne database (Derby) zal persisteren.

Vergeet natuurlijk niet om de username/password credentials voor je database aan te passen via

sonar.jdbc.username

en

sonar.jdbc.password

. Je moet zelf ook even de database sonar aanmaken (dit kan je eenvoudig doen via PHPMyAdmin).

Installatie Sonar Runner

Om een PHP project te kunnen analyzeren hebben we een build-tool nodig. Er zijn verschillende opties zoals Maven en Ant, maar voor de PHP plugin wordt de Sonar runner aanbevolen. Download de Sonar runner hier.

Eenmaal gedownload zal je hier ook enkele aanpassingen aan moeten maken. Open het bestand sonar-runner.properties in de map conf en uncomment de MySQL lijnen. Indien je je PHP files niet in UTF-8 geschreven hebt, dan zal je onderaan ook 

sonar.sourceEncoding

op 

Cp1252

moeten zetten. Vergeet ook niet om

sonar.jdbc.username

en

sonar.jdbc.password

te uncommenten en aan te passen.

De PHP plugin werkt (momenteel met v1.0) niet onder Java 7, het is daarom ook nodig om een Java 6 Runtime Environment te downloaden en te installeren. Dit zou binnen enkele dagen opgelost moeten zijn omdat de 1.1 release een week geleden af zou zijn (volgens hun JIRA issue tracker toch).

Als je JRE 6 gedownload hebt, dan moet je nu in de bin map van de Sonar runner het bestand sonar-runner.bat aanpassen.  Vlak onder de lijn waar

@echo off

staat plaats je de volgende lijn code

SET JAVA_HOME=C:\Program Files (x86)\Java\jre6

waarbij het pad gelijk moet zijn aan de locatie van jouw JRE 6.

Installatie PHP plugin

De PHP integratie plugin voor Sonar kan je downloaden van codehaus.org. Eenmaal gedownload plaats je de JAR file in de map extensions/plugins die je kan vinden in je Sonar installatie.

Nu kan je Sonar starten door in de bin map de juiste submap te openen (32 of 64 bit) en daar het bestand  StartSonar.bat te openen.

Let op, de juiste keuze hangt af van je Java Runtime Environment (of deze 32 bit is of niet) en niet van Windows zelf. Sommige mensen verkiezen om een 32 bit JRE te installeren op een 64 bit OS omdat hun browser 32 bit is. Je kan dit gemakkelijk zelf controleren door een command prompt te openen en het commando

java -version

te gebruiken. Deze zal zeggen of je een 32 of een 64 bit installatie hebt. Indien er iets staat van dat Java niet gevonden is, dan wilt dit zeggen dat je geen Java hebt of je PATH variabel niet hebt aangepast, breng dit eerst in orde.

Installeren PHP benodigdheden

Om de PHP plugin te kunnen gebruiken moet je enkele extra tools installeren voor PHP die je code gaan checken. Open een commandprompt en navigeer naar je PHP map in XAMPP, bij mij is dit C:\xampp\php. Dit doe je door het commando

cd C:\xampp\php

te gebruiken.

In deze map kan je een map PEAR terug vinden, gebruik

cd pear

om daar naar toe te navigeren. PEAR is een tool die extensies voor PHP kan installeren door middel van je command prompt. Het eerste wat je moet doen is controleren of PEAR up-to-date is, bij mijn XAMPP installatie was dit namelijk niet het geval. Controleer met het commando

pear version

of PEAR op z’n minst versie 1.8.0 is.

Indien dit niet het geval is dan gebruik je het commando

pear upgrade pear

om dit in orde te brengen. Nadien voer je de lijst van onderstaande commando’s uit om alle extensies te installeren:

pear channel-discover pear.phpunit.de
pear channel-discover pear.symfony-project.com
pear channel-discover pear.pdepend.org
pear channel-discover pear.phpmd.org

pear install phpunit/PHPUnit-3.5.5
pear install pdepend/PHP_Depend-1.0.3
pear install --alldeps phpmd/PHP_PMD-1.3.2
pear install PHP_CodeSniffer-1.3.2

Eenmaal uitgevoerd mag je de volgende commando’s uitvoeren:

cd ..
notepad php.ini

Hiermee open je het configuratie-bestand van PHP. Zoek hier naar

[XDebug]

en uncomment de lijn vlak daaronder (met

zend_extension

). Sluit nu je notepad en voer het commando

php --version

in. Normaal gezien krijg je nu iets met Zend engine en XDebug te zien, als dit zo is dan ben je volledig klaar en kan je je commandprompt sluiten. Herstart XAMPP om alle instellingen te laten werken en klaar ben je.

Een project analyseren

Open nu een projectje van je en maak er een bestand sonar-project.properties aan. Kopieer onderstaande code en plaats dit in dit nieuwe bestand.

# required metadata
sonar.projectKey=be.g00glen00b:ipscan
sonar.projectName=IPScan
sonar.projectVersion=0.0.1-SNAPSHOT

# path to source directories (required)
sources=class
tests=test

sonar.language=php

sonar.scm.url=

sonar.phpUnit.mainTestClass=Test.Main.php
sonar.phpcpd.excludes=

# Example of properties that can be uncommented to enable reuse of existing PHP Code Sniffer reports
#sonar.phpCodesniffer.analyzeOnly=true
#sonar.phpCodesniffer.reportFileRelativePath=../../logs
#sonar.phpCodesniffer.reportFileName=cs-report.xml

Er zijn nu wel nog enkele dingen die je zal moeten aanpassen. Bovenaan kan je enkele details van je project wijzigen zoals

sonar.projectKey

,

sonar.projectName

en

sonar.projectVersion

.

Daaronder vind je de meer belangrijke zaken terug. Bij

sources

voer je de map in (in je project) waar al je classes te vinden zijn, bij mij is dit class. Bij

tests

voer je de map in waar al jouw PHPUnit tests te vinden zijn als je deze hebt. Indien je deze niet hebt dan maak je een lege test-map aan en verwijs je daar naar.

Niet veel lager zie je

sonar.phpUnit.mainTestClass

. Hier moet je dus de filename geven van je tests (de verwijzing naar je tests-map is NIET meer nodig). Indien je geen tests geschreven hebt dan maak je in je test-map een bestand Test.Main.php aan en plaats je er de volgende code:

<?php
class MainTest extends PHPUnit_Framework_TestCase
{
    public function test()
    {
        $this->assertEquals(0, 0);
    }
}
?>

Eenmaal klaar kan je beide bestanden opslaan en sluiten. Open nu opnieuw een command prompt en navigeer hiermee naar de map waar jouw project staat met het

cd

-commando. Nu typ je hier de locatie naar je sonar-runner.bat file die je uit voorgaande stappen geïnstalleerd hebt. Bij mij is dit

I:\sonar-runner-1.3\bin\sonar-runner.bat

. Voer dit uit en wacht nu even tot alles klaar is (kan enkele minuten duren).

Na dat wachten kan je nu naar het Sonar platform gaan op http://localhost:9000. Klik hier op jouw project en kijk wat er allemaal kan verbeterd worden aan jouw project.

 

Back to tutorialsContact me on TwitterDiscuss on Twitter

Profile picture

Dimitri "g00glen00b" Mestdagh is a consultant at Cronos and tech lead at Aquafin. Usually you can find him trying out new libraries and technologies. Loves both Java and JavaScript.