Ursachen der Software-Probleme (3-5)


Verschiedene Zahlwelten

Reale Welt/MathematikDatenverarbeitung
Beliebig viele Zahlen Beschränkte Zahlenmenge
  z.B. -32768 bis 32767
  a <= x+y evtl. falsch
Beliebig genaue Zahlen Wenige Dezimalstellen
  z.B. 10*pi = 31.41591
  Rundungsfehler
Beliebig große Zahlen Kleine Exponenten
  z.B. 10^78
  (10^-50)/2 = 0
Dezimalzahlen Dualzahlen
  z.B. Umwandlung notwendig
  (1/5)*5 != 1
Kommutativ-, AssoziativgesetzAbarbeitungsreihenfolge wichtig
  z.B. (1-1) + 10^-7
  1 - (1-10^-7)
Eindeutigkeit Fehler in jedem Rechenschritt
  z.B. Aus cos(a) = cos(b)
  folgt nicht a = b

Ursache:

Architektur, Speicherplatz- und Laufzeit-Beschränkungen


Programmiersprachen

Unnatürliche Denkweisen
C Feldindizes von 0 bis N-1
PL/1 Feldabarbeitung: a = a/SUM(a)
APL Abarbeitung von rechts nach links: 2*3+4 => 14
Keine einheitlichen Schreibregeln
FORTRAN x = 1 aber DATA x/1/
PL/1 IF a=3 ... aber WHILE(a=3) ...
ISPF FIND X 1 aber FIND Y 1
Schlechte Lesbarkeit
APL 4 + 2*i5 gerade Zahlen von 6 bis 14
viele A(k) für Felder und Funktionen
Unerwartete Wirkungen
BASIC PRINT SQRT(4) => 0
FORTRANCALL UP(1) überschreibt Konstante 1
C if (a=b==5 && c=d==0) ...
Zuweisung an c nur, wenn a wahr ist
Beschränkungen
FORTRAN (66)A(k+m) nicht erlaubt
PL/1 Stringindizes nur bis 32767
Fehlinterpretationen
JCL//X DD DSN=A, DISP=(NEW,KEEP),


Randbedingungen:

Beschränkungen durch
Speicherplatz MS-DOS: 640 KB
Laufzeit Programmiertricks
Erstellungzeit Termindruck: "Bananensoftware"
Kosten Manpower
Hardware Zeichensatz, Farben, Auflösung
Anforderungen Realzeitprogramme: Timing
Tools (Editor, Compiler, Debugger, System)
Editor/Compiler Zusammenarbeit
Compilerfehler Funktionen; Optimierung
Sprachdesignfehler Falsche Abfragedefinition
Laufzeitprobleme Indexüberschreitung; Initialisierung
Debugger Neue Sprache
Betriebssystem Neue Sprache
Algorithmus
Formulierungsfehler a <= b <= c
Denkfehler (a+b+c)/3 = a statt a=b=c
Vereinfachungsfehler Linearisierung
Abbruchfehler
Auslöschung
Fehlerfortpflanzung


Ingolf Giese