Volg Software Zaken

Overzicht code analyse tools

| Sieuwert van Otterloo | Agile Quality

Code analyse tools controleren de broncode van computerprogramma’s op problemen en risico’s. Deze tools kijken als het ware onder de motorkap van software om te zien of alles in orde is. Het gebruik van dit soort tools is aanbevolen als een aanvulling op normale testen. Dit is een overzicht van de beste en meestgebruikte tools en advies hoe deze in te zetten.

Voordelen code-analyse-tools

Het is al jaren bekend dat code reviews de beste manier zijn om de kwaliteit van software te verbeteren. Helaas is dit een heel arbeidsintensief proces dat er veel projecten bij inschiet. Gelukkig valt een deel van de review te automatiseren. Er zijn veel soorten fouten of risico’s die automatisch herkend kunnen worden door software-analyse-tools. Als deze tools op de juiste manier worden gebruikt kunnen ze veel waarde toevoegen. Het grootste voordeel is gemak voor ontwikkelaars: een goede tool levert meteen inzicht en wijst precies aan waar in de code risico’s zitten.

Keuze van de juiste tool (free en open source)

Het grootste probleem van static code analysis tools is dat er geen overkoepelende tool is die voor iedereen de beste is. Heel veel tools zijn taalspecifiek, omdat elke taal zijn eigen risico’s kent en of een tool geschikt is hangt voor een ontwikkelteam hangt af van de talen die er worden gebruikt. Om te helpen met de keuze hebben we de meest volwassen tools verzameld en bijgevoegd voor welke talen ze geschikt zijn. In de onderstaande tabel zijn de aanbevolen open-source of gratis tools weergegeven. Deze tools zijn allemaal gratis te gebruiken en kunnen dus zonder extra kosten geïntegreerd worden in het ontwikkelproces en door elke ontwikkelaar worden gebruikt.

Name link Commercial model Supported languages
Sonarqube http://www.sonarqube.org Freemium – free version available Java in free version, 20 other languages supported through commercial upgrades
Checkstyle http://checkstyle.sourceforge.net Free (open source) Java
Rubocop https://rubygems.org/gems/rubocop/versions/0.31.0 Free (open source) Ruby
FxCop http://www.microsoft.com/en-us/download/details.aspx?id=6544 Included in MS SDK C#
PMD http://pmd.sourceforge.net Free (open source) Java, JavaScript, PLSQL, Apache Velocity, XML, XSL
CPD http://pmd.sourceforge.net/pmd-4.3.0/cpd.html Free (open source) duplication only, for: Java, C, C++, C#, PHP, Ruby, Fortran, JavaScript, PLSQL, Apache Velocity, Ruby, Scala, Objective C, Matlab, Python, Go
Clang http://clang-analyzer.llvm.org Free (open source) C, C++ and Objective-C
Pylint http://www.pylint.org Free (open source) Python
Simian http://www.harukizaemon.com/simian/ Freemium – free version available Most modern languages – duplication only

 

Keuze van betaalde tools en review-diensten

Er zijn verschillende leveranciers geweest die hebben gezien dat er voor veel programmeertalen niet voldoende gratis tools zijn. Deze leveranciers hebben daarom eigen betaalde tools die op meer programmeertalen van toepassing zijn. Vaak bieden ze ook aanvullende diensten rond hun analyse-tools, om zo klanten te helpen de tools op de juiste manier in te zetten. Helaas zijn er wel kosten verbonden aan onderstaande tools en diensten. Het is daardoor minder makkelijk deze tools aan alle developers te geven. Vaak worden deze tools in een testproces ingezet. De onderstaande tabel laat de meest-gebruikte tools zien.

Company Product Link Supported languages Focus on:
Checkmarx Checkmarx https://www.checkmarx.com 17 languages, see the list here  Security
Fortify HP http://www8.hp.com/us/en/software-solutions/static-code-analysis-sast/ Most modern languages Security
CAST CAST http://www.castsoftware.com Most modern languages All quality aspects
Parasoft C/J/dot Test http://www.parasoft.com/products/ C,C++,Java,.Net general testing
Gimpel PC-Lint http://www.gimpel.com/html/index.htm C and C++ Correctness
Scrutinizer Scrutinizer https://scrutinizer-ci.com PHP, Python, Ruby style, performance, security
Coverity Code advisor http://www.coverity.com C, C++ and Java security, performance, other
Veracode Veracode http://www.veracode.com Most modern languages All quality aspects
Armorize CodeSecure http://www.armorize.com/codesecure/ ASP.NET, VB.NET, C#, Java/J2EE, JSP, EJB, PHP, Classic ASP and VBScript All quality aspects
BlackDuck Code Center https://www.blackducksoftware.com Most modern languages Copyright and open source
Kiuwan Kiuwan https://www.kiuwan.com Most modern languages All quality aspects
Semmle Semmle https://semmle.com C# (and possibly others) All quality aspects
Quotium Seeker http://www.quotium.com Most modern languages Focus on security

Meer tools

Voor het maken van deze lijst is gebruik gemaakt van langere lijsten met nog meer tools. Vaak zijn de weggelaten tools nog in ontwikkeling of heel specialistisch. Voor wie ze toch wil zien, dit zijn de belangrijkste lijsten:

Tips voor invoering

Het is belangrijk om niet alleen na te denken over de tool, maar over doelen, proces en inrichting. De doelen moeten voldoende streng zijn voor de toepassing, maar niet te streng omdat dit ten koste gaat van de ontwikkelsnelheid. Bij veel tools kan men kiezen op welke soorten bevindingen wordt gezocht door middel van een configuratiebestand. Hierin wordt vastgelegd wat als risico wordt gezien en wat niet. Het is belangrijk dat iedereen in een team dezelfde instellingen gebruik.

Naast doelafspraken zijn er procesafspraken nodig. De tools zijn goed in het opsporen van symptomen (ook wel ‘code smells’ geheten) maar niet van fundamentele problemen. Maak daarom afspraken dat bevindingen niet worden weggepoetst maar dat er gezocht wordt naar de oorzaken en er indien nodig code omgeschreven wordt (‘refactoring’ geheten in scrum). Op deze manier is de tool niet een controle-middel maar juist een informatiemiddel voor ontwikkelaars.

Author: Sieuwert van Otterloo
Dr. Sieuwert van Otterloo is IT-expert en startup enthusiast. Hij heeft veel ervaring met scrum, agile, IT-beveiling, IT-contracten, IT-strategie. Sieuwert is als expert toegelaten bij NVBI, LRGD en SGOA.