Äquivalenzpartitionierung: Testdesigntechnik anhand von Beispielen erklärt

  1. Startseite
  2. Blog
  3. Softwaretests

Softwaretests

Äquivalenzpartitionierung: Testdesigntechnik anhand von Beispielen erklärt

Sie können nicht jede mögliche Eingabe testen. Welche Werte sollten Sie also wählen? Die Äquivalenzpartitionierung gibt Ihnen eine klare Antwort. Erlernen Sie die Methode Schritt für Schritt, arbeiten Sie reale Beispiele durch und sehen Sie, wo Hilfe nötig ist.

8 Min. Lesezeit
Erklärung der Entwurfstechnik für Äquivalenzpartitionierungstests anhand von Beispielen

Das Wichtigste

  • Äquivalenzpartitionierung unterteilt Eingaben in Gruppen, die sich gleich verhalten sollten.
  • Sie testen einen repräsentativen Wert aus jeder Gruppe und nicht jeden Wert.
  • Schließen Sie immer ungültige Partitionen ein, da sich viele Fehler in der Fehlerbehandlung verbergen.
  • Es funktioniert am besten zusammen mit der Grenzwertanalyse, da Fehler häufig an den Rändern einer Gruppe sitzen.

Ein Altersfeld, das 18 bis 60 Jahre akzeptiert, bietet eine enorme Anzahl möglicher Eingaben, wenn man einmal Negative, große Zahlen, Text und Leerzeichen zählt. Niemand kann sie alle ausprobieren. Äquivalenzpartitionierung löst dieses Problem, indem Eingaben gruppiert werden, die die Software auf die gleiche Weise behandeln soll, und dann ein Wert aus jeder Gruppe getestet wird.

Es handelt sich um eine der ersten Testdesigntechniken, die jeder Tester erlernen sollte. In dieser Anleitung arbeiten wir es Schritt für Schritt durch und testen ein Beispiel in Python. Wir haben diesen Code auf Python 3.13 ausgeführt und seine Ausgabe ist enthalten. Die folgenden Passwort- und Couponregeln sind illustrative Beispiele und stammen nicht aus einem realen System.

Was ist Äquivalenzpartitionierung?

Die Äquivalenzpartitionierung, auch Äquivalenzklassenpartitionierung (ECP) genannt, ist eine Designtechnik für Black-Box-Tests. Es unterteilt die möglichen Eingaben eines Features in Partitionen oder Klassen. Von jedem Wert innerhalb einer Partition wird erwartet, dass er das gleiche Verhalten hervorruft.

Da Sie den Code nicht sehen müssen, können Sie ihn direkt aus einer Anforderung anwenden. Um mehr über diesen Teststil zu erfahren, lesen Sie Black-Box- vs. White-Box-Tests.

Warum es funktioniert

Die Technik basiert auf einer Annahme: Wenn ein Wert in einer Partition einen Fehler findet, würden die anderen in dieser Partition ihn wahrscheinlich auch finden. Und wenn ein Wert den Wert überschreitet, würden wahrscheinlich auch die anderen den Wert überschreiten. Das Testen von 25, 26 und 27 Jahren in einem Erwachsenenalter wird Ihnen wahrscheinlich nichts sagen, was das Testen von 25 allein nicht aussagte.

Ansatz Tests für ein Altersfeld Ergebnis
Erschöpfend Jeder mögliche Wert In der Praxis unmöglich
Zufälliges Raten Was auch immer Ihnen in den Sinn kommt Duplikate und Lücken
Äquivalenzpartitionierung Eine pro Partition Klein, mit bewusster Abdeckung

Dies ist jedoch eine Annahme und keine Garantie. Bei Software können Sonderfälle innerhalb einer Partition verborgen sein, eine Einschränkung, auf die wir später noch zurückkommen.

So geht’s in fünf Schritten

  1. Lesen Sie die Anforderung und identifizieren Sie die Eingabe und ihre Regeln.
  2. Finden Sie die gültigen Partitionen, die die Gruppen von Werten sind, die akzeptiert werden sollten, und notieren Sie, ob sich verschiedene Bereiche unterschiedlich verhalten.
  3. Finden Sie die ungültigen Partitionen, einschließlich zu niedriger, zu hoher Werte, des falschen Typs und leerer Werte.
  4. Wählen Sie einen repräsentativen Wert aus jeder Partition, normalerweise irgendwo in der Mitte.
  5. Notieren Sie das erwartete Ergebnis für jeden, wie in jedem guten Testfall.

Ausgearbeitetes Beispiel: ein Altersfeld

Anforderung: Anmelden können sich Nutzer im Alter von 18 bis 60 Jahren.

Partition Typ Testwert Erwartetes Ergebnis
Unter 18 Ungültig 10 Abgelehnt
18 bis 60 Gültig 35 Akzeptiert
Über 60 Ungültig 75 Abgelehnt
Keine Zahl Ungültig „abc“ Fehler
Leer Ungültig (empty) Meldung „Erforderlich“.

Fünf Tests decken jedes Verhalten in der Anforderung ab. Viele Tutorials hören bei den ersten drei Zeilen auf, aber die letzten beiden werden von echten Benutzern versehentlich ausgelöst. Sie können auch Zeilen für negative Zahlen oder Dezimalzahlen hinzufügen, wenn diese sinnvollerweise anders gehandhabt werden könnten.

Testen Sie es im Code

Hier ist diese Regel als Funktion, mit einem Komponententest pro Partition, unter Verwendung von Pythons integriertem unittest:

import unittest

def can_register(age):
    if not isinstance(age, int) or isinstance(age, bool):
        raise TypeError("age must be a whole number")
    return 18 <= age <= 60

class EquivalenceTests(unittest.TestCase):
    def test_valid_partition(self):
        self.assertTrue(can_register(35))

    def test_too_young_partition(self):
        self.assertFalse(can_register(10))

    def test_too_old_partition(self):
        self.assertFalse(can_register(75))

    def test_wrong_type_partition(self):
        with self.assertRaises(TypeError):
            can_register("abc")

Unser Lauf bestanden:

test_too_old_partition ... ok
test_too_young_partition ... ok
test_valid_partition ... ok
test_wrong_type_partition ... ok

In einem echten Projekt ist die Pytest-Parametrisierungsfunktion eine praktische Möglichkeit, eine Tabelle mit Partitionswerten in einem einzigen Test auszuführen.

Ausgearbeitetes Beispiel: ein Passwort

Anforderung: Ein Passwort muss 8 bis 20 Zeichen lang sein und mindestens eine Ziffer enthalten.

Diese hat zwei Regeln, Länge und Inhalt, daher berücksichtigen wir Partitionen für beide:

Partition Typ Testwert Erwartetes Ergebnis
Gültige Länge, hat eine Ziffer Gültig Sonnenaufgang42 Akzeptiert
Zu kurz Ungültig abc1 Fehler: zu kurz
Zu lang Ungültig Ein 30-stelliger Wert mit einer Ziffer Fehler: zu lang
Gültige Länge, keine Ziffer Ungültig Sonnenaufgangstag Fehler: Ziffer erforderlich
Leer Ungültig (empty) Fehler: erforderlich

Beachten Sie, dass jeder ungültige Test nur eine Regel verletzt. Wenn ein Wert sowohl zu kurz war als auch eine Ziffer fehlte, konnte Ihnen ein bestandener Test nicht sagen, welche Prüfung funktioniert hat. Ein Scheck könnte gebrochen sein, während der andere die Tatsache verbirgt.

Arbeitsbeispiel: nicht numerische Eingaben

Die Technik ist nicht auf Nummernbereiche beschränkt. Diskrete Optionen, Kategorien und Zustände bilden ebenfalls Partitionen. Angenommen, ein Shop hat diese Regel:

Anforderung: Für Gold-Mitglieder ist die Lieferung kostenlos, für Silber-Mitglieder 50 und für alle anderen 100. Unbekannte Stufenwerte sind Fehler.

Partition Testwert Erwartete Gebühr
Gold Gold 0
Silber Silber 50
Keine Mitgliedschaft (none) 100
Unbekannte Stufe Platin Fehler

Hier ist jede Option eine eigene Partition, da sich jede anders verhalten sollte. Zu den weiteren gängigen Partitionen gehören Dateitypen, etwa gültige und ungültige Uploads, und ausgabebasierte Gruppen, etwa ein genehmigter oder abgelehnter Kredit.

Tipp: Denken Sie sowohl an Outputs als auch an Inputs. Wenn eine Berechnung einen Rabatt, keinen Rabatt oder eine Warnung ergeben kann, stellen Sie sicher, dass jedes dieser Ergebnisse bei mindestens einem Test erreicht wird.

Mehrere Eingaben gleichzeitig

Bei mehreren Feldern wächst die Anzahl der Kombinationen schnell. Drei Felder mit jeweils vier Unterteilungen ergeben 64 Kombinationen. Zwei Strategien helfen:

  • Schwache Abdeckung: Stellen Sie sicher, dass jede Partition in mindestens einem Test erscheint, indem Sie mehrere gültige Werte pro Test kombinieren. Testen Sie bei ungültigen Werten einen nach dem anderen, damit sich die Fehler nicht gegenseitig überdecken.
  • Regelbasierte Abdeckung: Wenn Kombinationen tatsächlich das Ergebnis ändern, z. B. den Mitgliedsstatus mit dem Bestellwert, verwenden Sie Entscheidungstabellentests, um sie ordnungsgemäß aufzulisten.

Kopplung mit Grenzwertanalyse

Durch die Partitionierung erfahren Sie, welche Gruppen getestet werden sollen. Es sagt wenig darüber aus, wo sich Käfer in einer Gruppe gerne verstecken, und viele verstecken sich direkt an den Rändern. Um dies zu zeigen, haben wir eine fehlerhafte Version mit dem klassischen Off-by-one-Fehler geschrieben:

def buggy(age):
    return 18 < age <= 60     # should be 18 <= age

[buggy(a) for a in (35, 10, 75)]   # [True, False, False]
buggy(18)                          # False

Unsere Partitionswerte 35, 10 und 75 lieferten alle die richtigen Antworten, sodass diese Tests bestanden wurden. Doch ein 18-Jähriger wird zu Unrecht abgewiesen. Deshalb gehören die beiden Techniken zusammen:

Technik Wählt Werte für das Alter von 18 bis 60 Jahren
Äquivalenzpartitionierung Ein Wert innerhalb jeder Gruppe 10, 35, 75
Grenzwertanalyse Werte an den Rändern jeder Gruppe 17, 18, 60, 61

Verwenden Sie die Partitionierung, um die Gruppen zu finden, und dann Grenzen, um zu testen, wo sich Gruppen treffen. In unserem Code hat ein separater Test für 17, 18, 60 und 61 die richtige Funktion übergeben und diesen Fehler erkannt. Unser Leitfaden zur Grenzwertanalyse deckt dies vollständig ab.

Vorteile und Einschränkungen

Vorteile Einschränkungen
Reduziert die Anzahl der Tests erheblich Verlässt sich darauf, dass die Partitionen korrekt sind
Bietet eine klare, erklärbare Berichterstattung Kann Fehler an den Grenzen übersehen
Benötigt keinen Zugriff auf Code Kann versteckte Sonderfälle übersehen
Gilt frühzeitig, auch aus Anforderungen Modelliert Sequenzen oder Kombinationen nicht gut

Das größte Risiko besteht in einer falschen Annahme. Wenn der Code eine versteckte Regel für einen bestimmten Wert enthält, erreicht der von Ihnen gewählte Test diese möglicherweise einfach nicht. Explorative Tests und Codeabdeckung helfen Ihnen herauszufinden, was die Partitionen übersehen haben.

Häufige Fehler

  • Ungültige Partitionen vergessen. Das Testen nur glücklicher Pfade lässt die Fehlerbehandlung unkontrolliert.
  • Testen mehrerer Werte aus einer Partition. Dies erhöht die Kosten ohne neue Informationen.
  • Kombination mehrerer ungültiger Werte in einem Test. Ein Fehler kann einen anderen verdecken.
  • Grenzen überspringen. Partitionstests allein übersehen oft einzelne Fehler.
  • Die Regeln erraten. Wenn eine Anforderung unklar ist, fragen Sie nach. Sollte 60 auch Menschen umfassen, die 60,5 Jahre alt sind?

Fazit

Äquivalenzpartitionierung ersetzt „Wie viele Tests soll ich schreiben?“ mit einer viel besseren Frage: „Welche Verhaltensweisen gibt es und habe ich jedes einzelne behandelt?“ Um es auszuprobieren, nehmen Sie ein Formular, das Sie heute testen, und listen Sie seine Partitionen auf Papier auf, einschließlich der ungültigen. Fügen Sie als Nächstes Grenzen hinzu. Am Ende werden Sie oft weniger Tests durchführen, bei denen mehr Fehler gefunden werden.

Häufige Fragen

Was ist Äquivalenzpartitionierung beim Testen?

Dabei handelt es sich um eine Black-Box-Technik, die Eingaben in Gruppen aufteilt, von denen erwartet wird, dass sie sich gleich verhalten. Anschließend testen Sie einen repräsentativen Wert aus jeder Gruppe, nicht jeden Wert.

Was ist der Unterschied zwischen Äquivalenzpartitionierung und Grenzwertanalyse?

Die Partitionierung wählt einen Wert aus jeder Gruppe aus. Die Grenzwertanalyse testet die Werte an den Rändern dieser Gruppen. Sie werden normalerweise zusammen verwendet.

Wie viele Testfälle benötigt die Äquivalenzpartitionierung?

Normalerweise mindestens eine pro Partition, sowohl gültig als auch ungültig. Ein Altersbereich erfordert im Allgemeinen etwa drei bis fünf Tests.

Ist die Äquivalenzpartitionierung eine Blackbox oder eine Whitebox?

Es handelt sich um eine Black-Box-Technik, da Partitionen aus Anforderungen stammen und keinen Code benötigen. Entwickler können es jedoch auch auf Unit-Tests anwenden.

Was sind gültige und ungültige Partitionen?

Gültige Partitionen enthalten Werte, die das System akzeptieren sollte. Ungültige Partitionen enthalten Werte, die abgelehnt werden sollten, z. B. Zahlen außerhalb des gültigen Bereichs, falsche Typen und Leerzeichen.

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

Python-Klassen und -Objekte: OOP-Tutorial mit echten Beispielen

Python-Klassen und -Objekte erklärt mit Code, den wir ausgeführt haben: __init__, Methoden, Klassen- und Instanzattribute, Vererbung, Eigenschaften,…

Artikel lesen →
Künstliche Intelligenz

Was ist ein großes Sprachmodell? Wie LLMs funktionieren, ohne großen Hype erklärt

Was ist ein großes Sprachmodell? LLMs im Klartext erklärt: Token, Einbettungen, Aufmerksamkeit, Training, Temperatur- und Kontextfenster, eine klein…

Artikel lesen →
DevOps

Linux-Befehle für Anfänger: Der grundlegende Terminal-Leitfaden mit Beispielen

Linux-Befehle für Anfänger, gruppiert nach Aufgaben: Navigation, Dateien, Anzeigen von Protokollen, Grep, Pipes, Berechtigungen, Prozesse und Archiv…

Artikel lesen →
Testautomatisierung

Selenium vs. Playwright: Hauptunterschiede, Code im Vergleich und welche Sie wählen sollten

Selenium vs. Playwright im Vergleich: Architektur, Wartezeit, Browser- und Sprachunterstützung, Debugging, der gleiche Test in beiden Tools, Migrati…

Artikel lesen →
Softwaretests

Äquivalenzpartitionierung: Testdesigntechnik anhand von Beispielen erklärt

Erklärung der Äquivalenzpartitionierung: Wie man gültige und ungültige Partitionen findet, Beispiele für Alter, Passwörter und Gutscheine, von uns d…

Artikel lesen →
Softwaretests

Schweregrad vs. Priorität beim Softwaretest: Unterschiede, Matrix und reale Beispiele

Schweregrad vs. Priorität beim Softwaretest erklärt: klare Definitionen, eine Vier-Wege-Matrix mit Beispielen, Stufenskalen, wer die einzelnen Punkt…

Artikel lesen →
Datenbanken & SQL

Tutorial zu SQL-Unterabfragen: Typen, korrelierte Unterabfragen und EXISTS mit Beispielen

Ein SQL-Unterabfrage-Tutorial mit Abfragen, die wir ausgeführt haben: Skalar-, IN-, FROM- und SELECT-Unterabfragen, korrelierte Unterabfragen, EXIST…

Artikel lesen →
Datenbanken & SQL

SQL-Transaktionen und ACID erklärt: COMMIT, ROLLBACK und Isolationsstufen

SQL-Transaktionen und ACID anhand einer von uns durchgeführten Banküberweisung erklärt: COMMIT, ROLLBACK, Sicherungspunkte, Sperren, Isolationsstufe…

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 →