JaCoCo – Messen und Optimieren von Testabdeckung für robuste Java-Anwendungen

JaCoCo ist ein Open-Source-Toolkit zur Analyse und Anzeige der Java-Codeabdeckung. Es wird unter der Eclipse Public License vertrieben. Man hat es als Ersatz für EMMA entwickelt, unter dem Dach des EclEmma Plugins für Eclipse.

Im Grunde genommen handelt es sich dabei um zwei Arten von Tools, die zum einen Anweisungen dem Java-Quellcode hinzufügen und dessen Neukompilierung einfordern und zum anderen Tools, die den Bytecode entweder vor oder während der Ausführung instrumentieren. Das Ziel von JaCoCo ist es, herauszufinden, welche Teile des Codes getestet werden, indem es die Codezeilen registriert, die man bei der Ausführung eines Tests ausführt. TDD bzw. Test Driven Development ist diesbezüglich ebenfalls ein gutes Stichwort.

Features von JaCoCo

  • Abdeckungsanalyse von Anweisungen (C0), Verzweigungen (C1), Zeilen, Methoden, Typen und zyklomatischer Komplexität (McCabe-Metrik).
  • Basiert auf Java-Bytecode und funktioniert daher auch ohne Quelldateien.
  • Einfache Integration durch Java-Agent-basierte On-the-fly-Instrumentierung. Andere Integrationsszenarien wie benutzerdefinierte class loader sind über die API möglich.
  • Framework-unabhängig: Reibungslose Integration in Java VM-basierte Anwendungen wie einfache Java-Programme, OSGi-Frameworks, Web-Container oder EJB-Server.
  • Kompatibel mit allen freigegebenen Java-Klassendateiversionen.
  • Unterstützung für verschiedene JVM-Sprachen.
  • Verschiedene Berichtsformate (HTML, XML, CSV).
  • Remote-Protokoll und JMX-Steuerung zur Anforderung von Ausführungsdaten-Dumps vom Coverage Agent zu jedem beliebigen Zeitpunkt.
  • Ant-Tasks zum Sammeln und Verwalten von Ausführungsdaten und zum Erstellen strukturierter Abdeckungsberichte.
  • Maven-Plug-in zum Sammeln von Abdeckungsinformationen und Erstellen von Berichten in Maven-Builds.

JaCoCo bietet die Instructions, Line- und Branchabdeckung. Im Gegensatz zu beispielsweise Atlassian Clover und OpenClover, die eine Instrumentierung des Quellcodes erfordern, kann JaCoCo Java Bytecode mit zwei verschiedenen Ansätzen instrumentieren:

  1. JCov on the fly, während der Code mit einem Java-Agenten ausgeführt wird beispielsweise wie Cobertura und JCov vor der Ausführung (offline)
  2. Man kann es aber auch so konfigurieren, dass man die gesammelten Daten in einer Datei speichert oder via TCP versendet. Im Gegensatz zu Cobertura und EMMA ist die Unterstützung von so ziemlich allen Java Versionen ab der Java Version 7 gewährleistet.

Tools, die JaCoCo verwenden oder enthalten

Einige davon habe ich bereits in diversen Beiträgen thematisiert. Mit einem Klick auf das jeweilige Tool kommt man auf den jeweiligen Beitrag.

  • SonarQube JaCoCo Plugin – Standardmäßig für Code Abdeckungsanalysen innerhalb der Code-Qualitätsmanagement-Plattform
  • EclEmma Eclipse (Software) Code Coverage Plugin
  • Jenkins JaCoCo Plugin
  • Netbeans JaCoCo support
  • IntelliJ IDEA (Seit Version 11)
  • Gradle JaCoCo Plugin
  • Visual Studio Team Services
  • TeamCity

Fazit

JaCoCo bietet sich für die Codeabdeckungsanalyse bei der modularen Softwareentwicklung bzw. bei den Unit Tests an. Die Abdeckungsgrade geben an, wie viele Anweisungen, Zweige usw. die Tests durchlaufen. Auf Basis der so gewonnenen Erkenntnisse kann man weitere sinnvolle Testfälle ermitteln oder aber nicht beanspruchten bzw. toten Code entfernen. Es gibt kein allgemeingültiges Mindestmaß an Codeabdeckung. Man definiert die jeweils erforderliche Testabdeckung in Anbetracht des Anwendungsfalls nach einer Risikoeinschätzung sowie der eigenen Entwickler-Fähigkeiten.

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.