TAV: Ergebnis
Fehlerkategorien
- 1. Fehler in der Spezifikation
- 2.Modellierungsfehler
- 3. Logik - Fehler
- 4. Fehler bei Simulation/Reviews/Tests
- 5. Fehler in Klassen oder Datentypen
- 6. Interoperabilitätsprobleme
- 7. Initalisierungsprobleme
- 8. Schedulingprobleme / Fehler in der Zeitdiskretisierung
- 9. Schnittstellenfehler
- 10. Protokollfehler
- 11. Ressourcenineffizienz
- 12. Konfigurationsfehler
- 13. Robustheitsfehler
- 14. Mangelhafte Dokumentation
- 15. Richtlinienverletzung
- 16. Mangelhafte Wartbarkeit
Ein Fehler, der durch eine falsche, fehlende, widersprüchliche oder unverständliche bzw. missverständliche Formulierung in einer Spezifikation entsteht. Dies kann sich auf verschiedene Arten von Spezifikationen im Softwarelebenszyklus beziehen, wie beispielsweise eine Anforderungs-, System-, Softwarearchitektur- oder Softwaredesign - spezifikation. Sogar eine Testspezifikation kann für einen Fehler verantwortlich sein, z.B. wenn durch bestimmte Normen vorgeschriebene Testschritte vergessen wurden oder falsch beschrieben sind. Ein Fehler in einer Anforderungs- oder Systemspezifikation zieht sich dabei durch alle nachfolgenden Spezifikationsdokumente und kann unter Umständen nur schwierig oder sehr spät durch dynamische Tests entdeckt werden. Deshalb sollte die Plausibilität wichtiger Spezifikationen durch analytische Maßnahmen wie Reviews überprüft werden.
Unter dem Begriff Modellierungsfehler werden alle Anomalien zusammengefasst die während der Softwareentwicklung bei der Modellbildung auftreten können. Fehler dieser Art haben erhebliche Auswirkungen auf den Entwicklungsprozess, da durch Schlussfolgerungen aus einem fehlerhaften Modell Fehler durch die gesamte folgende Entwicklung weiter getragen werden. Aus diesem Grund ist es erforderlich diese Art von Fehlern so früh wie möglich aufzudecken um einen eventuellen Schaden gering zu halten. Modellierungsfehler können durch Strukturanalysen der entsprechenden Modelle entdeckt werden. Des Weiteren ist anzumerken das bei einer Modellbasierten Softwareentwicklung der Großteil der Logikfehler bereits in dem Modell auftreten. Somit ist eine formale Verifikation und Validierung der Modelle vor der automatischen Codeerzeugung unabdingbar.
Ein Fehler in der Programmlogik, durch den in der Regel der eigentliche Ablauf eines Programms nicht verhindert wird. Das Programm funktioniert, liefert aber z.B. durch die Verwendung eines fehlerhaften Algorithmus falsche Ergebnisse. Logik - Fehler können in den verschiedensten Breichen eines Softwaresystems auftreten. Diese Art von Fehlern kann direkt in Berechnungen auftreten oder sich durch nicht geplantes Verhalten im Kontroll - oder Datenfluss zeigen. Des Weiteren treten logische Fehler häufig bei der Planung und Durchführung von Simulationen oder Reviews auf. Logik - Fehler sind in der Regel nur sehr schwer zu finden, da sie meistens nicht einen unspezifizierten Zustand oder durch einen Absturz zur Folge haben. Möglichkeiten vor allem Kontrollflussfehler zu entdecken bieten Überdeckungstests, Berechnungsfehler hingegen sind nur durch systematisches vergleichen der Systemausgaben mit den erwarteten Ausgaben zu entdecken.
Fehler die durch Ungenauigkeiten oder Nachlässigkeiten auftreten, wodurch die Ergebnisse dieser Verfahren unbrauchbar werden oder zu unbegründeten Änderungen führen. Bei Verfahren die zur Validierung oder Verifikation eines System herangezogen werden ist besondere Vorsicht angebracht. Jeder Fehler der hier auftritt, ob in der Durchführung oder Konzeptionell bedeutet einen potenziell übersehenen Fehler in dem untersuchten System. Für das Aufdecken von Fehlern dieser Art gibt es kein wohldefiniertes Vorgehen. Es ist angebracht durch ausreichende Sorgfalt während der Planung und Durchführung solche Fehler zu vermeiden, da ansonsten der gesamte Prozess in Frage zu stellen ist. Das hat zur Folge, dass Simulationen, Reviews als auch Tests vollständig neu durchzuführen sind.
Fehlerhafte Deklaration oder Transformation eines Typs bzw. der statischen Struktur von Klassen oder Datentypen.
Fehler bei der Zusammenarbeit unterschiedlicher Komponenten.
Fehler, die beim Initialisieren des eingebetteten Systems, einer Komponente des eingebetteten Systems, oder beim Initialisieren der Kommunikationsschnittstellen (Bus-Wakeup, Hardware-Treiber etc.) auftreten.
Schedulingfehler entstehen im relativen zeitlichen Ablauf mehrerer Prozesse, die sich Ressourcen wie Prozessor oder Peripherie teilen.
Timingfehler dagegen sind Fehler im absoluten zeitliche Ablauf des Systems. Im Vordergrund steht die Vermeidung solcher Fehler durch den Einatz bewährter und als korrekt bewiesener Verfahren und Algorithmen, wie Spooling, Virtualisierung von Ressourcen (z.B. des Prozessors durch das Scheduling des Betriebssystems), Mutex-Algorithmen, Lock-free Computing, Priority-Ceiling / -Inheritance etc.
Eigene Algorithmen können modelliert und auf der Modellebene getestet werden. Im besten Falle sind diese Tests erschöpfend, d.h. man führt formales Model-Checking durch. Model-Checking kann umgekehrt auch dazu verwendet werden, Ereignisfolgen für den Test der Implementierung zu gewinnen.
Im allgemeinem sind Dynamische Tests das am weitesten verbreitete Mittel, um Fehler im Scheduling zu finden.
Fehler die durch das falsche verwenden einer Klassen- oder Komponentenschnittstelle entstehen, was sich in einer syntaktischen oder semantischen Inkonsistenz zwischen Aufruf und Definition einer Komponente zeigt. Diese Art von Fehlern lassen sich in der Regel durch Integrationstests entdecken. Da diese Tests sehr kostspielig sind sollte schon während der Entwicklung des Systems auf ausreichende Sorgfalt wert gelegt werden um diese Art der Fehler möglichst zu vermeiden.
Fehler die aus einer falschen oder fehlerhaften Implementierung von Protokollen entstehen.
Das System erfüllt Laufzeit- bzw. Speicherkriterien nicht.
Fehler durch falsche Konfiguration des Builds oder des laufenden Systems.
Fehler die auftreten wenn ein System nicht tolerant auf Eingaben oder Ereignisse seiner Umwelt reagiert.
Erschwerte Nachvollziehbarkeit von Abläufen aufgrund mangelnder Erläuterungen.
Probleme die durch das nicht einhalten von Standards und internen Richtlinien entstehen.
Probleme zusammen die im Softwareentwicklungsprozess im Zusammenhang mit der Wartbarkeit von Software auftreten. Wartbarkeit gibt in diesem Kontext an mit welchem Aufwand und welcher Qualität Änderungen an einem Softwaresystem vorgenommen werden können.
Eine andere Fehlerklassifikation wurde von der IEEE ausgearbeitet und trägt den Titel "Standard classification for software anomalies".