Heiner KückerTypische Fehler-Quellen bei der Softwareentwicklung |
|
Home Java-Seite Alaska-XBase++-Seite Projekte Philosophien Techniken Konzepte Artikelsystematik Semantisches_Netz Flexible_Columns Weiterentwicklung_Java Fehlerquellen Längencodierung Encoding Programming_by_Contract TimelineStructure Datenstruktur für Kalender oder Terminplaner Sudoku Kontakt / Impressum Links SiteMap Letzte Aktualisierung: 02.12.2001 |
FehlerquellenDie meisten Programm-Fehler lassen sich auf einige wenige Ursachen zurückführen. Diese will ich hier klassifizieren. CodierungEine typische Fehlerquelle sind missverstandene, falsch interpretierte beziehungsweise nicht oder falsch dokumentierte Codierungen. Nehmen wir eine Methode mit einem int-Parameter an. Der int-Parameter kann ein
WertebereichFehler durch Nichbeachtung des möglichen Wertebereichs einer Variablen / eines Parameters gehören eigentlich mit zur Fehler-Klasse Codierung.
Seiteneffekte
Viele Programmfehler beruhen auf Seiteneffekten, die nicht
dokumentiert sind, nicht überblickt werden oder gar nicht
beabsichtigt sind.
algorithmische Asymmetrien
Viele Abläufe in Programmen verlangen eine Vorbereitung (Initialisierung),
eigentliche Ausführung und Ende-Bandlung(Rücksetzen).
redundante Speicherung/redundante Zustände
Es kann vorkommen, daß Daten oder Programm-Stati mehrfach gespeichert
werden. Wird es vergessen, immer alle Änderungen auf alle Exemplare
anzuwenden, kann es passieren, daß unterschiedliche Daten/Stati gelesen
werden.
nicht formulierte oder nicht verstandene Anforderungs-SpezifikationWenn dem Entwicklerteam bestimmte Anforderungen nicht bekannt sind oder falsch verstanden wurden, entsteht falsche Software. Hier hilft die Einbindung des fachlichen Anwenders, häufige Tests und inkrementelle Vorgehensweise.
unabgestimmte ÄnderungenIch habe ein Projekt erlebt, in dem die Struktur der Backend-Datenbank häufig ohne Abstimmung oder Kommunikation zum Web-Team geändert wurde. Dadurch traten immer wieder Fehler auf. Dagegen helfen neben organisatorischen Maßnahmen Test-Programme gegen die Meta-Daten der Datenbank.
Mischung von Anwendungscode mit technischen AspektenWenn das Framework, auf dem ein Projekt aufbaut, notwendige Features nicht unterstützt, neigt man schnell dazu, diese Features gemischt mit Anwendungscode zu implementieren. Beispiele dafür sind Transaktions-Massnahmen (optimistisches Locking), Masken-Reset (Undo-Funktionalität) Caching (Cache-Timeout, LRU-Mechanismus, Synchronisation Cache und Persistenzspeicher) oder Thread-Synchronisation. Dies ist prinzipiell fehleranfällig und verschlechtert den Code in der Art, dass weder die Fachlichkeit noch die technische Infrastruktur flexibel zu warten sind. Werden die fehlenden Features später im Framework nachgearbeitet, so entsteht ein Anwendungscode, der auf unterschiedlichen API-Versionen aufbaut. Die Folge sind Fehler und hohe Kosten. Deshalb sollte die Entwicklung eines Frameworks immer der Anwendungsprogrammierung voraus sein. |