Specification of Data and Program Structures
This article is a conceptual explanation of the specification of data and program structures – including exam questions, core components, and tags.
In a Nutshell
Data structures are formally described via models, types, invariants, and schemas. Program structures are specified through interfaces, pre-/postconditions, states, and control flow. The goal is unambiguous, testable, and maintainable software.
Compact Technical Description
Data Specification
- Models: ER model or UML class diagram
- Cardinalities, keys, normalization (up to 3NF)
- Rules as invariants
- Interface data machine-readable: JSON Schema (or DDL/XML Schema)
Program Specification
- Modules/APIs with signatures
- Error contracts
- Design by Contract: precondition, postcondition, invariant
- Behavior: state machines, activity/sequence diagrams
- Specification: OCL (Object Constraint Language)
Specifications serve as the basis for automatic validation, stub generation, and contract tests.
Exam-Relevant Key Points
- Cardinalities/keys correct
- JSON Schema for input validation
- Pre-/postconditions + error cases
- State models for allowed transitions
- Derive test cases (equivalence classes/boundary values)
- Versioning + migration/deprecation
- Security: validation + permissions + audit fields
Core Components
- Abstract data type + value range
- Structural model (ER/class)
- Cardinalities + normal forms
- Data schema (JSON Schema)
- API contract + error codes
- Design by Contract
- State/process models
- Quality rules (NFA)
- Test derivation (contract/property)
- Versioning/migration concept
Practical Example (Order)
JSON Schema (Excerpt as 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 Invariants (Paraphrased)
context Bestellung inv SummeStimmt:
gesamt = sum(positionen.preis * positionen.menge)
context Bestellung inv PositiveMengen:
forAll(positionen, menge > 0)
Service Contract (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
Advantages and Disadvantages
Advantages
- Unambiguous communication
- Automatable validation
- Better testability and fewer integration errors
Disadvantages
- Initial effort
- Maintenance of versions/migrations
- Risk of over-formalization
Typical Exam Questions (with Short Answer)
- ER model vs. class diagram? ER for data/persistence, class for types + operations.
- Why invariants? Rules that must always hold.
- How do tests arise from specification? Preconditions/invariants → equivalence classes/boundary values.
- How do you version schemas safely? Semver, breaking changes = major, deprecation + migration.