- 1 Abschnitt
- 9 Lektionen
- Um den Kurs in deinem Profil zu hinterlegen klicke oben auf Starten
Testabdeckung und -metriken
Messung der Testabdeckung
Die Testabdeckung ist eine Metrik, die misst, wie viel Prozent des Codes durch Tests abgedeckt sind. Eine hohe Testabdeckung bedeutet, dass ein großer Teil des Codes durch Tests überprüft wird, was die Wahrscheinlichkeit von unentdeckten Fehlern reduziert.
1. Code Coverage Tools und ihre Verwendung:
Es gibt verschiedene Tools zur Messung der Testabdeckung, die in den Entwicklungsprozess integriert werden können. Diese Tools analysieren den Code und erstellen Berichte darüber, welche Teile des Codes durch Tests abgedeckt sind.
Beispiele für Code Coverage Tools:
- Python:
coverage.py - Java:
JaCoCo - JavaScript:
Istanbul - .NET:
Coverlet
Beispiel: Verwendung von coverage.py in Python:
# Installieren des coverage-Tools
pip install coverage
# Ausführen der Tests mit Coverage-Tracking
coverage run -m pytest
# Generieren eines Coverage-Berichts
coverage report
# Generieren eines HTML-Coverage-Berichts
coverage html
2. Unterschiedliche Arten der Testabdeckung:
Es gibt verschiedene Metriken zur Messung der Testabdeckung, jede mit einem anderen Fokus.
Arten der Testabdeckung:
- Statement Coverage (Anweisungsabdeckung): Prozentsatz der ausgeführten Anweisungen im Code.
- Branch Coverage (Zweigabdeckung): Prozentsatz der ausgeführten Codezweige (if/else, switch/case).
- Function Coverage (Funktionsabdeckung): Prozentsatz der ausgeführten Funktionen oder Methoden.
- Path Coverage (Pfadabdeckung): Prozentsatz der ausgeführten Codepfade, einschließlich aller möglichen Kombinationen von Kontrollfluss.
Beispiel für eine Coverage-Analyse in Python:
# Erstellen eines Berichts mit verschiedenen Abdeckungsmetriken
coverage run -m pytest
coverage report -m
Testmetriken
Neben der Testabdeckung gibt es weitere Metriken, die zur Bewertung der Testqualität verwendet werden können.
1. Testfallanzahl:
Die Anzahl der Testfälle in einem Projekt gibt Aufschluss darüber, wie gründlich der Code getestet wird. Eine hohe Anzahl von Testfällen kann auf eine detaillierte und umfassende Teststrategie hinweisen.
2. Fehlerfindungsrate:
Die Fehlerfindungsrate misst, wie viele Fehler durch die Tests gefunden werden. Diese Metrik hilft, die Effektivität der Tests zu bewerten.
3. Testausführungszeit:
Die Zeit, die benötigt wird, um alle Tests auszuführen, ist ebenfalls eine wichtige Metrik. Eine längere Testausführungszeit kann auf ineffiziente Tests oder eine große Anzahl von Tests hinweisen.
4. Teststabilität:
Die Teststabilität misst, wie oft Tests fehlschlagen, wenn sich der Code nicht geändert hat. Instabile Tests können auf Probleme im Testcode oder in der Testumgebung hinweisen.
Beispiel für eine einfache Metrikanalyse in Python:
import pytest
def test_add():
assert add(2, 3) == 5
def test_subtract():
assert subtract(3, 2) == 1
def test_multiplication():
assert multiply(2, 3) == 6
# Berechnung der Testfallanzahl
def count_test_cases():
test_cases = [test_add, test_subtract, test_multiplication]
return len(test_cases)
print("Anzahl der Testfälle:", count_test_cases())
# Beispiel für die Berechnung der Fehlerfindungsrate (fiktive Werte)
def calculate_defect_detection_rate():
total_defects = 10 # Anzahl der insgesamt gefundenen Fehler
detected_defects = 8 # Anzahl der durch Tests gefundenen Fehler
return detected_defects / total_defects
print("Fehlerfindungsrate:", calculate_defect_detection_rate())
Interpretation und Nutzung der Metriken
1. Verbesserungsmöglichkeiten identifizieren:
Durch die Analyse der Testabdeckungsmetriken können Bereiche des Codes identifiziert werden, die unzureichend getestet sind. Dies ermöglicht gezielte Verbesserungen der Tests.
2. Teststrategie anpassen:
Die Ergebnisse der Metrikanalyse können dazu verwendet werden, die Teststrategie anzupassen. Beispielsweise können Tests optimiert werden, um die Ausführungszeit zu verkürzen oder die Stabilität zu erhöhen.
3. Qualitätssicherung:
Eine kontinuierliche Überwachung der Testmetriken trägt zur Qualitätssicherung bei. Durch regelmäßige Berichterstellung und Analyse können langfristige Trends erkannt und entsprechende Maßnahmen ergriffen werden.
Beispiel für die regelmäßige Berichterstellung:
# GitHub Actions Workflow zur regelmäßigen Berichterstellung
name: Test and Coverage Report
on:
schedule:
- cron: '0 0 * * 1' # Wöchentlich am Montag
jobs:
test-and-report:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Install dependencies
run: |
pip install pytest coverage
- name: Run tests with coverage
run: |
coverage run -m pytest
coverage report
coverage html
- name: Upload coverage report
uses: actions/upload-artifact@v2
with:
name: coverage-report
path: htmlcov/
