Es muss ein 3 stufiges Sicherheitsnetz geben:
1.) schon bei den Controls sollte man
ungültige Benutzereingaben abfangen und gar nicht erst zulassen
Beispiel: verwendet man einen TDateTimePicker, kann man gar kein ungültiges Datum eingeben; im Gegensatz zu einem TEdit
Wenn man ein Editfeld hat, dass nur eine Zahl aufnehmen soll, kann man z.B. nur Ziffern als Eingabe zulassen oder TMaskEdit verwenden.
2.)
Exceptions werden verwendet für alle Fehler, mit denen im Programmablauf gerechnet wird.
Dateien, die nicht geöffnet werden können. Datenbankabfragen, die schiefgehen können, ungültige/fehlende Eingabewerte,
u.s.w.
Dabei sollte man darauf achten, eine möglichst genaue Fehlermeldung zu produzieren.
Von der
VCL werden manchmal sehr allgemeine Exceptions generiert (z.B. '' ist kein gültiger Integerwert | ungültige Variantumwandlung)
Diese allgemeinen Exceptions taugen natürlich gar nicht zur Fehlereingrenzung.
Deshalb sollte man regelmäsig
Exception abfangen, mit Informationen anreichern und neu auslösen:
Delphi-Quellcode:
// Beispiel
try
BerechneSteuer(IdKunde);
except
on E:
Exception do
begin
// eine informative Meldungen erzeugen
E.
Message := Format('
Fehler bei der Steuerberechnung des Kunden %d'#13#10, [IdKunde]) +
E.
Message;
// WICHTIG: die orginale Message anhängen.
raise;
// Exception neu auslösen
end;
end;
3.) der letzte Rettungsanker sind
Assertions.
Sie werden verwendet, ob um das Programm
vor eigenen Programmierfehlern zu schützen.
Wenn man z.B. eine Funktion hat, die ein Objekt entgegennimmt, sollte man mit Assert sicherstellen,
dass nicht durch einen Programmierfehler ein nil-Zeiger übergeben wird.
Man fängt hier also Fehler ab, die eigentlich niemals auftreten dürften.
Es gilt die Devise: Vertrauen ist gut, Kontrolle ist besser.
Jedes Programm sollte eine Testphase durchlaufen.
Sobald eine Assertion auftritt, muss der Programmierer alles stehen und liegen lassen und die Ursache herausfinden!!
Tritt eine Assertion beim Test oder beim Endbenutzer auf, gibt es zwei Möglichkeiten:
a.) das Programm hat einen Bug
b.) der Programmierer hat eine Assertion verwendet, wo eigentlich eine
Exception nötig gewesen wäre
In beiden Fällen ist eine Programmänderung notwendig.
Wenn das Programm gut ausgereift ist, dann darf man die Assertions in den Projektoptionen abschalten
und erhält das ein etwas schnelleres und kleineres Programm.