Zum Inhalt springen
hanse-computing.de
  • Moin
  • Über uns
  • Leistungen
  • Projekte
  • Neuigkeiten
  • Wissen
    • Netzwerktechniken
    • Systemadministration
    • Hardware-Spezifikationen
    • KI & Automatisierung
    • Glossar
      • Fachbegriffe
      • Programmiersprachen-Befehle
    • Datenbanken
    • IT-Grundlagen
    • Python: Grundlagen
    • Python: Datenstrukturen
    • Python: Dateien & IO
    • Python: Web & Frameworks
    • Python: Fehler & Debugging
    • Webentwicklung
    • Linux & Betriebssysteme
    • IT-Sicherheit
    • Cloud & Container
    • Tools & Software
    • Netzwerk: TCP/IP
    • Netzwerk: DNS & Dienste
    • Netzwerk: Sicherheit
    • Netzwerk: Tools
    • KI: Grundlagen
    • KI: Praxis
    • KI: LLM & Agenten
    • Hardware: Server
    • Hardware: Netzwerkgeräte
    • Hardware: Peripherie
    • Wiki-Startseite
    • Letzte Änderungen
    • Kategorie-Browser
    • Zufallsartikel
  • Infrastruktur
  • AI Easy Start
  • Test-Drive
  • Kontakt
  • Affiliate
  • Impressum
  • Datenschutz

Sprache auswählen

  • Deutsch (Deutschland)
  • English (United Kingdom)
  1. Aktuelle Seite:  
  2. Startseite
  3. Wissen
  4. Glossar
  5. Programmiersprachen-Befehle

B-Methode-Befehle: Formale Softwareentwicklung mit Atelier B

Die B-Methode ist eine formale Methode zur systematischen Entwicklung von Software: Aus einer mathematischen Spezifikation wird Schritt für Schritt eine implementierbare Maschine abgeleitet, wobei jeder Schritt mit automatisch erzeugten Beweisverpflichtungen (Proof Obligations) abgesichert wird. Entwickelt wurde sie von Jean-Raymond Abrial, dem Mitentwickler der Z-Notation, ab Ende der 1980er-Jahre.

Maschinen, Verfeinerung und Beweis

Ein B-Modell besteht aus Komponenten: MACHINE (abstrakte Spezifikation), REFINEMENT (Verfeinerungsschritt) und IMPLEMENTATION (ausführbare B0-Variante). Eine Maschine definiert Zustandsvariablen, eine Invariante (immer gültige Eigenschaft) und Operationen. Jede Verfeinerung erzeugt Beweisverpflichtungen: Ist die Invariante erhalten? Verfeinert die neue Operation die abstrakte korrekt? Sind alle Beweise geführt, garantiert die Methode, dass die finale B0-Spezifikation die ursprüngliche Anforderung korrekt umsetzt.

Werkzeuge und Befehle

atelierb              # GUI-Start von Atelier B (CLEARSY)
pogen                 # Proof-Obligation-Generator
prover                # Beweis-Manager (interaktive Beweise)
obcomp                # B0-Compiler zu Ada/C
probcli -model_check  # ProB: Model Checking eines B-Modells
probcli -ltlcheck     # ProB: LTL-Eigenschaften pruefen
prob -repl            # ProB: interaktive REPL

Atelier B wurde ab 1995 von CLEARSY industrialisiert. Das bekannteste Projekt ist die Pariser Metrolinie 14 (Météor): Der Vertrag ging 1995 an Matra Transport (heute Siemens), das Modell umfasste rund 110.000 Zeilen B-Code, wurde 1998 fertiggestellt und fuhr ohne einen einzigen softwarebedingten Fehler — ein Meilenstein der formalen Verifikation in der Praxis. Auch die automatische Metro Roissy VAL (CDGVAL) am Flughafen Charles de Gaulle wurde mit B entwickelt. ProB von Michael Leuschel ergänzt die Deduktion durch Animation und Model Checking.

Einordnung

Die B-Methode ist eng mit VDM und der Z-Notation verwandt; ihre Weiterentwicklung für reaktive Systeme ist Event-B. Zur selben Werkzeugfamilie gehören TLA+, Isabelle und ACSL/Frama-C.

Verwandte Grundlagen: C/C++-Befehle (Zielsprache der B0-Codegenerierung), Prolog-Befehle (Logikprogrammierung als Verifikationsnachbar).

Event-B-Befehle: Systemmodellierung mit der Rodin-Plattform

Event-B ist die Weiterentwicklung der B-Methode für reaktive, nebenläufige und verteilte Systeme. Jean-Raymond Abrial entwickelte sie in den 2000er-Jahren zusammen mit der Rodin-Plattform, einer Open-Source-IDE auf Eclipse-Basis. Statt Operationen stehen hier Ereignisse (Events) im Mittelpunkt — sie eignen sich dadurch besonders für Systeme, die auf Umgebungsreize reagieren, wie Protokolle, Eisenbahnsicherung oder Blockchain-Konsens.

Modellierungssprache

Ein Event-B-Modell trennt Maschinen (dynamischer Teil) und Kontexte (statischer Teil mit Mengen und Konstanten). Eine Maschine deklariert Variablen, eine Invariante und Events. Jedes Event besteht aus Wachen (grd, Guards: Bedingungen, wann es feuern darf) und Aktionen (act, die die Variablen ändern). Die zugrunde liegende Mathematik ist Mengenlehre und Prädikatenlogik — dieselbe Basis wie die Z-Notation.

Verfeinerung und Beweisverpflichtungen

Das Herzstück ist die schrittweise Verfeinerung: Abstrakte Events werden in konkretere zerlegt, dabei entstehen automatisch Beweisverpflichtungen — Invariantenerhalt, Guard-Verschärfung und Simulationstreue. Die Rodin-Plattform erzeugt diese Proof Obligations und bietet automatische und interaktive Beweisführung (u. a. über SMT-Löser), Animation und Model Checking über das ProB-Plugin.

rodin                 # Rodin-Plattform starten (Eclipse-basiert)
# Modellkomponenten: .bum (Maschine), .buc (Kontext)
# Events: event name, grd1: ..., act1: ... 
# Proof Obligations: automatisch nach Speichern; Auto-Prover + SMT

Einordnung

Event-B wird industriell und in der Forschung eingesetzt, etwa zur Verifikation von Blockchain-Konsensmechanismen und Sicherheitsprotokollen. Es ergänzt klassische Model Checker wie NuSMV und SPIN um deduktive Verifikation und ist eng mit Z-Notation, VDM und Alloy verwandt.

Verwandte Grundlagen: Python-Befehle (ProB/Modell-Automation), TLA+ (Alternativ-Ansatz für reaktive Systeme).

NuSMV-Befehle: Symbolischer Model Checker für CTL und LTL

NuSMV (New Symbolic Model Verifier) ist ein weit verbreiteter symbolischer Model Checker, entwickelt an der Universität Trient (FBK-IRST). Er ist die Neuimplementierung und Erweiterung des klassischen SMV von Ken McMillan (CMU), der 1998 den Turing Award für das symbolische Model Checking mit BDDs mitprägte. NuSMV prüft Eigenschaften, die in CTL (Computation Tree Logic) oder LTL (Linear Temporal Logic) formuliert sind, gegen ein endliches Zustandsmodell.

SMV-Eingabesprache

MODULE main
VAR state : {idle, busy};
ASSIGN
  init(state) := idle;
  next(state) := case
    state = idle : busy;
    TRUE        : idle;
  esac;
SPEC AG (state != busy -> AX state = busy)

Eine SMV-Datei beschreibt MODULEs, VAR-Deklarationen, INIT/ASSIGN/TRANS-Übergänge und SPEC-Eigenschaften. Typische CTL-Operatoren sind AG, EG, AF, EF, AX, EX; LTL nutzt G, F, X, U.

Befehle

nusmv modell.smv          # Batch-Modus: Modell laden und alle SPEC pruefen
nusmv -dcx modell.smv     # Dynamic Cone of Influence (Reduktion)
nusmv -p "AG (x = 1)" modell.smv   # Eigenschaft direkt pruefen
nusmv -bmc -k 10 modell.smv        # Bounded Model Checking
# interaktive Session:
read_model                 # Datei laden
go                         # BDD bauen
check_ctlspec              # CTL-Spezifikationen pruefen
check_ltlspec              # LTL-Spezifikationen pruefen
check_invar                # Invarianten pruefen
pick_state; simulate       # Zustand waehlen und Pfade simulieren
print_reachable_states     # erreichbare Zustaende anzeigen
show_vars                  # Variablen auflisten

Die Eigenschaften können entweder in der SMV-Datei stehen oder per -p bzw. über den Property-Index (-n) in der interaktiven Session geprüft werden. -bmc aktiviert das beschränkte Modellprüfen, das mit SAT-Solvern längere Pfade skaliert als die reine BDD-Suche.

Einordnung

Der Nachfolger nuXmv erweitert NuSMV um IC3/PDR-basierte Algorithmen und wird ebenfalls von FBK entwickelt. NuSMV bildet mit SPIN/Promela das Standard-Duo der automatisierbaren Model Checker: SPIN prüft asynchrone Prozesse, NuSMV synchrone endliche Systeme. Zusammen mit TLA+, B-Methode und Event-B deckt er die automatisierte Seite der formalen Verifikation ab.

Verwandte Grundlagen: Z-Notation (Spezifikationssprache), C/C++-Befehle (typische Zielsysteme).

Nemerle-Befehle: Multi-Paradigma mit Makros

Nemerle ist eine allgemeine, hochsprachliche, statisch typisierte Programmiersprache für die .NET-Plattform, die an der Universität Wrocław (Polen) ab etwa 2003 entwickelt wurde. Sie vereint funktionale, objektorientierte, imperative, aspektorientierte und reflektive Programmierung in einer Sprache und ist besonders für ihre leistungsfähige Makro-Technik bekannt.

Compiler und erste Schritte

Der Compiler heißt ncc und erzeugt Common Intermediate Language (CIL), wodurch volle Kompatibilität mit .NET und Mono entsteht. Ein klassisches Beispiel:

def Main() : void
    System.Console.WriteLine("Hallo, Nemerle!")

Dank starker Typhinferenz sind Typdeklarationen meist überflüssig — der Compiler leitet die Typen aus dem Kontext ab.

Kernkonzepte

  • Makros: Das Herzstück von Nemerle. Makros arbeiten auf dem Syntaxbaum und erweitern die Sprache selbst — etwa eigene Kontrollstrukturen oder DSLs, die wie eingebaute Konstrukte aussehen.
  • Funktionale Mittel: Pattern Matching (wie in ML/OCaml), unveränderliche Datenstrukturen und Funktionen höherer Ordnung.
  • Objektorientiert: Klassen, Vererbung und Interfaces wie in C#.
  • Computation Expressions: Ähnlich wie in F# lassen sich Monaden-artige Abläufe definieren.
  • XML-Literale: XML lässt sich direkt im Quellcode schreiben und per LINQ abfragen.

Praxis-Tipps

  • Nemerle eignet sich für Compiler-Bau und Sprachwerkzeuge, weil Makros die Syntax erweitern können, ohne einen externen Präprozessor zu benötigen.
  • Die Sprache gilt als mächtiger als C# und F#, hat aber nur eine kleine Community.
  • Einsteiger mit F#- oder OCaml-Hintergrund finden die funktionalen Teile schnell vertraut.

Verwandte Grundlagen: C#-Befehle, F#-Befehle, Scala-Befehle, Compiler sowie die .NET-Alternativsprachen Boo-Befehle und Cobra-Befehle.

Cobra-Befehle: Python-Syntax mit Contracts

Cobra ist eine imperative, hochsprachliche, objektorientierte Programmiersprache, die Charles Esterbrook entworfen hat. Die erste Version erschien 2006, die öffentliche Veröffentlichung unter der MIT-Lizenz folgte 2008. Cobra läuft auf .NET und Mono und kombiniert Python-artige Einrückung mit statischer Typisierung, Design-by-Contract und eingebauten Unit-Tests.

Compiler und erste Schritte

Der Cobra-Compiler übersetzt Quellcode in C# und kompiliert diesen dann mit dem .NET-Compiler weiter. Ein Hallo-Welt-Programm:

class Hallo
    def main
        print 'Hallo, Cobra!'

Cobra nutzt Einrückung statt Klammern, verlangt aber Typangaben für Parameter und Rückgabetypen.

Kernkonzepte

  • Design-by-Contract: Aus Eiffel übernommen — Methoden deklarieren Vorbedingungen (require), Nachbedingungen (ensure) und Klasseninvarianten (invariant), die zur Laufzeit geprüft werden.
  • Statische und dynamische Typisierung: Standardmäßig statisch, einzelne Variablen können mit dynamic zur Laufzeit aufgelöst werden.
  • Eingebaute Unit-Tests: Testfälle stehen direkt im Quellcode — test-Blöcke innerhalb von Klassen werden beim Kompilieren ausgeführt.
  • Nil-Tracking: Der Compiler verfolgt zur Compile-Zeit, ob Variablen nil (null) sein können, und verhindert so viele NullReference-Fehler.
  • Einfluss von Objective-C: Benannte Parameter und Methoden-Signaturen erinnern an Objective-C-Stil.

Praxis-Tipps

  • Die Contract-Prüfung macht Cobra interessant für sicherheitskritische Anwendungen, bei denen Zusicherungen dokumentiert und erzwungen werden sollen.
  • Das Projekt ist seit etwa 2015 inaktiv; die Website cobra-language.com ist offline, der Quellcode aber weiterhin verfügbar.
  • Für Python-Entwickler ist die Einrückung vertraut; die Typannotationen ähneln C#.

Verwandte Grundlagen: Python-Befehle, C#-Befehle, Eiffel-Befehle, Compiler sowie die .NET-Alternativsprachen Boo-Befehle und Nemerle-Befehle.

  1. Boo-Befehle: Python-Syntax auf .NET
  2. Fortress-Befehle: Schnellreferenz für die parallele Forschungssprache
  3. Klong-Befehle: Schnellreferenz für die einfache Array-Sprache
  4. Futhark-Befehle: Schnellreferenz für funktionale GPU-Programmierung

Seite 16 von 45

  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
hanse-computing.de

hanse-computing.de – KI-gestützte Dienstleistungen aus Lübeck.

hanse-computing.de
IT-Dienstleistungen aus der Hansestadt
Über uns · Projekte · Neuigkeiten · Affiliate
Impressum · Datenschutz
© 2026 hanse-computing.de
© 2026 hanse-computing Impressum Datenschutz