Skip to content
IRC-Coding IRC-Coding
JSON Schema OCL Design by Contract Invariante Vorbedingung Nachbedingung

Spezifikation: Daten- und Programmstrukturen mit JSON Schema, OCL & Design by Contract

Spezifikation von Daten- und Programmstrukturen: ER/Klassendiagramm, Kardinalitäten, Invarianten, JSON Schema, Vor-/Nachbedingungen (Design by Contract), Zustandsmodelle und Ableitung von Testfällen.

S

schutzgeist

2 min read

Spezifikation von Daten- und Programmstrukturen

Dieser Beitrag ist eine Begriffserklärung zur Spezifikation von Daten- und Programmstrukturen – inklusive Prüfungsfragen, Kernkomponenten und Tags.

In a Nutshell

Datenstrukturen werden formal über Modelle, Typen, Invarianten und Schemata beschrieben. Programmstrukturen werden über Schnittstellen, Vor-/Nachbedingungen, Zustände und Kontrollfluss präzisiert. Ziel ist eindeutige, testbare und wartbare Software.

Kompakte Fachbeschreibung

Datenspezifikation

  • Modelle: ER-Modell oder UML-Klassendiagramm
  • Kardinalitäten, Schlüssel, Normalisierung (bis 3NF)
  • Regeln als Invarianten
  • Schnittstellendaten maschinenlesbar: JSON Schema (oder DDL/XML Schema)

Programmspezifikation

  • Module/APIs mit Signaturen
  • Fehlerverträge
  • Design by Contract: Vorbedingung, Nachbedingung, Invariante
  • Verhalten: Zustandsautomaten, Aktivitäts-/Sequenzdiagramme
  • Präzisierung: OCL (Object Constraint Language)

Spezifikationen dienen als Basis für automatische Validierung, Stub-Generierung und Contract Tests.

Prüfungsrelevante Stichpunkte

  • Kardinalitäten/Schlüssel korrekt
  • JSON Schema zur Eingabevalidierung
  • Vor-/Nachbedingungen + Fehlerfälle
  • Zustandsmodelle für erlaubte Übergänge
  • Testfälle ableiten (Äquivalenzklassen/Grenzwerte)
  • Versionierung + Migration/Deprecation
  • Security: Validierung + Rechte + Auditfelder

Kernkomponenten

  1. Abstrakter Datentyp + Wertebereich
  2. Strukturmodell (ER/Klasse)
  3. Kardinalitäten + Normalformen
  4. Datenschema (JSON Schema)
  5. API-Vertrag + Fehlercodes
  6. Design by Contract
  7. Zustands-/Prozessmodelle
  8. Qualitätsregeln (NFA)
  9. Testableitung (Contract/Property)
  10. Versions-/Migrationskonzept

Praxisbeispiel (Bestellung)

JSON Schema (Auszug als Text)

type: object
required: id, kundeId, positionen, gesamt
properties:
  id: string (pattern ^ORD-[0-9]{6}$)
  gesamt: number (minimum 0)
  positionen: array (minItems 1)

OCL-Invarianten (sinngemäß)

context Bestellung inv SummeStimmt:
  gesamt = sum(positionen.preis * positionen.menge)

context Bestellung inv PositiveMengen:
  forAll(positionen, menge > 0)

Service-Vertrag (Pseudocode)

interface BestellService
  legeBestellungAn(warenkorb)

vorbedingung:
  warenkorb.positionen nicht leer und warenkorb.gesamt > 0
nachbedingung:
  result.status = ANGELEGT und result.gesamt = warenkorb.gesamt
fehlerfälle:
  UngültigeDaten, ZahlungAbgelehnt

Vorteile und Nachteile

Vorteile

  • Eindeutige Kommunikation
  • Automatisierbare Validierung
  • Bessere Testbarkeit und weniger Integrationsfehler

Nachteile

  • Initialaufwand
  • Pflege von Versionen/Migrationen
  • Risiko der Überformalisierung

Typische Prüfungsfragen (mit Kurzantwort)

  1. ER-Modell vs Klassendiagramm? ER für Daten/Persistenz, Klasse für Typen + Operationen.
  2. Wozu Invarianten? Regeln, die immer gelten müssen.
  3. Wie entstehen Tests aus Spezifikation? Vorbedingungen/Invarianten → Äquivalenzklassen/Grenzwerte.
  4. Wie versioniert man Schemata sicher? Semver, Breaking Changes = Major, Deprecation + Migration.

Wichtigste Quellen

  1. https://json-schema.org
  2. https://www.omg.org/spec/UML
Zurück zum Blog
Share:

Ähnliche Beiträge