Unterschied zwischen robuster und defensiver Programmierung?

2 Antworten

Robust programmiert, wer eine robuste Programmiersprache verwendet (z.B. Java oder C# statt Python).

Defensiv programmiert, wer in sein Programm sog. Defensivcode einbaut. Man versteht darunter, gelegentlich abzufragen, ob eine Variable auch tatsächlich Werte bekommen hat, wie man sie erwartet. Wenn nicht, sorgt man dafür, dass diese Situation im Trace File gut beschrieben und das Programm abgebrochen wird.

Wer defensiv programmiert in diesem Sinne, kommt bei komplexeren Programmen sehr viel schneller zu wirklich gut funktionierenden Versionen. Letzlich kann das darüber entscheiden, ob man als Entwickler von Software Gewinn oder Verlust macht.

Ich sehe den Unterschied wiefolgt:

Robuste Programmierung bedeutet, an Stellen, wo Exceptions auftreten können, diese abzufangen und so zu behandeln, dass das Programm im Idealfall weitergeführt und im Zweifel geordnet und ohne Datenverluste beendet werden kann.

Defensive Programmierung bedeutet, Quellen für eventuell auftretende Exceptions bereits im Vorhinein zu überdenken und durch entsprechende Abfragen dafür zu sorgen, dass Exceptions eventuell gar nicht auftreten.

Beispiel: Funktion soll einen per Parameter übergebenen Dateinamen verwenden und die Datei einlesen.

Robuste Programmierung wäre: Ein try-catch drumrum zu machen und dann entweder zu sagen ging oder ging nicht.

Defensive Programmierung wäre, beispielsweise erstmal zu prüfen, ob eine Datei mit diesem Namen überhaupt existiert und dann in dem Fall, dass es sie nicht gibt, das Einlesen gar nicht erst zu versuchen und so die Exception zu vermeiden.