www.wikidata.de-de.nina.az
Programmfehler oder Softwarefehler oder Software Anomalie haufig auch Bug englisch genannt sind Begriffe aus der Softwaretechnik mit denen fur Software Systemkomponenten Abweichungen zu einem geforderten oder gewunschten Sollzustand bezeichnet werden Diese konnen auftreten wenn z B eine bestimmte Festlegung der Spezifikation fehlerhaft ist oder falsch umgesetzt wurde und fuhrt zunachst zu einem internen Fehlerzustand im Programm der wiederum dazu fuhrt dass bei der Programmausfuhrung ein unerwartetes Verhalten oder Ergebnis auftritt Zur moglichst vollstandigen Erkennung und Behebung von Programmfehlern wird ublicherweise in den Prozessen der Softwareentwicklung d h vor dem tatsachlichen produktiven Einsatz von Software die Projektphase Softwaretest durchlaufen wobei eine Validierung durchgefuhrt wird Dabei auftretende Fehler sind ublich und sie zu finden ist Ziel des Testens 1 wahrend Fehler im laufenden Betrieb je nach Fehlerwirkung u U kritische Anomalien Storungen darstellen In der Praxis treten Computerprogramme ohne Programmfehler selten auf Als Qualitatsmerkmal fur Programme kennt man u a die Fehlerdichte Sie bezeichnet die Anzahl an Fehlern pro 1 000 Zeilen Code Kilo Source Lines of Code bzw je Function Point Als spezielle Instrumente zur Suche nach den Ursachen fur Fehler in Programmen sind sogenannte Debugger hilfreich mit denen ein Programm Schritt fur Schritt ausgefuhrt und kontrolliert werden kann Bei besonders kritischer Software z B Flugzeugsteuerung wird mitunter eine aufwendige formale Verifikation durchgefuhrt Zur Erfassung und Dokumentation werden sogenannte Bugtracker wie Bugzilla oder Mantis eingesetzt Diese nehmen sowohl Fehlerberichte als auch Verbesserungsvorschlage und Wunsche sog Feature Requests der Nutzer oder allgemeine Vorgange auf Siehe auch Fehlermanagement Der Vorgang des Beseitigens eines Programmfehlers wird umgangssprachlich Bugfixing genannt Das Ergebnis der Verbesserung wird in der Fachsprache als Bugfix Patch oder Softwarepatch bezeichnet Inhaltsverzeichnis 1 Definitionen 2 Bug als Synonym fur Programmfehler 3 Arten von Programmfehlern 4 Wirtschaftliche Bedeutung 5 Vermeidung Auffindung und Behebung von Programmfehlern 5 1 Wahrend der Planung 5 2 In der Analysephase 5 3 In der Entwurfsphase 5 4 Bei der Programmierung 5 5 Beim Testen 5 6 Im Betrieb 6 Fehlerfreiheit 7 Klassifizierung von Fehlern 8 Folgen von Programmfehlern 9 Reproduzierbarkeit von Programmfehlern 10 Weiterfuhrende Themen 11 Literatur 12 Weblinks 13 EinzelnachweiseDefinitionen BearbeitenEin Programm oder Softwarefehler ist angelehnt an die allgemeine Definition fur Fehler Nichterfullung einer Anforderung 2 Konkret definiert sich der Fehler danach als Abweichung des IST beobachtete ermittelte berechnete Zustande oder Vorgange vom SOLL festgelegte korrekte Zustande und Vorgange wenn sie die vordefinierte Toleranzgrenze die auch 0 sein kann uberschreitet Nach ISTQB 3 bildet sich der Begriff Fehler aus den folgenden Zusammenhangen eine Fehlhandlung englisch Error die menschliche Handlung die zu einem Fehlerzustand fuhrt nach IEEE 610 dd fuhrt zu einem Fehlerzustand engl Defect Defekt innerer Fehlerzustand in einer Komponente oder einem System der eine geforderte Funktion des Produktes beeintrachtigen kann dd der eine Fehlerwirkung engl Failure nach sich ziehen kann Die Manifestierung eines inneren Fehlers bei der Ausfuhrung des Programms als ein inkorrektes Verhalten oder Resultat bzw als Versagen des Systems dd Beispiel Division durch null Fehlhandlung Null als moglicher Eingabewert wurde nicht gepruft ausgeschlossen Fehlerzustand Das Programm ist ggf unbemerkt fehlerhaft Fehlerwirkung Bei Eingabe eines Nullwerts tritt wahrend der Ausfuhrung des Befehls ein Laufzeitfehler auf Als Synonym fur Fehler oder erganzend dazu sind auch Ausdrucke wie Problem Defekt Abweichung Anomalie Mangel gebrauchlich Damit kann die Fehlerschwere auch begrifflich unterschieden werden z B die Verletzung von Vorschriften zum Programmierstil die Lieferung falscher Ergebnisse oder ein Programmabbruch Bug als Synonym fur Programmfehler Bearbeiten nbsp Logbuch Seite des Mark II Aiken Relay Calculator mit dem ersten bug 1947 Das Wort bug bedeutet im Englischen Schnabelkerf Wanze und umgangssprachlich landlebender Gliederfusser oder insektenartiges Ungeziefer 4 Im Jargon amerikanischer Ingenieure ist seit dem spaten 19 Jahrhundert die Bedeutung Fehlfunktion oder auch Konstruktionsfehler bezeugt diesem Wortgebrauch liegt die scherzhafte Vorstellung zugrunde dass sich kleines Krabbelvieh am Getriebe der Leitung usw zu schaffen macht Die altesten Belege sind zwei Briefe Thomas Edisons aus dem Jahr 1878 an William Orton den Prasidenten der Telegraphiegesellschaft Western Union bzw Tivadar Puskas den Erfinder der Telefonzentrale in denen es heisst I did find a bug in my apparatus but it was not in the telephone proper It was of the genus callbellum 5 Ich fand in der Tat einen Bug in meinem Apparat allerdings nicht im Telefon selbst Er war von der Gattung callbellum Thomas Edison in einem Brief an William Orton datiert auf den 3 Marz 1878 6 sowie The first step in all of my inventions is an intuition and comes with a burst then difficulties arise this thing gives out and it is then that Bugs as such little faults and difficulties are called show themselves Der erste Schritt bei all meinen Erfindungen ist ein intuitiver Gedanke der in einem Ausbruch kommt doch dann tauchen Schwierigkeiten auf das Ding funktioniert nicht mehr und es ist dann dass Bugs wie solche kleinen Fehler und Schwierigkeiten genannt werden sich zeigen Thomas Edison in einem Brief an Tivadar Puskas datiert auf den 18 November 1878 Edison ist zwar nicht Erfinder aber immerhin Kronzeuge fur eine schon damals kursierende Bedeutung des Wortes Die Verknupfung des Begriffs mit Computern geht moglicherweise auf die Computerpionierin Grace Hopper zuruck Sie verbreitete die Geschichte dass am 9 September 1945 eine Motte in einem Relais des Computers Mark II Aiken Relay Calculator zu einer Fehlfunktion fuhrte Die Motte wurde entfernt in das Logbuch geklebt und mit folgender Notiz versehen First actual case of bug being found deutsch Das erste Mal dass tatsachlich ein Ungeziefer gefunden wurde Die Legende der Begriffsfindung halt sich hartnackig obwohl die Logbuch Eintragung gerade darauf verweist dass der Begriff schon zuvor gangig war Zudem irrte Grace Hopper sich hinsichtlich des Jahres Der Vorfall ereignete sich tatsachlich am 9 September 1947 Die entsprechende Seite des Logbuchs wurde bis Anfang der 1990er Jahre am Naval Surface Warfare Center Computer Museum der US Marine in Dahlgren Virginia aufbewahrt Zurzeit befindet sich diese Logbuchseite mit der Motte am Smithsonian Institute 7 Arten von Programmfehlern BearbeitenIn der Softwaretechnik siehe auch 8 wird zwischen folgenden Typen von Fehlern in Programmen unterschieden Lexikalische Fehler sind nicht interpretierbare Zeichenketten also undefinierte Bezeichner Variablen Funktionen Literale Syntaxfehler sind Verstosse gegen die grammatischen Regeln der benutzten Programmiersprache zum Beispiel die falsche Verwendung reservierter Symbole z B fehlende Klammern Typkonflikte falsche Anzahl Parameter Lexikalische und Syntaxfehler verhindern in der Regel die Kompilierung des fehlerhaften Programms und werden daher fruhzeitig erkannt Bei Programmiersprachen die sequentiell interpretiert werden bricht das Programm ublicherweise erst an der syntaktisch lexikalisch fehlerhaften Stelle ab Semantische Fehler sind Fehler in denen eine programmierte Anweisung zwar syntaktisch fehlerfrei aber inhaltlich trotzdem fehlerhaft ist zum Beispiel Verwechslung des Befehlscodes syntaktisch nicht erkennbare falsche Parameterreihenfolge Logische Fehler bestehen in einem im Detail falschen Problemlosungsansatz beispielsweise auf Grund eines Fehlschlusses einer falsch interpretierten Spezifikation oder einfach eines Versehens oder Schreibfehlers Beispiele plus statt minus kleiner statt kleiner gleich usw Die Toleranz gegenuber solchen Fehlern und die diese einschranken sollende Attributgrammatik von Programmiersprachen wie etwa bei der Zuweisungskompatibilitat von Datentypen sind je nach verwendeter Programmiersprache sehr unterschiedlich ausgepragt und konnen schwierig zu uberschauende Sicherheitslucken und Programmabsturze verursachen Designfehler sind Fehler im Grundkonzept entweder bei der Definition der Anforderungen an die Software oder bei der Entwicklung des Softwaredesigns auf dessen Grundlage das Programm entwickelt wird Fehler bei der Anforderungsdefinition beruhen oft auf mangelnder Kenntnis des Fachgebietes fur das die Software geschrieben wird oder auf Missverstandnissen zwischen Nutzern und Entwicklern Fehler direkt im Softwaredesign hingegen sind oft auf mangelnde Erfahrung der Softwareentwickler unstrukturierte Programmierung oder auf Folgefehler durch Fehler in der Anforderungsspezifikation zuruckzufuhren In anderen Fallen ist das Design historisch gewachsen und wird mit der Zeit unubersichtlich was wiederum zu Designfehlern bei Weiterentwicklungen des Programms fuhren kann Oftmals wird ohne Vorliegen eines richtigen Konzepts direkt programmiert was dann insbesondere bei hoherem Komplexitatsgrad der Software zu Designfehlern fuhren kann Sowohl fur Fehler in der Anforderungsdefinition als auch im Softwaredesign kommen daruber hinaus vielfach Kosten oder Zeitdruck in Frage Ein typischer Designfehler ist die Codewiederholung die zwar nicht unmittelbar zu Programmfehlern fuhrt aber bei der Softwarewartung der Modifikation oder der Erweiterung von Programmcode sehr leicht ubersehen werden kann und dann unweigerlich zu unerwunschten Effekten fuhrt Fehler im Bedienkonzept Das Programm verhalt sich anders als es einzelne oder viele Anwender erwarten obwohl es technisch an sich fehlerfrei arbeitet Sonstige Fehlerbegriffe Laufzeitfehler Wahrend die vorgenannten Fehler ein tatsachlich fehlerhaftes Programm bedeuten das entweder nicht ausfuhrbar ist oder fehlerhafte Ergebnisse liefert kann auch ein korrektes Programm bei seiner Ausfuhrung zu Fehlern fuhren Laufzeitfehler sind alle Arten von Fehlern die auftreten wahrend das Programm abgearbeitet wird Je nach Situation kann die Ursache beispielsweise eine unpassenden Programmumgebung sein z B eine falsche Betriebssystem Version falsche Parameter beim Aufruf des Programms auch als Unterprogramm falsche Eingabedaten etc Laufzeitfehler konnen sich auf die unterschiedlichsten Arten zeigen Oftmals zeigt das Programm ungewunschtes Verhalten im Extremfall wird die Ausfuhrung des Programms abgebrochen Absturz oder das Programm geht in einen Zustand uber in dem es keine Benutzereingaben mehr akzeptiert Einfrieren Hangen source source source source source source source source source Auswirkungsbeispiel eines Programmfehlers Wird in Programmiersprachen ohne automatische Speicherbereinigung etwa C oder C Speicher nach der Verwendung nicht mehr freigegeben so wird durch das Programm auf Dauer immer mehr Speicher belegt Diese Situation wird Speicherleck genannt Aber auch in Programmiersprachen mit automatischer Speicherbereinigung etwa Java oder C konnen ahnliche Probleme auftreten wenn zum Beispiel Objekte durch systemnahe Programmierung unkontrolliert angesammelt werden Noch kritischer sind versehentlich vom Programmierer freigegebene Speicherbereiche die oft trotzdem noch durch hangende Zeiger referenziert werden da dies zu vollig unkontrolliertem Verhalten der Software fuhren kann Manche Laufzeitumgebungen erlauben daher solche programmierbaren Speicherfreigaben grundsatzlich nicht Des Weiteren gibt es auch Bugs im Zusammenspiel mit anderen Programmen Fehler im Compiler der Laufzeitumgebung oder sonstigen Bibliotheken Solche Fehler sind meist besonders schwer nachzuvollziehen da das Verhalten des Programms in solchen Fallen nicht seiner Semantik entspricht Insbesondere von Compiler und Laufzeitumgebung wird daher besondere Zuverlassigkeit erwartet Ein Regressionsbug Regression bedeutet Ruckschritt ist ein Fehler der erst in einer spateren Programmversion auftaucht Dies sind haufig unerkannte Nebeneffekte von Fehlerbehebungen oder Programmanderungen an anderer Stelle Fehler als Folge physikalischer Betriebsbedingungen Verschiedenste Begebenheiten wie elektromagnetische Felder Strahlen Temperaturschwankungen Erschutterungen usw konnen auch bei sonst einwandfrei konfigurierten und innerhalb der Spezifikationen betriebenen Systemen zu Fehlern fuhren Fehler dieses Typs sind sehr unwahrscheinlich konnen nur sehr schwer festgestellt werden und haben bei Echtzeitanwendungen unter Umstanden fatale Folgen Sie durfen aber aus statistischen Grunden nicht ausgeschlossen werden Das beruhmte Umfallen eines Bits im Speicher oder auf der Festplatte auf Grund der beschriebenen Einflusse stellt zum Beispiel solch einen Fehler dar Da die Auswirkungen eines solchen Fehlers z B Absturz des Systems oder Boot Unfahigkeit weil eine Systemdatei beschadigt wurde von denen anderer Programmfehler meist nur sehr schwer unterschieden werden konnen vermutet man oft eine andere Ursache zumal ein solcher Fehler haufig nicht reproduzierbar ist Programmfehler vs Softwarefehler Soweit diese beiden Bezeichnungen nicht als Synonyme verstanden werden kann entsprechend dem Bedeutungsunterschied zwischen Computerprogramm und Software auch fur Softwarefehler eine breitere Definition zutreffen Danach waren etwa auch Fehler oder Mangel in der Dokumentation Softwarefehler unabhangig davon ob sie zu fehlerhaften Programmen fuhrten Auch durften fehlerhafte Daten auch dieser Begriff wird je nach Definition der Software zugerechnet kaum als Programm sondern wenn uberhaupt hochstens als Softwarefehler gelten Technische Schulden und Qualitatsmangel Gemass ISO 9000 ist ein Fehler die Nichterfullung einer Anforderung Anforderungen wiederum werden definiert als Erfordernis oder Erwartung das oder die festgelegt ublicherweise vorausgesetzt oder verpflichtend ist 2 Dazu gehort auch das Nichtvorhandensein von technischen Schulden oder sonstigen Qualitatsmangeln Bei manchen Projekten wird nicht der Begriff Bug verwendet sondern man spricht zum Beispiel von Metabugs bei denen ein Bug ein Element einer Aufgabenliste darstellt Bei einigen Projekten spricht man stattdessen auch von Issues Angelegenheiten da sich dieser Ausdruck nicht auf Programmfehler beschrankt Konkrete Beispiele von Fehlern mit medial besonderer Wirkung finden sich in der Liste von Programmfehlerbeispielen Wirtschaftliche Bedeutung BearbeitenSoftwarefehler sind weit mehr als nur argerliche Begleitumstande fur Softwareentwickler sondern sie verursachen aus betriebswirtschaftlicher und okonomischer Sicht erhebliche Kosten Die IX Studie 1 2006 9 zeigte z B folgende fur Deutschland ermittelte Werte Ca 84 4 Mrd Euro betragen die jahrlichen Verluste durch Softwarefehler in Mittelstands und Grossunternehmen Ca 14 4 Mrd Euro jahrlich 35 9 des IT Budgets werden fur die Beseitigung von Programmfehlern verwendet Ca 70 Mrd Euro betragen die Produktivitatsverluste durch Computerausfalle aufgrund fehlerhafter SoftwareIn derselben Studie wird auch die Entwicklung der Softwarequalitat fur die Zeit von 2002 bis 2004 untersucht mit dem Ergebnis die Quote gescheiterter Projekte stieg von 15 auf 18 die Quote erfolgreicher Projekte sank von 34 auf 29 die Quote der Projekte mit Kostenuberschreitung stieg von 43 auf 56 die Quote der Projekte mit Terminuberschreitung stieg von 82 auf 84 die Quote der Projekte mit passender Funktionalitat sank von 67 auf 64 Besonders viele Misserfolge zeigt ein Bericht des obersten Rechnungshofs fur neue Projekte 1985 bei der US Bundesverwaltung 10 wonach 27 der bezahlten Software nie geliefert wurden 52 nie funktionierten 18 erst nach einer aufwandigen Sanierung zum Einsatz kamen Lediglich 3 der in Auftrag gegebenen Software erfullten die vereinbarten Vertragsbedingungen Die Standish Group International stellte fest 11 Durchschnittlich uberschreiten Projekte die ursprunglich geplanten Projektkosten um 89 die geplanten Termine um 222 Als Grunde fur Projektabbruche aufgrund schlechter Softwarequalitat ermittelte Ewusi Menach folgende Faktoren 10 Unklare Zielsetzung Falsche Projektteambesetzung Unzulangliche Qualitatssicherung Fehlendes technisches Know how Unzureichende Berucksichtigung der Ausgangssituation Mangelnde Beteiligung der AnwenderDie Kosten fur Debugging und Beseitigung bei in spateren Projektphasen bzw in Produktion gefundenen Fehlern ubersteigen ublicherweise die Kosten fur das Verhindern und Finden von Fehlern 12 Studien belegen daher dass es oft gunstiger ist qualitativ hochwertige Software zu entwickeln als qualitativ minderwertige 13 Vermeidung Auffindung und Behebung von Programmfehlern BearbeitenGenerell gilt 14 Je fruher im Entwicklungsprozess der Fehler auftritt und je spater er entdeckt wird umso aufwandiger wird es den Fehler zu beheben Im Schnitt rechnet man mit Kosten von 16 000 Dollar je in Produktion gefundenem Bug wahrend die Kosten fur das Verhindern von Fehlern wahrend der Designphase bei 25 Dollar liegen 15 Wahrend der Planung Bearbeiten Am wichtigsten ist eine gute und geeignete Planung des Entwicklungsprozesses Hierfur gibt es bereits etliche Vorgehensmodelle aus denen ein geeignetes ausgewahlt werden kann In der Analysephase Bearbeiten Ein Problem ist dass die Korrektheit eines Programms nur gegen eine entsprechend formalisierte Spezifikation bewiesen werden kann Eine solche Spezifikation zu erstellen kann jedoch im Einzelfall ahnlich kompliziert und fehlertrachtig sein wie die Programmierung des Programms selbst In der Entwurfsphase Bearbeiten Softwareexperten sind sich daruber einig dass praktisch jedes nicht triviale Programm Fehler enthalt Deshalb wurden Techniken entwickelt mit Fehlern innerhalb von Programmen tolerant umzugehen Zu diesen Techniken gehoren defensives Programmieren Ausnahmebehandlung Redundanz und die Uberwachung von Programmen z B durch Watchdog Timer sowie die Plausibilisierung des Programmes wahrend der Entwicklung und der Daten wahrend des Programmablaufs Bei der Programmierung Bearbeiten Die Entwicklung immer abstrakterer Programmierparadigmen und Programmierstile wie die funktionale Programmierung objektorientierte Programmierung Design by contract und die aspektorientierte Programmierung dienen unter anderem der Fehlervermeidung und Vereinfachung der Fehlersuche Aus den zur Verfugung stehenden Techniken fur das Problem ist eine geeignete auszuwahlen Ein wichtiger Punkt hierbei ist aber auch dass fur das jeweilige Paradigma erfahrene Programmierer zur Verfugung stehen mussen sonst entsteht oft der gegenteilige Effekt Ferner ist es sehr nutzlich von den Entwicklungswerkzeugen moglichst viele Aufgaben der Fehlervermeidung zuverlassig und automatisch erledigen zu lassen was z B mit Hilfe von strukturierter Programmierung erleichtert wird Dies betrifft zum einen bereits Kontrollen wie Sichtbarkeitsregeln und Typsicherheit sowie die Vermeidung von Zirkelbezugen die bereits vor der Ubersetzung von Programmen vom Compiler ubernommen werden konnen aber auch Kontrollen die erst zur Laufzeit durchgefuhrt werden konnen wie zum Beispiel Indexprufung bei Datenfeldern oder Typprufung bei Objekten der objektorientierten Programmierung Daruber hinaus wird eine Reihe fortgeschrittener Anwendungen angeboten die entweder den Quellcode oder den Binarcode analysieren und versuchen haufig gemachte Fehler automatisiert zu finden In diese Kategorie fallen etwa Programme zur Ausfuhrungsuberwachung die ublicherweise fehlerhafte Speicherzugriffe und Speicherlecks zuverlassig aufspuren Beispiele sind das frei erhaltliche Tool Valgrind und das kommerzielle Purify Eine weitere Kategorie von Prufprogrammen umfasst Anwendungen die Quell oder Binarcode statisch analysieren und etwa nicht geschlossene Ressourcen und andere Probleme auffinden und melden konnen Darunter fallen etwa FindBugs Lint und Splint Beim Testen Bearbeiten Es ist durchaus sinnvoll dass der Test vor dem eigentlichen Programm entwickelt wird Damit wird erreicht dass nicht ein Test geschrieben wird der zu dem bereits geschriebenen Programm passt Dies kann durch Ermittlung von Testfallen anhand der Spezifikation bereits wahrend der Analyse bzw Designphase erfolgen Die Ermittlung von Testfallen in diesem fruhen Stadium der Softwareentwicklung ermoglicht zudem die Prufung der Anforderungen an das Programm auf Testbarkeit und Vollstandigkeit Die anhand der Spezifikation ermittelten Testfalle sind die Basis fur die Abnahmetests die kontinuierlich uber den gesamten Entwicklungsprozess verfeinert und z B fur eine Testautomatisierung vorbereitet werden konnen Manche Softwareanbieter fuhren Testphasen teilweise offentlich durch und geben Betaversionen heraus um die unvorhersehbar vielfaltigen Nutzungsbedingungen verschiedener Anwender durch diese selbst testen und kommentieren zu lassen Im Betrieb Bearbeiten Tritt ein Fehler wahrend des Betriebs auf so muss versucht werden seine Auswirkungen moglichst gering zu halten und seinen Wirkungskreis durch Schaffung von Schutzwallen oder Sicherungen einzudammen Dies erfordert zum einen Moglichkeiten der Fehlererkennung und zum anderen adaquat auf einen Fehler reagieren zu konnen Ein Beispiel zur Fehlererkennung zur Laufzeit eines Computerprogrammes sind Assertions mit deren Hilfe Bedingungen abgefragt werden die gemass Programmdesign immer erfullt sind Weitere Mechanismen sind Ausnahmebehandlungen wie Trap und Exception Durch die Implementierung von Proof Carrying Code kann die Software zur Laufzeit ihre Zuverlassigkeit in gewissem Rahmen gewahrleisten und sicherstellen Fehlerfreiheit BearbeitenVollige Fehlerfreiheit fur Software die eine gewisse Komplexitatsgrenze uberschreitet ist praktisch weder erreich noch nachweisbar Mit steigender Komplexitat sinkt die Uberblickbarkeit insbesondere auch wenn mehrere Personen an der Programmierung beteiligt sind Selbst teure oder vielfach getestete Software enthalt Programmierfehler Man spricht dann bei gut brauchbaren Programmen nicht von Fehlerfreiheit sondern von Robustheit Eine Software gilt dann als robust wenn Fehler nur sehr selten auftreten und diese dann nur kleinere Unannehmlichkeiten mit sich bringen und keine grosseren Schaden oder Verluste verursachen In Spezialfallen ist ein Beweis der Fehlerfreiheit bzgl der festgelegten Anforderungen eines Programms moglich Insbesondere in Bereichen in denen der Einsatz von Software mit hohen finanziellen wirtschaftlichen oder menschlichen Risiken verbunden ist wie z B bei militarisch oder medizinisch genutzter Software oder in der Luft und Raumfahrt verwendet man zudem eine formale Verifizierung genannte Methode bei der die Korrektheit einer Software formal mathematisch nachgewiesen wird Dieser Methode sind allerdings wegen des enormen Aufwands enge Grenzen gesetzt und sie ist daher bei komplexen Programmen praktisch unmoglich durchzufuhren siehe auch Berechenbarkeit Allerdings gibt es mittlerweile Werkzeuge die diesen Nachweis laut eigenen Angaben zumindest fur Teilbereiche Laufzeitfehler schnell und zuverlassig erbringen konnen Neben der mathematischen Verifizierung gibt es noch eine praxistaugliche Form der Verifizierung die durch die Qualitatsmanagement Norm ISO 9000 beschrieben wird Bei ihr wird formal nur dann ein Fehler konstatiert wenn eine Anforderung nicht erfullt ist Umgekehrt kann demnach ein Arbeitsergebnis und damit auch Software als fehlerfrei bezeichnet werden wenn es nachweisbar alle Anforderungen erfullt Die Erfullung einer Anforderung wird dabei durch Tests festgestellt Bringen alle zu einer Anforderung definierten Tests die erwarteten Ergebnisse so ist die Anforderung erfullt Gilt dies fur die Tests aller Anforderungen korrektes und vollstandiges Testen vorausgesetzt so wird fehlerfrei bzgl der Anforderungen gefolgert Sind die den Tests zugrundeliegenden Anforderungen fehlerhaft oder unvollstandig so arbeitet die Software dementsprechend dennoch nicht wie gewunscht Klassifizierung von Fehlern BearbeitenAufgetretene Fehler werden im Allgemeinen im Fehlermanagement systematisch bearbeitet Nach der IEEE Norm 1044 Klassifizierung von Softwareanomalien durchlauft dabei jeder Fehler einen sogenannten Klassifizierungsprozess bestehend aus den vier Schritten Erkennung Recognition Analyse Investigation Bearbeitung Action und Abschluss Disposition 16 In jedem dieser Schritte werden die Verwaltungsaktivitaten Aufzeichnen Recording Klassifizieren Classifying Wirkung identifizieren Identifying Impact ausgefuhrt 17 Kriterien nach denen Fehler dabei klassifiziert werden konnen sind u a mit Beispielen Hauptartikel Fehlerklassifizierung die Art des Fehlers Nach 8 werden dabei unterschieden Lexikalische Fehler unbekannter Bezug syntaktische Fehler vergessenes Semikolon semantische Fehler falsche Deklaration Laufzeitfehler falsch formatierte Eingabedaten und logische Fehler plus statt minus Schleifenfehler die Fehlerursache unprazise Vorgabe Zahlendreher falsche Formel nicht geprufte falsche Eingabedaten der Zeitpunkt der Fehlerentstehung Fehlhandlung Bereits bei der Programmvorgabe im Codeentwurf beim Codieren der Zeitpunkt des Fehlerauftretens Fehlerwirkung Ein grundsatzlicher Unterschied ergibt sich daraus ob der Fehler wahrend der Programmentwicklung auftritt zum Beispiel beim Testen hier ist dies ein Normalfall 1 oder im produktiven Betrieb wo er haufig eine kritische Storung darstellt der Zeitpunkt der Entdeckung Je langer die Fehlerverweilzeit ist desto aufwandiger wird i A die Korrekturmassnahme verlaufen die Reproduzierbarkeit des Fehlers Je schwieriger ein Fehler reproduzierbar ist desto aufwandiger wird i A die Korrekturmassnahme verlaufen die Auswirkung en des Fehlers Darstellungsfehler falsches Ergebnis Programmabbruch Aussenwirkung Aufwand und Dauer zur Fehlerbehebung minimal sehr hoch sofort sehr lange Dauer Bearbeitungsstatus aufgetreten untersucht Korrekturauftrag in Bearbeitung Retest moglich erledigtMit Hilfe von Metriken sollten die Ergebnisse und Erkenntnisse uber Fehler auch Anlass zur Suche nach den Ursachen hinter den Problemen sein 1 Fehlerklassifikationen bilden die Grundlage fur standardisierte Verfahren zur Fehlerbehandlung und unterstutzen zudem eine kontinuierliche Qualitatsverbesserung im Sinne des Qualitatsmanagements 18 Weitere Angaben je Fehler wie eine ausfuhrliche Fehlerbeschreibung betroffene Programme beteiligte Personen etc begleiten die Massnahmen zur Behebung der Fehler und dokumentieren diese Naheres siehe BITKOM Leitfaden 18 Vereinfachend werden Programmfehler im Fehlerbearbeitungsprozess haufig nur nach der Fehlerschwere das schliesst ausserdem die Fehlerwirkung und den Behebungsaufwand ein in Kategorien Klassen wie A B C oder 1 2 3 usw eingeteilt Beispiele siehe BITKOM Leitfaden 18 insbesondere im Anhang Folgen von Programmfehlern BearbeitenDie Folgen von Programmfehlern konnen hochgradig unterschiedlich sein und sich in vielfaltiger Weise zeigen Werden Fehler im Rahmen der Entwicklungsprozesse entdeckt so beschranken sich die Fehlerfolgen ausserdem auf die Uberarbeitung der Software Codekorrekturen Konzeptuberarbeitung Dokumentation je nach Situation mit mehr oder weniger grossen Auswirkung auf das Projektbudget und die Projektdauer Dagegen wirken erst im Produktivbetrieb erkannte Fehler nicht selten ungleich kritischer zum Beispiel konnen sie Prozess Storungen oder Produktionsstillstand bewirken Imageschaden hervorrufen den Verlust von Kunden und Markten verursachen Regresspflichten auslosen oder gar das Unternehmen in Existenzgefahr bringen Fehler in technischen Anwendungen konnen im schlimmsten Fall zu Katastrophen fuhren Konkrete Beispiele fur Programmfehler und deren Folgen finden sich in der Liste von Programmfehlerbeispielen Reproduzierbarkeit von Programmfehlern BearbeitenManche Programmfehler sind nur ausserst schwer oder gar nicht zuverlassig reproduzierbar Bei der Wiederholung eines zuvor gescheiterten Vorgangs unter scheinbar unveranderten Bedingungen ist die Wahrscheinlichkeit gegeben dass sich diese Fehler nicht erneut aussern Es gibt zwei mogliche Grunde fur dieses Verhalten Zum einen kann es zu Verzogerungen zwischen der Fehleraktivierung und dem letztlich auftretenden Problem beispielsweise einem Programmabsturz kommen welche die tatsachliche Ursache verschleiern und deren Identifikation erschweren Zum anderen konnen andere Elemente des Softwaresystems Hardware Betriebssystem andere Programme das Verhalten der Fehler in dem betrachteten Programm beeinflussen Ein Beispiel hierfur sind Fehler die in nebenlaufigen Umgebungen mit mangelnder Synchronisation genauer Sequentialisierung auftreten Wegen der hieraus folgenden Wettlaufsituationen Race Conditions konnen die Prozesse in einer Reihenfolge abgearbeitet werden welche zu einem Laufzeitfehler fuhrt Bei einer Wiederholung der gleichen Aktion ist es moglich dass die Reihenfolge der Prozesse unterschiedlich ist und kein Problem auftritt Die Reproduzierbarkeit eines Programmfehlers lasst sich anhand dessen Beobachtungsgute in Kategorien Klassen wie A B C oder 1 2 3 usw einteilen Die Beobachtungsstufe eines Fehler kann sich uber die Nutzungszeit der Software verandern so kann sich bspw ein nicht reproduzierbarer Fehler zu einem eindeutig reproduzierbaren Fehler entwickeln Bei nicht ohne weiteres reproduzierbaren Fehlern welche aber wiederholt aufgetreten sind konnen Experten zur Ursachensuche hinzugezogen werden A Eindeutig festgestellter Fehler welcher mit Belegen jederzeit reproduziert werden kann B Nicht ohne weiteres reproduzierbarer Fehler welcher aber nachweislich wiederholt aufgetreten ist C Nicht reproduzierbarer und nicht nachweislich wiederholt aufgetretener Fehler Weiterfuhrende Themen BearbeitenZum Prinzip noch unreife Software auszuliefern siehe Bananenware Software die oft kostenlos angeboten z B Mangel in der Sicherheit der Ubersichtlichkeit oder ihrer nutzbaren Funktionalitat aufweist siehe CrapwareLiteratur BearbeitenWilliam E Perry Software Testen Mitp Verlag Bonn 2002 ISBN 3 8266 0887 9 Elfriede Dustin Jeff Rashka John Paul Software automatisch testen Verfahren Handhabung und Leistung Springer Berlin u a 2001 ISBN 3 540 67639 2 Cem Kaner Jack Falk Hung Quoc Nguyen Testing Computer Software 2nd edition John Wiley amp Sons New York NY u a 1999 ISBN 0 471 35846 0 Weblinks Bearbeiten nbsp Wiktionary Programmfehler Bedeutungserklarungen Wortherkunft Synonyme Ubersetzungen Die 25 gefahrlichsten Programmierfehler englisch SQS Die spektakularsten Softwarefehler 2012 In Computerwoche 17 Januar 2013 abgerufen am 20 Januar 2013 Einzelnachweise Bearbeiten a b c M Pol T Koomen A Spillner Management und Optimierung des Testprozesses dpunkt Verlag Heidelberg 2002 ISBN 3 89864 156 2 a b DIN Normenausschuss Qualitatsmanagement Statistik und Zertifizierungsgrundlagen NQSZ DIN EN ISO 9000 Qualitatsmanagementsysteme Grundlagen und Begriffe Hrsg DIN Deutsches Institut fur Normung e V Beuth Verlag GmbH Berlin November 2015 3 6 9 S 40 104 S Spillner et al Praxiswissen Softwaretest TestmanagementLeseprobe Kap 1 1 Basiswissen Fehlerbegriff Memento vom 17 Dezember 2010 im Internet Archive PDF dpunkt de Merriam Webster Unabridged Dictionary iOS App 2016 bug a an insect or other creeping or crawling invertebrate b any of certain insects commonly considered especially obnoxious c an insect of the order Hemiptera especially a member of the suborder Heteroptera ein Wortspiel eines scheinbar lateinischen Gattungsnamens aus call Anruf en und Bellum Akkusativ zu Bell Paul B Israel Hrsg The Papers of Thomas A Edison Vol 4 Baltimore and London 1993 Online Fred R Shapiro Etymology of the Computer Bug History and Folklore In American Speech Band 62 Nr 4 1987 S 376 378 a b informatik uni oldenburg de iX Magazin Studie Software Testmanagement war fruher im IX Kiosk erwerbbar Memento vom 9 Januar 2013 im Internet Archive a b Wallmuller Software Qualitatsmanagement in der Praxis beck shop de PDF 612 kB Hanser Munchen 2001 ISBN 978 3 446 21367 8 Junginger Wertorientierte Steuerung von Risiken im Informationsmanagement 2005 ISBN 3 8244 8225 8 Steve C McConnel Code Complete 2 Auflage Microsoft Press 2004 ISBN 0 7356 1967 0 20 5 S 474 englisch 914 S The single biggest activity on most projects is debugging and correcting code that doesn t work properly Debugging and associated rework consume about 50 percent of the time on a traditional naive software development cycle Capers Jones Software Assessments Benchmarks and Best Practices Addison Wesley 2000 ISBN 0 201 48542 7 Kap 3 S 99 englisch archive org abgerufen am 29 Mai 2022 The relationship between quality and productivity is well supported by emperical data even if the topic is not well understood by the industry as a whole As far back as the early 1970s IBM discovered that software projects with the lowest levels of defects had the shortest development schedules and the highest development productivity The reason for this situation is because software defect removal is actually the most expensive and time consuming form of work for software Georg Edwin Thaller Softwaretest Verifikation und Validation 2002 ISBN 978 3 88229 198 8 John Ronald Cummings Peer Owais Leading Quality How Great Leaders Deliver High Quality Software and Accelerate Growth Hrsg ROI Press 2019 ISBN 978 1 916185 80 7 S 64 englisch 154 S Research by Capers Jones found that the cost to address bugs post release is 16 000 but a bug found at the design phase costs 25 my safaribooksonline com IEEE Standard Classification for Software Anomalies PDF IEEE Standards Board 1993 S 32 abgerufen am 22 November 2014 White Paper Dokument hinter Paywall a b c Bitkom Leitfaden Fehlerklassifikation fur Software Bitkom e V Abgerufen am 26 Juli 2022 Abgerufen von https de wikipedia org w index php title Programmfehler amp oldid 237602943