Projekt 2 - Entscheidungsuebersicht

Decision Log & Lessons Learned28 Entscheidungen: 12 ADRs + 16 aus Lessons Learned

Jede Architektur-, Design- und Prozessentscheidung ist mit einem 4-Dimensionen-Scoring-Modell (Kosten, Zeit, Safety, Lebenslauf), 2 bewerteten Alternativen und expliziter Begruendung dokumentiert. Entscheidungen aus Projekterfahrung sind mit Lesson-Kontext und Key Takeaways gerahmt.

So liest man diese Seite

Architekturentscheidungen (12 ADRs) sind nach Impact bewertet und gestuft. Entscheidungen aus Lessons Learned (16 Eintraege) zeigen was wir gelernt und daraus entschieden haben. Jeden Eintrag aufklappen fuer Details.

Entscheidungen gesamt: 28
Architektur-ADRs: 12 (bewertet)
Lesson-Entscheidungen: 16 (4 Kategorien)

Architekturentscheidungen

12 ADRs

3 Architecture | 5 Design | 4 Process

Aus Lessons Learned

16 Entscheidungen

Safety | Infra | Testing | Process

Scoring-Modell

Cost | Time | Safety | Resume

1-3 each, total /12

Top Score

ADR-005: 10/12

STM32G474RE MCU platform choice

Architekturentscheidungen

Nach Tier filtern:
T45/12ADR-001: Dokumentstruktur nach ASPICE-Prozessbereichen

Cost 1 | Time 1 | Safety 1 | Resume 2

Entscheidung: Dokumentation unter docs/aspice/ nach Prozessbereich organisieren

Warum sie gewinnt: Dateibasiertes ALM in Git bietet assessor-freundliche Struktur ohne Kosten mit voller Versionskontrolle.

T44/12ADR-002: Master-Plan als Quell-Baseline beibehalten

Cost 1 | Time 1 | Safety 1 | Resume 1

Entscheidung: Master-Plan als einzigen strategischen Plan beibehalten, ASPICE-Ausfuehrungsplaene als operative Aufschluesselung

Warum sie gewinnt: Der Master-Plan liefert strategischen Kontext (Architektur, BOM, Demos), den Ausfuehrungsplaene nicht abdecken.

T44/12ADR-003: Zentrales docs/research/ Repository erstellen

Cost 1 | Time 1 | Safety 1 | Resume 1

Entscheidung: Alle externen Referenzen und Recherche-Notizen in docs/research/ zentralisieren

Warum sie gewinnt: Git-versioniertes Research-Log haelt die Herkunft beim Codebase. Durchsuchbar und auditierbar.

T45/12ADR-004: MAN.3 Live-Tracking-Set hinzufuegen

Cost 1 | Time 1 | Safety 1 | Resume 2

Entscheidung: Fortschritts-Dashboard, Issue-Log, Decision-Log und Gate-Readiness-Checkliste zu MAN.3 hinzufuegen

Warum sie gewinnt: Markdown-Tracking-Dateien im Repo erfuellen ASPICE-Nachweisanforderungen und werden mit dem Code baselined.

T110/12ADR-005: STM32G474RE Nucleo fuer 3 Zonen-ECUs

Cost 2 | Time 2 | Safety 3 | Resume 3

Entscheidung: 3x STM32G474RE Nucleo-64 Boards fuer CVC, FZC und RZC Zonensteuergeraete. 3x FDCAN, 5x ADC, CORDIC+FMAC, 170 MHz Cortex-M4F.

Warum sie gewinnt: Gewinnt CAN-FD, extra ADCs fuer Dual-Sensor-Plausibilitaet und HW-Beschleuniger vs F446RE. Arduino Mega disqualifiziert (8-bit/8KB/kein CAN).

T19/12ADR-006: AUTOSAR Classic geschichtetes BSW

Cost 1 | Time 2 | Safety 3 | Resume 3

Entscheidung: Eigenes AUTOSAR-Classic-inspiriertes BSW: MCAL, EAL, Services, RTE — 16 Module, ~5.000 LOC geteilt ueber 3 STM32 ECUs.

Warum sie gewinnt: 16+ Automotive-Lebenslauf-Keywords, ASPICE SWE.2/SWE.3 Compliance, HW-Abstraktion fuer SIL-Tests. 10/10 Lebenslauf-Impact vs 3/10 bare-metal.

T27/12ADR-007: POSIX SocketCAN fuer simulierte ECU MCAL

Cost 1 | Time 2 | Safety 1 | Resume 3

Entscheidung: POSIX SocketCAN API als MCAL-Schicht fuer 3 simulierte ECUs in Docker — 100% Code-Wiederverwendung zwischen physischen und simulierten ECUs.

Warum sie gewinnt: Einzige Option mit 100% Code-Wiederverwendung. Python-can zerstoert die AUTOSAR-Portabilitaetsgeschichte. Vector CANoe kostet $10K+.

T26/12ADR-008: BMW vsomeip fuer SOME/IP Demo

Cost 1 | Time 1 | Safety 1 | Resume 3

Entscheidung: vsomeip (COVESA/BMW) fuer serviceorientierte Kommunikation zwischen simulierten ECUs und Pi Gateway.

Warum sie gewinnt: 4-7 Tage fuer funktionierendes SOME/IP Demo mit BMW/COVESA-Kredibilitaet. Eigene Reimplementierung verschwendet 4-8 Wochen.

T25/12ADR-009: Docker Container fuer simulierte ECU Runtime

Cost 1 | Time 1 | Safety 1 | Resume 2

Entscheidung: 3 simulierte ECUs (BCM, ICU, TCU) in Docker-Containern mit virtuellen CAN (vcan/vxcan) Interfaces ausfuehren.

Warum sie gewinnt: Gleicher 1-2 Tage Aufwand wie native Prozesse, aber mit Isolation, Reproduzierbarkeit und CI/CD-Portabilitaet. QEMU kostet 3-15x mehr Setup.

T27/12ADR-010: Unity + CCS Test + pytest fuer Testing

Cost 1 | Time 1 | Safety 3 | Resume 2

Entscheidung: Unity (ThrowTheSwitch) fuer C Unit-Tests, CCS built-in fuer TMS570, pytest fuer Python Gateway/Cloud.

Warum sie gewinnt: Reines C, 2-4 Stunden Setup vs 2-4 Tage gtest. CMock generiert Mocks automatisch. CUnit ist aufgegeben (2018).

T17/12ADR-011: CAN 2.0B bei 500 kbps (kein CAN FD)

Cost 1 | Time 1 | Safety 3 | Resume 2

Entscheidung: CAN 2.0B bei 500 kbps fuer gesamte Inter-ECU-Kommunikation. TMS570 DCAN erfordert klassisches CAN. 35% Busauslastung — kein Bandbreitendruck.

Warum sie gewinnt: Null-Kosten-Baseline. CAN FD fuegt 8-13 Tage fuer nicht benoetigte Bandbreite hinzu. Ethernet erfordert 3 neue MCU-Boards + 6-10 Wochen.

T26/12ADR-012: AWS IoT Core + Timestream + Grafana

Cost 1 | Time 1 | Safety 1 | Resume 3

Entscheidung: AWS IoT Core (MQTT) + Amazon Timestream (Zeitreihen-DB) + Grafana fuer Cloud-Telemetrie, gebatcht 1 msg/5sec fuer Free Tier.

Warum sie gewinnt: ~$4-7/Monat mit hoechster Automotive-Kredibilitaet (Mercedes, VW, Toyota nutzen AWS). Azure ist 4-5x teurer. Self-hosted fehlt Lebenslauf-Wert.

Entscheidungen aus Lessons Learned

Nach Kategorie filtern:
SafetyLL-001: Security Hardening in strikter Phasenreihenfolge ausfuehren

Entscheidung: Immer in Reihenfolge haerten: Notfall-Fixes → Auth/Missbrauchsschutz → Zugriffskontrolle → API-Haertung → Monitoring → Verifikations-Gate. Nie zu erweiterten Features springen bevor Basics gesichert.

Was wir gelernt haben: Sprung zu OAuth und reCAPTCHA vor solidem Auth, Rate Limiting und CSRF verursachte erhebliche Nacharbeit ueber 10 Phasen.

  • Fail-Closed-Pattern: bei fehlender Config ablehnen, nie Auth still ueberspringen
  • Generisches SMTP von Anfang an — Vendor-SDK-Lock-in (Resend) kostete mehrere Phasen zum Entfernen
  • Marketing-Claims gegen Code pruefen VOR Launch — Zahlen veralten, Absolutaussagen sind falsch
InfrastrukturLL-002: CI-Tool-Version zuerst testen, nicht lokale

Entscheidung: Immer gegen die CI-Tool-Version (cppcheck 2.13) validieren bevor lokale Ergebnisse (2.17) als gueltig angenommen werden. Tool-Versionen in CI-Config pinnen.

Was wir gelernt haben: cppcheck 2.13 (CI/Ubuntu apt) vs 2.17 (lokal/pip) hatte 6 Inkompatibilitaeten die erst in CI nach Push auftraten.

  • Keine #-Kommentare in suppressions.txt — cppcheck 2.13 kann sie nicht parsen
  • .gitignore blockiert suppressions.txt — !-Ausnahme verwenden bei Directory-Pattern-Ignores
  • 1.536 auf 0 Violations an 1 Tag mit systematischer Triage: mandatory zuerst, required danach, advisory zuletzt
TestingLL-003: stdint.h-Typen in Host-Tests verwenden, nicht Plattformtypen

Entscheidung: stdint.h Fixed-Width-Typen (uint32_t) in allem host-kompiliertem Testcode verwenden. Nie auf AUTOSAR-Plattformtypen vertrauen die ILP32 annehmen.

Was wir gelernt haben: LP64 (Host) vs ILP32 (Target): uint32 mappte auf unsigned int am Target aber unsigned long am Host, verursachte 99 Type-Mismatch-Fehler in CI.

  • Source-Inclusion-Pattern fuer Unity-Tests — .c-Dateien includen, nicht linken; Standard Embedded TDD
  • Mock-State muss in setUp() geloescht werden — ALLE Mock-Globals nullen, keine Ausnahmen
  • Header-Guard-Kollisionen ueber Testdateien (DEM_H, E2E_H) — Guards mit TEST_-Namespace prefixen
InfrastrukturLL-004: 4-bit modulare Arithmetik fuer Heartbeat Alive Counter verwenden

Entscheidung: Heartbeat Alive-Counter wrapt bei 4-bit (0-15) gemaess AUTOSAR E2E Profil 1, nicht 8-bit. Modulare Arithmetik und einzelner Monitor pro ECU verwenden.

Was wir gelernt haben: Doppelte Heartbeat-Monitore und 8-bit-Wrap-Annahme verursachten persistentes UI-Flackern im SIL-Demo-Dashboard.

  • Docker Compose v2: 'docker compose' (Leerzeichen) nicht 'docker-compose' (Bindestrich) — bricht Scripts still
  • NET_RAW-Capability fuer CAN in Containern erforderlich — aus Fehlermeldungen nicht ersichtlich
  • RTE_MAX_SIGNALS zu klein verursacht stillen Init-Fehler — Signalanzahl beim Start validieren
ProzessLL-005: Single Source of Truth fuer dokumentuebergreifende Parameter

Entscheidung: Jeden geteilten Parameter (CAN-Bit-Timing, Sensor-Specs, Pin-Zuweisungen) in genau einem kanonischen Dokument definieren. Alle anderen Docs referenzieren, nie kopieren.

Was wir gelernt haben: CAN-Bit-Timing (87,5% vs 80% Abtastpunkt) war inkonsistent ueber 4 Dokumente. ACS723-Empfindlichkeit war in 5 Stellen falsch.

  • CAN-IDs am meisten duplizierte Daten — projektweites Grep nach jeder Aenderung um Mismatches zu finden
  • MG996R Servo: 180 Grad, nicht 360 Grad (Amazon BOM-Listing-Fehler) — immer Datenblatt pruefen
  • Cross-Doc-Review-Checkliste findet was Einzel-Review verpasst
TestingLL-006: Test-First mit Pre-Commit-Hook fuer alle BSW-Module erzwingen

Entscheidung: Schreibzugriffe auf Firmware-.c-Quelldateien blockieren wenn keine entsprechende test_*.c existiert. AUTOSAR BSW Schicht-Bauordnung erzwingen: MCAL, ECUAL, Services, RTE.

Was wir gelernt haben: Ohne Erzwingung ueberspringen Entwickler Tests unter Zeitdruck. Hook-erzwungenes TDD produzierte 16 Module mit 1.067 Tests und null uebersprungene Module.

  • Table-driven State Machines und Dual-Sensor-Plausibilitaet ueber alle BSW-Module bewaehrt
  • E2E als standalone Modul: abhaengigkeitsfrei, wiederverwendbar ueber physische und simulierte ECUs
  • Phasenbasierte Ausfuehrung mit Status-Tabelle haelt Momentum und verhindert Scope Creep
ProzessLL-007: HITL-LOCK-Marker fuer Mensch-AI-Co-Development-Reviews verwenden

Entscheidung: Menschlich verfasste Review-Kommentare mit HITL-LOCK-Markern schuetzen. Why/Tradeoff/Alternative-Struktur verwenden. Jeden Review-Kommentar fuer CM-Nachvollziehbarkeit datieren.

Was wir gelernt haben: AI hat menschliche Review-Kommentare ohne Marker umformatiert und verschoben. 443+ HITL-Kommentare ueber 29 Docs waeren ohne Schutz nicht verwaltbar.

  • HITL-LOCK-Marker sind unveraenderlich nach Setzen — AI darf gesperrte Inhalte nie bearbeiten
  • Pro-Requirement Lessons-Learned-Dateien (SYS-NNN) halten Erkenntnisse mit ihrer Quelle verknuepft
  • Konsolidierter Lessons-Learned-Ordner besser als verstreute Einzel-Doc-Dateien
ProzessLL-008: Dateibasiertes ALM statt Schwergewicht-Tools verwenden

Entscheidung: Git + Markdown deckt 90% der DOORS/Polarion/Jama-Funktionalitaet bei 0% Lizenzkosten. ADR-Format mit 4-Dimensionen-Scoring ermoeglicht entscheidungsuebergreifenden Vergleich.

Was wir gelernt haben: 7-ECU Hybrid-Architektur (4 physisch + 3 simuliert) bewies dass CAN-Bus Hardware nicht von Docker unterscheidet — dateibasierte Tools skalieren genauso.

  • Decision-Audit-Script findet undokumentierte Entscheidungen via heuristisches Grep
  • Tier-Zuordnung (T1-T4) folgt aus Scores, nicht willkuerlicher Klassifizierung
  • Zonale Architekturentscheidung durch Lebenslauf-Wert + Lernmoeglichkeit getrieben, nicht nur technisch
SafetyLL-009: Nur GND-Fault-Injection fuer Budget-HIL-Setups verwenden

Entscheidung: VBAT-Fault-Injection bei Budget-Hardware ueberspringen — nur GND + Open-Circuit deckt ~70% der Fehlermodi sicher ab. Praeventiven Zener-Schutz auf jedem Kanal.

Was wir gelernt haben: VBAT-Fault-Injection auf ungeschuetzten Nucleo-Boards riskiert MCU-Zerstoerung. Eine EUR 0,10 Zener-Diode verhindert EUR 16 Board-Ersatz.

  • DIY HIL ist legitim ueber Hobby-Niveau — 7-ECU AUTOSAR mit 1.067 Tests ist industrierelevant
  • Relais-basierte Fault-Injection-Matrix: MUX-Topologie reduziert Relaisanzahl von N*M auf N+M
  • Nadelbett-Adapter-Pattern von professionellen HIL-Baenken skaliert auf Budget-Hardware herunter
SafetyLL-010: Geteilten SPI-Bus als CCF in Abhaengigkeits-Fehleranalyse dokumentieren

Entscheidung: 1oo2D auf geteiltem SPI-Bus akzeptabel wenn Erkennungspfad existiert (CRC + Plausibilitaet → sicherer Zustand). Geteilter Bus-Ausfall ist erkannter Multi-Point-Fault. Immer in DFA dokumentieren.

Was wir gelernt haben: Initialer Entwurf nahm SPI-Bus-Unabhaengigkeit an. HITL-Review deckte auf dass geteilter SPI ein Common Cause Failure ist der explizit analysiert werden muss.

  • Beide CRCs gleichzeitig fehlerhaft = erkannter Fehler, nicht unerkannt — staerkt das Safety-Argument
  • DMA/Treiber-Komplexitaet kein gueltiges Argument gegen SPI1+SPI2 — Config ist triviales Copy-Paste
  • Separate SPI-Busse nur gerechtfertigt wenn ASIL-Dekomposition bewiesene Unabhaengigkeit erfordert
ProzessLL-011: CI-Merge bei Traceability-Luecken blockieren, nicht nur warnen

Entscheidung: CI muss Merge bei Traceability-Luecken blockieren — Advisory-Checks werden universell ignoriert. Stub-Scripts die CI bestehen geben falsches Vertrauen; Tooling richtig bauen oder ganz weglassen.

Was wir gelernt haben: 4 gebrochene Requirement-Links und 6 ungetestete SWRs waren unsichtbar bis automatisierte Traceability-Pruefung sie fand.

  • trace-gen.py validiert SG → FSR → TSR → SSR → Code → Test Kettenvollstaendigkeit
  • Verwaiste Requirements (keine Implementierung) und verwaiste Tests (kein Requirement) beide erkannt
  • Traceability-Report bei jedem CI-Lauf generiert — Assessoren koennen jederzeit pruefen
SafetyLL-012: Safety Case top-down von HARA aufbauen, nie bottom-up

Entscheidung: Immer HARA → Safety Goals → FSR → TSR → SSR aufbauen. Bottom-up produziert Rationalisierung, keine Verteidigung. FTTI muss aus Mechanismen abgeleitet werden, nicht geraten.

Was wir gelernt haben: Versuch SSRs vor HARA-Abschluss zu schreiben fuehrte zu Requirements ohne Safety-Goal-Bezug — verschwendeter Aufwand.

  • S3/E4/C3 = ASIL D fuer Drive-by-Wire — die Matrixwerte sind eindeutig, keine Debatte noetig
  • Safety Goals brauchen FTTI-Begruendung: detect_time + react_time aus konkreten Mechanismen abgeleitet
  • GSN (Goal Structuring Notation) macht die Argumentstruktur sichtbar und auditierbar
InfrastrukturLL-013: HAL fuer Testbarkeit entwerfen — ermoeglicht SIL kostenlos

Entscheidung: HAL-Abstraktion fuer Unit-Testing entworfen ist die gleiche Abstraktion die SIL-Simulation ermoeglicht. SocketCAN nutzt identische API fuer vcan und echtes CAN — nur Interface-Name aendern.

Was wir gelernt haben: POSIX SocketCAN-Backend wurde fuer SIL hinzugefuegt, stellte sich aber als exakt gleiche Abstraktionsgrenze heraus die wir fuer host-basierte Unit-Tests brauchten.

  • POSIX-Backend-Dateien sind MISRA-befreit — Regeln 21.5, 21.6, 21.8, 21.10, 17.7 von Tag eins unterdruecken
  • vcan-Modul Auto-Load + Fehlerbereinigung bei Container-Neustart verhindert veralteten CAN-State
  • 100% Firmware-Code-Wiederverwendung zwischen physischem ECU und Docker-Container validiert die Abstraktion
InfrastrukturLL-014: Fault-Injection-Sequenzen deterministisch und zustandsbewusst machen

Entscheidung: Jede Fault-Injection muss einer definierten inject → detect → react → recovery Sequenz folgen. DTC-Broadcasts brauchen Arbitrierungs-Backoff. ML-Anomalie-Baselines variieren pro Betriebszustand.

Was wir gelernt haben: Zufaellige Fault-Injection produzierte nicht-reproduzierbare Ergebnisse. ML-Anomalie-Scores steckten bei Baseline fest weil Schwellwerte verschiedene Betriebszustaende nicht beruecksichtigten.

  • DTC-Broadcast braucht randomisierten 0-50ms Backoff um CAN-Bus-Flooding durch gleichzeitige DTCs zu verhindern
  • E-STOP-Event-Spam bei Reset — ordentliche Fault-Clear-Sequenz vor Reaktivierung noetig
  • Controller-Viewer-Lock-Pattern verhindert Multi-User-Konflikte in Live-Demo
TestingLL-015: SIL-Integrationstests naechtlich ausfuehren — Mocks verpassen echte Integrationsfehler

Entscheidung: SIL-Tests finden Integrationsprobleme die Mocks nicht koennen: ECU-zu-ECU-Kommunikation, E2E-Schutz, Fault-State-Uebergaenge. Naechtlich in CI ausfuehren. Unbekannte Test-Schritte muessen laut fehlschlagen.

Was wir gelernt haben: COM TX/RX Bridge Timing-Probleme und E2E-Sequenzzaehler-Mismatches waren in Unit-Tests unsichtbar — tauchten nur in Multi-ECU SIL-Laeufen auf.

  • COM TX/RX Bridge ist die kritischste SIL-Komponente — vor Szenarien bauen und testen
  • Fail-Closed gilt auch fuer Test-Infrastruktur — unbekannte Steps muessen fehlschlagen, nicht ueberspringen
  • Plant-Simulator-Thermikmodell braucht Tuning pro Betriebspunkt, nicht pauschal
InfrastrukturLL-016: Jede Komponente gegen Hersteller-Datenblatt pruefen vor Bestellung

Entscheidung: Nie Marktplatz-Listings vertrauen — immer Hersteller-Datenblatt herunterladen und jeden Parameter pruefen. Volle Teilenummer inklusive Variantensuffix in BOM aufnehmen.

Was wir gelernt haben: MG996R als 360 Grad gelistet war tatsaechlich 180 Grad. ACS723-05A vs ACS723-20A haben 4x unterschiedliche Empfindlichkeit (400 vs 100 mV/A). Beide verursachten Nacharbeit.

  • SOT-23-Komponenten brauchen Breakout-Boards — Gehaeuse vs Montagemethode vor Bestellung pruefen
  • Lieferzeit fuer Automotive-Grade-Komponenten kann 8-12 Wochen sein — frueh bestellen, mit Commercial Grade prototypen
  • BOM muss enthalten: volle Teilenummer, Hersteller, Distributor-Link, Datenblatt-Link, Gehaeusetyp

Scoring-Modell

Dimension1 (Low)2 (Medium)3 (High)
Kosten< $50$50-$500> $500
Zeit< 1 Woche1-4 Wochen> 4 Wochen
SafetyQMASIL A-CASIL D
LebenslaufGenerischBranchenrelevantTop-Keyword

Entscheidungsprozess

Erfasst

  • Problem und Randbedingungen dokumentiert
  • Mindestens 2 Alternativen mit Aufwandsschaetzungen aufgelistet

Bewertet

  • Kosten/Zeit/Safety/Lebenslauf bewertet (1-3 je)
  • Tradeoff-Begruendung mit explizitem Vergleich geschrieben

Baselined

  • Freigegeben mit ADR-NNN Kennung und Tier-Klassifizierung
  • Verknuepft mit Implementierungsnachweis in Code und Docs

Warum dieses Log stark ist

Jede Entscheidung hat 2 Alternativen mit Aufwandsschaetzungen
  • Nicht nur 'wir waehlten X' — jede ADR zeigt, was abgelehnt wurde und warum
  • Aufwand in Stunden + Dollar macht Tradeoffs konkret
  • Auditierbar durch jeden ASPICE-Assessor oder Interviewer
4-Dimensionen-Scoring ermoeglicht ADR-uebergreifenden Vergleich
  • Kosten, Zeit, Safety, Lebenslauf konsistent 1-3 bewertet
  • ADR-005 (MCU, 10/12) vs ADR-003 (Research-Repo, 4/12) zeigt klares Ranking
  • Tier-Zuordnung (T1-T4) folgt aus Scores — nicht willkuerlich
Entscheidungen verweisen auf Ausfuehrungsnachweise
  • ADR-006 (AUTOSAR BSW) verweist auf 16 implementierte Module und 195 Tests
  • ADR-005 (STM32G474RE) verweist auf 6 CVC SWCs und 88 Tests
  • 16 Lesson-abgeleitete Entscheidungen verknuepfen Erfahrung mit Projektstandards

Top Entscheidungen nach Score

ADR-005

10/12

STM32G474RE MCU-Plattform

ADR-006

9/12

AUTOSAR Classic BSW

ADR-007

7/12

SocketCAN Simulations-MCAL

ADR-010

7/12

Unity + CCS + pytest Testing

ADR-011

7/12

CAN 2.0B bei 500 kbps

Verwandte Portfolio-Seiten

Diese Uebersicht zusammen mit der Safety Platform Seite fuer einen vollstaendigen Projektueberblick nutzen.