Zum Inhalt springen
L

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
  1. 1. Definition und Typprüfung
  2. 2. Bedeutung für die Softwareentwicklung
  3. 3. Statische und dynamische Typsicherheit
  4. 4. C++: Unsichere Umwandlungen

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.

Weiterlesen

Informatik Als einfache Rechengeräte leisteten Abakus und später der Rechenschieber unschätzbare Dienste. 1641 konstruierte Blaise Pascal eine mechanische … Programmiersprache Bei deklarativen Programmiersprachen ist der Ausführungsalgorithmus schon vorab festgelegt und wird nicht im Quelltext ausformuliert/beschrieben, sondern es … Datentyp Die Konkretisierung der Operationsmenge führt zu Abstrakten Datentypen beziehungsweise Algebraischen Strukturen. Mit der weiteren Konkretisierung der … Compiler Ein Übersetzer zur Übertragung von Assembler-Quellprogrammen in Maschinensprache wird als Assembler oder Assemblierer bezeichnet. Geschichte. Bearbeiten. Ganze Zahl Die ganzen Zahlen (auch Ganzzahlen, lateinisch numeri integri) sind eine Erweiterung der natürlichen Zahlen. ℤ. Der Buchstabe Z mit Doppelstrich Gleitkommazahl Gleitkommazahlen bestehen aus einer festen Anzahl von Ziffern, die gemäß dem Stellenwertsystem den Wert der Zahl angeben, sowie der Angabe, um wie viele Stellen … Laufzeit (Informatik) Der Begriff Laufzeit (englisch runtime) beschreibt in der Informatik einerseits die Zeitdauer, die ein Programm, ausgeführt durch einen Rechner, … Informationssicherheit Informationssicherheit ist ein Zustand von technischen oder nicht-technischen Systemen zur Informationsverarbeitung und -speicherung, der die Schutzziele … Refactoring Refactoring ist ein zentraler Bestandteil der Agilen Softwareentwicklung. Dort wird meist von „kontinuierlichem“ Refactoring oder „kompromisslosem“ Refactoring … C (Programmiersprache) C ist eine imperative und prozedurale Programmiersprache, die der Informatiker Dennis Ritchie in den frühen 1970er Jahren an den Bell Laboratories entwickelte. Java (Programmiersprache) Java ist eine objektorientierte Programmiersprache und eine eingetragene Marke des Unternehmens Sun Microsystems, welches 2010 von Oracle übernommen wurde. Programmcode Als Programmcode (oder Programmkode) werden die Anweisungen bezeichnet, die im Rahmen der Softwareentwicklung für ein bestimmtes Computerprogramm oder einen …