Java-hulpprogramma's voor statische analyse in Eclipse en IntelliJ IDEA

1. Overzicht

In onze inleiding tot FindBugs hebben we gekeken naar de functionaliteit van FindBugs als statische analysetool en hoe deze direct kan worden geïntegreerd in IDE's zoals Eclipse en IntelliJ Idea.

In dit artikel gaan we kijken naar enkele van de alternatieve statische analysehulpmiddelen voor Java - en hoe deze integreren met Eclipse en IntelliJ IDEA.

2. PMD

Laten we beginnen met PMD.

Deze volwassen en vrij gevestigde tool analyseert de broncode op mogelijke bugs, suboptimale codes en andere slechte praktijken; het kijkt ook naar meer geavanceerde statistieken zoals cyclomatische complexiteit voor de codebase die het analyseert.

2.1. Integratie met Eclipse

De PMD-plug-in kan rechtstreeks vanuit Eclipse Marketplace worden geïnstalleerd. De plug-in kan hier ook handmatig worden gedownload. Na installatie kunnen we de PMD-controle rechtstreeks vanuit de IDE zelf uitvoeren:

Het is vermeldenswaard dat we PMD op projectniveau of op individueel klassenniveau kunnen uitvoeren.

De resultaten worden hieronder weergegeven - met verschillende kleuren voor verschillende niveaus van de bevinding, variërend van "waarschuwing" tot "blokkering" in oplopende volgorde van ernst:

We kunnen in de details van elk item graven door er met de rechtermuisknop op te klikken en "details weergeven" te selecteren in het contextmenu. Eclipse toont een korte beschrijving van het probleem en mogelijke oplossingen om het op te lossen:

Het is ook mogelijk om de configuratie van de PMD-scan te wijzigen - we kunnen dat doen in het menu, onder Venster -> Voorkeuren -> PMD om de configuratiepagina te openen. Hier kunnen we scanparameters, regelset, resultaatweergave-instellingen, etc. configureren.

Als we een aantal specifieke regels voor het project moeten deactiveren, kunnen we ze eenvoudig van de scan verwijderen:

2.2. Integratie met IntelliJ

IntelliJ heeft natuurlijk een vergelijkbare PMD-plug-in - die kan worden gedownload en geïnstalleerd vanuit de JetBrains-plug-inwinkel.

We kunnen de plug-in op dezelfde manier rechtstreeks in de IDE uitvoeren - door met de rechtermuisknop op de bron te klikken die we moeten scannen en PMD-scan te selecteren in het contextmenu:

De resultaten worden onmiddellijk weergegeven, maar in tegenstelling tot Eclipse, als we de beschrijving proberen te openen, wordt een browser geopend met een openbare webpagina voor het vinden van informatie:

We kunnen het gedrag van de PMD-plug-in instellen vanaf de instellingenpagina, door naar Bestand -> Instellingen -> andere instellingen -> PMD te gaan om de configuratiepagina te bekijken. Vanaf de instellingenpagina kunnen we de regelset configureren door een aangepaste regelset met onze eigen testregels te laden.

3. JaCoCo

Verderop - JaCoCo is een testdekkingstool - die wordt gebruikt om de eenheidstestdekking in de codebase bij te houden. Simpel gezegd, de tool berekent de dekking met behulp van een aantal strategieën, bijvoorbeeld: lijnen, klasse, methoden, enz.

3.1. Integratie met Eclipse

JaCoCo kan direct vanaf de markt worden geïnstalleerd. Een installatielink wordt ook gehost op de officiële site die hier beschikbaar is.

De tool kan worden uitgevoerd van projectniveau tot individueel methodeniveau. De Eclipse-plug-in gebruikt verschillende kleurenschema's om aan te geven welk deel van de code wordt gedekt door de testcases en wat niet:

Onze methode deelt twee opgegeven integer-parameters en retourneert het resultaat. Als de tweede parameter nul is, retourneert deze een maximale waarde voor het gegevenstype integer.

In ons testgeval testen we alleen het scenario waarin de tweede parameter nul is:

In dit geval kunnen we zien dat regel 6 geel gekleurd is. Slechts één tak van de ‘als'-voorwaarde wordt getest en wordt uitgevoerd in onze eenvoudige test. Daarom is het niet volledig getest en geel gemarkeerd.

Bovendien heeft lijn 7 een groene kleur - dit betekent dat deze volledig is getest. Ten slotte wordt regel 9 gemarkeerd met een rode kleur, wat betekent dat deze regel helemaal niet wordt getest door onze unit-tests.

We kunnen een samenvatting van de testdekking zien waar wordt weergegeven hoeveel code wordt gedekt onder eenheidstests op klassenniveau en pakketniveaus:

3.2. Integratie met IntelliJ IDEA

JaCoCo wordt standaard gebundeld met de nieuwste IntelliJ IDEA-distributie, dus het is niet nodig om de plug-in afzonderlijk te installeren.

Bij het uitvoeren van unit-tests kunnen we selecteren welke dekkingsgeleider we moeten gebruiken. We kunnen de testcases uitvoeren op projectniveau of op klassenniveau:

Net als bij Eclipse geeft JaCoCo resultaten weer met verschillende kleurenschema's voor de dekking.

We kunnen de samenvatting van de testdekking zien waar het laat zien hoeveel van de code wordt gedekt onder unit-tests op klassenniveau en pakketniveau.

4. Cobertura

Ten slotte is het vermeldenswaard Cobertura - dit wordt op dezelfde manier gebruikt om de dekking van de unit-test in de codebase bij te houden.

De nieuwste versie van Eclipse ondersteunt de Cobertura-plug-in op het moment van schrijven niet; de plug-in werkt met eerdere Eclipse-versies.

Evenzo heeft IntelliJ IDEA geen officiële plug-in die de Cobertura-dekking kan uitvoeren.

5. Conclusie

We keken naar integratie met Eclipse en IntelliJ IDEA voor drie veelgebruikte statische analysetools. FindBug werd behandeld in een eerdere inleiding tot FindBugs.

De broncode van deze tutorial is te vinden in het GitHub-project - dit is een op Maven gebaseerd project, dus het moet gemakkelijk te importeren en uit te voeren zijn zoals het is.