Warum funktionieren manche Softwareprogramme nicht richtig? Die Antwort auf diese Frage ist einfach: Softwareprogramme werden von Menschen entwickelt, und es gehört zur Natur eines Menschen, Fehler zu machen. Fehler in einem Programmcode, die auch Bugs genannt werden, sind immer ernst zu nehmen. Denn eine fehlerbehaftete Software funktioniert nicht wie erwartet, erfüllt nicht die Qualitätsanforderungen und führt nicht immer zu dem gewünschten Ergebnis.
Fehler in einer Komponente oder einem System sind kritisch und können zum Ausfall bestimmter Funktionen oder sogar des gesamten Systems führen. Hierbei muss man beachten, dass ein Softwareprodukt mehr als nur ein Programmcode ist und aus verschiedenen Komponenten besteht wie Installationsroutine, Dokumentation, Konfiguration, Schnittstellen, Datenbasis und Betriebsplattform. Je nach Art der Software muss das Softwareprodukt auch mit dem Anwender, den plattformeigenen Systemkomponenten und externen Systemen interagieren, um die funktionalen und Qualitätsanforderungen zu erfüllen.
Wie zeichnet sich ein Softwarebug aus?
Wenn die Software nicht das tut, was sie tun sollte – oder umgekehrt tut, was sie nicht tun sollte – deutet es mit großer Wahrscheinlichkeit auf einen Softwarebug hin. Selbst eine einfache Aufgabe wie im Internet eine geburtstagstorte bestellen ist ein komplexer softwarebasierter Prozess, der viele neue Technologien und Funktionen beinhaltet und integriert, damit Kunden ihre eigenen Tortenkreationen individuell gestalten und durch das Internet unkompliziert bestellen können. Der betriebliche Einsatz einer solchen Software setzt eine hohe Qualität und Zuverlässigkeit der verwendeten Technologien voraus.
Softwarefehler lassen sich grundsätzlich in zwei Kategorien aufteilen: Entweder wurden die Anforderungen vom Entwickler nicht korrekt verstanden und umgesetzt oder der Entwickler hat versehentlich Fehler beim Programmieren gemacht und die eigenen Fehler im Programmcode übersehen. Methodische und systematische Tests einer neuen Software – funktionale Tests, Komponententests, Integrationstests, Systemtests, Akzeptanztests – verhelfen dem Entwickler, alle möglichen Softwarefehler zu identifizieren und rechtzeitig zu beseitigen, und zwar bevor die Software bei Kunden oder im Wirkbetrieb zum Einsatz kommt. Jedem Anwender, der einmal einen Softwarebug erlebt hat und deshalb die Software nicht ordnungsgemäß nutzen konnte, ist klar, dass es besser ist, mögliche Bugs bei der Softwareentwicklung beheben zu lassen, als deren Auswirkung erst in der Anwendungsphase live zu erleben.
Ein Softwarefehler liegt vor, wenn sich das tatsächliche vom erwarteten Ergebnis unterscheidet. Jedoch nicht alle Fehler verursachen Abstürze und Ausfälle. Einige Fehler manifestieren sich nicht in irgendeiner Weise und bleiben unbemerkt, latent oder treten nur unter ganz bestimmten Bedingungen oder Anwendungsfällen auf. Ausfälle entstehen nicht nur durch einen defekten Programmcode, sondern auch durch Umgebungsbedingungen, falsche Daten oder inkorrekte Konfiguration. Auch Hardware- und Nutzungsfehler können einen normalen Betrieb verhindern, stören oder die Ergebnisse beeinträchtigen.
Mögliche Fehlerquellen
Es gibt verschiedene Fehlerquellen:
- Fehlerhafte Anforderungen oder Spezifikationen
- Fehler oder Mängel in Design und Konzept
- Anwendungs-/Nutzungsfehler
- Konfigurationsfehler
- Fehler in verwendeten Daten
- Kommunikations-/Netzwerkfehler
- kompromittierte Sicherheit (Hackerangriff, Computervirus, unautorisierte Manipulation an der Software)
- Folgefehler (Folgen von früheren Fehlern)
Softwarefehler können in verschiedenen Komponenten und Phasen auftreten. Die Qualität eines Softwareprodukts hängt direkt davon ab, ob, wann und wie Fehler identifiziert und behoben werden. Die Qualität ist messbar und zeigt anhand der Qualitätsmerkmale, wie vollständig die festgelegten Anforderungen erfüllt sind. Eine gute Softwarequalität spiegelt die Fähigkeit des Softwareentwicklers wieder, die festgelegten Anforderungen vollständig zu erfüllen und ein zuverlässiges und korrekt funktionierendes Softwareprodukt zu liefern.