[MELDEN] Von der Vision zum Code: Ein Leitfaden zur Ausrichtung der Geschäftsstrategie auf die Ziele der Softwareentwicklung ist veröffentlicht!
HOL ES DIR HIER

Was ist Codeabdeckung und wie kann sie optimiert werden?

readtime
Last updated on
February 17, 2025

A QUICK SUMMARY – FOR THE BUSY ONES

TABLE OF CONTENTS

Was ist Codeabdeckung und wie kann sie optimiert werden?

Einführung

Stellen Sie sich eine Welt vor, in der Software niemals abstürzt, in der Benutzer nie auf Fehler stoßen und in der einfach alles funktioniert. Klingt wie ein Traum, oder? Nun, die Messung der Codeabdeckung kann uns diesem Ideal näher bringen, indem wir sicherstellen, dass der Code gründlich getestet und bereit für die reale Welt ist.

In diesem Artikel untersuchen wir die Vorteile der Messung der Codeabdeckung und wie sie uns helfen kann, mehr Vertrauen in die Qualität unserer Software zu gewinnen.

Was ist Codeabdeckung?

Die Codeabdeckungsmetrik ist ein Maß, das uns sagt, wie viel unseres Quellcodes durch automatisierte Tests abgedeckt wird. Sie gibt Aufschluss über die Qualität der Tests und die Wahrscheinlichkeit, Fehler zu finden. Eine höhere Codeabdeckung bedeutet, dass mehr Code getestet wird, was unser Vertrauen in die Software erhöht.

Die Metrik hilft uns dabei, Bereiche unserer Codebasis zu identifizieren, die bei unseren Tests nicht berücksichtigt wurden, und kann uns helfen, die Qualität unseres Codes zu verbessern, indem potenzielle Fehler und Probleme aufgedeckt werden. Sie kann auch als nützliches Tool dienen, um Stakeholdern und Kunden die Gründlichkeit unserer Testbemühungen zu demonstrieren.

Andererseits birgt die Messung der Codeabdeckung auch Risiken, da man sich zu sehr auf diese Kennzahl verlässt, ein falsches Sicherheitsgefühl hat und Quantität zu viel Wert vor Qualität legt.

Vorteile der Messung der Codeabdeckung

Hilft uns, ungetesteten Code zu identifizieren

Durch die Messung der Codeabdeckung wird sichergestellt, dass alle Teile des Codes getestet werden. Es hilft uns, ungetesteten Code zu identifizieren, auf den wir uns dann konzentrieren können, um unsere Tests zu verbessern.

Verbessert die Codequalität

Die Codequalität verbessert sich, da wir Bereiche des Codes identifizieren können, die komplex oder schwer zu testen sind. Indem wir die Testabdeckung dieser Bereiche verbessern, können wir die Gesamtqualität verbessern.

Reduziert das Risiko, Fehler zu erzeugen

Die Codeabdeckung hilft uns, Fehler früh im Entwicklungszyklus zu finden. Je früher wir Fehler finden, desto einfacher und kostengünstiger sind sie zu beheben.

Spart Zeit und Ressourcen

Die Messung der Codeabdeckung hilft uns, unsere Testbemühungen zu priorisieren. Es stellt sicher, dass wir uns auf die kritischsten Teile des Codes konzentrieren, was Zeit und Ressourcen spart.

Erhöht die Kundenzufriedenheit

Eine gut getestete Codebasis führt zu einem stabileren und zuverlässigeren Softwareprodukt. Dies wiederum führt zu einer höheren Kundenzufriedenheit und Loyalität.

Risiken im Zusammenhang mit der Messung der Codeabdeckung

Falsches Sicherheitsgefühl

Eine hohe Codeabdeckung bedeutet nicht unbedingt, dass der Code fehlerfrei ist. In ungeprüften Bereichen kann es immer noch zu Fehlern kommen, die zu einem falschen Sicherheitsgefühl führen.

Quantität wird zu viel Wert auf Qualität gelegt

Wenn Sie sich zu sehr auf das Erreichen einer hohen Codeabdeckung konzentrieren, kann dies dazu führen, dass Tests aus Gründen der Abdeckung geschrieben werden, anstatt sich auf die Testqualität und -effektivität zu konzentrieren.

Eingeschränkter Geltungsbereich

Codeabdeckungsmetriken messen nur die Anzahl der Codezeilen oder Codezweige, die während des Tests ausgeführt wurden. Diese Metrik gibt nicht an, ob die Tests umfassend genug sind, um alle potenziellen Probleme zu erkennen.

Ungenaue Messung

Je nachdem, welches Tool zur Messung der Codeabdeckung verwendet wird, kann es zu Ungenauigkeiten oder Einschränkungen kommen, die sich auf die Qualität der gesammelten Daten auswirken.

Zeitaufwändig und kostspielig

Die Messung der Codeabdeckung kann zeitaufwändig und teuer sein, insbesondere bei größeren Projekten. Dies kann Ressourcen umleiten und den Entwicklungsprozess verlangsamen, wenn es nicht effektiv verwaltet wird.

Risiken, wenn Sie sich ausschließlich auf die Codeabdeckung verlassen

Wenn Sie sich ausschließlich auf die Codeabdeckung verlassen, kann dies zu ungenauen Erkenntnissen und fehlgeleiteten Entscheidungen führen. Eine hohe Codeabdeckung bedeutet nicht unbedingt eine gute Codequalität. Hier sind einige Beispiele:

  • Die Codeabdeckung kann sich eher auf die Messung der Quantität der Tests als auf deren Qualität konzentrieren. Es ist möglich, einen hohen Prozentsatz an Codeabdeckung mit ineffektiven Tests zu erreichen, die keine Fehler erkennen oder die korrekte Funktionalität sicherstellen.
  • Die Codeabdeckung kann Entwickler dazu anregen, Tests zu schreiben, die lediglich Codepfade ausführen, ohne das Verhalten des Systems wirklich zu testen. Dies kann zu falsch positiven Ergebnissen und irreführenden Ergebnissen führen.
  • Die Codeabdeckung berücksichtigt nicht unbedingt die Qualität der Tests selbst. Schlecht konzipierte oder schlecht implementierte Tests können zu ungenauen Ergebnissen führen, selbst wenn sie eine hohe Abdeckung erreichen.
  • Die Codeabdeckung kann ein falsches Sicherheitsgefühl vermitteln. Es ist möglich, eine hohe Codeabdeckung zu haben, aber immer noch Bugs und Probleme im Code zu haben, die die Tests nicht erkennen können.
  • Die Codeabdeckung kann dazu führen, dass Teile der Codebasis vernachlässigt werden, die durch die Tests nicht beansprucht werden. Dies kann dazu führen, dass wichtige Funktionen nicht getestet und übersehen werden.

Wie misst man die Codeabdeckung?

Um die Codeabdeckung zu messen, müssen wir spezielle Code-Coverage-Tools verwenden, die verfolgen können, welche Codezeilen während des Tests ausgeführt werden. Diese Tools helfen uns dabei, Lücken in unserer Testsuite zu identifizieren, sodass wir weitere Tests hinzufügen können, um den aufgedeckten Code abzudecken. Ein beliebtes Tool zur Codeabdeckung ist Jaco Co, das sich in Build-Systeme wie Maven und Gradle integrieren lässt.

Wenn wir beispielsweise eine Java-Anwendung haben, können wir jaCOCO in unserem Build-Skript so konfigurieren, dass nach jedem Testlauf ein Bericht zur Codeabdeckung generiert wird. Der Bericht zeigt uns den Prozentsatz des Codes, der von den Tests abgedeckt wurde, aufgeschlüsselt nach Klasse, Methode und Zeile.

Zusätzlich zur Verwendung von Tools zur Codeabdeckung können wir auch Plattformen für die Codequalität verwenden wie Sonar Qube um die Codeabdeckung und andere Kennzahlen zur Codequalität im Laufe der Zeit zu überwachen. Dies ermöglicht es uns, Trends zu erkennen und Regressionen frühzeitig zu erkennen.

Beispiel für eine JavaScript-Anwendung

Eine Möglichkeit, die Codeabdeckung in einer JavaScript-Anwendung zu messen, ist die Verwendung eines Tools wie NYC İstanbul. NYC ist ein Code-Coverage-Tool, das mit gängigen Test-Frameworks wie Mocha, Jasmine und Jest verwendet werden kann.

Zunächst müssten Sie NYC als Abhängigkeit in Ihrem Projekt mit einem Paketmanager wie npm installieren. Anschließend können Sie es so konfigurieren, dass ein Abdeckungsbericht generiert wird, indem Sie Ihre Testsuite mit der Befehlszeilenschnittstelle von Istanbul ausführen.

Nehmen wir zum Beispiel an, Sie haben eine JavaScript-Funktion „add“, die zwei Zahlen addiert, und Sie möchten deren Codeabdeckung messen. So könntest du das mit Mocha und NYC machen:

  1. Installiere Mocha und NYC als Dev-Abhängigkeiten:

npm install --save-dev mocha nyc

  1. Fügen Sie das Testskript zum Projektpaket hinzu. Json:

{

„Skripte“: {

„test“: „NYC Mokka“

}

}

  1. Führen Sie die Testsuite mit npm run test aus

Dadurch wird ein Deckungsbericht im HTML-Format unter dem generiert. Verzeichnis /coverage. Sie können die Datei index.html in einem Webbrowser öffnen, um den Coverage-Bericht anzuzeigen, der zeigt, welche Codezeilen während des Tests ausgeführt wurden und welche nicht.

Alternativen zur Codeabdeckung

Es gibt mehrere Alternativen zu Kennzahlen zur Codeabdeckung, mit denen Teams die Softwarequalität messen können:

Anzahl der nach der Veröffentlichung gefundenen Bugs

Es ist eine Metrik, die die Anzahl der Fehler oder Probleme misst, die in einem Softwareprodukt entdeckt wurden, nachdem es für Kunden oder Benutzer veröffentlicht wurde. Indem wir die Anzahl der nach der Veröffentlichung entdeckten Fehler verfolgen, können wir Bereiche identifizieren, in denen unsere Testprozesse verbessert werden müssen, und diese beheben, um zukünftige Probleme zu vermeiden.

Mittlere Reparaturzeit

MTTR (Mean Time To Repair) ist eine Kennzahl für die Softwarequalität, die die durchschnittliche Zeit misst, die zur Behebung eines Systemausfalls oder -defekts benötigt wird. Dies ist eine wichtige Kennzahl, da sie Aufschluss darüber gibt, wie schnell ein Unternehmen auf Probleme mit seinen Softwareprodukten reagieren und diese lösen kann. Indem wir die MTTR verfolgen, können wir Bereiche identifizieren, in denen unsere Softwareentwicklungs- und Bereitstellungsprozesse verbessert werden müssen, und daran arbeiten, sie zu optimieren, um den Zeitaufwand für die Problemlösung zu reduzieren.

Mittlere Zeit bis zum Scheitern

MTTF (Mean Time To Failure) ist eine Kennzahl für die Softwarequalität, die die durchschnittliche Zeit zwischen Systemausfällen oder -defekten misst. Dies ist eine wichtige Kennzahl, da sie Aufschluss über die Zuverlässigkeit und Stabilität eines Softwareprodukts gibt. Durch das Tracking der MTTF können wir Bereiche der Software identifizieren, die anfällig für Fehler oder Defekte sind, und an deren Verbesserung arbeiten, um die Zuverlässigkeit und Stabilität des Produkts zu erhöhen.

Mutationstests

Mutationstests beinhalten das Einfügen von Fehlern (Mutationen) in den Code, um zu sehen, ob die Tests sie erkennen können. Es bietet eine gründlichere Methode zur Messung der Testqualität als die Codeabdeckung, da es die Fähigkeit von Tests testet, bestimmte Fehler zu erkennen. Mutationstests sind komplexer und ressourcenintensiver als Codeabdeckung und eignen sich daher besser für kritische Systeme, bei denen gründliche Tests unerlässlich sind.

Statische Codeanalyse

Bei der statischen Codeanalyse wird der Code analysiert, ohne ihn auszuführen, und nach Fehlern und Sicherheitslücken gesucht. Es kann Probleme identifizieren, die bei Tests möglicherweise nicht erkannt werden, wie z. B. potenzielle Sicherheitslücken oder unbenutzter Code. Heutzutage verwenden fast alle Projekte und Frameworks statische Codeanalysen. Wenn es um JS/TS geht, erfolgt dies normalerweise mit `eslint`.

Feedback der Nutzer

Der Net Promoter Score (NPS) ist eine weit verbreitete Kennzahl zur Kundenzufriedenheit, die misst, wie wahrscheinlich es ist, dass Nutzer ein Produkt oder eine Dienstleistung anderen empfehlen. Nutzerfeedback kann wertvolle Einblicke in das Nutzererlebnis geben und Bereiche aufzeigen, in denen das Produkt möglicherweise verbessert werden muss. Der NPS ist zwar kein direktes Maß für die Softwarequalität, kann aber eine nützliche Ergänzung zur Codeabdeckung und anderen Kennzahlen sein.

Wann sollten Sie die einzelnen Optionen wählen:

  • Verwenden Sie Kennzahlen zur Codeabdeckung, um sicherzustellen, dass die Tests einen ausreichenden Teil der Codebasis abdecken, insbesondere für kritische Systeme oder Systeme mit strengen regulatorischen Anforderungen.
  • Verwenden Sie Mutationstests, wenn gründliche Tests unerlässlich sind und Sie sicherstellen müssen, dass Tests bestimmte Fehler im Code erkennen.
  • Verwenden Sie die statische Codeanalyse, wenn Sie Probleme erkennen müssen, die bei manuellen Code-Reviews möglicherweise nicht erkannt werden. Die aktuellen Kosten für die Verwendung der automatisierten statischen Codeanalyse sind relativ gering, aber wir können viele Probleme damit vermeiden.
  • Verwenden Sie NPS oder andere Nutzer-Feedback-Metriken, um Einblicke in die Benutzererfahrung zu erhalten und Bereiche zu identifizieren, in denen das Produkt möglicherweise verbessert werden muss.

Zusammenfassung

Mithilfe von Codeabdeckungsmetriken können Teams Bereiche ihrer Codebasis identifizieren, die mehr Tests erfordern, und die Effektivität ihrer Testbemühungen messen. Auf diese Weise können sie die Qualität ihrer Software verbessern, was zu einer höheren Kundenzufriedenheit, geringeren Wartungskosten und einer schnelleren Markteinführung führt.

Mit den richtigen Kennzahlen können Sie Bereiche identifizieren, die verbessert werden müssen, den Fortschritt verfolgen und sicherstellen, dass Ihre Software den Bedürfnissen Ihrer Benutzer entspricht. Tauchen Sie ein in die Welt der Softwarequalitätsmetriken und wählen Sie die richtigen für Ihr Produkt aus. Ihre Benutzer (und Ihr Team) werden es Ihnen danken.

Frequently Asked Questions

No items found.

Our promise

Every year, Brainhub helps 750,000+ founders, leaders and software engineers make smart tech decisions. We earn that trust by openly sharing our insights based on practical software engineering experience.

Authors

Olga Gierszal
github
IT-Outsourcing-Marktanalyst und Redakteur für Softwaretechnik

Enthusiast für Softwareentwicklung mit 8 Jahren Berufserfahrung in der Technologiebranche. Erfahrung im Outsourcing von Marktanalysen, mit besonderem Schwerpunkt auf Nearshoring. In der Zwischenzeit unser Experte darin, technische, geschäftliche und digitale Themen auf verständliche Weise zu erklären. Autor und Übersetzer nach Feierabend.

Olga Gierszal
github
IT-Outsourcing-Marktanalyst und Redakteur für Softwaretechnik

Enthusiast für Softwareentwicklung mit 8 Jahren Berufserfahrung in der Technologiebranche. Erfahrung im Outsourcing von Marktanalysen, mit besonderem Schwerpunkt auf Nearshoring. In der Zwischenzeit unser Experte darin, technische, geschäftliche und digitale Themen auf verständliche Weise zu erklären. Autor und Übersetzer nach Feierabend.

Read next

No items found...