Files
demo-epb/misra/records-md/MISRA-Record-001.md
T
Stefan Lohmaier 1855162e6d Initial commit: demo-epb v1.0 — Elektrische Parkbremse Demo
Vollstaendige Demo des slohmaier Dev Process anhand einer EPB-Steuergeraet-
Software. Zeigt ASPICE 4.0 / ISO 26262-konforme Entwicklung im Monorepo.

Inhalte:
- 5 Plaene (PID, PM-, QA-, SWE-, Test-Plan) in Word, ausgefuellt mit
  EPB-spezifischen Inhalten
- 10 System-Anforderungen + 25 Software-Anforderungen (Doorstop-MD)
- 5 System-Architektur-Elemente + 10 Software-Architektur-Elemente
  mit PlantUML-Diagrammen und vollstaendigem Mapping
- 3 implementierte Komponenten (Apply Controller D, Actuator Driver B,
  Switch Debouncer QM) plus 7 Header-Stubs
- 28 Unit-Tests, alle gruen, mit Coverage- und MISRA-Build-Targets
- Audit-Artefakte: 1 Review-Protokoll, 1 Non-Conformity, 1 MISRA-Record
- Gitea-Actions-CI-Pipeline (validate.yml)
- Doorstop-Konfiguration fuer bidirektionale Traceability
- Generator-Skript fuer alle 50 Reqs/Arch-Elemente aus Strukturdaten
- README mit gefuehrter Tour fuer Prospects
2026-05-11 13:51:02 -07:00

2.4 KiB

record-id, projekt, datum, status
record-id projekt datum status
MISRA-REC-001 demo-epb 2026-05-11 Approved

MISRA Deviation Record MISRA-REC-001

Feld Wert
Record-ID MISRA-REC-001
Datum 2026-05-11
Datei src/apply_controller.c
Funktion apply_ctrl_step_50ms
Zeile 64
Standard MISRA C:2012
Regel Rule 15.5 (Advisory) — "A function should have a single point of exit"
ASIL D
Status Approved

1. Code-Ausschnitt

void apply_ctrl_step_50ms(const ApplyInputs* in)
{
    if (in == NULL) {
        s_ctx.last_error = EPB_EINVAL;
        return;            /* <-- frueher Exit */
    }
    ...
}

2. Begruendung

NULL-Pointer-Check als frueher Exit-Punkt verbessert die Lesbarkeit deutlich gegenueber einer geschachtelten Variante mit einem einzigen return am Ende. MISRA Rule 15.5 ist Advisory, nicht Required.

Der frueh-Exit hat eine klar definierte Semantik (Input-Validierung) und beeintraechtigt nicht die Verifizierbarkeit; im Gegenteil, der separate Pfad ist im Unit-Test test_null_input eindeutig abgedeckt.

3. Alternative geprueft

Variante mit einzigem Exit:

void apply_ctrl_step_50ms(const ApplyInputs* in)
{
    if (in == NULL) {
        s_ctx.last_error = EPB_EINVAL;
    } else {
        /* gesamte Step-Logik in else-Branch geschachtelt */
        ...
    }
}

Verworfen, weil die zusaetzliche Schachtelung die State-Machine schwerer lesbar macht und keine Funktionsaequivalenz mit der frueh-Exit-Variante gewinnt.

4. Auswirkung auf Sicherheit

Keine. Frueher Exit ist deterministisch und im Unit-Test abgedeckt.

5. Freigabe

Rolle Name Datum Signatur
Technical Lead Stefan Lohmaier 2026-05-11 (Demo)
Safety Manager (im Realprojekt) 2026-05-11 (Demo)

6. Geltungsbereich

Nur fuer diese eine Code-Stelle. Andere Stellen mit frueh-Exit benoetigen separate Records.