
Code Coverage ist ein wichtiges Maß für die Qualität von Software. Es zeigt, welche Teile des Quellcodes durch Tests ausgeführt wurden. Dies kann Funktionen, Zeilen oder Zweige sein, die ausgeführt wurden, oder auch komplexere Metriken wie die Bewertung unabhängiger Bedingungen in Anweisungen. Hohe Codeabdeckung ist wünschenswert, da sie oft gut getestete Software anzeigt. Allerdings kann das Schreiben von Tests zur Erreichung hoher Codeabdeckung mühsam und teuer sein.
In diesem Artikel zeigen wir anhand eines Beispiels, wie man KI-Codeassistenten und Codeabdeckungstools zusammen verwenden kann, um Unit-Tests zu generieren und die Codeabdeckung zu erhöhen. Wir geben dem KI-Codeassistenten auch die Möglichkeit zu überprüfen, ob die Abdeckungsmetrik durch Ausführen der neu generierten Unit-Tests tatsächlich gestiegen ist.
Das Beispiel in diesem Artikel verwendet Microsoft's GitHub Copilot in Visual Studio Code mit Coco, einer Codeabdeckungslösung für C/C++, C#, Tcl und Qt's QML. Dieses Setup ist generisch und kann für andere Codeabdeckungstools und KI-Codeassistenten angepasst werden, wie zum Beispiel Cursor und Claude Code. Auch andere Unit-Test-Frameworks wie GoogleTest oder Catch2 könnten verwendet werden.
Für den Aufbau nutzen wir ein vorhandenes Beispiel für einen einfachen Taschenrechner mit einem Ausdrucksparsen inklusive Baseline-Unit-Tests. Wir starten mit der Version parser_v4 und einem funktionierenden Setup von Copilot, Coco und der Fähigkeit, den Taschenrechner und die begleitenden Unit-Tests zu kompilieren und auszuführen.
Durch die Verwendung von Codeabdeckung mit einem KI-Codeassistenten können wir herausfinden, welche Bereiche im Code von neuen Unit-Tests profitieren würden, um eine höhere Abdeckung zu erreichen. Dies ist besonders nützlich in sicherheitszertifizierten Bereichen wie der Automobil- oder Luftfahrtindustrie, wo eine hohe Testabdeckung erforderlich ist.
Es besteht auch die Möglichkeit, andere Metriken mit der Codeabdeckung zu kombinieren, um Bereiche zu identifizieren, die neue Unit-Tests benötigen. In unserer Arbeit haben wir den "CRAP-Score" verwendet, eine Kombination aus McCabes zyklomatischer Komplexitätsmetrik und Codeabdeckung, um riskantere Bereiche zu identifizieren.