Lasttest vs. Stresstest: Unterschiede, Metriken und k6-Beispiele
Eine beweist, dass Ihr System den erwarteten Datenverkehr verarbeitet. Der andere findet heraus, wo es kaputt geht und wie es sich erholt. Erfahren Sie, wann Sie die einzelnen Tests durchführen, welchen Zahlen Sie vertrauen sollten und wie Sie einen Test planen, der echte Antworten liefert.
- Lasttests prüfen, ob ein System seine Ziele bei erwartetem Datenverkehr erreicht.
- Stresstests überfordern die Kapazität, den Bruchpunkt zu finden und die Erholung zu untersuchen.
- Die Werkzeuge sind in der Regel gleich. Was sich unterscheidet, ist das Ziel und das Verkehrsmuster.
- Beurteilen Sie Ergebnisse mit Perzentilen wie p95 und p99, da Durchschnittswerte schwerwiegende Probleme verbergen können.
Ihre Anwendung funktioniert perfekt mit zehn Benutzern. Was passiert am Verkaufstag mit zehntausend? Lasttests vs. Stresstests beschreibt zwei verschiedene Möglichkeiten, dies zu beantworten, und ihre Verwechslung führt zu Tests, die nicht das beweisen, was Sie von ihnen erwarten.
In diesem Leitfaden wird erläutert, was die einzelnen Tests anzeigen, welche Testtypen sie haben und wie die Ergebnisse zu lesen sind. Wir haben die kleine Perzentilberechnung unten auf Python 3.13 mit simulierten Zahlen durchgeführt. Die k6-Skripte sind anschauliche Beispiele, die wir nicht ausgeführt haben, und die Benutzerzahlen und Ziele sind erfunden, also ersetzen Sie sie durch Ihre eigenen. Führen Sie diese Tests nur auf Systemen durch, die Sie besitzen oder zu deren Testen Sie berechtigt sind, da starker Datenverkehr wie ein Angriff aussehen und echte Ausfälle verursachen kann.
Die kurze Antwort
Bei einem Auslastungstest wird gefragt: Können wir den erwarteten Datenverkehr bewältigen und dabei unsere Ziele erreichen? Ein Stresstest fragt: Wie viel können wir aushalten, bevor wir scheitern, wie scheitern wir und wie schnell erholen wir uns?
Denken Sie an eine Brücke. Ein Belastungstest fährt die erwartete Anzahl an LKWs hinüber und bestätigt, dass alles in Ordnung ist. Bei einem Stresstest wird immer wieder Gewicht hinzugefügt, um herauszufinden, wann die Grenze erreicht ist und ob zuerst eine Warnung ausgegeben wird. Glücklicherweise ist es billiger, Software zu zerstören als eine Brücke.
Belastungstest und Stresstest nebeneinander
| Aspekt | Belastungstest | Stresstest |
|---|---|---|
| Hauptfrage | Erfüllen wir die Ziele bei der erwarteten Auslastung? | Wo und wie brechen wir? |
| Verkehrsaufkommen | Normaler bis erwarteter Höhepunkt | Über dem erwarteten Höhepunkt |
| Muster | Hochfahren, ruhig bleiben | Steigern Sie weiter bis zum Scheitern |
| Misserfolg | Ein fehlgeschlagener Test | Das erwartete Ergebnis |
| Schlüsselkennzahlen | Reaktionszeit, Durchsatz, Fehler | Bruchpunkt, Fehlermodus, Wiederherstellungszeit |
| Typischer Zeitpunkt | Vor jeder größeren Veröffentlichung oder Veranstaltung | Nachdem das System unter Last stabil ist |
| Ergebnis | Bestehen oder scheitern Sie gegen Ziele | Eine Kapazitätsgrenze und eine Schwachstellenliste |
Was ist ein Lasttest?
Lasttests simulieren den erwarteten realistischen Datenverkehr und messen, wie sich das System verhält. Es braucht ein Ziel zum Testen, zum Beispiel: „Bei 500 gleichzeitigen Benutzern werden 95 % der Checkout-Anfragen innerhalb von 800 ms abgeschlossen, mit weniger als 1 % Fehler.“
So könnte das als K6-Skript aussehen. k6-Tests sind in JavaScript geschrieben und thresholds verwandeln Ihre Ziele in ein bestandenes oder nicht bestandenes Ergebnis:
import http from "k6/http";
import { sleep } from "k6";
export const options = {
stages: [
{ duration: "5m", target: 500 }, // ramp up
{ duration: "20m", target: 500 }, // hold at expected peak
{ duration: "2m", target: 0 }, // ramp down
],
thresholds: {
http_req_duration: ["p(95)<800"],
http_req_failed: ["rate<0.01"],
},
};
export default function () {
http.get("https://staging.example.com/products");
sleep(1); // think time, as real users pause
}
Die sleep ist wichtig. Ohne Bedenkzeit hämmert jeder virtuelle Benutzer kontinuierlich auf den Server ein und erzeugt weitaus mehr Datenverkehr als die gleiche Anzahl realer Personen.
Was ist Stresstest?
Stresstests gehen bewusst über das erwartete Maß hinaus. Du versuchst nicht zu bestehen. Sie möchten Antworten auf Fragen wie:
- Ab welchem Niveau beginnt die Leistung einzubrechen?
- Welche Komponente fällt zuerst aus: die Datenbank, die Anwendungsserver oder ein Drittanbieteraufruf?
- Schlägt es ordnungsgemäß mit eindeutigen Fehlern fehl oder stürzt es ab und verliert Daten?
- Erholt es sich von selbst, wenn der Datenverkehr nachlässt?
export const options = {
stages: [
{ duration: "5m", target: 500 }, // expected peak
{ duration: "5m", target: 1000 }, // beyond it
{ duration: "5m", target: 2000 }, // further
{ duration: "5m", target: 4000 }, // likely to break
{ duration: "10m", target: 0 }, // recovery: does it come back?
],
};
Diese letzte Genesungsphase wird häufig vergessen und ist möglicherweise die wertvollste. Ein System, das Fehler gut bewältigt, sich aber ohne einen manuellen Neustart nie erholt, bedeutet immer noch einen Ausfall, den jemand mitten in der Nacht beheben muss. Im Idealfall sollte ein System unter extremer Last auf kontrollierte Weise Arbeit abwerfen und eindeutige 503 Antworten zurückgeben, anstatt eine Zeitüberschreitung zu verursachen.
Spike, Soak und andere Arten
Last- und Stresstests gehören zu einer größeren Familie von Leistungstests:
| Typ | Muster | Was es findet |
|---|---|---|
| Rauch (Aufführung) | Ein paar Benutzer, kurz | Ob das Skript und das System überhaupt funktionieren |
| Laden | Erwarteter Höhepunkt, gehalten | Ob Ziele erreicht werden |
| Stress | Steigt über die Kapazität hinaus | Grenzen und Fehlermodi |
| Spitze | Ein plötzlicher Sprung, dann ein Tropfen | Autoskalierung und Warteschlangenverhalten |
| Einweichen (Ausdauer) | Normale Belastung über Stunden | Speicherlecks, Verbindungen, die ausgehen |
| Kapazität | Allmählicher Anstieg | Die maximale Belastung innerhalb Ihrer Ziele |
Einweichtests erkennen Probleme, die bei kurzen Tests nie sichtbar werden. Ein kleiner Speicherverlust kann zwanzig Minuten lang harmlos aussehen und den Dienst erst nach zwei Tagen zum Erliegen bringen. Spike-Tests eignen sich für Veranstaltungen wie Flash-Sales, bei denen der Traffic nicht allmählich ansteigt.
Kennzahlen, die wichtig sind
| Metrisch | Bedeutung | Achten Sie auf |
|---|---|---|
| Reaktionszeit (Perzentile) | Wie lange Anfragen dauern | p95 und p99 steigend |
| Durchsatz | Pro Sekunde verarbeitete Anfragen | Abflachung mit zunehmender Benutzerzahl |
| Fehlerquote | Prozentsatz fehlgeschlagener Anfragen | Jeder plötzliche Anstieg |
| CPU und Speicher | Nutzung der Serverressourcen | Sättigung oder stetiges Wachstum |
| Datenbank | Langsame Abfragen, Verwendung des Verbindungspools | Pool erschöpft, Schleuse wartet |
| Warteschlangentiefe | Arbeit wartet auf Bearbeitung | Wachstum, das nie versiegt |
Warum Durchschnittswerte irreführend sind
Durchschnittswerte verbergen die langsamen Anfragen, über die sich echte Menschen beschweren. Um dies zu zeigen, haben wir 100 simulierte Antwortzeiten generiert, von denen 95 schnell (80 bis 200 ms) und 5 sehr langsam (2,5 bis 4 Sekunden) waren, und dann die allgemeinen Statistiken berechnet:
import math, random, statistics
random.seed(3)
times = [random.randint(80, 200) for _ in range(95)] \
+ [random.randint(2500, 4000) for _ in range(5)]
def pct(values, p):
values = sorted(values)
return values[math.ceil(p / 100 * len(values)) - 1]
print("avg", round(statistics.mean(times)), "p50", pct(times, 50),
"p95", pct(times, 95), "p99", pct(times, 99), "max", max(times))
# avg 302 p50 150 p95 199 p99 3740 max 3896
Schauen Sie sich diese Zahlen genau an. Der Durchschnitt von 302 ms beschreibt niemanden. Typische Anfragen dauerten etwa 150 ms, während die langsamen über 3 Sekunden dauerten. Sogar p95 sieht bei 199 ms gesund aus, und nur p99 offenbart das Problem. Eine Zahl wie p95 bedeutet, dass 95 % der Anfragen so schnell oder schneller waren.
Und ein Prozent der Anfragen ist keine Seltenheit. Wenn eine Seite 50 Anfragen stellt, wirkt sich ein langsamer p99 auf einen großen Teil der Seitenaufrufe aus. Legen Sie Ziele für die Perzentile fest, die für Sie wichtig sind, und betrachten Sie mehrere zusammen.
Tipp: Achten Sie in Ihren Diagrammen auf das „Knie“. Mit steigender Auslastung bleiben die Reaktionszeiten eine Zeit lang gleich, steigen dann aber plötzlich an, während der Durchsatz nicht mehr wächst. Dieser Punkt ist Ihre praktische Leistungsfähigkeit und kommt oft lange bevor etwas tatsächlich zusammenbricht.
Werkzeuge
| Werkzeug | Skripterstellung | Bekannt für |
|---|---|---|
| k6 | JavaScript | Entwicklerfreundlich, Schwellenwerte passen zu CI |
| JMeter | GUI und XML | Ausgereift, unterstützt viele Protokolle |
| Gatling | Scala, Java, Kotlin und andere | Codebasiert, effizient |
| Heuschrecke | Python | Einfaches, Python-basiertes Benutzerverhalten |
Jedes davon kann sowohl Last- als auch Stresstests durchführen. Wählen Sie diejenige aus, die zu den Fähigkeiten Ihres Teams passt, anstatt einer Funktionsliste hinterherzujagen. Informationen zur Verwendung in Ihrer Pipeline finden Sie unter Was ist CI/CD.
So planen Sie einen Test
- Setzen Sie sich Ziele. Verwenden Sie echte Analysen, um Ihren Spitzenverkehr zu ermitteln und Ziele zu definieren.
- Wählen Sie Reisen. Modellieren Sie realistisches Benutzerverhalten, wie z. B. Stöbern, Suchen und Bezahlen, in realistischen Proportionen. Ein bloßer Aufruf der Startseite beweist wenig.
- Verwenden Sie eine realistische Umgebung. Ein winziger Staging-Server kann die Produktion nicht vorhersagen. Beachten Sie etwaige Unterschiede.
- Bereiten Sie Daten vor. Verwenden Sie realistische Volumina, da eine Abfrage, die für 100 Zeilen schnell ist, möglicherweise 10 Millionen durchforstet.
- Warnen Sie die Leute. Informieren Sie Ihr Betriebsteam und alle Dritten und testen Sie einen Zahlungsanbieter nicht versehentlich. Gegebenenfalls externe Dienste simulieren.
- Fangen Sie klein an. Führen Sie zunächst einen kleinen Rauchtest durch, um zu bestätigen, dass Ihr Skript funktioniert.
- Überwachen Sie alles. Ohne Servermetriken werden Sie sehen, dass es langsamer wurde, aber nicht, warum.
- Wiederholen. Führen Sie es nach jedem Fix erneut aus und behalten Sie eine Basislinie zum Vergleich bei.
Lesen der Ergebnisse
| Symptom | Mögliche Ursache |
|---|---|
| Langsame Antworten, aber niedrige CPU | Warten auf eine Datenbank, Sperre oder einen externen Dienst |
| Die Datenbank-CPU ist hoch | Fehlende Indizes oder ineffiziente Abfragen |
| Plötzliche Verbindungsfehler | Verbindungspool- oder Dateilimit erreicht |
| Das Gedächtnis steigt stetig | Ein Leck oder ein unbegrenzter Cache |
| Die CPU des Lastgenerators ist hoch | Der Flaschenhals ist das Testtool, nicht Ihr System |
Datenbanken sind ein häufiger Engpass. Wenn also Abfragen das Problem sind, lesen Sie unseren Leitfaden zur SQL-Abfrageoptimierung. Diese letzte Zeile der Tabelle ist eine wichtige Falle: Überprüfen Sie immer auch den Zustand der Maschine, die die Last erzeugt.
Häufige Fehler
- Verwirrung von Benutzern mit Anfragen. Machen Sie sich klar, ob ein Ziel gleichzeitige Benutzer oder Anfragen pro Sekunde bedeutet.
- Denkzeit weglassen. Dies erhöht den Datenverkehr und führt zu irreführenden Ergebnissen.
- Testen zu spät. Eine Woche vor dem Start bleibt keine Zeit, Architekturprobleme zu beheben.
- Verwendung eines einzigen Endpunkts. Echter Datenverkehr mischt Lese-, Schreib- und Suchvorgänge.
- Caching verbirgt alles. Identische wiederholte Anfragen testen möglicherweise nur Ihren Cache, also variieren Sie die Daten.
- Einmal testen. Die Leistung ändert sich mit jeder Veröffentlichung, also führen Sie regelmäßig Tests durch.
Fazit
Führen Sie Lasttests durch, um sicherzustellen, dass Sie den erwarteten Datenverkehr bewältigen können, und führen Sie Stresstests durch, um zu erfahren, was passiert, wenn Sie dies nicht können. Fangen Sie klein an: Wählen Sie Ihre wichtigste User Journey, legen Sie ein klares Ziel fest und führen Sie einen kurzen Test mit Staging und aktivierter Überwachung durch. Bei diesem ersten Durchlauf lernen Sie normalerweise etwas, und Sie können darauf aufbauen.
Häufige Fragen
Was ist der Hauptunterschied zwischen Belastungs- und Stresstests?
Beim Lasttest wird das Verhalten bei erwartetem Datenverkehr anhand festgelegter Ziele überprüft. Stresstests gehen über die Kapazität hinaus, um den Bruchpunkt zu finden und herauszufinden, wie sich das System erholt.
Sollte ich zuerst einen Lasttest oder Stresstest durchführen?
Laden Sie zuerst den Test. Sobald das System seine Ziele bei erwartetem Datenverkehr erreicht, führen Sie Stresstests durch, um seine Grenzen auszuloten. Stressergebnisse haben bei einem instabilen System wenig Bedeutung.
Was ist der Unterschied zwischen einem Stresstest und einem Spike-Test?
Ein Stresstest erhöht typischerweise die Belastung schrittweise bis zum Ausfall. Ein Spike-Test springt plötzlich auf ein hohes Niveau, um zu sehen, wie das System mit abrupten Veränderungen umgeht.
Was ist die Reaktionszeit von p95?
Das bedeutet, dass 95 % der Anfragen zu diesem Zeitpunkt oder früher abgeschlossen wurden. Es beschreibt die Erfahrung der meisten Benutzer besser als der Durchschnitt.
Kann ich Lasttests in der Produktion durchführen?
Sie können dies tun, aber vorsichtig, mit Erlaubnis, Überwachung und einer Möglichkeit, schnell aufzuhören. Die meisten Teams beginnen mit einer produktionsähnlichen Staging-Umgebung, um das Risiko für echte Benutzer zu verringern.
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 →