3. Logik-Fehler
- 3.1. Fehler in Berechnungen
- 3.1.1. Falschen Algorithmus ausgewählt
- 3.1.2. Fehler in der Arithmetik
- 3.1.3. Fehler in der Zeigerarithmetik
- 3.1.4. Fehler bei String-Manipulation
- 3.1.5. Fehler bei Initialisierungen
- 3.1.6. Fehler in Ressourcenverwendung
- 3.2. Fehler im Kontrollfluss
- 3.2.1. Fehler im Prädikat
- 3.2.2. Fehler im Selektionskonstrukt
- 3.2.3. Fehler im Schleifenkonstrukt
- 3.2.4. Fehler in der Zustandslogik
- 3.2.5. Fehler bei der Behandlung von internen Ausnahmefällen
- 3.2.6. Methode mit falschem Objekt aufgerufen
- 3.2.7. Falscher Methodenaufruf durch Polymorphismus oder Überladen
- 3.2.8. Falsche Methode ausgewählt
- 3.2.9. Fehler bei parallelen Prozessen
- 3.2.10. Fehler in deklerativer Kontrollflusssteuerung
- 3.3. Fehler im Datenfluss/Objektzugriff
- 3.3.1. Datenflussanomalie
- 3.3.2. Dead Lock
- 3.3.3. Falsche Zugriffsart
- 3.3.4. Fehler durch umgehen der Zugriffsschutz
Fehler in Berechnung und Manipulation von Variablen, Attributwerten und Ausdrücken.
Ein Fehlerhafter oder nicht adäquater Algorithmus ausgewählt (aber korrekt implementiert). Beispiel: Nutzung des falschen Näherungsalgorithmus; Nutzung eines Algorithmus, dessen Voraussetzungen nicht erfüllt sind.
Ein Fehler in der Auswertung eines arithmetischen Ausdrucks (ausgenommen Zeigerarithmetik). Beispiel: Falscher Operator, falscher boolescher Ausdruck, fehlerhafte Berücksichtigung der Genauigkeit einer Berechnung.
Ein Fehler bei der expliziten Berechnung einer relativen Speicheradresse.
Ein Fehler in Verarbeitung eines Text-Attributs. Beispiele: Fehler bzgl. Textoperationen wie Verknüpfung, Einfügung, Konvertierung in Großschreibung oder String-Vergleich.
Eine Fehlerhafte Initialisierung von Variable oder Attribut. Beispiele: Falscher Konstantenwert, falscher Konstruktoraufruf.
Eine Fehlerhafte Freigabe von temporären Daten, Systemressourcen, etc.. Beispiele: Überlauffehler, fehlerhaftes Speicher-Management, fehlender Destruktor-Aufruf.
Fehler die bei der Steuerung des dynamischen Ablaufs eines Systems auftreten.
Fehlerhafte Logik in Verzweigungs- oder Schleifenend-Bedingung, die zu falschem Kontrollfluss führt. Beispiele: Ein falscher boolscher Operator oder die falsche Klammerung von Operatoren.
Fehler in IF- oder Select-Konstrukt. Beispiele: Ein fehlender Default-Fall, break vergessen oder fehlende Blockbildung (geschweifte Klammern vergessen).
Diese Fehlerart bezeichnet zum Beispiel einen fehlerhaften Initial- / End-wert bei FOR-Schleifen, falsche Inkrementierung oder fehlerhafte Blockbildung.
Fehlerhafte oder fehlende Initialisierung des Objektzustands, fehlerhafter Zustandsübergang.
Fehlerhafte Behandlung einer Exception, die von einer aufgerufenen Komponente des eigenen Systems gemeldet wird, z.B. nicht behandelte Exception, finally vergessen.
Der Namen der aufgerufenen Methode ist richtig, aber der Aufruf geht nicht an das beabsichtigte Objekt, z.B. Klasse mit gleichem Namen aus falschem Paket aufgerufen.
Der Name der aufgerufenen Methode ist richtig, aber der Aufruf geht an eine nicht beabsichtigte Implementierung der Methode. Dies kann durch dynamische Bindung oder durch falsche Parametertypen bzw. -Anzahl verursacht werden.
Mögliche Ursachen: irreführende Namensgebung der Methode; Name und Verantwortlichkeit der Methode nicht konsistent.
Fehler in der Verarbeitung von parallelen Prozessen, z.B. Race conditions.
Zum Beispiel bei einer Dialogablaufsteuerung per XML.
Fehler die zurück zu führen sind auf eine fehlerhafte Reihenfolge des Attribut- oder Objektzugriffs, ungeeignete Objektzustände und dynamische objektübergreifende Abläufe.
Fehlerhafte Sequenz von Attribut- bzw. Objektzugriffen, wie z.B. der zugriff auf eine Variable oder ein Attribut bevor es erzeugt wurde (Null-Pointer Exception) oder die zweimalige Wertzuweisung ohne Verwendung des ersten Wertes, sind typische Beispiele dieser Kategorie.
Sperr- oder Synchronisationsmechanismen die nicht korrekt verwendet werden, mit dem Resultat dass sich verschiedene Programmteile beim Ressourcenzugriff gegenseitig blockieren.
Der Zugriff auf ein Objekt erfolgt auf eine falsche Art, z.B. ein direkter Zugriff auf ein Objekt, für das indirekter Zugriff erforderlich ist (call-by-value anstatt call-by-reference).
Fehler im Einsatzfeld von Reflection (Introspektion), friend-Deklaration etc., z.B. der Zugriff auf eine Methode, die privat ist.
Beispiele:
In einem System wird eine Objekt zur temporären Verwendung erzeugt, dass nach dem erfüllen
seiner Aufgabe wieder vernichtet werden soll. Doch bei der Implementierung wurde der Aufruf des
Destruktors vergessen, wodurch es bei einem erneuten Versuch ein Objekt dieses Typs zu verwenden zu
einem Fehler kommt, da das Objekt noch existent ist und somit eine Erzeugung fehlschlägt.
→ Fehler in der Ressourcenverwendung
Eine Variable wird erzeugt und Initial mit einem Eingabewert des Nutzers belegt. Dieser Werte
wird im Folgenden Manipuliert und soll in dem weiteren Ablauf des Programms verwendet werden. Doch
bevor der Wert der Variable das nächste mal zum Einsatz kommt wird er irrtümlicher Weise erneut durch
den Eingabewert des Nutzers überschrieben, wodurch die Vorhergehende Berechnung verloren geht.
→ Datenflussanomalie