Overzicht code analyse tools
| Sieuwert van Otterloo |
Agile
Software
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 |
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 | https://pypi.org/project/pylint | 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 | 20 languages, see the list here | 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 |
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:
- De US government NIST security tools list
- De Wikipedia lijst van static analysis tools
- De lijst van door CERT gemaakte analyse tools
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.
Dr. Sieuwert van Otterloo (CISA, CIPP/E) is IT-deskundige met kennis van software-kwaliteit, IT-strategie, projectmanagement, privacy, en verantwoord gebruik van AI. Hij geeft les aan de VU, doet onderzoek aan de HU en geeft advies en doet reviews bij organisaties door heel Nederland. Hij oprichter en directeur van ICT Institute.