Ä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.
- Ä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
- Lesen Sie die Anforderung und identifizieren Sie die Eingabe und ihre Regeln.
- 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.
- Finden Sie die ungültigen Partitionen, einschließlich zu niedriger, zu hoher Werte, des falschen Typs und leerer Werte.
- Wählen Sie einen repräsentativen Wert aus jeder Partition, normalerweise irgendwo in der Mitte.
- 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
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.
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.
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 →DevOpsErklä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 →SoftwareentwicklungAPI-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 →TestautomatisierungSpott 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 →SoftwaretestsCode-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 & SQLDELETE 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 & SQLErklä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 →SoftwareentwicklungTypeScript-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 →SoftwareentwicklungPython *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 →SoftwareentwicklungPython-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 IntelligenzWas 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 →DevOpsDocker-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 →TestautomatisierungTDD 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 →SoftwaretestsBenutzerakzeptanztests (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 & SQLErklä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 & SQLSQL 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 →SoftwareentwicklungWas 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 →SoftwareentwicklungErklä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 →SoftwareentwicklungErklä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 IntelligenzWas 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 →DevOpsBlau-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 →TestautomatisierungFlaky-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 →SoftwaretestsLasttest 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 →SoftwaretestsTestfall 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 & SQLSQL-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 & SQLSQL 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 →SoftwareentwicklungTutorial 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 →SoftwareentwicklungUmgang 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 →SoftwareentwicklungPython-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 IntelligenzWas 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 →DevOpsLinux-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 →TestautomatisierungSelenium 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 →SoftwaretestsSchweregrad 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 & SQLTutorial 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 & SQLSQL-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 →SoftwareentwicklungGit 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 →SoftwareentwicklungPython 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 & SQLSQL 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 →