Ein neuer Ansatz für Software-Engineering entwirrt die Komplexität bei der Systemgestaltung
Fasziniert von der Notwendigkeit, den schwierigen und teuren Prozess des Software-Designs zu vereinfachen, beobachtete das LIBPR-Projekt (Liberating programming), dass Fachleute oft in der Lage sind, das Verhalten ihrer Systeme genau und eindeutig zu beschreiben (vor, während und nach der Entwicklung), unabhängig davon, ob sie Computer-Programmierkenntnisse haben oder nicht. Vor diesem Hintergrund wandte sich das Team dem Problem zu, indem es die akzeptierten Muster, wie ein gut konzipiertes Software-System aussehen sollte, erneut betrachtete und dieses radikal transformierte. Auf der Basis der ursprünglichen Erfindung der szenariobasierten Programmierung (scenario-based programming, SBP) und ihrer visuellen, Diagramm-basierten Sprache der Live Sequence Charts (LSC) hat das Team gezeigt, wie komplexe Software an den Verhaltensbeschreibungen ausgerichtet werden kann, die in Anforderungsdokumenten und Benutzerhandbüchern angezeigt werden. Statt des üblichen Design-Ansatzes, bei dem komplizierte serielle Befehlssequenzen (Programme) sorgfältig entwickelt werden müssen, um das Verhalten des Systems in einer Art und Weise zu gestalten, dass es die Anforderungen und Einschränkungen erfüllt, sind die bei der szenariobasierten Programmierung die Anforderungen selbst vollständig ausführbar, so dass die Programmierung von vielen ihrer üblichen Einschränkungen befreit wird. Die Anforderungen sind so codiert, dass ein Computer jede davon direkt bei jedem Ausführungsschritt untersuchen und bestimmen kann, welches der nächste Schritt ist, auf der Grundlage dessen, was an diesem Punkt getan werden muss, kann oder nicht getan werden darf (damit wird das Verbieten zu einem Teil des Programms). Die Anforderungen werden so in das traditionelle Programm verwandelt und ersetzen es zu einem großen Teil. Neben revolutionären Möglichkeiten der Strukturierung und dann der Ausführung von Programmen, ermöglichte dieser Ansatz neue, natürliche Wege zur Ausführung des Programmierungsaktes: auf einem Simulator oder GUI des Systems löst der Entwickler die Aktionen aus, die ein Benutzer oder die Umgebung für das System darstellen würden, gefolgt von den erwünschten Systemreaktionen. Die aufgezeichnete Verhaltenssequenz wird dann automatisch in das entsprechende Szenario transformiert. Die Ausrichtung des Programms daran, wie der Mensch über das System denkt, ermöglicht auch die Programmierung in (geregelter) natürlicher Sprache. Das heißt, aufgrund von Grammatikregeln wird ein Satz wie "wenn der Benutzer auf den roten Knopf drückt, wird das Licht eingeschaltet" automatisch analysiert und in ein formales ausführbares programmiertes Szenario übersetzt. Eine Sammlung dieser Sätze wird somit zum endgültigen System. Ein wesentlicher Vorteil des Ansatzes ist die Fähigkeit, jede neue Anforderung schrittweise zu codieren, mit wenig oder ohne Veränderung bestehender Spezifikationen und spezialisierte Tools zu verwenden, um zu verstehen, wie sich das System verhält, wenn alle Szenarien als System zusammenlaufen . Das Projekt lieferte auch anspruchsvolle Algorithmen und Tools auf Basis von Methoden wie Model-Checking, SMT- Lösung und Programmsynthese, um die Richtigkeit der szenario-basierten Programme zu überprüfen, und um sie automatisch zu reparieren, wenn unerwünschte Verhaltensweisen oder widersprüchliche Szenarien gefunden werden. Diese Arbeit umfasste auch kompositorische Verifizierungsverfahren, bei denen das System im Wesentlichen durch Prüfung der konstituierenden Szenarien überprüft wird. Der Szenario-basierte Ansatz wurde erheblich durch das Team durch und über die visuelle LSC-Sprache erweitert, um auch Implementierungen in Standard-Computer-Sprachen einschließlich Java, C, C ++ C#, Erlang und JavaScript zu erhalten. Die Anwendbarkeit von SBP wurde in einer Vielzahl von Anwendungen unter Beweis gestellt. Darunter waren industrielle Automatisierung, Automobil- und Flugzeugsteuerung sowie biologische Modelle.
Schlüsselbegriffe
Software-Programmierung, Software-Engineering, Szenario-basierte Programmierung, Verhaltensprogrammierung, LIBOR, befreiende Programmierung, Play-in, Play-out, formale Methoden, Modellüberprüfung