- Validierung (Informatik)
-
Validierung in der Informatik und Softwaretechnik ist die dokumentierte Beweisführung, dass ein System die Anforderungen in der Praxis erfüllt.
Inhaltsverzeichnis
Validierung als Plausibilitätsprüfung
In der Softwaretechnik bezeichnet Validierung (auch Plausibilisierung, als Test auf Plausibilität, oder engl. Sanity Check genannt) die Kontrolle eines konkreten Wertes darauf, ob er zu einem bestimmten Datentyp gehört oder in einem vorgegebenen Wertebereich oder einer vorgegebenen Wertemenge liegt. Die meisten Programmfehler und Sicherheitsprobleme sind auf fehlende Plausibilisierung von Eingabewerten zurückzuführen.
Für die Validierung gilt die goldene Regel: never trust the user (traue niemals dem Benutzer) (auch: Never trust a user input) - wobei der „Benutzer“ auch ein Programmierer sein kann, der die fraglichen Funktionen und Module verwendet. Die Validierung von Werten kann und soll also an verschiedenen Punkten der Lebenszeit einer Software stattfinden:
- Im Entwicklungsprozess: Während das Programm entsteht, sollten regelmäßig die einzelnen Funktionen und Module so genannten Unit-Tests unterzogen werden, die den Quellcode flächendeckend (Code Coverage Analysis) auf korrektes Verhalten überprüfen .
- Bei der Übersetzung des Programmes: Einige Arten der Validierung können bereits von dem Compiler vorgenommen werden, insbesondere die Typprüfung.
- Durch die Laufzeitumgebung: Viele Programmiersprachen haben ein Laufzeitsystem, das bestimmte Arten von Fehlern selbständig erkennt; insbesondere der Zugriff auf nicht vorhandene Objekte wird von vielen modernen Systemen erkannt.
- Zur Laufzeit: Alle Funktionen und Module sollten defensiv umgesetzt sein, sich also nicht darauf verlassen, dass sie korrekt verwendet werden. Das heißt sie sollten, wenn sie mit falschen Parametern verwendet werden, sofort einen Fehler melden statt komplizierte Folgefehler zu riskieren (es gilt die Faustregel: fail fast - schneller Abbruch). Hierfür eignet sich vor allem das Konzept der Ausnahmebehandlung. Bei falschen Parameterwerten, die nach Ansicht des Programmieres "eigentlich nie vorkommen dürfen", kommen Assertions zum Einsatz.
- Bei Benutzereingaben: hier gilt der Grundsatz was sich überprüfen lässt, wird auch überprüft. Bei ungültigen Eingaben wird die Fehlerbehandlung gestartet, eine Fehlermeldung ausgegeben und die Verarbeitung abgelehnt. Bei zweifelhaften Eingaben kann eine Warnung, d. h. eine Bitte um Überprüfung durch den Anwender ausgegeben werden.
Einsatzgebiete
- Die Eingaben von Online-Formularen sollten grundsätzlich validiert werden, um Sicherheitsrisiken auszuschließen.
- Bei XML-Daten werden Elemente gegenüber einem Schema überprüft. Schlägt diese Überprüfung fehl, gelten die XML-Daten als nicht valide (well-formed).
Validierung in der Softwarequalitätssicherung
Im Bereich der Softwarequalitätssicherung wird unter Validierung (Validation) die Prüfung der Eignung beziehungsweise der Wert einer Software bezogen auf ihren Einsatzzweck verstanden. Die Eignungsprüfung erfolgt auf Grundlage vorher aufgestellten Anforderungsprofils und kann sowohl technisch als auch personell geschehen.
Umgangssprachlich formuliert wird die Frage "Wird das richtige Produkt entwickelt?" beantwortet. (Lit.: Balzert S. 101) Es wird also die Effektivität der Entwicklung sichergestellt.
Im Zusammenhang mit dem V-Modell wird die Validierung der Anforderungsdefinition bzw. dem Abnahmetest zugeordnet. Insofern ist unter der Validierung die Überprüfung der Eignung der Anforderungsdefinition mit den ursprünglichen Zielen des Kunden zu verstehen. Methoden der Validierung umfassen:
- Reviews mit dem Kunden zur Aufdeckung von Unklarheiten und irrtümlichen Annahmen
- Prototyping von Benutzeroberflächen als Kommunikationsgrundlage mit dem Anwender
- Inkrementelle Entwicklung für schnelles Kundenfeedback
In agilen Entwicklungsprozessen wie XP wird Validierung durch die
- permanente Anwesenheit des Kunden
- Nutzerakzeptanztests
- kundennutzenbezogene Releaseplanung im XP-Planspiel
- kurzen Releasezyklen
sichergestellt.
Beispiel für das Validieren von Benutzereingaben in PHP
Werden Eingaben eines Benutzers nicht validiert, kann es im weiteren Programmverlauf zu Fehlern kommen. Hier ein Beispiel für eine PHP-Skript, welches Formulardaten via HTTP-POST empfängt und die erste Zahl durch die zweite dividiert:
$zahl1 = $_POST['zahl1']; $zahl2 = $_POST['zahl2']; echo $zahl1 / $zahl2;
Hier hat der Entwickler einige Fehlerquellen nicht bedacht:
- Es kommt zu einem unerwarteten Ergebnis, wenn der Benutzer eines der beiden Textfelder nicht ausgefüllt hat
- Ebenso darf der Benutzer nur Zahlen in das Textfeld einfügen, da PHP aufgrund seiner dynamischen Typisierung den String womöglich falsch interpretiert
- Beträgt der Wert in zahl2 '0', schlägt die Division fehl (Teilen durch 0 nicht möglich)
Unter Aspekten der Prüfung müssen diese Punkte also ausgeschlossen werden, um ein fehlerfreies Arbeiten zu ermöglichen:
if(isset($_POST['zahl1']) && isset($_POST['zahl2'])) { // Sind überhaupt beide Textfelder ausgefüllt? $zahl1 = $_POST['zahl1']; $zahl2 = $_POST['zahl2']; if(is_numeric($zahl1) && is_numeric($zahl2)) { // Sind beide Angaben numerisch? if($zahl2 != 0) { // Ist zahl2 ungleich 0 ? echo $zahl1 / $zahl2; } else { echo 'Teilen durch 0 unmöglich!'; } } else { echo 'Beide Felder dürfen nur Zahlen enthalten'; } } else { echo 'Bitte füllen Sie beide Textfelder aus'; }
Abgrenzung zur Verifikation
Verifikation als Beweis der Korrektheit
Im Gegensatz zur Validierung bezeichnet die Verifikation in der Softwaretechnik den Nachweis, dass ein Softwareartefakt (Methode, Klasse, Modul, …) die korrekten Ergebnisse liefert. Wurde ein Softwareartefakt verifiziert, so ist sichergestellt, dass es korrekt funktioniert, d. h. das spezifizierte Verhalten aufweist.
Verifikation in der Softwarequalitätssicherung
In der Verifikation wird dagegen überprüft, ob ein System seiner formalen Spezifikation genügt. Die umgangssprachliche Formulierung lautet: "Bauen wir das Produkt richtig?". Es ist durchaus denkbar, dass eine Software ihre Spezifikation erfüllt, jedoch für den Kunden nur geringen Nutzen hat.
Methoden zur Verifikation umfassen:
- Codereviews
- formale Verifikation besonders sensibler Bereiche
- Verfahren des Softwaretests
Literatur
- H. Balzert: Lehrbuch der Software-Technik. Bd.2. Software-Management, Software-Qualitätssicherung, Unternehmensmodellierung. Spektrum Akademischer Verlag, Heidelberg 1998. ISBN 3-8274-0065-1
Weblinks
- Software-Engineering-Kompetenzzentrum (Ein vom Bundesministerium für Bildung und Forschung/BMBF gefördertes Portal)
- Eingabeprüfungen in PHP
Siehe auch
Kategorien:- Programmierung
- Qualitätssicherung
- Testen (Software)
Wikimedia Foundation.