Finalist

Finalist Developers Blog

Software kwaliteit tools

4 September 2006 17:10 · Leo Blommers · Java

De kwaliteit van software kan op 2 aspecten worden beoordeeld. De eerste is functionele kwaliteit; doet de software wat het zou moeten doen. Om dit te beoordelen zijn er methodieken, tools en frameworks beschikbaar. De andere component waarop software beoordeeld kan worden is structurele kwaliteit; is de software volgens de regels ontworpen en geïmplementeerd. Dit artikel verkent een aantal tools welke helpen de kwaliteit van code te verhogen.

Voor het beoordelen van de structurele kwaliteit van software zijn een aantal verschillende tools beschikbaar. Deze tools kunnen zowel waarschuwen voor verdachte statements alsook de onderlinge samenhang van verschillende classen en componenten in beeld brengen. Veelvoorkomende fouten op statement niveau worden bugpatterns genoemd, fouten in de samenhang van een programma worden anti patterns genoemd.

De eerste tool die gebruikt wordt om bugpatterns op te sporen is de java-compiler. De javacompiler is hier gelukkig redelijk streng in. Waar een c-compiler slechts waarschuwt voor niet geïnitialiseerde variabelen keurt de java-compiler dit soort code gewoon af. Ook de verplichting om exceptions te moeten afhandelen is een plus punt. In een taal als C# is deze verplichting er niet, omdat dit volgens de ontwerper van C# productiever is. Voor beide standpunten is wat te zeggen maar persoonlijk geef ik de voorkeur aan de gedwongen afhandeling van exceptions. Vanaf Java versie 1.5 is het mogelijk de warnings van de compiler te laten zien door het toevoegen van de switch -Xlint.

Een meer gespecialiseerde tool die opzoek gaat naar bugpatterns is FindBugs. Een voorbeeld van een bugpattern is het creëren van een nieuwe String met het statement new String(“foo�?). In het ongunstigste geval levert deze constructie 2 objecten op. FindBugs zoekt dit soort constructies op en geeft aanwijzingen hoe deze te verhelpen zijn. De lijst met bugpatterns die FindBugs opspoort is aanzienlijk. Het aantal false alarms overigens ook alhoewel vol trots gemeld wordt dat dit onder de 50% blijft. De bezwaren wegen echter niet op tegen de voordelen. Het sporadisch gebruiken tijdens een project, of meer geregeld via een ANT task helpt om mogelijke fouten op te sporen en zo betere code te krijgen.

Ook om de structuur van een programma als geheel te bekijken zijn er tools beschikbaar. Een van die tools is Structural Analysis for Java (SA4J). Deze tool maakt de onderlinge samenhang van classes in een programma zichtbaar en gaat op zoek naar anti-patterns. Een voorbeeld van een anti-pattern is een butterfly. Hiermee wordt een class bedoeld die bij een wijziging aan deze class gevolgen heeft voor heel veel andere classen. Ook kan op eenvoudige wijze de impact van een wijziging in een bepaalde class op de rest van de applicatie worden bekeken.

SA4J levert leuke plaatjes op. Helaas zal het bij het constateren van ernstige anti-patterns te laat zijn om de code met een paar simpele wijzingen uit de gevarenzone te halen. Wel kan de uitkomst bijvoorbeeld worden gebruikt bij het bepalen van de risico’s om code van externe partijen in beheer te nemen of kan het gebruikt worden bij een impact analyse van een request for change.
Findbugs is een ander verhaal. Eigenlijk is dit programma verplichte kost. Deze tool kan regelmatig tijdens de ontwikkeling worden gebruikt en de aanbevelingen leiden over het algemeen tot kleine wijzingen die een daadwerkelijke bijdrage leveren aan de kwaliteit van de code.

http://findbugs.sourceforge.net/
http://www.alphaworks.ibm.com/tech/sa4j

2 reacties »

  1. PMD mag je ook zeker niet missen; http://pmd.sourceforge.net/

    Remco - September 11, 2006 10:32

  2. Lint4J is ook handige:
    http://www.jutils.com/

    Verder zit checkstyle ook in mijn standard toolkit.

    Bjorn - October 18, 2006 17:05

Reageer

RSS feed for comments on this post · TrackBack URI