Qgelm

Qualitätssicherung in der Softwareentwicklung mit formalen Methoden

Originalartikel

Backup

<html> <figure class=„aufmacherbild“><img src=„https://heise.cloudimg.io/width/700/q75.png-lossy-75.webp-lossy-75.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/aufmacher-c563d1fbeeab6a10.png“ srcset=„https://heise.cloudimg.io/width/700/q75.png-lossy-75.webp-lossy-75.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/aufmacher-c563d1fbeeab6a10.png 700w, https://heise.cloudimg.io/width/1050/q75.png-lossy-75.webp-lossy-75.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/aufmacher-c563d1fbeeab6a10.png 1050w, https://heise.cloudimg.io/width/1500/q75.png-lossy-75.webp-lossy-75.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/aufmacher-c563d1fbeeab6a10.png 1500w, https://heise.cloudimg.io/width/2096/q75.png-lossy-75.webp-lossy-75.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/aufmacher-c563d1fbeeab6a10.png 2096w“ width=„2096“ height=„1178“ sizes=„(min-width: 80em) 43.75em, (min-width: 64em) 66.66vw, 100vw“ alt=„“ class=„img-responsive“ referrerpolicy=„no-referrer“ /></figure><p><strong>Formale Methoden strukturieren den Entwicklungsprozess von Software, sorgen f&#252;r nachhaltige Qualit&#228;tssicherung und vermeiden so hohe Folgekosten.</strong></p><p>Seit vielen Jahren steigen die Qualit&#228;tsanspr&#252;che an Software in breiten, kritischen Anwendungen zum Beispiel bei Maschinensteuerungen, Fahrerassistenzsystemen oder f&#252;r sichere Cloud- und Blockchain-IT. Dazu geh&#246;ren Systeme, mit denen Millionen von Menschen t&#228;glich in Ber&#252;hrung kommen. Die Kosten f&#252;r die Qualit&#228;tssicherung solcher Anwendungen wachsen mit deren komplexit&#228;ts- und ver&#228;nderungsbedingter Fehleranf&#228;lligkeit. Sowohl Kosten als auch Fehler werden nicht selten von geduldigen, unwissenden und machtlosen Kundinnen und Kunden getragen, ohne Haftungsanspr&#252;che geltend machen zu k&#246;nnen.</p><p>Aufgrund dessen stellt sich die Frage, ob Softwareentwicklung generell auf st&#228;rkere methodische Beine gestellt, im engeren Sinne strenger oder formaler, werden muss? Welche Rolle sollen fachspezifische Formalismen, insbesondere die aus der Softwaretechnik stammenden formalen Methoden, in Informatiklehrpl&#228;nen an Hochschulen und anderen Ausbildungsst&#228;tten spielen? <a href=„https://www.heise.de/hintergrund/Qualitaetssicherung-in-der-Softwareentwicklung-mit-formalen-Methoden-9339463.html?view=print#anchor_1“><strong>[1] [1]</strong></a></p><p>In der international beachteten Referenz <a href=„https://csed.acm.org/programming-languages/“ rel=„external noopener“ target=„_blank“><strong>ACM/IEEE-CS/AAAI Computer Science Curricula 2023 [2]</strong></a> finden sich beispielsweise nur knappe Lehrplanempfehlungen dazu im Softwaretechnikteil sowie einige Empfehlungen f&#252;r Vertiefungsvorlesungen im Programmiersprachenteil.</p><p>Ein wichtiger Grund f&#252;r diese &#220;berlegungen ist sicherlich, dass Software immer &#246;fter eine sehr viel kritischere Rolle spielt als noch vor zehn Jahren. Ein weiterer Grund ist, dass Softwareentwicklung heute durch leistungsf&#228;hige Hochsprachen, Plattformen und Entwicklungs&#246;kosysteme auf einer abstrakteren, agileren Ebene stattfindet, und daher auch ein h&#228;ufig abstrakteres, jedoch pr&#228;zises Denken gefordert, um korrekte Software zuverl&#228;ssig zu konstruieren und trotz erforderlicher &#196;nderungen verl&#228;sslich in Betrieb zu halten. <a href=„https://www.heise.de/hintergrund/Qualitaetssicherung-in-der-Softwareentwicklung-mit-formalen-Methoden-9339463.html?view=print#anchor_2“><strong>[2] [3]</strong></a></p><p>Die dazu n&#246;tigen Kenntnisse haben sich &#252;ber die Jahrzehnte in den sogenannten formalen Methoden niedergeschlagen. Eine Ausbildung in Informatik kann aufzeigen, wie solche Methoden in kritischen Sparten der Software- und Systementwicklungspraxis <a href=„https://www.heise.de/hintergrund/Qualitaetssicherung-in-der-Softwareentwicklung-mit-formalen-Methoden-9339463.html?view=print#anchor_3“><strong>[3] [4]</strong></a> mithilfe von leistungsf&#228;higen Werkzeugen angewendet werden. Gerade weil k&#252;nstliche Intelligenz (KI) die Programmierung zunehmend automatisiert, sollte die Vermittlung dieser Grundfertigkeiten Kernelement jeder modernen Informatikausbildung sein <a href=„https://www.heise.de/hintergrund/Qualitaetssicherung-in-der-Softwareentwicklung-mit-formalen-Methoden-9339463.html?view=print#anchor_4“><strong>[4] [5]</strong></a>. Dieses Ziel sollte auch dann im Fokus stehen, wenn sich, vielleicht anders als fr&#252;her, eine recht breite, heterogen vorgebildete Masse an Menschen f&#252;r eine Informatikausbildung entscheidet.</p><h3 class=„subheading“ id=„nav_formale0“>Formale Methoden sind n&#252;tzlich</h3><p>Der Begriff der formalen Methode existiert in der Informationstechnik seit Jahrzehnten und wird verschieden ausgelegt. Forschende meinen damit</p><ol class=„rtelist rtelist–ordered“><li>die Ad-hoc-Formalisierung eines Programmierproblems mittels formaler Logik, Mengenlehre und anderen Basiswerkzeugen der Mathematik, um das Problem besser zu verstehen,</li><li>die durchg&#228;ngige Formalisierung einer Programmiersprache f&#252;r die teil- oder vollautomatische Pr&#252;fung (formale Deduktion) von Programmeigenschaften,</li><li>ein mathematisch fundiertes Werkzeug f&#252;r die pr&#228;zise Softwaremodellierung und Modellpr&#252;fung.</li></ol><p>Andere Wissenschaftler und Wissenschaftlerinnen erweitern oder kombinieren diese drei Ans&#228;tze zu einer umfassenden Ingenieursmethode.</p><p>Der Allgemeinheit halber soll hier die dritte Charakterisierung eine Rolle spielen. Danach kann man eine formale Methode als eine mathematisch und logisch fundierte, meist werkzeuggest&#252;tzte Herangehensweise an die Konstruktion und Analyse einer laufenden Software, einer Anforderungsspezifikation, eines St&#252;cks Quelltext oder eines Modells davon verstehen.</p><p>Herzst&#252;ck der Methodenanwendung ist die zweckspezifische Abstraktion und das Herausarbeiten der relevanten Details und des Kontexts einer Softwareanwendung mithilfe einer m&#246;glichst &#252;bersichtlichen Notation. Es braucht formale Methoden dann, wenn die Anforderungen an die Korrektheit und Zuverl&#228;ssigkeit einer Software besonders hoch sind, etwa die Steuerung eines Kraftwerks oder einer besonders risikobehafteten Maschine, die Abwicklung eines Online-Bezahlvorgangs oder die &#220;bertragung einer elektronischen Patientenakte. Durch eine strenge Vorgehensweise k&#246;nnen Entwicklerinnen und Entwickler sowohl die korrekte Konstruktion als auch die Absicherung der Software gut nachvollziehbar dokumentieren und kommunizieren. Das spielt ebenfalls eine wichtige Rolle, beispielsweise f&#252;r eine T&#220;V- oder ISO-Zertifizierung sowie f&#252;r die Kl&#228;rung von Haftungsfragen vor Gericht.</p><p>Ein aktuelles Anwendungsbeispiel ist ferner der Nachweis, dass das von Fahrerassistenzsoftware ausgehende Unfallrisiko unter einer tolerierbaren Schwelle liegt.</p><p>In der Tat empfehlen einschl&#228;gige Standards (z.B. DO-178C, EN 5012x, IEC 61508, ISO 26262) den Einsatz formaler Ans&#228;tze in besonders riskanten Szenarien. Damit h&#228;tten moderne formale Methoden mit ausgereiften Werkzeugen heute nicht nur das Potenzial, sondern auch die legale M&#246;glichkeit, bei Produkthaftungsfragen als Referenz f&#252;r den Stand der Qualit&#228;tssicherungspraxis zu dienen. Allein schon deshalb geb&#252;hrt ihnen ein fester Platz in den Lehrpl&#228;nen der Ausbildungsst&#228;tten.</p><figure class=„a-inline-image a-u-inline“><div><img alt=„“ class=„legacy-img c1“ height=„391“ sizes=„“ src=„https://heise.cloudimg.io/width/696/q85.png-lossy-85.webp-lossy-85.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb1-7bbb18868ee4ad79.png“ srcset=„https://heise.cloudimg.io/width/336/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb1-7bbb18868ee4ad79.png 336w, https://heise.cloudimg.io/width/1008/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb1-7bbb18868ee4ad79.png 1008w, https://heise.cloudimg.io/width/696/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb1-7bbb18868ee4ad79.png 696w, https://heise.cloudimg.io/width/1392/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb1-7bbb18868ee4ad79.png 1392w“ width=„696“ referrerpolicy=„no-referrer“ /></div><figcaption class=„a-caption“>Hierarchischer endlicher Automat zur pr&#228;gnanten Beschreibung von Abl&#228;ufen (Abb. 1).(Bild:&#160;Mario Gleirscher)</figcaption></figure><h3 class=„subheading“ id=„nav_klarstellung1“>Klarstellung mit Formalismen</h3><p>So wie in anderen Technikwissenschaften spielen Formalismen und auch in der Informatik eine vielschichtige Rolle. &#220;ber gut ein Jahrhundert lang hat die Informatikforschung viele solcher Formalismen genutzt. Vielleicht ist es die im Vergleich zu anderen Ingenieursdisziplinen und Wissenschaften schlechte Greifbarkeit kreierter Dinge (Software), die neue Modellierungs- und Darstellungsversuche in Formalismen antreibt (z.B. mit Automaten und Zustands&#252;bergangsdiagrammen, siehe Abbildungen 1 und 2)? Vielleicht ist es diese schlechte Greifbarkeit auch, die &#8211; &#228;hnlich wie in der theoretischen Physik &#8211; neue, abstraktere Anwendungen und Erweiterungen der Mathematik ben&#246;tigte.</p><p>Um die Grundlagen zu vermitteln, aber auch um neue Erkenntnisse zu gewinnen, ben&#246;tigt man jedenfalls h&#228;ufig:</p><ul class=„rtelist rtelist–unordered“><li>abstrakte Maschinenmodelle und Mengentheorie f&#252;r Komplexit&#228;tsuntersuchungen von Problemen und Algorithmen,</li><li>relationale Algebra, formale Sprachen und Automatentheorie zur genauen Modellierung und Beschreibung der Funktionsweise von Datenbanken, Systemsoftware und Programmiersprachen oder</li><li>algebraische Datentypen, Zustandsmaschinen, temporale Logik und Kategorientheorie f&#252;r die schrittweise Modellbildung im Softwareentwurf und in der Programmpr&#252;fung.</li></ul><p>Eine breite Erkenntnis vieler Technikwissenschaften ist, dass ohne die Anwendung von Formalismen keine kontrollierte Ann&#228;herung an einen expliziten, konsensf&#228;higen und stabilen Wissens- und Methodenkorpus erfolgen kann.</p><figure class=„a-inline-image a-u-inline“><div><img alt=„“ class=„legacy-img c1“ height=„391“ sizes=„“ src=„https://heise.cloudimg.io/width/696/q85.png-lossy-85.webp-lossy-85.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb2-6e35e2bc34e86208.png“ srcset=„https://heise.cloudimg.io/width/336/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb2-6e35e2bc34e86208.png 336w, https://heise.cloudimg.io/width/1008/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb2-6e35e2bc34e86208.png 1008w, https://heise.cloudimg.io/width/696/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb2-6e35e2bc34e86208.png 696w, https://heise.cloudimg.io/width/1392/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb2-6e35e2bc34e86208.png 1392w“ width=„696“ referrerpolicy=„no-referrer“ /></div><figcaption class=„a-caption“>SysML State Chart, ausdrucksm&#228;chtiges Mittel einer standardisierten und gut formalisierbaren Software-Modellierung (Abb. 2).(Bild:&#160;Mario Gleirscher)</figcaption></figure><h3 class=„subheading“ id=„nav_mehr_als_nur2“>Mehr als nur Formalismen</h3><p>Wenn es um die Konstruktion komplexer kritischer Software geht, also um un&#252;bersichtliche, schwer greifbare oder wenig anschauliche Gegenst&#228;nde (Datenstrukturen) und Sachverhalte (Algorithmen), m&#252;ssen die Konstruktionstechniken besonders hohe Anforderungen an eine pr&#228;zise</p><ul class=„rtelist rtelist–unordered“><li>Wissensdarstellung (z.B. konsistente, formale Bedeutungslehre),</li><li>Wissenshandhabung (z.B. Abbildung intuitiver Konstruktions- und Analyseschritte) und</li><li>Wissenskommunikation (z.B. Zweck spezifische, konsistente, &#252;bersichtliche Darstellungen)</li></ul><p>erf&#252;llen.</p><p>Neben den vertrauten Programmkonstrukten und Programmierrichtlinien bieten formale Methoden zus&#228;tzliche Abstraktionstechniken, deren Nutzen in jahrelanger Forschung stets zunahm. Im Sinne einer Ingenieursmethodik mit Leitlinien und Werkzeugen lassen sich beispielsweise, ohne einen Anspruch auf Vollst&#228;ndigkeit oder Aktualit&#228;t der Auflistung, folgende Ans&#228;tze nennen: <a href=„https://doi.org/10.1007/978-3-642-18216-7“ rel=„external noopener“ target=„_blank“><strong>ASM [6]</strong></a>, B <a href=„https://www.heise.de/hintergrund/Qualitaetssicherung-in-der-Softwareentwicklung-mit-formalen-Methoden-9339463.html?view=print#anchor_5“><strong>[5] [7]</strong></a>, <a href=„https://doi.org/10.1007/b11968“ rel=„external noopener“ target=„_blank“><strong>CASL [8]</strong></a>, <a href=„https://doi.org/10.1007/978-1-4613-0091-5“ rel=„external noopener“ target=„_blank“><strong>Focus [9]</strong></a>, <a href=„https://www.iso.org/standard/16258.html“ rel=„external noopener“ target=„_blank“><strong>LOTOS [10]</strong></a> (ISO-standardisiert), <a href=„https://raisetools.github.io/“ rel=„external noopener“ target=„_blank“><strong>RAISE [11]</strong></a>, <a href=„https://doi.org/10.1007/978-1-4842-3829-5“ rel=„external noopener“ target=„_blank“><strong>TLA+ [12]</strong></a>, UNITY <a href=„https://www.heise.de/hintergrund/Qualitaetssicherung-in-der-Softwareentwicklung-mit-formalen-Methoden-9339463.html?view=print#anchor_6“><strong>[6] [13]</strong></a>, <a href=„https://doi.org/10.1007/3-540-08766-4“ rel=„external noopener“ target=„_blank“><strong>VDM [14]</strong></a>, <a href=„https://doi.org/10.1109/cmpass.1995.521891“ rel=„external noopener“ target=„_blank“><strong>SCR [15]</strong></a> und <a href=„https://www.iso.org/standard/21573.html“ rel=„external noopener“ target=„_blank“><strong>Z [16]</strong></a> (ISO-standardisiert).</p><p>Derartige Methoden wurden je nach Fall ab etwa Anfang der 1980er teils von mehreren Forschenden gemeinsam entwickelt und teils in verschiedene Richtungen verfeinert. Sie bedienen sich einer Reihe aus der formalen Logik, Mathematik und der theoretischen Informatik stammender Konzepte &#8211; Pr&#228;dikatenlogik, relationale Algebra, Funktionen, Automatentheorie, formale Sprachen, Prozessalgebra, temporale Logik und Modelltheorie &#8211; und formalen Schlie&#223;techniken wie Formen des deduktiven Schlie&#223;ens, die Arbeit mit Invarianten und der Modellpr&#252;fung.</p><figure class=„a-inline-image a-u-inline“><div><img alt=„“ class=„legacy-img c1“ height=„391“ sizes=„“ src=„https://heise.cloudimg.io/width/696/q85.png-lossy-85.webp-lossy-85.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb3-e4fe0b41e778050f.png“ srcset=„https://heise.cloudimg.io/width/336/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb3-e4fe0b41e778050f.png 336w, https://heise.cloudimg.io/width/1008/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb3-e4fe0b41e778050f.png 1008w, https://heise.cloudimg.io/width/696/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb3-e4fe0b41e778050f.png 696w, https://heise.cloudimg.io/width/1392/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb3-e4fe0b41e778050f.png 1392w“ width=„696“ referrerpolicy=„no-referrer“ /></div><figcaption class=„a-caption“>Leicht verarbeitbare Textdarstellung eines diskreten hybriden Automaten in HyTech, hilfreiches Mittel zur formalen Modellierung eingebetteter Systeme (Abb. 3).(Bild:&#160;Mario Gleirscher)</figcaption></figure><p>Entscheidend f&#252;r viele formale Methoden sind aber die methodischen Grundelemente <a href=„https://www.heise.de/hintergrund/Qualitaetssicherung-in-der-Softwareentwicklung-mit-formalen-Methoden-9339463.html?view=print#anchor_7“><strong>[7] [17]</strong></a> sowie die am Nutzer orientierten Leitlinien, die sich in den Notationen und der praktischen Handhabung dieser Formalismen auspr&#228;gen (siehe Abbildungen 3 und 4). Agile Vorgehensweisen der Softwareentwicklung beispielsweise erfordern einen pr&#228;zisen Umgang mit &#196;nderungen im Kontext der kontinuierlichen Auslieferung <a href=„https://www.heise.de/hintergrund/Qualitaetssicherung-in-der-Softwareentwicklung-mit-formalen-Methoden-9339463.html?view=print#anchor_2“><strong>[2] [18]</strong></a>.</p><p>Unter anderem der Formal Methods Europe Verein bietet neben einer Methodenauswahlhilfe einen Literatur&#252;berblick zu den oben genannten Ans&#228;tzen und Werkzeugen. Hinzu kommen eine umfangreiche Selektion von Lehr- und Trainingsmaterialien sowie regelm&#228;&#223;ige Seminare zum Kennenlernen formaler Methoden und zum Austausch zwischen Forschenden und Praktizierenden &#8211; zwischen Akademie und Industrie <a href=„https://www.heise.de/hintergrund/Qualitaetssicherung-in-der-Softwareentwicklung-mit-formalen-Methoden-9339463.html?view=print#anchor_8“><strong>[8] [19]</strong></a>.</p><figure class=„a-inline-image a-u-inline“><div><img alt=„“ class=„legacy-img c1“ height=„391“ sizes=„“ src=„https://heise.cloudimg.io/width/696/q85.png-lossy-85.webp-lossy-85.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb4-d6a76db32f6357ab.png“ srcset=„https://heise.cloudimg.io/width/336/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb4-d6a76db32f6357ab.png 336w, https://heise.cloudimg.io/width/1008/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb4-d6a76db32f6357ab.png 1008w, https://heise.cloudimg.io/width/696/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb4-d6a76db32f6357ab.png 696w, https://heise.cloudimg.io/width/1392/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb4-d6a76db32f6357ab.png 1392w“ width=„696“ referrerpolicy=„no-referrer“ /></div><figcaption class=„a-caption“>Grafische Darstellung des Automaten (Abb. 4).(Bild:&#160;Mario Gleirscher)</figcaption></figure><p>Es ist wichtig zu verstehen, dass es sich bei den heute weitverbreiteten Modellierungssprachen wie UML oder SysML, aber auch bei reinen Formalismen (z.B. Pr&#228;dikatenlogik) oder heute weniger genutzten Sprachfamilien (IDEF, STEP uvm.) weder um formale Methoden noch im engeren Sinne &#252;berhaupt um Methoden handelt. Ein Formalismus oder eine Programmier- oder Modellierungssprache wird nicht etwa deshalb zu einer vollwertigen Methode, weil deren Notation formal definiert ist oder deren Sprachkonstrukte eine gewisse Vorgehensweise suggerieren (siehe Abbildung 5).</p><p>Hingegen muss man modernen Hochsprachen einen methodischen Gehalt zusprechen, etwa wenn es um die Umsetzung bew&#228;hrter Konstruktionsprinzipien: Typsicherheit, Kapselung, Zusicherungen (z.B. Assertions in Java), Diagrammtypen, Kompositionsbeziehungen (u.a. in SysML) usw. geht.</p><p>Der Anspruch formaler Methoden zielt jedoch dar&#252;ber hinaus auf eine umfassende, formal fundierte Unterst&#252;tzung korrekter Programmentwicklung <a href=„https://www.heise.de/hintergrund/Qualitaetssicherung-in-der-Softwareentwicklung-mit-formalen-Methoden-9339463.html?view=print#anchor_7“><strong>[7] [20]</strong></a>, in gewissem Sinne auch eine Erweiterung testgetriebener und prototypbasierter Entwicklung. Eine zunehmend gemeisterte Herausforderung ist die Integration gut automatisierbarer, formaler Methoden in moderne, agile Softwareentwicklungsprozesse <a href=„https://www.heise.de/hintergrund/Qualitaetssicherung-in-der-Softwareentwicklung-mit-formalen-Methoden-9339463.html?view=print#anchor_2“><strong>[2] [21]</strong></a>.</p><figure class=„a-inline-image a-u-inline“><div><img alt=„“ class=„legacy-img c1“ height=„391“ sizes=„“ src=„https://heise.cloudimg.io/width/696/q85.png-lossy-85.webp-lossy-85.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb5-d2d7adcfdbeacb75.png“ srcset=„https://heise.cloudimg.io/width/336/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb5-d2d7adcfdbeacb75.png 336w, https://heise.cloudimg.io/width/1008/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb5-d2d7adcfdbeacb75.png 1008w, https://heise.cloudimg.io/width/696/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb5-d2d7adcfdbeacb75.png 696w, https://heise.cloudimg.io/width/1392/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb5-d2d7adcfdbeacb75.png 1392w“ width=„696“ referrerpolicy=„no-referrer“ /></div><figcaption class=„a-caption“>SysML Blockdiagramm zur einfachen, dennoch gut formalisierbaren Darstellung der Architektur eines verteilten Softwaresystems (Abb. 5).(Bild:&#160;Mario Gleirscher)</figcaption></figure><h3 class=„subheading“ id=„nav_bisherige3“>Bisherige Nutzung formaler Methoden</h3><p>Formale Methoden im engeren Sinne entstammen der Softwaretechnikforschung und wurden sukzessive in der Informatiklehre zur Aneignung von Forschungserkenntnissen eingesetzt. Sp&#228;ter &#252;bernahm die industrielle Software- und Systementwicklung formale Methoden, meist jedoch wie erw&#228;hnt in hochkritischen Anwendungen oder zu praxisorientierten Forschungszwecken <a href=„https://www.heise.de/hintergrund/Qualitaetssicherung-in-der-Softwareentwicklung-mit-formalen-Methoden-9339463.html?view=print#anchor_9“><strong>[9] [22]</strong></a>. Zunehmend Anwendung finden die vergleichsweise gut automatisierbaren Techniken der statischen Analyse (z.B. abstrakte Interpretation), Typsysteme und die Modellpr&#252;fung (Model Checking).</p><p>Weitere erfolgreiche Bestrebungen, formale Methoden &#252;ber die modellbasierte oder -getriebene Entwicklung (oft mittels UML, SysML oder dom&#228;nenspezifischen Sprachen, siehe Abbildungen 2 und 5) in die moderne Softwareentwicklung einzubringen, gibt es bereits in Branchen wie Automotive, Avionik, Bahn oder Fertigungsautomatisierung. Hierbei stehen vielf&#228;ltige Vorteile (bessere Koordination von Entwicklungsabteilungen, Wiederverwendung, ad&#228;quate Abstraktionen) auch einigen Nachteilen gegen&#252;ber (eingeschr&#228;nkte Sprachnutzung, indirekte Code-Optimierung, st&#228;rkere Abh&#228;ngigkeit von Werkzeugen).</p><p>Zu den erfolgreichen Beispielen f&#252;r die Nutzung formaler Methoden geh&#246;ren:</p><ul class=„rtelist rtelist–unordered“><li>die Pr&#252;fung von nur teuer aktualisierbaren Hardwareschaltungen im Sinne des Right-the-first-time-Prinzips (Prozessorverifikation bei ARM, Infineon oder Intel),</li><li>die H&#228;rtung von h&#228;ufig mit Angriffen bedrohten, sicherheitskritischen Systemfunktionen (Betriebssystemkerne, Zugriffskontroll- und Ressourcentrennmechanismen in Rechenzentren),</li><li>die Protokollverifikation in naturgem&#228;&#223; komplexen, tr&#228;gen oder heterogenen, verteilten Anwendungen mit breiten, kostenintensiven Fehlerkonsequenzen (Telekommunikation, Datenbank- und Blockchain-Technologie), und</li><li>in der Regelungsinformatik, die Pr&#252;fung akut risikobehafteter Regelungssoftware (Steuerungen f&#252;r Nutzfahrzeuge oder Kernkraftwerke) im Rahmen einer haftungsrechtlich gebotenen Zertifizierung.</li></ul><p>Zur gezielten Unterst&#252;tzung dieser Pr&#252;fungsaufgaben kommen Formalismen und spezifische formale Methoden zur Definition der in diesen Bereichen relevanten Abstraktionen und der damit verwendeten Modellierungs- und Programmiersprachen zum Einsatz. Ma&#223;geblich f&#252;r eine erfolgreiche Anwendung formaler Methodik ist das Verst&#228;ndnis der n&#246;tigen Grundlagen, weitgehend unabh&#228;ngig davon, ob eine Methodenanwendung vollst&#228;ndig oder teilweise automatisiert erfolgen kann oder nicht.</p><p>Insgesamt konnte sich bisher keine Methode breit etablieren. Daf&#252;r gibt es viele Gr&#252;nde: mangelnde Lehre, unausgewogene Lehrpl&#228;ne, Fehleinsch&#228;tzungen der Lehrenden zu langfristig relevanten Inhalten, unzureichendes Interesse oder fehlende Grundkompetenzen bei den Auszubildenden <a href=„https://www.heise.de/hintergrund/Qualitaetssicherung-in-der-Softwareentwicklung-mit-formalen-Methoden-9339463.html?view=print#anchor_10“><strong>[10] [23]</strong></a>, ungeschultes Personal in Unternehmen, Vers&#228;umnisse in der Methodenentwicklung beim Management dieser Unternehmen, Fehleinsch&#228;tzungen in der Kosten/Nutzen-Bewertung neuer Methoden und Technologien, unzureichende Skalierbarkeit oder Praxisn&#228;he der angebotenen Methoden und fehlende Abstraktionstechniken <a href=„https://www.heise.de/hintergrund/Qualitaetssicherung-in-der-Softwareentwicklung-mit-formalen-Methoden-9339463.html?view=print#anchor_11“><strong>[11, 12] [24]</strong></a>, verbesserungsw&#252;rdige Werkzeugunterst&#252;tzung, kurzfristige wirtschaftliche Interessen der Werkzeugentwickler, hohe finanzielle Leidensf&#228;higkeit von Kunden oder Nutzerinnen gegen&#252;ber Softwareproblemen.</p><p>K&#252;nftige Softwareentwicklung profitiert von formalen Methoden</p><p>Zwei interessante Entwicklungen weisen darauf hin, dass werkzeuggest&#252;tzte, formale Methoden &#8211; und die damit einhergehende, flexible F&#228;higkeit der Abstraktion &#8211; in Zukunft eine st&#228;rkere Rolle in vielen Dom&#228;nen spielen k&#246;nnen.</p><p>Zum einen wird mit der steigenden Bedeutung korrekter, zuverl&#228;ssiger, jedoch zunehmend komplexer Software in vielen Gesellschaftsbereichen auch die Anwendung stringenter Methodik in der Systementwicklung und Qualit&#228;tssicherung steigen. Fehler und L&#252;cken sind zunehmend schwer oder teuer aufzudecken und zu beheben. Damit d&#252;rfte die Anwendung formaler Methoden zur Fehlervermeidung in fr&#252;hen oder korrigierenden Entwicklungsphasen h&#228;ufiger notwendig sein (siehe Abbildung 6) oder gar zum Selbstverst&#228;ndnis werden.</p><figure class=„a-inline-image a-u-inline“><div><img alt=„“ class=„legacy-img c1“ height=„391“ sizes=„“ src=„https://heise.cloudimg.io/width/696/q85.png-lossy-85.webp-lossy-85.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb6-f608c2addcce98c5.png“ srcset=„https://heise.cloudimg.io/width/336/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb6-f608c2addcce98c5.png 336w, https://heise.cloudimg.io/width/1008/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb6-f608c2addcce98c5.png 1008w, https://heise.cloudimg.io/width/696/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb6-f608c2addcce98c5.png 696w, https://heise.cloudimg.io/width/1392/q70.png-lossy-70.webp-lossy-70.foil1/_www-heise-de_/imgs/18/4/3/2/1/1/9/5/abb6-f608c2addcce98c5.png 1392w“ width=„696“ referrerpolicy=„no-referrer“ /></div><figcaption class=„a-caption“>Anzahl von Befragten, welche formale Methoden in einem oder mehreren Anwendungsbereichen genutzt haben und/oder nutzen wollen (Abb. 6).(Bild:&#160;Finney, K. 1996 [9])</figcaption></figure><p>Zum anderen verschiebt die zunehmende Automatisierung vieler bisher manueller Aufgaben durch Techniken der k&#252;nstlichen Intelligenz viele Berufsfelder in kreativere oder anspruchsvollere T&#228;tigkeiten. Man wird vielerorts quasi vom Probleml&#246;ser zum Problemspezifizierer, muss keine Einzell&#246;sungen Zeile f&#252;r Zeile erarbeiten, sondern L&#246;sungsr&#228;ume einschr&#228;nken und L&#246;sungsvorschl&#228;ge pr&#252;fen oder zuverl&#228;ssig anpassen. Oft wird auch die Programmreparatur oder die Fehlerbehebung automatisiert erfolgen. F&#252;r all dies m&#252;ssen gewisse Abstraktionen erdacht und genutzt werden. Gerade das geh&#246;rt zu den Kernf&#228;higkeiten formaler Methoden, insbesondere der Spezialdisziplin des verfeinerungsbasierten Entwurfs <a href=„https://www.heise.de/hintergrund/Qualitaetssicherung-in-der-Softwareentwicklung-mit-formalen-Methoden-9339463.html?view=print#anchor_5“><strong>[5] [25]</strong></a>.</p><p>In der Softwareentwicklung k&#246;nnen moderne, Suche-basierte Entwicklung, Programmsynthese und k&#252;nstliche Intelligenzwerkzeuge wie ChatGPT oder GitHub Copilot durchaus dazu f&#252;hren, dass Ingenieurinnen und Entwickler zunehmend ihre St&#228;rken in der Anwendungsanalyse, der Dom&#228;nenabstraktion, der Problemspezifikation sowie der Pr&#252;fung generierter Software <a href=„https://www.heise.de/hintergrund/Qualitaetssicherung-in-der-Softwareentwicklung-mit-formalen-Methoden-9339463.html?view=print#anchor_13“><strong>[13] [26]</strong></a> ausleben.</p><h3 class=„subheading“ id=„nav_fazit_4“>Fazit</h3><p>Aus den beiden und weiteren Gr&#252;nden wird es wichtig sein, auf diesen neuartigen Methodenbedarf oder den Bedarf an neuen Herangehensweisen, sowohl in der Forschung als auch in der Informatiklehre zu reagieren und so die n&#228;chsten Kohorten von Softwareentwicklern auf neue Herausforderungen vorzubereiten <a href=„https://www.heise.de/hintergrund/Qualitaetssicherung-in-der-Softwareentwicklung-mit-formalen-Methoden-9339463.html?view=print#anchor_11“><strong>[11] [27]</strong></a>.</p><p>Moderne formale Methoden k&#246;nnten also nicht wie bisher haupts&#228;chlich als Denkwerkzeuge f&#252;r die Forschung und Grundausbildung dienen, sondern einen neuen akzentuierten Zweig im Lehrplan der Informatikausbildung besetzen, der Problemspezifikation und -verfeinerung, und das schon ab der Sekundarstufe <a href=„https://www.heise.de/hintergrund/Qualitaetssicherung-in-der-Softwareentwicklung-mit-formalen-Methoden-9339463.html?view=print#anchor_1“><strong>[1] [28]</strong></a>.</p><p>So k&#246;nnten die oben angesprochenen F&#228;higkeiten mittels einer Methodenlehre an praktizierende, KI-nutzende Softwareingenieurinnen und -ingenieure der Zukunft besonders effektiv weitergegeben werden. KI-basierte Softwareentwicklung mithilfe formaler Methoden k&#246;nnte einen n&#252;tzlichen Paradigmenwechsel einl&#228;uten und moderne Qualit&#228;tsanspr&#252;che an Software besser adressieren.</p><p>Diesen Paradigmenwechsel gilt es bildungspolitisch auf allen Ebenen, in der Sekundarstufe, in der Ausbildung an Hochschulen und in der Forschung, zu unterst&#252;tzen. Ferner ist die Einsicht n&#252;tzlich, dass eine an formalen Grundlagen orientierte universelle Ausbildung jemanden auch darin bef&#228;higt, sich &#228;nderndes, praktisches Wissen selbst zu erschlie&#223;en, w&#228;hrend eine Orientierung der Ausbildung an kurzfristig aktuellen Themen und Technologien derart wichtige, berufliche F&#228;higkeiten nicht unbedingt beg&#252;nstigt.</p><p><em>Mario Gleirscher<br />forscht und lehrt derzeit im Fachbereich Mathematik und Informatik an der Universit&#228;t Bremen zum Themenschwerpunkt Verifikation und Synthese von Maschinensteuerungen in der Robotik und anderen hoch automatisierten technischen Prozessen. Er interessiert sich auch f&#252;r die industrielle Anwendung formaler Methodik und ist unter anderem stellvertretender Sprecher der Fachgruppe <a href=„https://fg-fomsess.gi.de/“ rel=„external noopener“ target=„_blank“><strong>FoMSESS [29]</strong></a> (Formale Methoden und Software Engineering f&#252;r sichere Systeme) in der Gesellschaft f&#252;r Informatik e.V.</em></p><p><em>Danksagung: Mein herzlicher Dank f&#252;r sehr hilfreiches Feedback geht an Clemens Lanthaler.</em></p><h5 id=„nav_literatur_5“>Literatur</h5><p><a name=„anchor_1“ id=„anchor_1“><strong>[30]</strong></a>[1] Broy, M.; Brucker, A.; Fantechi, A.; Gleirscher, M.; Havelund, K.; Jones, C.; Kuppe, M.; Mendes, A.; Platzer, A.; Ringert, J. O. und Sullivan, A. (2023). Does Every Computer Scientist Need to Know Formal Methods?, Form. Asp. Comput. In Druck.</p><p><a name=„anchor_2“ id=„anchor_2“><strong>[31]</strong></a>[2] O'Hearn, P. W. (2018). Continuous Reasoning. In: Dawar, A. &amp; Gr&#228;del, E. (Ed.), LICS, 33rd Ann. Symp., ACM Press. DOI: <a href=„https://doi.org/10.1145/3209108.3209109“ rel=„external noopener“ target=„_blank“><strong>https://doi.org/10.1145/3209108.3209109 [32]</strong></a></p><p><a name=„anchor_3“ id=„anchor_3“><strong>[33]</strong></a>[3] Jones, C. B. und Thomas, M. (2022). The Development and Deployment of Formal Methods in the UK, Form. Asp. Comput. 34 : 1-21. DOI: <a href=„https://doi.org/10.1145/3522577“ rel=„external noopener“ target=„_blank“><strong>https://doi.org/10.1145/3522577 [34]</strong></a></p><p><a name=„anchor_4“ id=„anchor_4“><strong>[35]</strong></a>[4] Welsh, M. (2022). The End of Programming, Commun. ACM 66 : 34-35. DOI: <a href=„https://doi.org/10.1145/3570220“ rel=„external noopener“ target=„_blank“><strong>https://doi.org/10.1145/3570220 [36]</strong></a></p><p><a name=„anchor_5“ id=„anchor_5“><strong>[37]</strong></a>[5] Abrial, J.-R., 2010. Modeling in Event-B. Cambridge UP, Cambridge. ISBN: 9780521895569</p><p><a name=„anchor_6“ id=„anchor_6“><strong>[38]</strong></a>[6] Chandy, K. M.; Misra, J.(1989). Parallel Program Design: A Foundation. Addison Wesley: Reading, MA. ISBN: 0-201-05866-9</p><p><a name=„anchor_7“ id=„anchor_7“><strong>[39]</strong></a>[7] Brinksma, E. (1991). What is the Method in Formal Methods?. In: Parker, K. R. &amp; Rose, G. A. (Ed.), FORTE, 4th Int. Conf., Elsevier. DOI: <a href=„https://doi.org/10.1016/b978-0-444-89402-1.50012-6“ rel=„external noopener“ target=„_blank“><strong>https://doi.org/10.1016/b978-0-444-89402-1.50012-6 [40]</strong></a>.</p><p><a name=„anchor_8“ id=„anchor_8“><strong>[41]</strong></a>[8] Formal Methods Europe (2023). Choosing and Learning a Formal Method, <a href=„https://www.fmeurope.org/industry/“ rel=„external noopener“ target=„_blank“><strong>https://www.fmeurope.org/industry/ [42]</strong></a>, <a href=„https://www.fmeurope.org/choosingaformalmethod/“ rel=„external noopener“ target=„_blank“><strong>https://www.fmeurope.org/choosingaformalmethod/ [43]</strong></a>, <a href=„https://fme-teaching.github.io/courses/“ rel=„external noopener“ target=„_blank“><strong>https://fme-teaching.github.io/courses/ [44]</strong></a>.</p><p><a name=„anchor_9“ id=„anchor_9“><strong>[45]</strong></a>[9] Gleirscher, M. und Marmsoler, D. (2020). Formal Methods in Dependable Systems Engineering: A Survey of Professionals from Europe and North America, Empir. Softw. Eng. 25 : 4473-4546. DOI: <a href=„https://doi.org/10.1007/s10664-020-09836-5“ rel=„external noopener“ target=„_blank“><strong>https://doi.org/10.1007/s10664-020-09836-5 [46]</strong></a></p><p><a name=„anchor_10“ id=„anchor_10“><strong>[47]</strong></a>[10] Finney, K. (1996). Mathematical notation in formal specification: too difficult for the masses?, IEEE Trans. Software Eng. 22 : 158-159. DOI: <a href=„https://doi.org/10.1109/32.485225“ rel=„external noopener“ target=„_blank“><strong>https://doi.org/10.1109/32.485225 [48]</strong></a></p><p><a name=„anchor_11“ id=„anchor_11“><strong>[49]</strong></a>[11] Gleirscher, M.; van de Pol, J. und Woodcock, J. (2023). A Manifesto for Applicable Formal Methods, Softw. Syst. Model. 0 : 1-17. DOI: <a href=„https://doi.org/10.1007/s10270-023-01124-2“ rel=„external noopener“ target=„_blank“><strong>https://doi.org/10.1007/s10270-023-01124-2 [50]</strong></a></p><p><a name=„anchor_12“ id=„anchor_12“><strong>[51]</strong></a>[12] Gleirscher, M.; Foster, S. und Woodcock, J. (2019). New Opportunities for Integrated Formal Methods, ACM Comput. Surv. 52 : 117:1-117:36. DOI: <a href=„https://doi.org/10.1145/3357231“ rel=„external noopener“ target=„_blank“><strong>https://doi.org/10.1145/3357231 [52]</strong></a></p><p><a name=„anchor_13“ id=„anchor_13“><strong>[53]</strong></a>[13] Meyer, B. (2023). AI Does Not Help Programmers, BLOG@CACM, <a href=„https://cacm.acm.org/blogs/blog-cacm/273577-ai-does-not-help-programmers“ rel=„external noopener“ target=„_blank“><strong>https://cacm.acm.org/blogs/blog-cacm/273577-ai-does-not-help-programmers [54]</strong></a>.</p><p>() </p><hr /><p><strong>URL dieses Artikels:</strong><br /><small>

https://www.heise.de/-9339463

</small></p><p><strong>Links in diesem Artikel:</strong><br /><small>

<strong>[1]</strong>&#160;#anchor_1

</small><br /><small>

<strong>[2]</strong>&#160;https://csed.acm.org/programming-languages/

</small><br /><small>

<strong>[3]</strong>&#160;#anchor_2

</small><br /><small>

<strong>[4]</strong>&#160;#anchor_3

</small><br /><small>

<strong>[5]</strong>&#160;#anchor_4

</small><br /><small>

<strong>[6]</strong>&#160;https://doi.org/10.1007/978-3-642-18216-7

</small><br /><small>

<strong>[7]</strong>&#160;#anchor_5

</small><br /><small>

<strong>[8]</strong>&#160;https://doi.org/10.1007/b11968

</small><br /><small>

<strong>[9]</strong>&#160;https://doi.org/10.1007/978-1-4613-0091-5

</small><br /><small>

<strong>[10]</strong>&#160;https://www.iso.org/standard/16258.html

</small><br /><small>

<strong>[11]</strong>&#160;https://raisetools.github.io/

</small><br /><small>

<strong>[12]</strong>&#160;https://doi.org/10.1007/978-1-4842-3829-5

</small><br /><small>

<strong>[13]</strong>&#160;#anchor_6

</small><br /><small>

<strong>[14]</strong>&#160;https://doi.org/10.1007/3-540-08766-4

</small><br /><small>

<strong>[15]</strong>&#160;https://doi.org/10.1109/cmpass.1995.521891

</small><br /><small>

<strong>[16]</strong>&#160;https://www.iso.org/standard/21573.html

</small><br /><small>

<strong>[17]</strong>&#160;#anchor_7

</small><br /><small>

<strong>[18]</strong>&#160;#anchor_2

</small><br /><small>

<strong>[19]</strong>&#160;#anchor_8

</small><br /><small>

<strong>[20]</strong>&#160;#anchor_7

</small><br /><small>

<strong>[21]</strong>&#160;#anchor_2

</small><br /><small>

<strong>[22]</strong>&#160;#anchor_9

</small><br /><small>

<strong>[23]</strong>&#160;#anchor_10

</small><br /><small>

<strong>[24]</strong>&#160;#anchor_11

</small><br /><small>

<strong>[25]</strong>&#160;#anchor_5

</small><br /><small>

<strong>[26]</strong>&#160;#anchor_13

</small><br /><small>

<strong>[27]</strong>&#160;#anchor_11

</small><br /><small>

<strong>[28]</strong>&#160;#anchor_1

</small><br /><small>

<strong>[29]</strong>&#160;https://fg-fomsess.gi.de/

</small><br /><small>

<strong>[30]</strong>&#160;

</small><br /><small>

<strong>[31]</strong>&#160;

</small><br /><small>

<strong>[32]</strong>&#160;https://doi.org/10.1145/3209108.3209109

</small><br /><small>

<strong>[33]</strong>&#160;

</small><br /><small>

<strong>[34]</strong>&#160;https://doi.org/10.1145/3522577

</small><br /><small>

<strong>[35]</strong>&#160;

</small><br /><small>

<strong>[36]</strong>&#160;https://doi.org/10.1145/3570220

</small><br /><small>

<strong>[37]</strong>&#160;

</small><br /><small>

<strong>[38]</strong>&#160;

</small><br /><small>

<strong>[39]</strong>&#160;

</small><br /><small>

<strong>[40]</strong>&#160;https://doi.org/10.1016/b978-0-444-89402-1.50012-6

</small><br /><small>

<strong>[41]</strong>&#160;

</small><br /><small>

<strong>[42]</strong>&#160;https://www.fmeurope.org/industry/

</small><br /><small>

<strong>[43]</strong>&#160;https://www.fmeurope.org/choosingaformalmethod/

</small><br /><small>

<strong>[44]</strong>&#160;https://fme-teaching.github.io/courses/

</small><br /><small>

<strong>[45]</strong>&#160;

</small><br /><small>

<strong>[46]</strong>&#160;https://doi.org/10.1007/s10664-020-09836-5

</small><br /><small>

<strong>[47]</strong>&#160;

</small><br /><small>

<strong>[48]</strong>&#160;https://doi.org/10.1109/32.485225

</small><br /><small>

<strong>[49]</strong>&#160;

</small><br /><small>

<strong>[50]</strong>&#160;https://doi.org/10.1007/s10270-023-01124-2

</small><br /><small>

<strong>[51]</strong>&#160;

</small><br /><small>

<strong>[52]</strong>&#160;https://doi.org/10.1145/3357231

</small><br /><small>

<strong>[53]</strong>&#160;

</small><br /><small>

<strong>[54]</strong>&#160;https://cacm.acm.org/blogs/blog-cacm/273577-ai-does-not-help-programmers

</small><br /><small>

<strong>[55]</strong>&#160;mailto:who@heise.de

</small><br /></p><p class=„printversion__copyright“><em>Copyright &#169; 2023 Heise Medien</em></p> </html>

Cookies helfen bei der Bereitstellung von Inhalten. Diese Website verwendet Cookies. Mit der Nutzung der Website erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Computer gespeichert werden. Außerdem bestätigen Sie, dass Sie unsere Datenschutzerklärung gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information