Frage zu Programmierkonzepten
*Markus
- programmiertechnik
1 frankx1 Daniel Thoma
Hallo,
ich muss ein Programm schreiben, das die Eigenschaften eines Graphen bestimmen kann. Dabei stieß auf die Probleme bezüglich des Designs. Das Programm hat eine GUI (anders würde in diesem Fall die Realisierung auch schwer fallen) wobei ich mich auch am MVC-Konzept zu orientieren versuchte.
Theoretisch könnte aber anstatt der GUI auch eine mühselige Benutzereingabe sein. Durch die GUI treten Fälle schlicht gar nicht auf, die durch eine Benutzereingabe auftreten würden. Das sind z.B. Falscheingaben, da die GUI nur Buttons enthält, die man drücken kann, anstatt eines Konsolenprogramms, das eingetippte Werte einliest.
Wird die GUI verwendet, müssen Eingabewerte nicht überprüft werden, aber wenn irgendwann mal das Programm (vll. durch jmd. anderen) weiterverwendet wird, und die GUI weggelassen wird, wäre das eine schwerwiegende Sicherheitslücke.
Meine Frage dazu ist wie weit man bei der Programmierung eigentlich gehen muss, um solche Fälle abzudecken, aber gleichzeitig das Programm nicht unnötig aufgebläht wird?
Oder sollte man so programmieren, dass nur alle möglichen Sicherheitslücken des aktuellen Programms bestmöglich vermieden werden, und man nicht stattdessen den Fall "was wäre wenn...." berücksichtigt?
Mein Problem ist nämlich, dass ich immer zwischen dem "Was wäre wenn" und den eigentlich nur notwendigen Überprüfungen schwanke.
Danke im Voraus.
Markus
Hellihello
http://de.wikipedia.org/wiki/Extreme_programming. Darin auch "YAGNI" (you arent gonna need it) und "kiss" (keep it simple stupid).
Gruß,
frankx
Hallo *Markus,
In der Regel sollte man Gültigkeitsprüfungen nur an Schnittstellen nach außen anbringen. Außen kann nun aber "außen" bezüglich des Programms oder eines einzelnen Moduls sein. Bei Dir geht es nun wohl um den Fall "Modul". Speziell ein wiederzuverwendendes.
Wenn solche Prüfungen sicherheitsrelevant sind, d.h. falscheingaben zu irgendwelchen unerlaubten Zugriffen, Pufferüberläufen, sonstwas führen könnten, solltest Du sie auf jeden Fall einbauen.
Ein Programmierer, der ein Modul wiederverwendet, wird nicht alle Einschränkungen im Detail kennen, entweder, weil sie nicht dokumentiert sind, oder weil er die Dokumentation nicht gelesen hat ;-) und darüber hinaus wird er einfach Fehler machen.
Ich sehe jetzt aber nicht, was an einer Bibliothek für Analyse von Graphen Sicherheitsrelevant sein könnte. Wahrscheinlich kommt es einfach zu falschen Ergebnissen oder irgendwelchen unerwarteten Exceptions.
In solchen Fällen würde ich auf (aufwendige) Prüfungen verzichten. Wenn Du z.B. erstmal einen ganzen Graph durchlaufen musst, um irgend etwas zu prüfen, verschwendest Du an der Stelle in fast allen Fällen nur rechenzeit. In diesem Fall würde ich versuchen, die Eingabe größten Teils nicht zu prüfen und einfach eine dokumentierte Exception zu werfen, falls Du bei der Analyse dann auf den Fehler stößt.
Kann der Fehler nicht nebenbei erkannt werden, würde ich einfach akzeptieren, dass es dann ein sinnloses Ergebnis gibt. Das ist dann Aufgabe des anwendenden Programmierers, die notwendigen Bedingungen einzuhalten.
Die Antwort ist also: So viel Prüfung, dass nichts richtig kaputt geht, sich aber der Rechen- und Entwicklungsaufwand in sehr erträglichen Grenzen hält. ;)
Grüße
Daniel