Skip to main content

1.6 Prüfungen kontrolliert durchführen und Ergebnisse bewerten

Eine gute Hypothese ist nur dann nützlich, wenn sie mit einem kontrollierten und aussagekräftigen Test geprüft wird.

Dabei gilt:

Gleicher Ausgangszustand, gleicher Test, nur eine veränderte Variable und ein vorher festgelegtes erwartetes Ergebnis.

Wer mehrere Dinge gleichzeitig verändert, kann die Wirkung später keiner einzelnen Maßnahme zuordnen.


Ziel dieser Seite

Nach diesem Arbeitsschritt sollten:

  • Prüfziel und Hypothese eindeutig feststehen,
  • Ausgangszustand und Vergleichswerte dokumentiert sein,
  • Risiken und mögliche Auswirkungen des Tests bekannt sein,
  • Erfolgskriterien und Abbruchkriterien definiert sein,
  • möglichst nur eine Variable verändert werden,
  • Befehle, Ausgaben und Rückgabewerte gesichert sein,
  • Ergebnisse reproduzierbar sein,
  • unklare Tests nicht als Bestätigung interpretiert werden,
  • der Zustand nach dem Test erneut geprüft sein.

1. Kennzeichnung der Befehle

KennzeichnungBedeutung
[RO]Read-only: liest Informationen aus
[TEST]Führt eine aktive Prüfung aus und kann Netzwerkverkehr oder Protokolleinträge erzeugen
[FILE]Erstellt oder überschreibt eine Datei
[PRIV]Benötigt möglicherweise Administrator- oder Root-Rechte
[CHANGE]Verändert Konfiguration oder Betriebszustand
[DISRUPTIV]Kann Benutzer oder produktive Dienste beeinträchtigen
[SENSITIV]Ausgabe kann vertrauliche Daten enthalten

Auch ein [RO]- oder [TEST]-Befehl ist nicht vollständig spurlos. Er startet mindestens einen Prozess und kann in Protokollen, Shell-Historien, Firewalls oder SIEM-Systemen erscheinen.


2. Der kontrollierte Prüfablauf

PhaseTätigkeit
1. PrüfzielWelche Frage soll der Test beantworten?
2. HypotheseWelche mögliche Ursache wird geprüft?
3. AusgangszustandWelche Messwerte liegen vor dem Test vor?
4. VorhersageWelches Ergebnis wird erwartet?
5. RisikoWelche Nebenwirkungen kann der Test haben?
6. AbbruchkriteriumWann muss der Test sofort beendet werden?
7. DurchführungExakten Befehl oder Ablauf verwenden
8. AufzeichnungZeit, Ausgabe und Rückgabewert sichern
9. WiederholungErgebnis bei Bedarf kontrolliert reproduzieren
10. RückkehrAusgangszustand wiederherstellen
11. VergleichVorher- und Nachher-Ergebnis vergleichen
12. BewertungHypothese bestätigen, stützen, offenlassen oder widerlegen

3. Testarten nach Eingriffsrisiko

TestartBeschreibungBeispielRisiko
Passive AbfrageLiest vorhandenen ZustandProzessliste, Logs, RoutingtabelleSehr niedrig
Aktiver FunktionstestSendet eine kontrollierte AnfrageDNS-, Ping-, TCP- oder HTTP-TestNiedrig
VergleichstestVergleicht betroffenes und funktionierendes SystemClient A gegen Client BNiedrig
WiederholungstestPrüft, ob das Ergebnis reproduzierbar istfünf identische TCP-TestsNiedrig bis mittel
IsolationstestVerändert nur den Testkontextbestimmtes Backend mit curl --resolveNiedrig bis mittel
Reversible ÄnderungVerändert vorübergehend eine Einstellungfreigegebene TestregelMittel
Dienstbezogener TestStartet oder beendet einen DienstDienstneustartHoch
Failover-TestVerlagert produktiven BetriebWechsel auf zweiten ServerHoch
LasttestErzeugt zusätzliche Lastviele parallele AnfragenHoch
WiederherstellungstestSetzt Konfiguration oder Version zurückRollbackHoch
Destruktiver TestKann Daten oder Zustand zerstörenLöschen, Zurücksetzen, NeuinstallationSehr hoch

Passive, aktive und vergleichende Tests sollten normalerweise vor verändernden oder potenziell störenden Tests durchgeführt werden.


4. Prüfung und Reparatur nicht vermischen

Reine Prüfung

[TEST] Test-ComputerSecureChannel -Verbose

Dieser Befehl prüft auf einem Windows-Domänenmitglied den sicheren Kanal.

Verändernde Reparatur

[CHANGE] Test-ComputerSecureChannel -Repair

Der Parameter -Repair verändert den Zustand und ist keine reine Prüfung mehr.

Ein ähnlicher Unterschied besteht bei vielen Werkzeugen:

PrüfungVeränderung
Get-ServiceRestart-Service
systemctl statussystemctl restart
ipconfig /displaydnsipconfig /flushdns
Get-NetRouteNew-NetRoute oder Remove-NetRoute
journalctlLöschen oder Rotieren von Logs
diffÜberschreiben der Konfiguration
Firewall-Log ansehenFirewall-Regel ändern
Zertifikat anzeigenZertifikat ersetzen
Updateverlauf anzeigenUpdate installieren oder entfernen

Prüfung und Reparatur sollten im Ticket als getrennte Schritte dokumentiert werden.


5. Prüfziel präzise formulieren

Ungeeignet

Ich teste das Netzwerk.

Besser

Es wird geprüft, ob Client PC-030 aus VLAN 30 am 30.07.2026 um 15:30 Uhr eine TCP-Verbindung zu server.example auf Port 443 herstellen kann.

Noch besser

Hypothese H1: Eine ACL blockiert TCP 443 aus VLAN 30. Erwartet wird, dass der TCP-Test aus VLAN 30 fehlschlägt und derselbe Test aus VLAN 40 erfolgreich ist.

Ein präzises Prüfziel enthält:

  • Hypothesennummer,
  • Quellsystem,
  • Quell-IP oder Quellnetz,
  • Zielsystem,
  • Ziel-IP,
  • Protokoll,
  • Port,
  • Benutzerkontext,
  • Zeitpunkt und Zeitzone,
  • erwartetes Ergebnis,
  • widerlegendes Ergebnis.

6. Ausgangszustand als Baseline erfassen

Eine Baseline ist der dokumentierte Zustand vor dem Test.

Typische Baseline-Werte

  • aktuelle Uhrzeit,
  • Systemzustand,
  • Dienststatus,
  • Prozess-ID,
  • CPU- und Speicherauslastung,
  • Netzwerkverbindungen,
  • IP-Konfiguration,
  • DNS-Ergebnis,
  • Routingweg,
  • Anwendungsergebnis,
  • Antwortzeit,
  • Fehlercode,
  • Ereignisprotokolle,
  • Monitoringzustand.

Beispiel

MesswertVor dem Test
Zeitpunkt2026-07-30 15:30:00 CEST
QuellePC-030
Quell-IP192.0.2.30
Quell-VLANVLAN 30
Zielserver.example
Ziel-IP198.51.100.20
ZielportTCP 443
DNS-Auflösungerfolgreich
TCP-Testfehlgeschlagen
HTTP-Testkeine Verbindung
Pingkeine Antwort
Andere Zieleerreichbar
Vergleichsclient aus VLAN 40funktioniert

Die IP-Adressen aus den Netzen 192.0.2.0/24 und 198.51.100.0/24 sind für Dokumentationsbeispiele reserviert.


7. Nur eine Variable verändern

Ungeeigneter Test

Gleichzeitig werden:

  • Client neu gestartet,
  • DNS-Cache geleert,
  • Netzwerkkabel gewechselt,
  • Firewall deaktiviert,
  • Update installiert,
  • Dienst neu gestartet.

Wenn der Fehler danach verschwunden ist, bleibt unklar, welche Maßnahme wirksam war.

Besseres Vorgehen

  1. Ausgangszustand sichern.
  2. DNS-Auflösung prüfen.
  3. TCP-Verbindung prüfen.
  4. Vergleichsclient testen.
  5. anderes Kabel oder anderen Port testen.
  6. nach jedem Schritt denselben Funktionstest wiederholen.
  7. erst danach eine freigegebene Konfigurationsänderung durchführen.

8. Kontrollvariable und Vergleichssystem verwenden

Ein Vergleichssystem hilft zu erkennen, ob eine Ursache:

  • benutzerbezogen,
  • clientbezogen,
  • netzwerkbezogen,
  • serverbezogen oder
  • anwendungsbezogen ist.
TestKonstante WerteVeränderte Variable
Gleicher Benutzer, anderer ClientBenutzer, Ziel, FunktionClient
Anderer Benutzer, gleicher ClientClient, Ziel, FunktionBenutzer
Gleicher Client, anderes VLANClient, Benutzer, ZielNetzwerkpfad
Gleiches VLAN, anderer ClientNetzwerk, ZielClient
Gleiches Ziel, direkter PorttestClient, Netzwerk, ZielAnwendungsebene
Gleiche URL, bestimmtes BackendClient, URL, HostnameBackend
Gleiche Datei, anderes KontoDatei, Client, PfadBerechtigung
Gleicher Dienst, localhostServer, Dienst, PortNetzwerkpfad entfällt

Je weniger Variablen sich zwischen den Testfällen unterscheiden, desto aussagekräftiger ist der Vergleich.


9. Testzeitpunkt dokumentieren

Windows

[RO] Get-Date -Format o

UTC-Zeit

[RO] (Get-Date).ToUniversalTime().ToString("o")

Linux

[RO] date --iso-8601=seconds

macOS

[RO] date "+%Y-%m-%dT%H:%M:%S%z"

Der Zeitpunkt sollte unmittelbar vor und nach dem Test erfasst werden. Dadurch kann die Ausgabe mit Server-, Firewall-, Proxy- und SIEM-Protokollen verglichen werden.


10. PowerShell-Sitzung protokollieren

PowerShell kann Befehle und Konsolenausgaben einer Sitzung in einer Transkriptdatei aufzeichnen.

Protokollierung starten

[FILE][SENSITIV] Start-Transcript -Path "<Zielpfad>\Testprotokoll.txt" -IncludeInvocationHeader -NoClobber

Protokollierung beenden

[FILE] Stop-Transcript

-IncludeInvocationHeader ergänzt Zeitinformationen zu den ausgeführten Befehlen.

-NoClobber verhindert, dass eine bereits vorhandene Datei überschrieben wird.

Zu beachten

  • Das Transkript kann Benutzernamen, interne Pfade und Befehlsparameter enthalten.
  • Zugangsdaten oder Token dürfen nicht direkt in Befehle geschrieben werden.
  • GUI-Aktionen werden nicht erfasst.
  • Nicht jede externe Anwendung wird vollständig abgebildet.
  • Die Datei muss an einem freigegebenen Speicherort abgelegt werden.

11. Linux- und macOS-Terminalsitzung protokollieren

Das Werkzeug script erstellt eine Aufzeichnung der Terminalsitzung.

Aufzeichnung starten

[FILE][SENSITIV] script "<Zielpfad>/Testprotokoll.txt"

Anschließend werden die vorgesehenen Diagnosebefehle ausgeführt.

Aufzeichnung beenden

exit

Alternativ kann die Sitzung mit Strg + D beendet werden.

Zu beachten

  • Die Datei kann Steuerzeichen enthalten.
  • Eingaben und Ausgaben können sensible Informationen enthalten.
  • Interaktive Programme werden nicht immer als sauberer Text dargestellt.
  • Der genaue Funktionsumfang unterscheidet sich zwischen Linux und macOS.
  • Die lokale Dokumentation kann mit man script aufgerufen werden.

12. Einzelne PowerShell-Ausgabe in Datei und Konsole schreiben

Tee-Object zeigt die Ausgabe auf der Konsole an und speichert sie gleichzeitig in einer Datei.

[FILE] Test-NetConnection server.example -Port 443 -InformationLevel Detailed | Tee-Object -FilePath "<Zielpfad>\tcp-test.txt"

Mit Zeitstempel

Get-Date -Format o |
    Tee-Object -FilePath "<Zielpfad>\tcp-test.txt"

Test-NetConnection server.example -Port 443 -InformationLevel Detailed |
    Tee-Object -FilePath "<Zielpfad>\tcp-test.txt" -Append

-Append fügt die Ausgabe an die vorhandene Datei an.


13. Einzelne Linux- oder macOS-Ausgabe sichern

Ausgabe und Fehlermeldungen in eine Datei schreiben

[FILE] <Befehl> > "<Zielpfad>/test-output.txt" 2>&1

Ausgabe gleichzeitig anzeigen und speichern

[FILE] <Befehl> 2>&1 | tee "<Zielpfad>/test-output.txt"

Bei einer Pipeline mit tee kann der direkt danach angezeigte Rückgabewert zur letzten Komponente der Pipeline gehören. Wenn der ursprüngliche Rückgabewert wichtig ist, sollte der Befehl zunächst ohne Pipeline ausgeführt und anschließend die Datei angezeigt werden.

Rückgabewert zuverlässig sichern

started_at=$(date "+%Y-%m-%dT%H:%M:%S%z")
curl --connect-timeout 5 --max-time 15 https://server.example/ > "<Zielpfad>/curl-test.txt" 2>&1
test_rc=$?
ended_at=$(date "+%Y-%m-%dT%H:%M:%S%z")

echo "Start: $started_at"
echo "Ende: $ended_at"
echo "Exit-Code: $test_rc"
cat "<Zielpfad>/curl-test.txt"

Der Rückgabewert muss unmittelbar nach dem geprüften Befehl in einer Variablen gesichert werden.


14. Rückgabewerte unter Windows auswerten

PowerShell-Cmdlets

$? zeigt an, ob die unmittelbar vorherige PowerShell-Operation erfolgreich abgeschlossen wurde.

[RO] $?

Mögliche Werte:

  • $true
  • $false

Native Programme

$LASTEXITCODE enthält den Rückgabewert des zuletzt ausgeführten nativen Programms.

curl.exe --connect-timeout 5 --max-time 15 https://server.example/
$curlExitCode = $LASTEXITCODE
"curl Exit-Code: $curlExitCode"

Windows-Eingabeaufforderung

[RO] echo %ERRORLEVEL%

Der Rückgabewert muss direkt nach dem betreffenden Programm geprüft werden. Ein nachfolgender Befehl kann den gespeicherten Wert verändern.


15. Rückgabewerte unter Linux und macOS auswerten

$? enthält den Rückgabewert des zuletzt ausgeführten Befehls.

curl --connect-timeout 5 --max-time 15 https://server.example/
test_rc=$?
echo "Exit-Code: $test_rc"

Unter Unix-artigen Systemen bedeutet üblicherweise:

RückgabewertAllgemeine Bedeutung
0Programm meldet Erfolg
ungleich 0Programm meldet Fehler oder besonderen Zustand

Die genaue Bedeutung hängt vom jeweiligen Programm ab und muss in dessen Dokumentation geprüft werden.


16. Erfolg des Werkzeugs und Erfolg der Funktion unterscheiden

Ein Rückgabewert 0 bedeutet nicht automatisch, dass die vom Benutzer benötigte Funktion erfolgreich war.

Beispiel mit curl

Ohne zusätzliche Option kann curl eine HTTP-Antwort 404, 403 oder 500 empfangen und trotzdem mit Exit-Code 0 enden. Die Netzwerkübertragung war erfolgreich, obwohl die Anwendung einen Fehlerstatus zurückgab.

Deshalb müssen mindestens zwei Ebenen getrennt werden:

EbeneBeispiel
Werkzeugausführungcurl konnte eine HTTP-Antwort empfangen
Fachliche FunktionBenutzer konnte sich erfolgreich anmelden
AnwendungsstatusServer antwortete mit HTTP 200
Inhaltliche RichtigkeitGelieferte Daten sind vollständig und korrekt

HTTP-Fehler als curl-Fehler behandeln

[TEST] curl --fail --connect-timeout 5 --max-time 15 https://server.example/

Die Option --fail lässt curl bei HTTP-Statuscodes ab 400 einen Fehler melden. Dabei wird der Antworttext normalerweise nicht ausgegeben.

Für eine Diagnose ist es häufig besser, zunächst HTTP-Status und Ausgabe separat zu dokumentieren.


17. Zeitbegrenzungen verwenden

Tests sollten nicht unbegrenzt warten.

Windows

[TEST] curl.exe --connect-timeout 5 --max-time 15 https://server.example/

Linux

[TEST] curl --connect-timeout 5 --max-time 15 https://server.example/

macOS

[TEST] curl --connect-timeout 5 --max-time 15 https://server.example/

OptionBedeutung
--connect-timeout 5maximal fünf Sekunden für die Verbindungsphase
--max-time 15maximal 15 Sekunden für den gesamten Transfer

Zur Verbindungsphase gehören bei curl unter anderem DNS-Auflösung sowie TCP-, TLS- oder QUIC-Verbindungsaufbau.


18. HTTP-Zeiten gezielt messen

curl kann einzelne Zeitabschnitte einer HTTP-Verbindung ausgeben.

Windows PowerShell

[TEST] curl.exe -sS -o NUL -w 'code=%{http_code} remote=%{remote_ip} dns=%{time_namelookup} connect=%{time_connect} tls=%{time_appconnect} first_byte=%{time_starttransfer} total=%{time_total}\n' --connect-timeout 5 --max-time 15 https://server.example/

Linux und macOS

[TEST] curl -sS -o /dev/null -w "code=%{http_code} remote=%{remote_ip} dns=%{time_namelookup} connect=%{time_connect} tls=%{time_appconnect} first_byte=%{time_starttransfer} total=%{time_total}\n" --connect-timeout 5 --max-time 15 https://server.example/

Bedeutung der Werte

WertBedeutung
http_codeempfangener HTTP-Status
remote_iptatsächlich verwendete Ziel-IP
time_namelookupZeit bis zum Abschluss der Namensauflösung
time_connectZeit bis zum TCP-Verbindungsaufbau
time_appconnectZeit bis zum Abschluss des TLS-Handshakes
time_starttransferZeit bis zum ersten empfangenen Byte
time_totalgesamte Übertragungszeit

Die Zeitwerte werden in Sekunden ausgegeben.


19. HTTP-Zeitwerte interpretieren

BeobachtungMögliche Ursache
time_namelookup hochDNS-Server, Resolver oder Weiterleitung langsam
time_connect hochNetzwerkpfad, Firewall, Überlastung oder Server
time_appconnect deutlich höherTLS-Handshake, Zertifikat oder Kryptografie
time_starttransfer hochAnwendung oder Backend benötigt lange
time_total hoch, erstes Byte schnelllangsame Datenübertragung oder große Antwort
wechselnde remote_ipDNS-Rotation, Load Balancer oder mehrere Backends
wechselnder HTTP-Statusunterschiedliche Backends oder instabiler Dienst
http_code=000keine gültige HTTP-Antwort empfangen

Ein einzelner Messwert reicht bei sporadischen Fehlern nicht aus. Mehrere Messungen mit Zeitstempel sind aussagekräftiger.


20. Tests wiederholen, ohne unnötige Last zu erzeugen

Windows-Ping

[TEST] ping -n 10 <IP-Adresse>

Linux und macOS

[TEST] ping -c 10 <IP-Adresse>

Wiederholter TCP-Test unter Windows

1..5 | ForEach-Object {
    $result = Test-NetConnection server.example -Port 443 -InformationLevel Detailed

    [pscustomobject]@{
        Time          = Get-Date -Format o
        RemoteAddress = $result.RemoteAddress
        SourceAddress = $result.SourceAddress
        Success       = $result.TcpTestSucceeded
    }

    Start-Sleep -Seconds 2
}

Wiederholter TCP-Test unter Linux und macOS

for test_number in 1 2 3 4 5
do
    date "+%Y-%m-%dT%H:%M:%S%z"
    nc -vz -w 3 server.example 443
    sleep 2
done

Vor Wiederholungstests ist zu prüfen:

  • Wie viel Last erzeugt eine Anfrage?
  • Kann ein Konto gesperrt werden?
  • Greift ein Rate Limit?
  • Wird ein Alarm im SIEM ausgelöst?
  • Kann die Anwendung Daten verändern?
  • Ist der Test in der Produktion zulässig?

21. Sporadische Fehler richtig untersuchen

Ein sporadischer Fehler kann übersehen werden, wenn nur ein einzelner Test durchgeführt wird.

Zu dokumentieren sind:

  • Anzahl der Tests,
  • zeitlicher Abstand,
  • Anzahl erfolgreicher Tests,
  • Anzahl fehlgeschlagener Tests,
  • genaue Fehlercodes,
  • verwendete Ziel-IP,
  • verwendetes Backend,
  • Antwortzeiten,
  • Zeitpunkt jedes Fehlers.

Beispiel

VersuchUhrzeitZiel-IPTCPHTTPGesamtzeit
115:30:00198.51.100.20erfolgreich2000,21 s
215:30:05198.51.100.21erfolgreich5034,92 s
315:30:10198.51.100.20erfolgreich2000,19 s
415:30:15198.51.100.21erfolgreich5035,01 s
515:30:20198.51.100.20erfolgreich2000,22 s

Das Muster deutet auf ein Problem mit dem Backend 198.51.100.21 hin.


22. Bestimmtes HTTPS-Ziel ohne DNS-Änderung testen

Der Aufruf einer HTTPS-Seite direkt über ihre IP-Adresse kann zu falschen Ergebnissen führen, weil:

  • der HTTP-Host-Header verändert wird,
  • TLS-SNI nicht zum erwarteten Hostnamen passt,
  • das Zertifikat nicht für die IP-Adresse ausgestellt ist,
  • ein anderer virtueller Host antwortet.

Mit curl --resolve kann für einen einzelnen Test ein bestimmter Hostname einer bestimmten IP-Adresse zugeordnet werden, ohne DNS oder Hosts-Datei zu verändern.

Windows

[TEST] curl.exe --resolve "server.example:443:<IP-Adresse>" -v -o NUL https://server.example/

Linux und macOS

[TEST] curl --resolve "server.example:443:<IP-Adresse>" -v -o /dev/null https://server.example/

Dadurch bleiben erhalten:

  • URL-Hostname,
  • HTTP-Host-Header,
  • TLS-SNI,
  • normale Zertifikatsprüfung.

Nur die Ziel-IP wird für diesen curl-Aufruf vorgegeben.

Beispiel für zwei Backends

[TEST] curl --resolve "server.example:443:198.51.100.20" -v -o /dev/null https://server.example/

[TEST] curl --resolve "server.example:443:198.51.100.21" -v -o /dev/null https://server.example/

Das direkte Testen eines Backends kann Load Balancer, WAF oder andere Schutzsysteme umgehen. Es darf nur erfolgen, wenn dieser Test technisch vorgesehen und autorisiert ist.


23. Lokalen Dienst und Netzwerkpfad getrennt testen

Windows-Server

[TEST] Test-NetConnection localhost -Port <Port>

[TEST] Test-NetConnection <Eigene-Server-IP> -Port <Port>

[TEST] Test-NetConnection <Servername> -Port <Port>


Linux-Server

[TEST] nc -vz -w 3 localhost <Port>

[TEST] nc -vz -w 3 <Eigene-Server-IP> <Port>

[TEST] nc -vz -w 3 <Servername> <Port>


macOS-Server

[TEST] nc -vz -w 3 localhost <Port>

[TEST] nc -vz -w 3 <Eigene-Server-IP> <Port>

[TEST] nc -vz -w 3 <Servername> <Port>

Interpretation

localhostEigene IPRemote-ClientMöglicher Fehlerbereich
erfolgreicherfolgreicherfolgreichNetzwerkgrundfunktion vorhanden
erfolgreicherfolgreichfehlgeschlagenNetzwerkpfad oder Firewall
erfolgreichfehlgeschlagenfehlgeschlagenListener-Bindung oder lokale Firewall
fehlgeschlagenfehlgeschlagenfehlgeschlagenDienst oder Anwendung
fehlgeschlagenerfolgreicherfolgreichbesondere Proxy-, Container- oder Weiterleitungskonfiguration

24. Test mit und ohne Namensauflösung

DNS-basierter Test

[TEST] Test-NetConnection server.example -Port 443

Direkter TCP-Test zur bekannten IP

[TEST] Test-NetConnection <IP-Adresse> -Port 443

Unter Linux und macOS:

[TEST] nc -vz -w 3 server.example 443

[TEST] nc -vz -w 3 <IP-Adresse> 443

Interpretation

NameIPMöglicher Fehlerbereich
erfolgreicherfolgreichDNS und TCP-Grundfunktion vorhanden
fehlgeschlagenerfolgreichDNS oder Namensauswahl
erfolgreichfehlgeschlagenTestfehler oder unterschiedliche Zieladresse prüfen
fehlgeschlagenfehlgeschlagenNetzwerk, Firewall, Dienst oder Zielsystem

Der direkte IP-Test ist für TCP geeignet. Für HTTPS sollte wegen Host-Header, SNI und Zertifikatsprüfung curl --resolve verwendet werden.


25. Anwendungstest und Benutzerfunktion trennen

Ein technischer Test kann erfolgreich sein, obwohl die Benutzerfunktion weiterhin fehlschlägt.

PrüfebeneBeispiel
DNSHostname wird aufgelöst
NetzwerkZiel-IP ist erreichbar
TransportTCP-Port ist erreichbar
TLSZertifikat und Handshake funktionieren
HTTPServer liefert eine Antwort
AuthentifizierungBenutzer kann sich anmelden
AutorisierungBenutzer darf die Funktion verwenden
Anwendunggewünschte Aktion wird verarbeitet
DatenebeneDatenbank speichert oder liefert korrekte Daten
Geschäftsprozessgesamter Arbeitsablauf funktioniert

Beispiel

  • TCP 443 erreichbar
  • TLS erfolgreich
  • HTTP 200 auf Startseite
  • Anmeldung erfolgreich
  • Datei-Upload schlägt fehl

Die Ursache liegt dann nicht in der grundlegenden Erreichbarkeit, sondern möglicherweise in:

  • Upload-Berechtigung,
  • Dateigrößenlimit,
  • Reverse Proxy,
  • WAF,
  • Speicherplatz,
  • Anwendung,
  • Datenbank,
  • Backend-Storage.

26. Vorher- und Nachher-Test identisch durchführen

Nach einer Maßnahme muss derselbe definierte Test erneut ausgeführt werden.

Ungeeigneter Vergleich

  • Vorher: Benutzer berichtet, dass es nicht funktioniert.
  • Nachher: Administrator pingt den Server.

Diese Ergebnisse prüfen unterschiedliche Funktionen.

Geeigneter Vergleich

  • Vorher: curl gegen dieselbe URL mit dokumentiertem Benutzerkontext.
  • Maßnahme: eine freigegebene Konfiguration wird geändert.
  • Nachher: derselbe curl-Befehl vom selben Client.
  • Danach: ursprünglicher Benutzerablauf wird wiederholt.

27. Vorher-Nachher-Protokoll

FeldVorherNachher
Zeitpunkt
Quellsystem
Quell-IP
Benutzer
Zielsystem
Ziel-IP
Protokoll und Port
DNS-Ergebnis
TCP-Ergebnis
TLS-Ergebnis
HTTP-Status
Antwortzeit
Anwendungsfunktion
Fehlermeldung
Monitoringstatus
Rückgabewert

28. Erfolgskriterien definieren

Ein Erfolgskriterium muss messbar sein.

Ungeeignet

Das System läuft wieder normal.

Besser

  • TCP-Verbindung ist bei fünf aufeinanderfolgenden Tests erfolgreich.
  • HTTP-Status ist fünfmal 200.
  • Antwortzeit liegt unter dem vereinbarten Schwellenwert.
  • Benutzer kann sich anmelden.
  • Datei kann hochgeladen und wieder heruntergeladen werden.
  • Monitoring meldet für 30 Minuten keinen neuen Fehler.
  • Ereignisprotokoll enthält keine neuen relevanten Fehler.
  • Vergleichssystem und betroffenes System zeigen dasselbe Ergebnis.

Schwellenwerte dürfen nicht frei erfunden werden. Sie müssen aus:

  • SLA,
  • Monitoring-Baseline,
  • Herstellerangabe,
  • Anwendungsanforderung oder
  • dokumentiertem Normalzustand

abgeleitet werden.


29. Abbruchkriterien definieren

Ein Test muss abgebrochen werden, wenn beispielsweise:

  • Datenintegrität gefährdet ist,
  • unerwartete Systeme betroffen sind,
  • Fehlerrate stark ansteigt,
  • CPU-, RAM- oder I/O-Auslastung kritisch steigt,
  • Benutzer produktiv beeinträchtigt werden,
  • Monitoring neue kritische Alarme meldet,
  • eine Sicherheitswarnung auftritt,
  • eine Rückfallmaßnahme nicht funktioniert,
  • der Test außerhalb des genehmigten Umfangs wirkt,
  • das erwartete Zeitfenster überschritten wird.

Abbruchvorlage

FeldEintrag
Abbruchbedingung
Messgröße
Grenzwert
Verantwortliche Person
Sofortmaßnahme
Rückfallmaßnahme
Kommunikationsweg

30. Testergebnisse klassifizieren

StatusBedeutung
BestandenDefiniertes Erfolgskriterium vollständig erreicht
Nicht bestandenDefiniertes Erfolgskriterium nicht erreicht
Teilweise bestandenNur ein Teil der Kriterien erreicht
Nicht eindeutigErgebnis lässt mehrere Erklärungen zu
Nicht reproduzierbarFehler trat bei Wiederholung nicht erneut auf
AbgebrochenAbbruchkriterium wurde erreicht
Nicht durchgeführtTest konnte nicht ausgeführt werden
UngültigTestbedingungen oder Messung waren fehlerhaft

„Nicht eindeutig“ ist ein gültiges Ergebnis. Es ist besser als eine unberechtigte Bestätigung.


31. Hypothese nach dem Test bewerten

TestergebnisBewertung der Hypothese
Vorhersage vollständig eingetroffenHypothese wird gestützt
Vorhersage mehrfach reproduziertHypothese wird stark gestützt
Gegenprobe erfolgreichUrsache möglicherweise bestätigt
Ergebnis teilweise passendHypothese bleibt offen
Ergebnis mehrdeutigneuer trennschärferer Test erforderlich
Vorhersage nicht eingetroffenHypothese wird geschwächt
Widerlegendes Ergebnis eingetroffenHypothese gilt als widerlegt
Testbedingungen fehlerhaftkeine Bewertung möglich

Ein fehlgeschlagener Test bestätigt nicht automatisch die untersuchte Ursache. Er zeigt zunächst nur, dass die getestete Funktion unter den verwendeten Bedingungen fehlgeschlagen ist.


32. Falsch positive Ergebnisse

Ein Test meldet einen Fehler, obwohl die eigentliche Funktion verfügbar ist.

Beispiele

TestFalsch positives Ergebnis
Pingkeine Antwort, weil ICMP blockiert ist
TracerouteSternchen, obwohl Ziel erreichbar ist
PortscannerPort wirkt gefiltert, weil Sicherheitskomponente reagiert
DNS-Testanderer Load-Balancer wird als „falsche IP“ interpretiert
Zertifikatstestdirekter IP-Aufruf erzeugt absichtlich Namensfehler
DienststatusDienst ist gestoppt, weil er socket-aktiviert gestartet wird
HTTP-HEADServer lehnt HEAD ab, verarbeitet aber GET
Monitoringveralteter Alarm bleibt nach Wiederherstellung aktiv

33. Falsch negative Ergebnisse

Ein Test meldet Erfolg, obwohl die Benutzerfunktion weiterhin gestört ist.

Beispiele

TestFalsch negatives Ergebnis
Ping erfolgreichAnwendung oder Port kann trotzdem ausgefallen sein
TCP-Port erreichbarAnwendung kann fehlerhafte Antworten liefern
HTTP 200Anmeldung oder Fachfunktion kann trotzdem fehlschlagen
Dienststatus „Running“Prozess kann intern hängen
DNS-Auflösung erfolgreichzurückgegebene Adresse kann falsch sein
Einzelner Test erfolgreichsporadischer Fehler wird nicht erfasst
Testkonto funktioniertnormales Benutzerkonto kann weiterhin falsche Rechte haben
Ein Backend funktioniertanderes Backend kann fehlerhaft sein
Speicherplatz vorhandenInodes oder Quota können trotzdem erschöpft sein

34. Testwerkzeug und Testpunkt dokumentieren

Ein Ergebnis ist nur verständlich, wenn bekannt ist, wo und wie gemessen wurde.

Zu dokumentieren

  • Werkzeugname,
  • Werkzeugversion,
  • Betriebssystem,
  • genauer Befehl,
  • Quellsystem,
  • Quell-IP,
  • Quell-VLAN,
  • Benutzerkontext,
  • Zielname,
  • Ziel-IP,
  • Protokoll,
  • Port,
  • Zeitpunkt,
  • Zeitzone,
  • Wiederholungsanzahl,
  • vollständige Ausgabe,
  • Rückgabewert.

Werkzeugversionen anzeigen

PowerShell

[RO] $PSVersionTable

curl

[RO] curl --version

OpenSSL

[RO] openssl version -a

Linux-Kernel

[RO] uname -a

macOS

[RO] sw_vers

Unterschiedliche Werkzeugversionen können verschiedene Optionen, Protokolle oder Standardwerte verwenden.


35. Produktivumgebung gegen Testumgebung abwägen

UmgebungVorteilNachteil
Produktionssystemreales FehlerbildRisiko für Benutzer und Daten
Testsystemgeringeres Risikomöglicherweise nicht identische Konfiguration
Stagingproduktionsähnlichmöglicherweise andere Daten oder Last
isolierter Clienteinzelne Variable kontrollierbarnicht jeder Netzwerkpfad wird abgebildet
Snapshot-KopieZustand kann untersucht werdenflüchtige Informationen fehlen möglicherweise
LaborTests gut reproduzierbarProduktionsabhängigkeiten fehlen

Ein Testsystem ist nur dann aussagekräftig, wenn relevante Unterschiede zur Produktion dokumentiert sind.


36. Änderungen in der Produktion absichern

Vor einer verändernden Prüfung sollten geklärt sein:

  • Freigabe,
  • Wartungsfenster,
  • betroffene Systeme,
  • betroffene Benutzer,
  • Backup oder Konfigurationssicherung,
  • Rückfallplan,
  • Abbruchkriterien,
  • Monitoring,
  • Kommunikation,
  • verantwortliche Person,
  • erwartete Testdauer,
  • Beobachtungszeit nach der Änderung.

Freigabevorlage

FeldEintrag
Ticketnummer
Hypothese
geplante Änderung
betroffene Systeme
erwartete Auswirkung
Risiko
Wartungsfenster
Backup vorhandenJa / Nein
Rückfallplan
Abbruchkriterium
Freigabe durch
ausführende Person
beobachtende Person

37. Tests mit Anmeldungen vorsichtig durchführen

Anmeldetests können:

  • Konten sperren,
  • MFA-Anfragen auslösen,
  • Sicherheitsalarme erzeugen,
  • Sitzungen beenden,
  • Token erzeugen,
  • Lizenzplätze belegen,
  • Änderungen im Benutzerprofil auslösen.

Vor einem Anmeldetest prüfen:

  • Ist das Kennwort sicher bekannt?
  • Wie viele Fehlversuche sind erlaubt?
  • Existiert ein freigegebenes Testkonto?
  • Wird MFA ausgelöst?
  • Darf das Konto auf diesem System verwendet werden?
  • Kann die Sitzung wieder sauber beendet werden?
  • Werden durch den Test Daten verändert?
  • Wird ein SIEM-Alarm erwartet?

Kennwörter, Token und API-Schlüssel dürfen nicht in Protokolldateien, Terminaltranskripten oder Befehlszeilen erscheinen.


38. Beispiel eines kontrollierten Tests

Störung

Eine Webanwendung liefert sporadisch HTTP 503.

Hypothesen

  • H1: DNS liefert zeitweise eine falsche IP-Adresse.
  • H2: Eines von zwei Backends ist fehlerhaft.
  • H3: Der TLS-Handshake schlägt sporadisch fehl.
  • H4: Der Client verliert zeitweise die Netzwerkverbindung.

Prüfplan

SchrittTestErwarteter Erkenntnisgewinn
1DNS mehrfach abfragenverwendete Zieladressen bestimmen
2curl-Zeitmessung wiederholenHTTP-Status, Ziel-IP und Zeitstufe erfassen
3Backends einzeln mit --resolve testenfehlerhaftes Backend identifizieren
4TCP- und TLS-Ergebnisse vergleichenNetzwerk- und TLS-Ursachen bewerten
5Serverlogs zum Zeitpunkt prüfenBackendfehler bestätigen

Ergebnis

  • DNS liefert abwechselnd 198.51.100.20 und 198.51.100.21.
  • Anfragen an .20 liefern HTTP 200.
  • Anfragen an .21 liefern HTTP 503.
  • TCP- und TLS-Verbindung funktionieren zu beiden Adressen.
  • Backendprotokoll von .21 zeigt eine nicht erreichbare Datenbank.

Bewertung

  • H1 wird widerlegt: Beide DNS-Adressen sind vorgesehen.
  • H2 wird stark gestützt: Der Fehler ist an Backend .21 gebunden.
  • H3 wird widerlegt: TLS funktioniert bei beiden Backends.
  • H4 wird widerlegt: TCP-Verbindungen sind stabil.
  • Als nächste Hypothese wird die Datenbankverbindung von Backend .21 geprüft.

39. Testprotokoll-Vorlage

FeldEintrag
Ticketnummer
Testnummer
Hypothesennummer
Prüfziel
Datum
Startzeit
Endzeit
Zeitzone
ausführende Person
Quellsystem
Quell-IP und VLAN
Zielsystem
Ziel-IP
Protokoll und Port
Benutzerkontext
Werkzeug und Version
exakter Befehl
Ausgangszustand
erwartetes Ergebnis
widerlegendes Ergebnis
tatsächliches Ergebnis
Rückgabewert
Ausgabedatei
Hypothesenbewertung
Nebenwirkungen
Rückfall durchgeführtJa / Nein / Nicht erforderlich
Zustand nach dem Test
nächster Schritt

Kurzcheckliste

  •  Prüfziel eindeutig formuliert
  •  Hypothese und Vorhersage dokumentiert
  •  Widerlegendes Ergebnis festgelegt
  •  Ausgangszustand gesichert
  •  Quell- und Zielsystem dokumentiert
  •  Benutzerkontext dokumentiert
  •  Risiko bewertet
  •  Freigabe bei veränderndem Test eingeholt
  •  Rückfallplan vorhanden
  •  Abbruchkriterien definiert
  •  Möglichst nur eine Variable verändert
  •  Vergleichssystem verwendet
  •  Start- und Endzeit dokumentiert
  •  Exakten Befehl dokumentiert
  •  Vollständige Ausgabe gesichert
  •  Rückgabewert gesichert
  •  Test bei Bedarf kontrolliert wiederholt
  •  Werkzeugversion dokumentiert
  •  Vorher- und Nachher-Test identisch durchgeführt
  •  Benutzerfunktion zusätzlich technisch geprüft
  •  Falsch positive Ergebnisse berücksichtigt
  •  Falsch negative Ergebnisse berücksichtigt
  •  Hypothesenstatus aktualisiert
  •  Zustand nach dem Test kontrolliert
  •  Ergebnis im Ticket dokumentiert

Ergebnis dieses Arbeitsschrittes

Am Ende dieses Schrittes liegt ein nachvollziehbares und reproduzierbares Testergebnis vor.

Ein brauchbares Testergebnis beantwortet:

  • Was wurde geprüft?
  • Welche Hypothese wurde untersucht?
  • Von welchem System wurde getestet?
  • Unter welchem Benutzerkontext wurde getestet?
  • Wann wurde getestet?
  • Welcher genaue Befehl wurde verwendet?
  • Was wurde vorher erwartet?
  • Was wurde tatsächlich beobachtet?
  • Welcher Rückgabewert wurde erzeugt?
  • Welche Hypothese wird dadurch gestützt oder widerlegt?
  • Wurde der Ausgangszustand wiederhergestellt?
  • Welcher nächste Schritt ergibt sich daraus?

Nächste Seite:
1.7 Ursache bestätigen und alternative Erklärungen ausschließen


Offizielle Hersteller- und Projektdokumentation