Wikipedia · einfach zusammengefasst · Stand
Typsicherheit
Typsicherheit ist ein Begriff aus der Informatik, speziell aus dem Bereich Programmiersprachen. Er bezeichnet den Zustand (einer Programmausführung), …
Inhalt4 Abschnitte
Definition und Typprüfung
Typsicherheit bezeichnet in der Informatik den Zustand einer Programmausführung, bei dem Datentypen gemäß den Definitionen der verwendeten Programmiersprache eingesetzt werden und keine Typverletzungen auftreten.
Für die Typsicherheit sind Compiler beziehungsweise Interpreter zuständig. Die Typprüfung untersucht die Verwendung von Datentypen innerhalb des Typsystems und soll Typverletzungen feststellen. Bei einer Zuweisung müssen die beteiligten Typen nicht unbedingt identisch sein: Unter Umständen können ganze Zahlen einer Gleitkommavariablen zugewiesen werden. Sie müssen jedoch zuweisungskompatibel sein. Werden entsprechende Typfehler spätestens zur Laufzeit erkannt, spricht man von typsicheren Programmiersprachen.
Bedeutung für die Softwareentwicklung
Statische Typsicherheit gilt als wesentlicher Faktor für eine höhere Code-Qualität und Zuverlässigkeit. Typsichere Programme weisen eine hohe Betriebssicherheit und Informationssicherheit auf. Außerdem erleichtert statische Typisierung den Arbeitsfluss beim Code-Refactoring, also beim strukturellen Überarbeiten von Programmcode.
Teilweise wird die Ansicht vertreten, dass sich die Aspekte der Typsicherheit auch durch eine ausreichende Testabdeckung nachweisen lassen. Die verbreitete Programmiersprache C ist im Gegensatz zur ebenfalls verbreiteten Sprache Java nur begrenzt typsicher. Deshalb wird häufig angenommen, dass weniger erfahrene oder unaufmerksame Programmierer in C fehlerhaften oder leicht angreifbaren Programmcode erzeugen können.
Statische und dynamische Typsicherheit
Typisierte Programmiersprachen können Typprüfungen während der Kompilierung oder erst zur Laufzeit durchführen. Bei statisch typisierten Sprachen erfolgt die Prüfung während der Kompilierung. Dieses Konzept erzeugt schneller ablaufenden Programmcode und ist insbesondere für größere Software-Systeme erforderlich.
Bei dynamisch typisierten Sprachen finden strenge Typprüfungen erst zur Laufzeit statt, wie zum Beispiel bei Smalltalk. Das erlaubt eine effizientere und flexiblere Datenmodellierung, etwa in der objektorientierten Programmierung. Viele moderne Programmiersprachen, zum Beispiel Oberon oder C#, unterstützen beide Konzepte.
C++: Unsichere Umwandlungen
Die Beispiele zeigen, wie Umwandlungsoperatoren in C++ die Typsicherheit bei falscher Verwendung beeinträchtigen können.
Im ersten Beispiel wird int ival = 5; mit reinterpret_cast<float&>(ival) als float behandelt. reinterpret_cast verhindert dabei ausdrücklich eine sichere Konvertierung von einer ganzen Zahl in einen Gleitkommawert. Bei der Ausführung wird ein Garbage-Floating-Point-Wert ausgegeben, also ein nicht sinnvoll interpretierter Wert des Bitmusters. Sicherer wäre float fval = ival gewesen.
Das zweite Beispiel verwendet die Klassen Parent, Child1 und Child2. Child1 enthält das Member int a, Child2 das Member float b. Der Upcast von Child1 zu Parent ist immer sicher. Der anschließende downcast von Parent zu Child2 mit static_cast<Child2&>(p) ist jedoch ungültig, weil das Objekt tatsächlich ein Child1-Objekt ist. Dadurch kann Datenmüll ausgegeben werden. Ersetzt man static_cast durch dynamic_cast, löst eine ungültige Umwandlung eine Ausnahme aus.