Prädikat has_tests_passed
Bevor ein Pilot abhebt, geht er eine Checkliste durch: Triebwerke? Check. Instrumente? Check. Ein Prädikat ist genau so eine Prüfbedingung - eine Ja/Nein-Frage, die beantwortet werden muss, bevor es weitergeht.
Was ist ein Prädikat?
Im Mensch + KI-Code Prozess ist ein Prädikat eine formale Prüfbedingung, die entweder erfüllt (true) oder nicht erfüllt (false) ist. Es gibt keine Grauzone. Das Prädikat has_tests_passed prüft: Sind alle automatisierten Tests erfolgreich durchgelaufen?
Warum brauchen wir das?
Code ohne Tests ist wie ein Rezept ohne Geschmacksprobe. Du hoffst, dass es funktioniert, aber sicher bist Du nicht. Das Prädikat has_tests_passed stellt sicher, dass jede Änderung nachweislich funktioniert - automatisch, wiederholbar, objektiv.
Vollständiges Beispiel
Definition des Prädikats im Prozess:
# Prädikat: has_tests_passed
# Verwendet in: Gate G4 (Implementation), Gate G5 (Review)
predicate:
id: "has_tests_passed"
name: "Alle Tests bestanden"
description: "Prüft, ob alle automatisierten Tests erfolgreich sind"
category: "quality"
severity: "critical" # Gate blockiert bei Failure
# Was wird geprüft?
checks:
- id: "unit_tests"
name: "Unit Tests"
command: "phpunit --testsuite=unit"
required: true
min_coverage: 80
- id: "integration_tests"
name: "Integration Tests"
command: "phpunit --testsuite=integration"
required: true
- id: "e2e_tests"
name: "End-to-End Tests"
command: "cypress run"
required_for_change_class:
- "normal"
- "critical"
# Erfolgskriterien
success_criteria:
all_tests_pass: true
no_skipped_tests: true
coverage_threshold_met: true
# Bei Failure
on_failure:
action: "block_gate"
notification: "team-channel"
evidence_required:
- "test_output_log"
- "coverage_report"
- "failed_test_details"
Auswertung in der Praxis
So sieht das Ergebnis einer Prädikat-Prüfung aus:
# Prädikat-Auswertung
evaluation:
predicate_id: "has_tests_passed"
change_id: "CHG-2024-0042"
evaluated_at: "2024-01-15T15:30:00Z"
check_results:
- check_id: "unit_tests"
passed: true
details:
total: 247
passed: 247
failed: 0
skipped: 0
coverage: 87.3
duration_seconds: 12.4
- check_id: "integration_tests"
passed: true
details:
total: 58
passed: 58
failed: 0
duration_seconds: 45.2
- check_id: "e2e_tests"
passed: true
details:
total: 23
passed: 23
failed: 0
duration_seconds: 180.5
# Gesamtergebnis
result: true # Prädikat erfüllt
confidence: 1.0
evidence:
test_report: "https://ci.example.com/reports/247"
coverage_report: "https://ci.example.com/coverage/247"
artifacts:
- "junit-report.xml"
- "coverage.html"
Was passiert bei Failure?
Wenn das Prädikat nicht erfüllt ist, wird das Gate blockiert:
# Failure-Szenario
evaluation:
predicate_id: "has_tests_passed"
change_id: "CHG-2024-0043"
check_results:
- check_id: "unit_tests"
passed: false
details:
total: 247
passed: 245
failed: 2
failed_tests:
- name: "UserServiceTest::testCreateUser"
error: "Expected status 201, got 500"
file: "tests/Unit/UserServiceTest.php"
line: 42
- name: "OrderServiceTest::testCalculateTotal"
error: "AssertionError: 99.98 != 99.99"
file: "tests/Unit/OrderServiceTest.php"
line: 87
result: false # Prädikat NICHT erfüllt
gate_blocked: true
required_action:
type: "fix_and_retry"
assignee: "original_author"
deadline: "2024-01-15T18:00:00Z"
Warum ist das wichtig?
Das Prädikat has_tests_passed ist die Qualitätsgarantie des Prozesses. Es verhindert, dass fehlerhafter Code in Produktion gelangt. Und es schafft Vertrauen: Wenn das Prädikat erfüllt ist, wissen alle Beteiligten - Mensch und KI -, dass der Code funktioniert.
Im Mensch + KI-Code Prozess: Das Prädikat has_tests_passed ist am Gate G4 (Implementation) und G5 (Review) obligatorisch. Bei Change Class "Critical" werden zusätzlich Performance- und Security-Tests geprüft.