Flaky-Tests: Was sie verursacht und wie man sie endgültig behebt

  1. Startseite
  2. Blog
  3. Testautomatisierung

Testautomatisierung

Flaky-Tests: Was sie verursacht und wie man sie endgültig behebt

Ein Test, der zufällig fehlschlägt, lehrt Ihr Team, Fehler zu ignorieren. Erfahren Sie, wie Sie bestätigen, dass ein Test fehlerhaft ist, die wahre Ursache ermitteln und das Problem beheben können. Anhand von Demos wird gezeigt, was tatsächlich funktioniert.

9 Min. Lesezeit
Flaky-Tests: Was verursacht sie und wie kann man sie endgültig beheben?

Das Wichtigste

  • Ein unzuverlässiger Test besteht und schlägt mit demselben Code ohne Änderung fehl.
  • Die üblichen Ursachen sind Timing, gemeinsam genutzter Status, instabile Daten, externe Dienste und Umgebungsunterschiede.
  • Ersetzen Sie feste Ruhezeiten durch Warten auf eine bestimmte Bedingung und geben Sie jedem Test eigene Daten.
  • Wiederholungsversuche können echte Fehler verbergen. Stellen Sie einen fehlerhaften Test unter Quarantäne, reparieren Sie ihn innerhalb einer Frist oder löschen Sie ihn.

Der Build wird rot, jemand klickt auf „Erneut ausführen“, er wird bestanden und alle machen weiter. Es scheint harmlos, aber unzuverlässige Tests zerstören langsam das Wertvollste, was eine Testsuite hat: das Vertrauen der Menschen in sie. Während es sich bei Fehlern normalerweise um Lärm handelt, werden auch echte Fehler durchgewunken.

In diesem Leitfaden erfahren Sie, warum Tests unregelmäßig werden und wie Sie die einzelnen Ursachen richtig beheben können. Wir haben die Timing- und Shared-State-Demos in Python 3.13 ausgeführt und die angezeigten Zahlen stammen aus diesen Läufen. Dabei handelt es sich um kleine Demonstrationen, die dazu dienen sollen, die Schuppenbildung leicht zu erkennen, sodass Ihre eigenen Ausfallraten unterschiedlich ausfallen.

Was ist ein Flockentest?

Ein Flockentest liefert unterschiedliche Ergebnisse für denselben Code. Es besteht einen Durchlauf und schlägt beim nächsten fehl, obwohl sich am Produkt nichts geändert hat. Möglicherweise liegt ein Fehler im Test vor, oder der Code enthält einen echten zeitweiligen Fehler. Diese zweite Möglichkeit ist genau der Grund, warum Sie sie nicht einfach abtun sollten.

Warum Flockentests so kostspielig sind

  • Vertrauen verloren. Sobald Menschen davon ausgehen, dass Rot „wahrscheinlich schuppig“ bedeutet, hören sie auf, echte Fehler zu untersuchen.
  • Zeitverschwendung. Entwickler verbringen Stunden damit, Pipelines erneut auszuführen und Fehler zu untersuchen, die nichts mit ihrer Änderung zu tun haben.
  • Langsamere Bereitstellung. Zusammenführungen und Veröffentlichungen warten auf Wiederholungen, was den Sinn von CI/CD untergräbt.
  • Versteckte Fehler. Race-Bedingungen im Produkt können wie Testgeräusche aussehen, und das sind diejenigen, die in der Produktion schädlich sind.

Häufige Ursachen auf einen Blick

Ursache Typisches Zeichen Übliche Lösung
Timing und Asynchronität Schlägt häufiger fehl, wenn CI ausgelastet ist Warten Sie auf eine Bedingung
Geteilter Zustand Schlägt abhängig von der Testreihenfolge fehl Daten isolieren, Status zurücksetzen
Daten und Zufälligkeit Schlägt zu bestimmten Zeiten oder Tagen fehl Kontrollieren Sie die Uhr und säen Sie
Spröde Selektoren Schlägt nach Änderungen der Benutzeroberfläche fehl Verwenden Sie stabile Locators
Externe Dienstleistungen Schlägt fehl, wenn eine Abhängigkeit langsam ist Machen Sie sich über sie lustig oder stoßen Sie sie an
Umgebungsunterschiede Wird lokal bestanden, schlägt im CI fehl An Behältern ausrichten
Ressourcengrenzen Schlägt bei Parallelläufen fehl Mitarbeiter optimieren, Konflikte beseitigen

Ursache 1: Timing und feste Schlafzeiten

Dies ist die häufigste Ursache. Bei einem Test wird davon ausgegangen, dass die Hintergrundarbeit nach einer festgelegten Verzögerung abgeschlossen wird. Um den Effekt zu sehen, haben wir einen kleinen Test geschrieben, bei dem die Arbeit bis zu 2 ms dauert, während der Test nur 1 ms wartet, bevor er prüft:

def flaky_timing():
    result = {}
    def work():
        time.sleep(random.uniform(0, 0.002))
        result["done"] = True
    threading.Thread(target=work).start()
    time.sleep(0.001)        # hope it has finished
    assert result.get("done")

Die Lösung besteht darin, auf den tatsächlichen Zustand zu warten, mit einer großzügigen Obergrenze:

def fixed_timing():
    result = threading.Event()
    def work():
        time.sleep(random.uniform(0, 0.002))
        result.set()
    threading.Thread(target=work).start()
    assert result.wait(timeout=1)   # continues as soon as it is ready

Wir haben jede Version 200 Mal ausgeführt:

Version Ausfälle von 200
Fester Schlaf 102
Warten Sie auf eine Bedingung 0

Das Ergebnis ist mehr als nur Zuverlässigkeit. Die feste Version bewegt sich weiter, sobald die Arbeit erledigt ist, daher ist sie normalerweise auch schneller. Ein längerer Ruhezustand würde dazu führen, dass die erste Version seltener fehlschlägt, aber jede Ausführung wäre dann langsamer und könnte auf einem ausgelasteten CI-Rechner immer noch fehlschlagen.

Bei Browsertests gilt das gleiche Prinzip. Verwenden Sie das automatische Warten von Playwright oder explizite Selenium-Wartezeiten anstelle von time.sleep:

# Playwright: retries until true or a timeout is reached
expect(page.get_by_text("Order placed")).to_be_visible()

# Selenium: an explicit wait for a condition
WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.ID, "confirmation"))
)

Ursache 2: Gemeinsamer Status und Testreihenfolge

Wenn Tests Daten gemeinsam nutzen, kann sich einer auf einen anderen auswirken, und das Ergebnis hängt von der Reihenfolge ab, in der sie ausgeführt werden. Diese beiden Tests verwenden eine gemeinsame Liste:

store = []

def test_add():
    store.append("x")
    assert len(store) == 1

def test_empty():
    assert store == []
Bestellen test_add test_empty
leeren, dann hinzufügen Pass Pass
hinzufügen, dann leeren Pass Scheitern

Unser Lauf hat dies bestätigt, und das ist der Grund, warum eine Suite Monate dauern und dann abbrechen kann, wenn jemand parallele Läufe oder ein Plugin für zufällige Reihenfolge hinzufügt. Das Heilmittel ist Isolation:

  • Geben Sie jedem Test neue Daten, indem Sie eine Vorrichtung verwenden, die ihn einrichtet und bereinigt. Unser Pytest-Tutorial zeigt, wie.
  • Erstellen Sie anstelle eines gemeinsamen „Testbenutzers“ eindeutige Datensätze, z. B. eine E-Mail mit einem zufälligen Suffix.
  • Binden Sie Datenbanktests in eine Transaktion ein und führen Sie einen Rollback durch, wenn Ihr Setup dies zulässt.
  • Führen Sie regelmäßig Tests in zufälliger Reihenfolge durch, damit diese Probleme frühzeitig auftauchen.

Ursache 3: Daten, Zeitzonen und Zufälligkeit

Ein Test, der die ganze Woche über bestanden wird, kann an einem Samstag, um Mitternacht oder am letzten Tag des Monats fehlschlagen. Machen Sie Zeit zu einer Eingabe, anstatt die Uhr in Ihrer Logik abzulesen:

def is_weekend(today=None):
    today = today or datetime.date.today()
    return today.weekday() >= 5

is_weekend(datetime.date(2026, 11, 7))   # True  (a Saturday)
is_weekend(datetime.date(2026, 11, 9))   # False (a Monday)

Diese Tests liefern an jedem Tag das gleiche Ergebnis. Legen Sie in Tests ebenfalls einen festen Startwert für Zufallswerte fest und protokollieren Sie ihn, wenn Sie Zufallsdaten verwenden, damit Sie einen Fehler reproduzieren können. Gehen Sie nicht von einer bestimmten Reihenfolge aus Mengen, Wörterbüchern aus externen Quellen oder Datenbankabfragen ohne ORDER BY aus.

Ursache 4: Spröde Selektoren

Ein Test, der eine Schaltfläche mit div:nth-child(3) > span findet, bricht bei jeder Layout-Optimierung ab und schlägt möglicherweise nur bei einigen Bildschirmgrößen oder -varianten fehl. Bevorzugen Sie Locators basierend auf dem, was Benutzer sehen, oder dedizierte Testattribute. Unser Leitfaden zu Playwright-Locators erklärt die Reihenfolge, in der man sie ausprobiert. Animationen sind eine weitere häufige Problemquelle, daher sollten Sie erwägen, sie in Testumgebungen zu deaktivieren.

Ursache 5: Externe Dienste und Netzwerke

Wenn ein Test einen echten Zahlungsanbieter oder eine Drittanbieter-API aufruft, hängt das Ergebnis von der Betriebszeit und den Ratenlimits einer anderen Person ab. Machen Sie diese Aufrufe für die meisten Tests simulieren und führen Sie eine kleine Anzahl separater Vertragsprüfungen gegenüber dem tatsächlichen Dienst durch, damit Sie immer noch erfahren, ob sich dieser ändert. Unser Leitfaden zu Einheits- und Integrationstests erklärt, wie man diese aufteilt.

Tipp: „Lokal bestanden, in CI fehlgeschlagen“ bedeutet normalerweise einen Unterschied in der Geschwindigkeit, Zeitzone, Ressourcen oder Versionen. Durch das lokale Ausführen von Tests im selben Container-Image und in CI werden viele davon entfernt. Unser Docker Compose-Tutorial kann helfen.

So diagnostizieren Sie einen schuppigen Test

  1. Bestätigen Sie es. Führen Sie den Test viele Male ohne Änderungen durch. Mit Pytest funktioniert eine einfache Shell-Schleife, und ein Plugin wie pytest-repeat liefert Ihnen --count=100.
  2. Zeichnen Sie Beweise auf. Speichern Sie Protokolle, Screenshots und Spuren für jeden Fehler. Der Trace Viewer von Playwright ist hier besonders nützlich.
  3. Betonen Sie die Bedingungen. Führen Sie es mit begrenzter CPU parallel oder in zufälliger Reihenfolge aus. Wenn man es häufiger scheitert, wird das Lernen einfacher.
  4. Testen Sie es alleine. Wenn es immer alleine funktioniert, aber in der Suite fehlschlägt, vermuten Sie den gemeinsamen Status.
  5. Suchen Sie nach Mustern. Überprüfen Sie, welche Maschinen, Tageszeiten und benachbarten Tests beteiligt sind.
  6. Überprüfen Sie das Produkt. Fragen Sie ehrlich, ob dies eine echte Rennbedingung in Ihrer Anwendung sein könnte.

Sind automatische Wiederholungsversuche eine Lösung?

Wiederholungsversuche sind ein nützliches kurzfristiges Sicherheitsnetz, aber kein Heilmittel. Ein einziger automatischer Wiederholungsversuch in CI kann die Arbeit während der Untersuchung am Laufen halten, aber ein Test, der zum Bestehen eines Tests einen Wiederholungsversuch erfordert, sagt Ihnen trotzdem etwas. Schlimmer noch: Ein tatsächlich auftretender Produktfehler, der in 20 % der Fälle fehlschlägt, bleibt bei einem erneuten Versuch normalerweise unbemerkt.

Verwenden Sie Wiederholungsversuche mit diesen Regeln: Beschränken Sie sie auf ein oder zwei, zeichnen Sie jeden Test auf, bei dem einer erforderlich war, und behandeln Sie diese Liste als Ihre To-Do-Liste. Ein als „bestanden bei Wiederholung“ gemeldeter Test sollte als zu untersuchendes Problem und nicht als Erfolg gewertet werden.

Ein Teamprozess für flockige Tests

  1. Messen. Verfolgen Sie, welche Tests fehlschlagen, und geben Sie dann denselben Commit weiter. Viele CI-Tools und Testreporter können dies zeigen.
  2. Quarantäne. Verschieben Sie einen bestätigten Flaky-Test aus dem Blockierungslauf, damit er nicht mehr alle stört, aber führen Sie ihn weiterhin aus und verfolgen Sie ihn.
  3. Weisen Sie einen Eigentümer und eine Frist zu. Eine Quarantäne ohne Frist wird einfach zu einem Friedhof.
  4. Reparieren oder löschen. Wenn es sich nicht lohnt, einen Test zu reparieren, entfernen Sie ihn und prüfen Sie, ob seine Abdeckung an anderer Stelle noch vorhanden ist.
  5. Vorbeugen. Führen Sie neue Tests mehrmals durch, bevor Sie sie zusammenführen. Ein Test, der einmal in fünfzig Durchgängen fehlschlägt, ist jetzt besser zu erkennen als in sechs Monaten.

Behandeln Sie einen flockigen Test als Fehler mit Priorität und nicht als Hintergrundgeräusch. Auch hier gelten Schweregrad und Priorität, wie unter Schweregrad vs. Priorität beschrieben. Wenn Unzulänglichkeiten weit verbreitet sind, informieren Sie sich über umfassendere Testautomatisierungsfehler und überlegen Sie, ob Sie zu viele Tests auf Browserebene haben.

Fazit

Flockige Tests wirken zufällig, sind es aber selten. Fast jeder kommt auf eine Annahme über Zeit, Reihenfolge, Daten oder Umgebung zurück, die nicht immer wahr ist. Wählen Sie den Test aus, der diese Woche in Ihrer Pipeline am häufigsten fehlschlägt. Führen Sie es fünfzig Mal aus, finden Sie die Annahme und korrigieren Sie sie endgültig. Ein echter Fix bringt einem Team mehr bei als hundert Wiederholungen.

Häufige Fragen

Was ist ein Flockentest?

Ein flockiger Test besteht bei einigen Durchläufen den Test und schlägt bei anderen fehl, ohne dass sich der Code ändert. Die Ursache kann im Test, der Umgebung oder dem Produkt liegen.

Was verursacht schuppige Tests?

Die häufigsten Ursachen sind Timing-Annahmen, gemeinsamer Status zwischen Tests, instabile Selektoren, externe Dienste, Datumsverarbeitung und Unterschiede zwischen CI und lokalen Maschinen.

Soll ich Flockentests löschen?

Versuchen Sie zunächst, sie zu beheben. Wenn ein Test von geringem Wert ist und die Reparatur kostspielig ist, ist es in Ordnung, ihn zu löschen. Stellen Sie jedoch sicher, dass die wichtige Abdeckung an anderer Stelle vorhanden ist.

Sollte ich fehlgeschlagene Tests automatisch wiederholen?

Als begrenztes Sicherheitsnetz ja, aber zeichnen Sie jeden Wiederholungsversuch auf und untersuchen Sie ihn. Allein Wiederholungsversuche verbergen Probleme und können dazu führen, dass echte, zeitweise auftretende Fehler in die Produktion gelangen.

Wie finde ich Flockentests?

Suchen Sie mithilfe Ihres CI-Verlaufs oder eines Berichtstools nach Tests, die fehlschlagen und denselben Commit weitergeben. Sie können Fehlertests auch mehrmals in einer Schleife ausführen.

Lerne weiter

Arbeiten Sie mit Stack Quora

Benötigen Sie Hilfe beim Testen, WordPress oder SEO?

Wir helfen Teams, bessere Software zu liefern und ihre Websites zu erweitern. Sagen Sie uns, woran Sie gerade arbeiten, und wir schlagen Ihnen einen klaren nächsten Schritt vor.

Lesen Sie weiter

Weitere Anleitungen finden Sie unter Tests, KI und moderne Entwicklung

Hat Ihnen dieser Artikel gefallen? Wählen Sie ein Thema und springen Sie direkt in unsere neuesten Tutorials.

Künstliche Intelligenz

KI-Halluzinationen erklärt: Warum Sprachmodelle Dinge erfinden und wie man sie reduziert

KI-Halluzinationen erklärt: Was sie sind, warum Sprachmodelle sie produzieren, gängige Typen, wie man sie mit Erdung und Eingabeaufforderungen reduz…

Artikel lesen →
DevOps

Erklärte Umgebungsvariablen: .env-Dateien, Geheimnisse und Konfiguration richtig gemacht

Umgebungsvariablen anhand von Python-Beispielen erklärt, die wir ausgeführt haben: Sie lesen und festlegen, warum jeder Wert ein String ist, .env-Da…

Artikel lesen →
Softwareentwicklung

API-Ratenbegrenzung erklärt: Algorithmen, Header und Behandlung von 429-Fehlern

API-Ratenbegrenzung anhand einer von uns durchgeführten Simulation erklärt: Token-Bucket, festes Fenster, gleitendes Fenster, 429 Antworten, Ratenbe…

Artikel lesen →
Testautomatisierung

Spott in Python: unittest.mock, Patch und die Fehler, die Tests zum Lügen machen

Mocking in Python mit unittest.mock, getestet: Mock und return_value, side_effect, Patchen, wo ein Name verwendet wird, Spezifikation und Autospec, …

Artikel lesen →
Softwaretests

Code-Abdeckung erklärt: Leitungs- und Zweigstellenabdeckung und was 100 % wirklich bedeutet

Erklärung der Codeabdeckung anhand eines echten Coverage.py-Laufs: Zeilen-, Zweig- und Bedingungsabdeckung, Lesen eines Berichts, warum bei 100 % Ab…

Artikel lesen →
Datenbanken & SQL

DELETE vs. TRUNCATE vs. DROP in SQL: Unterschiede, Rollback und Verwendungszweck

DELETE vs. TRUNCATE vs. DROP erklärt mit getestetem SQL: was jeweils entfernt wird, Rollback, Trigger, Identitätsrücksetzung, Geschwindigkeit und wi…

Artikel lesen →
Datenbanken & SQL

Erklärte SQL-Ansichten: Erstellen, nutzen und vermeiden Sie Fallstricke mit Beispielen

SQL-Ansichten anhand der von uns ausgeführten Abfragen erklärt: Erstellen einer Ansicht, Live-Ergebnisse, Ausblenden von Spalten, Leistung, aktualis…

Artikel lesen →
Softwareentwicklung

TypeScript-Schnittstelle vs. Typ: Echte Unterschiede, getestet mit dem Compiler

TypeScript-Schnittstelle vs. Typ, überprüft mit dem echten Compiler: Was beide können, was nur einer kann, Deklarationszusammenführung, Erweiterunge…

Artikel lesen →
Softwareentwicklung

Python *args und **kwargs erklärt: Flexible Funktionen mit klaren Beispielen

Python *args und **kwargs erklärt mit Code, den wir ausgeführt haben: Packen und Entpacken, Parameterreihenfolge, Nur-Schlüsselwort- und Nur-Positio…

Artikel lesen →
Softwareentwicklung

Python-Lambda-Funktionen: Syntax, tatsächliche Verwendung und wann man sie nicht verwendet

Python-Lambda-Funktionen erklärt mit Code, den wir ausgeführt haben: Syntax, Sortierung mit Schlüssel, Karte und Filter, Abschlüsse, die Late-Bindin…

Artikel lesen →
Künstliche Intelligenz

Was sind KI-Agenten? Wie sie funktionieren, mit einer einfachen Agentenschleife, die Sie ausführen können

Was sind KI-Agenten? Eine einfache Anleitung zur Agentenschleife, zu Tools, Speicher und Leitplanken, mit einer kleinen Python-Schleife, die wir aus…

Artikel lesen →
DevOps

Überwachung vs. Beobachtbarkeit: Der wahre Unterschied, mit Protokollen, Metriken und Traces

Überwachung vs. Beobachtbarkeit erklärt: bekannte und unbekannte Fehler, Protokolle, Metriken und Spuren, eine exemplarische Vorgehensweise für Chec…

Artikel lesen →
DevOps

Docker-Volumes vs. Bind Mounts: Containerdaten auf die richtige Art und Weise beibehalten

Docker-Volumes vs. Bind-Mounts erklärt: Warum Containerdaten verschwinden, benannte Volumes, Bind-Mounts, tmpfs, Compose-Beispiele, Backups, Berecht…

Artikel lesen →
Testautomatisierung

TDD vs. BDD: Hauptunterschiede, eine Funktion, die auf beide Arten entwickelt wurde und wann sie jeweils verwendet werden sollte

TDD vs. BDD erklärt mit einer Rabattfunktion, die in beide Richtungen aufgebaut ist: Rot-Grün-Refaktor mit Code, den wir ausgeführt haben, Gegeben-W…

Artikel lesen →
Softwaretests

Benutzerakzeptanztests (UAT): Prozess, Checkliste und reale Beispiele

Benutzerakzeptanztests erklärt: Wer führt ihn durch, wie unterscheidet er sich von der Qualitätssicherung, ein siebenstufiger Prozess, eine UAT-Test…

Artikel lesen →
Datenbanken & SQL

Erklärte SQL-NULL-Werte: IS NULL, COALESCE, NULLIF und die zu vermeidenden Fallen

SQL-NULL-Werte, die mit von uns ausgeführten Abfragen erklärt wurden: dreiwertige Logik, IS NULL, COALESCE, NULLIF, wie Aggregate, Joins und Sortier…

Artikel lesen →
Datenbanken & SQL

SQL CASE WHEN-Anweisung: Syntax, reale Beispiele und häufige Fehler

SQL CASE WHEN anhand der von uns ausgeführten Abfragen erklärt: einfache und durchsuchte Formulare, Bedingungsreihenfolge, Pivots mit SUM, COUNT-Tri…

Artikel lesen →
Softwareentwicklung

Was ist JWT? JSON-Web-Tokens anhand eines funktionierenden Beispiels erklärt

Was ist JWT? JSON Web Tokens erklärt: die drei Teile, ein Token, das in dem von uns ausgeführten Code erstellt und manipuliert wurde, JWT vs. Sitzun…

Artikel lesen →
Softwareentwicklung

Erklärte JavaScript-Ereignisschleife: Aufrufstapel, Mikrotasks und Timer mit Beispielen

Die JavaScript-Ereignisschleife wurde mit dem von uns ausgeführten Code erklärt: Aufrufstapel, Aufgaben- und Mikrotask-Warteschlangen, warum setTime…

Artikel lesen →
Softwareentwicklung

Erklärung von Python-Generatoren und -Ertrag: Sparen Sie Speicher mit echten Beispielen

Python-Generatoren und Yield anhand des von uns ausgeführten Codes erklärt: wie sie angehalten und fortgesetzt werden, gemessene Speichereinsparunge…

Artikel lesen →
Künstliche Intelligenz

Was sind Einbettungen? Vektoren und Kosinusähnlichkeit einfach erklärt

Was sind Einbettungen? Ein Leitfaden in einfacher Sprache zu Vektoren, Kosinusähnlichkeit und semantischer Suche, mit einem kleinen Beispiel, das wi…

Artikel lesen →
DevOps

Blau-Grün vs. Canary-Bereitstellung: Unterschiede, Kompromisse und Auswahl

Blue-Green vs. Canary-Bereitstellung erklärt: Funktionsweise, Kosten, Risiko und Rollback, stabiles Benutzer-Bucketing, das wir getestet haben, Date…

Artikel lesen →
Testautomatisierung

Flaky-Tests: Was sie verursacht und wie man sie endgültig behebt

Flaky-Tests wurden anhand von Demos erklärt, die wir durchgeführt haben: die Hauptursachen, wie man sie bestätigt und diagnostiziert, richtige Korre…

Artikel lesen →
Softwaretests

Lasttest vs. Stresstest: Unterschiede, Metriken und k6-Beispiele

Erläuterungen zu Lasttests und Stresstests: Was die einzelnen Tests beweisen, Spike- und Soak-Tests, welche Kennzahlen wichtig sind, warum Durchschn…

Artikel lesen →
Softwaretests

Testfall vs. Testszenario: Hauptunterschiede, Beispiele und wann man sie jeweils verwendet

Testfall vs. Testszenario erklärt: klare Definitionen, eine Tabelle nebeneinander, eine Funktion zum Zurücksetzen von Passwörtern, die von Szenarios…

Artikel lesen →
Datenbanken & SQL

SQL-Abfrageoptimierung: Ausführungspläne lesen und langsame Abfragen mit Zeitvorgaben beheben

An einer Million Zeilen getestete SQL-Abfrageoptimierung: Ausführungspläne lesen, die richtigen Indizes hinzufügen, nicht sargierbare Filter korrigi…

Artikel lesen →
Datenbanken & SQL

SQL UNION vs. UNION ALL: Unterschiede, Beispiele und getestete Leistung

SQL UNION vs. UNION ALL anhand der von uns ausgeführten Abfragen erklärt: Duplikate, die Regeln, denen beide folgen, ein echter Datenfehler, gemesse…

Artikel lesen →
Softwareentwicklung

Tutorial zur JavaScript-Abruf-API: GET, POST, Fehlerbehandlung und Zeitüberschreitungen

Ein JavaScript-Abruf-API-Tutorial, das auf einem lokalen Server getestet wurde: GET und POST, warum 404 nicht ausgelöst wird, ein wiederverwendbarer…

Artikel lesen →
Softwareentwicklung

Umgang mit Python-Dateien: Lesen, Schreiben, CSV, JSON und Pathlib mit Beispielen

Die Handhabung von Python-Dateien wird anhand des von uns ausgeführten Codes erklärt: Öffnungsmodi, Lesen großer Dateien, CSV, JSON, Pathlib, Binärd…

Artikel lesen →
Softwareentwicklung

Git merge vs rebase: Unterschiede, Beispiele und wann man was nutzt

Git merge vs rebase erklärt mit echter Log-Ausgabe, einer Vergleichstabelle, der goldenen Regel des Rebase und einem sicheren Team-Workflow.

Artikel lesen →
Softwareentwicklung

Python List Comprehension: Syntax, Beispiele und wann man darauf verzichtet

Python List Comprehension erklärt: Syntax, Filter, if-else, verschachtelte Schleifen, gemessene Zeiten und Fälle, in denen eine normale for-Schleife…

Artikel lesen →
Datenbanken & SQL

SQL Joins erklärt mit Beispielen (Inner, Left, Right, Full)

SQL Joins Schritt für Schritt mit Beispieltabellen und Abfragen verstehen: INNER, LEFT, RIGHT, FULL, CROSS und SELF, plus typische Fehler und Perfor…

Artikel lesen →