Ein Algorithmus soll effizient Lösungen zu gegebenen Problemen
berechnen. In der Praxis besteht das Argument, dass der Algorithmus
auch die richtigen Lösungen berechnet, meist aus einer Menge von
Testfällen, einer kurzen Rechtfertigung in natürlicher Sprache oder
einem Stoßgebet. Selbst eine große Menge von Testfällen – auch wenn diese
bspw. mithilfe von
QuickCheck
erstellt wurden – kann aber keine Aussage über die allgemeine
Korrektheit eines Softwarestücks machen. Um wirklich sicher zu gehen,
müssen wir die Struktur des Codes betrachten, darüber Aussagen
treffen und formal argumentieren, dass diese Aussagen auch
allgemeine Geltung haben. Ein Mittel, um das zu tun, lernen wir in
dieser dreiteiligen Artikelserie kennen: Wir nutzen den SMT-Solver
Z3 als automatisierten
Theorembeweiser. Diese Artikel sollen einen ersten Einblick geben in
die Inhalte unserer neuen
iSAQB-Advanced-Level-Schulung zu
Formalen Methoden. In der
Schulung kommen neben Z3 weitere Verifikationswerkzeuge wie
VeriFast,
Forge und Liquid
Haskell zur Sprache.
Weiterlesen...