Formelle Überprüfung
Im Kontext von Hardware und Softwaresysteme, formelle Überprüfung ist der Akt von Beweis oder das widerlegen Richtigkeit von beabsichtigt Algorithmen ein System in Bezug auf eine bestimmte zugrunde Formale Spezifikation oder Eigenschaft, verwenden Formale Methoden von Mathematik.[1]
Eine formelle Überprüfung kann hilfreich sein, um die Richtigkeit von Systemen wie: Kryptografische Protokolle, Kombinationsschaltungen, Digitale Schaltungen mit internem Speicher und Software als Quellcode ausgedrückt.
Die Überprüfung dieser Systeme erfolgt durch Bereitstellung a formeller Beweis auf eine Abstract mathematisches Modell des Systems, die Korrespondenz zwischen dem mathematischen Modell und der Art des Systems, das ansonsten durch die Konstruktion bekannt ist. Beispiele für mathematische Objekte, die häufig zum Modellsystem verwendet werden, sind: endliche Staatsmaschinen, Bezeichnete Übergangssysteme, Petri Nets, Vektor -Additionssysteme, zeitgesteuerte Automaten, Hybridautomaten, Prozessalgebra, formale Semantik von Programmiersprachen wie z. Betriebssemantik, Denotationssemantik, Axiomatische Semantik und Hoare Logik.[2]
Ansätze
Ein Ansatz und eine Formation ist Modellprüfung, was aus einer systematisch erschöpfenden Untersuchung des mathematischen Modells besteht (dies ist möglich für Finite Modelle, aber auch für einige unendliche Modelle, bei denen unendliche Zustände Sätze effektiv durch Verwendung von Abstraktion oder Ausnutzung der Symmetrie effektiv dargestellt werden können). Normalerweise besteht dies darin, alle Zustände und Übergänge im Modell zu untersuchen, indem intelligente und domänenspezifische Abstraktionstechniken verwendet werden, um ganze Gruppen von Zuständen in einem einzigen Betrieb zu berücksichtigen und die Rechenzeit zu verkürzen. Implementierungstechniken umfassen Staatsraumaufzählung, symbolische Zustandsraumaufzählung, Abstrakte Interpretation, Symbolische Simulation, Abstraktionsverfeinerung. Die zu verifizierten Eigenschaften werden häufig in beschrieben zeitliche Logik, wie zum Beispiel lineare zeitliche Logik (LTL), Eigenschaftspezifikationssprache (PSL), Systemverilog Behauptungen (SVA),[3] oder Computerbaumlogik (CTL). Der große Vorteil der Modellprüfung ist, dass es oft vollautomatisch ist. Sein Hauptnachteil ist, dass es nicht im Allgemeinen auf große Systeme ausgeht. Symbolische Modelle beschränken sich in der Regel auf einige hundert Staatsstaaten, während die explizite staatliche Aufzählung erfordert, dass der Zustandsraum untersucht wird, um relativ klein zu sein.
Ein anderer Ansatz ist die deduktive Überprüfung. Es besteht darin, aus dem System und seinen Spezifikationen (und möglicherweise anderen Anmerkungen) eine Sammlung von Mathematikern zu erzeugen Beweisverpflichtungen, die Wahrheit, die die Konformität des Systems zu seiner Spezifikation impliziert und diese Verpflichtungen mit beiden Verpflichtungen abgibt Proof Assistenten (interaktive Theoremprover) (wie z. Hol, ACL2, Isabelle, Coq oder PVS), oder Automatische Theoremprover, einschließlich insbesondere Befriedigungsmodulo -Theorien (SMT) Solver. Dieser Ansatz hat den Nachteil, dass der Benutzer möglicherweise ausführlich versteht, warum das System korrekt funktioniert, und diese Informationen an das Verifizierungssystem entweder in Form einer Abfolge von Theorems zu beweisen oder in Form von Spezifikationen (Spezifikationen (Spezifikationen) zu übermitteln (Spezifikationen (Spezifikationen) (Spezifikationen Invarianten, Voraussetzungen, Nachbedingungen) von Systemkomponenten (z. B. Funktionen oder Verfahren) und möglicherweise Unterkomponenten (wie Schleifen oder Datenstrukturen).
Software
Die formale Überprüfung von Softwareprogrammen beinhaltet den Nachweis, dass ein Programm eine formelle Spezifikation seines Verhaltens erfüllt. Zu den Unterbeben der formalen Überprüfung gehören die deduktive Überprüfung (siehe oben), Abstrakte Interpretation, automatisierter Theorem beweisen, Typsysteme, und Leichte formale Methoden. Ein vielversprechender typenbasierter Überprüfungsansatz ist Abhängig typisierte Programmierung, in denen die Arten von Funktionen (zumindest Teil der) Spezifikationen der Funktionen umfassen, und die Typen des Codes legt seine Richtigkeit gegen diese Spezifikationen fest. Vollgeführte abhängige getippte Sprachen unterstützen die deduktive Überprüfung als Sonderfall.
Ein weiterer komplementärer Ansatz ist Programmableitung, in welcher effizienten Code erzeugt wird funktional Spezifikationen durch eine Reihe von Richtigenerziehungsschritten. Ein Beispiel für diesen Ansatz ist das Bird -Meertens -Formalismusund dieser Ansatz kann als eine andere Form der Korrektheit durch Konstruktion angesehen werden.
Diese Techniken können sein Klang, was bedeutet, dass die verifizierten Eigenschaften logisch aus der Semantik abgeleitet werden können, oder unangemessen, was bedeutet, dass es keine solche Garantie gibt. Eine Klangtechnik liefert nur ein Ergebnis, wenn sie den gesamten Raum der Möglichkeiten abgedeckt hat. Ein Beispiel für eine unaufrichtige Technik ist eines, das nur eine Untergruppe der Möglichkeiten abdeckt, beispielsweise nur Ganzzahlen bis zu einer bestimmten Zahl, und ein "Good-Theough" -Ergebnis erzielen. Techniken können auch sein entschlossen, was bedeutet, dass ihre algorithmischen Implementierungen sind garantiert kündigen mit einer Antwort oder unentscheidbar, was bedeutet, dass sie möglicherweise niemals enden. Da sie begrenzt sind, sind unangemessene Techniken oft eher lehbelt als schallende.
Verifizierung und Validierung
Überprüfung ist ein Aspekt beim Testen der Fitness eines Produkts. Validierung ist der komplementäre Aspekt. Oft bezieht man sich auf den Gesamtkontrollprozess als V & v.
- Validierung: "Versuchen wir, das Richtige zu machen?", D.h.
- Überprüfung: "Haben wir das gemacht, was wir zu machen versuchten?", D.h.
Der Überprüfungsprozess besteht aus statischen/strukturellen und dynamischen/verhaltensbezogenen Aspekten. Beispielsweise kann man für ein Softwareprodukt den Quellcode (statisch) inspizieren und gegen bestimmte Testfälle (dynamisch) ausführen. Die Validierung kann normalerweise nur dynamisch durchgeführt werden, d. H. Das Produkt wird getestet, indem es typische und atypische Verwendungen durchgesetzt wird ("Trifft es zufriedenstellend alle Anwendungsfälle? ").
Automatisierte Programmreparatur
Programmreparatur wird in Bezug auf eine durchgeführt Orakel, umfassen die gewünschte Funktionalität des Programms, die zur Validierung des generierten Fixes verwendet wird. Ein einfaches Beispiel ist eine Test-SUITE-die Eingangs-/Ausgangspaare geben die Funktionalität des Programms an. Es werden eine Vielzahl von Techniken angewendet, insbesondere verwendet es Befriedigungsmodulo -Theorien (SMT) Löser,[4] und Genetische Programmierung,[5] Verwenden von Evolutionscomputer, um mögliche Kandidaten für Korrekturen zu generieren und zu bewerten. Die erstere Methode ist deterministisch, während letzteres randomisiert ist.
Programmreparatur kombiniert Techniken aus der formalen Überprüfung und Programmsynthese. Fehler-Lokalisierungstechniken bei der formalen Überprüfung werden verwendet, um Programmpunkte zu berechnen, die möglicherweise Fehlerlokationen sein können, die durch die Synthesemodule angegriffen werden können. Reparatursysteme konzentrieren sich häufig auf eine kleine vordefinierte Klasse von Fehler, um den Suchraum zu verringern. Der industrielle Gebrauch ist aufgrund der Rechenkosten bestehender Techniken begrenzt.
Branchengebrauch
Das Wachstum der Komplexität von Designs erhöht die Bedeutung formeller Verifizierungstechniken in der Hardwarebranche.[6][7] Gegenwärtig wird die formale Überprüfung von den meisten oder allen führenden Hardwareunternehmen verwendet.[8] aber seine Verwendung in der Softwareindustrie schmilzt immer noch. Dies könnte auf den größeren Bedarf in der Hardwarebranche zurückgeführt werden, wo Fehler eine größere kommerzielle Bedeutung haben. Aufgrund der potenziellen subtilen Wechselwirkungen zwischen Komponenten wird es immer schwieriger, eine realistische Reihe von Möglichkeiten durch Simulation auszuüben. Wichtige Aspekte des Hardwaredesigns sind für automatisierte Beweismethoden zugänglich, was die formale Überprüfung erleichtert und produktiver wird.[9]
Ab 2011[aktualisieren]Es wurden mehrere Betriebssysteme offiziell überprüft: Nicta's Secure Eingebetteter L4 -Mikrokernel, kommerziell als Sel4 von OK Labs;[10] OSEK/VDX-basierter Echtzeit-Betriebssystemorientais von Ostchina Normale Universität; Software von Green Hills Integritätsbetriebssystem; und Sysgo's Pikeos.[11][12]
Ab 2016 entwickelten die Professoren von Yale und Columbia, Zhong Shao und Ronghui GU, ein formales Überprüfungsprotokoll für Blockchain namens Certikos.[13] Das Programm ist das erste Beispiel für eine formale Überprüfung in der Blockchain -Welt und ein Beispiel für die formale Überprüfung, die explizit als Sicherheitsprogramm verwendet wird.[14]
Ab 2017 wurde eine formelle Überprüfung auf das Design großer Computernetzwerke angewendet[15] durch ein mathematisches Modell des Netzwerks,[16] und als Teil einer neuen Netzwerktechnologiekategorie, intentbasiertes Netzwerk.[17] Netzwerksoftwareanbieter, die formelle Überprüfungslösungen anbieten Cisco[18] Vorwärtsnetzwerke[19][20] und Veriflow -Systeme.[21]
Das Compcert C Compiler ist ein formell verifiziertes C -Compiler, der die Mehrheit von ISO C implementiert. C.
Siehe auch
- Automatisierter Theorem beweisen
- Modellprüfung
- Liste der Modellprüfwerkzeuge
- Formale Äquivalenzprüfung
- Proof Checker
- Eigenschaftspezifikationssprache
- Ausgewählte formale Verifizierungsbibliographie
- Statische Codeanalyse
- Zeitliche Logik bei der Überprüfung des Finite-Zustands
- Post-Silicon-Validierung
- Intelligent verification
- Laufzeitüberprüfung
Verweise
- ^ Sanghavi, Alok (21. Mai 2010). "Was ist formale Überprüfung?". EE Times Asien.
- ^ Einführung in die formale Überprüfung, Berkeley University of California, abgerufen am 6. November 2013
- ^ Cohen, Ben; Venkataramanan, Srinivasan; Kumari, Ajeeta; Piper, Lisa (2015). Systemverilog Asserts Handbuch (4. Aufl.). CreateSpace Independent Publishing Platform. ISBN 978-1518681448.
- ^ Favio DeMarco; Jifeng Xuan; Daniel le Berre; Martin Monperrus (2014). Automatische Reparatur von Buggy, wenn Bedingungen und fehlende Voraussetzungen mit SMT. Proceedings des 6. Internationalen Workshops zu Einschränkungen bei Software -Tests, -verifizierung und -analyse (CSTVA 2014). S. 30–39. Arxiv:1404.3186. doi:10.1145/2593735.2593740. ISBN 9781450328470. S2CID 506586.
- ^ Le Goues, Claire; Nguyen, Thanhvu; Forrest, Stephanie; Weimer, Westley (Januar 2012). "GenProg: Eine generische Methode für die automatische Softwarereparatur". IEEE -Transaktionen auf Software -Engineering. 38 (1): 54–72. doi:10.1109/tse.2011.104. S2CID 4111307.
- ^ Harrison, J. (2003). "Formelle Überprüfung bei Intel". 18. jährliches IEEE -Symposium für Logik in Informatik, 2003. Proceedings. S. 45–54. doi:10.1109/lics.2003.1210044. ISBN 978-0-7695-1884-8. S2CID 44585546.
- ^ Formale Überprüfung eines Echtzeit-Hardwaredesigns. Portal.acm.org (27. Juni 1983). Abgerufen am 30. April 2011.
- ^ "Formale Überprüfung: Ein wesentliches Instrument für das moderne VLSI -Design von Erik Seligman, Tom Schubert und M V Achutha Kirankumar". 2015.
- ^ "Formale Überprüfung in der Industrie" (PDF). Abgerufen 20. September, 2012.
- ^ "Zusammenfassung formaler Spezifikation der SEL4/ARMV6 -API" (PDF). Archiviert von das Original (PDF) am 21. Mai 2015. Abgerufen 19. Mai, 2015.
- ^ Christoph Baumann, Bernhard Beckert, Holger Blasum und Thorsten Bormer Zutaten der Korrektheit des Betriebssystems? Lektionen, die in der formalen Überprüfung von Pikeos gezogen wurden
- ^ "Es richtig verstehen" von Jack Ganssle
- ^ Harris, Robin. "Ungezogenes Betriebssystem? Certikos ermöglicht die Erstellung sicherer Systemkerne". ZDNET. Abgerufen 10. Juni, 2019.
- ^ "Certikos: Yale entwickelt das erste hackerresistente Betriebssystem der Welt". Internationale Business Times UK. 15. November 2016. Abgerufen 10. Juni, 2019.
- ^ Heller, Brandon. "Suchen Sie die Wahrheit in Networking: vom Test bis zur Überprüfung". Vorwärtsnetzwerke. Abgerufen 12. Februar, 2018.
- ^ Scroxton, Alex. "Für Cisco ist intent-basierte Netzwerke zukünftige technische Anforderungen an.". Computer wöchentlich. Abgerufen 12. Februar, 2018.
- ^ Lerner, Andrew. "Absichtsbasiertes Netzwerk". Gärtner. Abgerufen 12. Februar, 2018.
- ^ Kerravala, Zeus. "Cisco bringt intentbasierte Netzwerke in das Rechenzentrum". Networkworld. Abgerufen 12. Februar, 2018.
- ^ "Forward-Netzwerke: Beschleunigen und Abbau von Netzwerkoperationen". Erkenntnisse Erfolg. Abgerufen 12. Februar, 2018.
- ^ "In Abtent = basiertes Netzwerk basieren" (PDF). Networkworld. Abgerufen 12. Februar, 2018.
- ^ "Veriflow Systems". Bloomberg. Abgerufen 12. Februar, 2018.