Alloy Analyzer
Der Alloy Analyzer ist ein in der Informatik und Softwaretechnik eingesetztes Programm, das dazu genutzt werden kann, um Spezifikationen, die in der Sprache Alloy geschrieben sind, zu analysieren und zu simulieren.[1] Das Programm kann Modelle der Spezifikation (Modelle im Sinne der formalen Logik) erzeugen, also Instanzen aller Invarianten, die in der Spezifikation definiert wurden. Die Sprache Alloy basiert auf relationaler Logik und eignet sich besonders gut dafür, Strukturen zu spezifizieren, wie sie oft im Softwareentwurf auftreten, also zum Beispiel Architekturen, Datenbankschemata, Netzwerk-Topologien, Ontologien u. ä. Darüber hinaus ist es in Alloy möglich, die Dimension Zeit in die Spezifikation einzubeziehen, so dass auch Veränderungen an Strukturen durch Aktionen untersucht werden können.
Alloy Analyser | |
---|---|
Screenshots mit Beispiel | |
Basisdaten | |
Maintainer | Daniel Jackson |
Aktuelle Version | 5.1.0 (19. August 2019) |
Betriebssystem | plattformunabhängig |
Programmiersprache | Java |
Lizenz | MIT-Lizenz |
deutschsprachig | nein |
AlloyTools |
Der Alloy Analyzer unterstützt die inkrementelle Entwicklung von Spezifikationen solcher Strukturen, indem er Modelle erzeugt, an denen man überprüfen kann, ob die gewünschten Eigenschaften der Strukturen auch tatsächlich erfüllt werden. Er ist auf diese Weise ein Werkzeug der agilen Modellierung.
Die Sprache Alloy und der Alloy Analyzer werden seit 1997 unter der Leitung von Daniel Jackson am Massachusetts Institute of Technology in den USA entwickelt. Die Bezeichnung „Alloy“ (Deutsch: Legierung) rührt daher, dass Alloy von Konzepten der Spezifikationssprache Z und des Model Checkings beeinflusst wurde.
Analyseansatz
Die Sprache Alloy hat die Ausdrucksmächtigkeit der Prädikatenlogik erster Stufe erweitert um den transitiven Abschluss. Sie ist also nicht entscheidbar. Deshalb wird für die Analyse von Spezifikationen im Alloy Analyzer eine endliche Größe des zu betrachtenden Universums vorgegeben. Dies hat zur Folge, dass die Allgemeingültigkeit der Ergebnisse eingeschränkt ist. Jedoch begründen die Entwickler von Alloy Analyzer die Entscheidung zur Einschränkung des Gültigkeitsbereichs unter Berufung auf die small scope hypothesis[1], die besagt, dass ein hoher Anteil an Programmfehlern bereits gefunden werden kann, wenn man das Programm für alle Eingabewerte eines kleinen Gültigkeitsbereichs prüft.[2]
Durch die Beschränkung auf endliche Universen kann eine Spezifikation in Alloy in eine Formel der Aussagenlogik transformiert werden. Für das Finden von Modellen für die Spezifikation müssen dann Belegungen dieser Formel gefunden werden. Das heißt, die Aufgabe des Alloy Analyzers kann auf das Erfüllbarkeitsproblem der Aussagenlogik zurückgeführt werden.[1] Programme, die das Erfüllbarkeitsproblem lösen, werden SAT Solver genannt. Im Alloy Analyzer wird der Constraint solver Kodkod verwendet, der die Spezifikation in Alloy in die Aussagenlogik transformiert und dann einen SAT Solver wie z. B. SAT4J, um erfüllende Belegungen zu finden. Diese werden dann zurücktransformiert in Alloy.
Anwendungen
Alloy und der Alloy Analyzer wurden in einem breiten Spektrum von Untersuchungen eingesetzt. Beispiele sind:
- Kritische Systeme, wie etwa in der Medizintechnik.[3]
- Netzwerk-Protokolle: Pamela Zave konnte mit Hilfe des Alloy Analyzers Fehler in Chord finden und Korrekturen vorschlagen.[4]
- Web-Sicherheit: Eine Gruppe an den Universitäten UC Berkeley und Stanford verwendeten Alloy und den Alloy Analyzer um verschiedene Aspekte der Sicherheit im Web zu untersuchen.[5]
- Code-Verifikation: Greg Dennis hat ein Werkzeug namens Forge entwickelt, das Alloy verwendet und Java-Code, der mit Spezifikationen der Java Modeling Language JML annotiert ist überprüfen kann. Dieses Werkzeug wurde zur Verifikation von Java-Bibliotheken[6] sowie von Code eines elektronischen Wahlsystems[7] eingesetzt.
Einzelnachweise
- Daniel Jackson: Software Abstrations: Logic, Language, and Analysis. MIT Press, 2012, ISBN 978-0-262-01715-2.
- Alexandr Andoni, Dumitru Daniliuc, Sarfraz Khurshid und Darko Marinov (2002), "Evaluating the small scope hypothesis"
- University of Washington PLSE Neutrons, UW PLSE Neutrons
- Pamela Zave: Reasoning about identifier spaces: How to make Chord correct, in: IEEE Trans. Software Engineering 43, 12 (Dec. 2017), 1144–1156.
- Akhawe, D., Barth, A., Lam, P.E., Mitchell, J. and Song, D.: Towards a formal foundation of Web security, in: Proceedings of the 23rd IEEE Computer Security Foundations Symp. Edinburgh, 2010, 290–304.
- Dennis, G., Chang, F. and Jackson, D.: Modular verification of code with SAT, in: Proceedings of the Intern. Symp. Software Testing and Analysis, Portland, ME, Juli 2006.
- Dennis, G., Yessenov, K. and Jackson, D.: Bounded verification of voting software, in: Proceedings of the 2nd IFIP Working Conf. Verified Software: Theories, Tools, and Experiments. Toronto, Okt. 2008.
Weblinks
- Homepage von Alloy und Alloy Analyzer am MIT
- Daniel Jackson: Alloy: A Language and Tool for Exploring Software Designs in: Communications of the ACM, September 2019
- Eine Anleitung für Alloy
- Homepage des Kodkod Constraint Solver
- Kurze Einführung in Alloy