Zum Forum
Passwort vergessen?
Noch keinen Account?
lexikon
Hauptseite
Zufälliger Artikel
Diskussion
Diskussion : Programmfehler
Links
Forum
Portale
Reisen
Versicherung
Inhaltsverzeichnis
Hauptmenü
Home
Editorial
Bildung
E-Learning
Fremdsprachen
Magazin
Wissen
Wörterbücher
Enzyklopädien
Expertendienste
Wissenswertes
Praktische Ratgeber
--------------------------
Biologie
Chemie
Computer
Film/ Theater
Geografie
Geschichte
Jura
Kunst
Literatur
Mathematik
Medizin
Musik
Philosophie
Physik/ Astronomie
Politik
Psychologie
Religionen
Sport
Umwelt
Wirtschaft
Reisen
Lexikon
Versicherung
Suchen
Schnellsuche
Suchmaschinen
Metasuchmaschinen
Webkataloge
News
Treffpunkt
Chat
Forum
Suche
Schnellsuche
Sitemap
Kontakt
Impressum
Programmfehler
Stichpunkte
Allgemein
Insekt; Aussprache: Bagg) genannt
Ein Programmfehler oder Softwarefehler
ist ein Ausdruck aus dem EDV-Bereich
Käfer
im englischen auch einfach Bug (Wanze
Ein Programmfehler tritt in Computerprogrammen auf
wenn der Programmierer einen bestimmten Zustand in der Programmlogik nicht berücksichtigt hat
oder wenn die Laufzeitumgebung selber fehlerhaft arbeitet
bzw. als solche interpretiert werden
Mehrdeutigkeiten o. ä. in der Spezifikation des Programms können zu Bugs führen
Fehler
Ungenauigkeiten
Auch Unvollständigkeit
Es gibt eine Regel
nach der ein Computerprogramm ab einer bestimmten Größe immer auch Programmfehler beinhaltet
Die Anzahl von Fehlern zur Lebenszeit eines komplexen System verhält sich nach der sogenannten Badewannenkurve
dass wenn das Produkt neu ist auch die Zahl der Fehler hoch ist
Diese besagt
Die Fehler werden zum Großteil behoben danach kommt ein Phase mit wenig Fehlern
die Zahl der Fehler wieder an
Zum Schluss steigt
selbst bei Software
"Verbergen") 1 Arten von Programmfehlern 2 Vermeidung und Behebung von Programmfehlern 2.1 Zum Zeitpunkt der Planung 2.2 Zur Analysephase 2.3 Zur Designphase 2.4 Bei der Programmierung 2.5 Beim Testen 3 Fehlerfreiheit 4 Folgen von Programmfehlern 5 Das Wort „Bug“ 6 Literatur 7 Weblinks [Bearbeiten]
mit denen man ein Programm welches man analysiert schrittweise ablaufen lassen kann und sich sämtliche internen Zustände(Variablen) des Programmes anzeigen lassen kann. Inhaltsverzeichnis showTocToggle("Anzeigen"
Um Bugs in Programmen besser zu verstehen zu können gibt es Programme
sogenannte Debugger
Arten von Programmfehlern
der aber in einer späteren Programmversion wieder auftaucht. Syntaxfehler sind Verstöße gegen die grammatischen Regeln der benutzten Programmiersprache
In der Softwaretechnik wird zwischen folgenden Typen von Fehlern in Programmen unterschieden: Bohrbugs sind Fehler die leicht zu reproduzieren sind
da sie immer auftreten. Heisenbugs treten nur unter ganz bestimmten Randbedingungen auf und sind somit schwer zu reproduzieren und damit zu beheben. Regressionsbug oder kurz Regression ist ein Fehler
der in einer früheren Programmversion bereits behobenen wurde
während das Programm abgearbeitet wird
die auftreten
Ein Syntaxfehler verhindert bei einigen Programmiersprachen bereits die Kompilierung des fehlerhaften Programms. Laufzeitfehler (Bugs) sind alle Arten von Fehlern
spricht man hier auch von semantischen Fehlern
Da diese Fehler die Programmlogik und damit die Bedeutung des Programmcodes betreffen
Ihre Ursache liegt in den meisten Fällen in unrichtiger Implementierung der gewünschten Funktionalität im Programm
Gelegentlich tritt als Ursache auch eine ungeeignete Laufzeitumgebung auf (z
B. eine falsche Betriebssystem-Version)
Laufzeitfehler können sich auf die unterschiedlichsten Arten zeigen
Oftmals zeigt das Programm ungewünschtes Verhalten
wo es keine Benutzereingaben mehr akzeptiert („Einfrieren“
im Extremfall wird die Ausführung des Programms abgebrochen („Absturz“)
„Hängen“)
oder das Programm geht in einen Zustand über
so wird durch das Programm auf Dauer immer mehr Speicher belegt
Wird in Programmiersprachen ohne Garbage Collection (etwa C oder C++) Speicher nach der Verwendung nicht mehr freigegeben
Diese Situation wird Memory leak genannt
wenn zum Beispiel Objekte unkontrolliert in einer Liste angesammelt werden. Designfehler sind Fehler im Grundkonzept
oder bei der Entwicklung des Softwaredesigns
auf dessen Grundlage das Programm entwickelt wird
entweder bei der Definition der Anforderungen an die Software
Aber auch in Programmiersprachen mit Garbage Collection (etwa Java oder C#) können ähnliche Probleme auftreten
für das die Software geschrieben wird oder auf Missverständnissen zwischen Nutzern und Entwicklern
Fehler bei der Anforderungsdefinition beruhen oft auf mangelnder Kenntnis des Fachgebietes
Fehler direkt im Softwaredesign hingegen sind oft auf mangelnde Erfahrung der Softwareentwickler oder auf Folgefehler durch Fehler in der Anforderungsspezifikation zurückzuführen
In anderen Fällen ist das Design historisch gewachsen und wird mit der Zeit unübersichtlich
was wiederum zu Designfehlern bei Weiterentwicklungen des Programms führen kann
Vielen Programmierern ist das Softwaredesign auch lästig
sodass oftmals ohne richtiges Konzept direkt entwickelt wird
was dann insbesondere bei steigendem Komplexitätsgrad der Software unweigerlich zu Designfehlern führt
Sowohl für Fehler in der Anforderungsdefinition als auch im Softwaredesign kommen darüber hinaus vielfach Kosten- oder Zeitdruck in Frage. [Bearbeiten]
Vermeidung und Behebung von Programmfehlern
umso aufwendiger wird es den Fehler zu beheben. [Bearbeiten]
Je früher in einem Entwicklungprozess der Fehler auftritt und je später er entdeckt wird
Zum Zeitpunkt der Planung
Am wichtigsten ist eine gute und geeignete Planung des Entwicklungsprozess
Hierfür gibt es bereits etliche Prozessmodell aus denen ein geeignetes ausgewählt werden kann. [Bearbeiten]
Zur Analysephase
Ein Problem ist das die Korrektheit eines Programms nur gegen eine entsprechend formalisierte Spezifikation bewiesen werden kann
wie die Programmierung des Programms selbst
Eine solche Spezifikation zu erstellen kann jedoch im Einzelfall ähnlich kompliziert und fehlerträchtig sein
Auch die Entwicklung immer abstrakterer Programmierparadigmen und Programmierstile wie die objektorientierte Programmierung
Design By Contract und die aspektorientierte Programmierung dienen unter anderem der Fehlervermeidung und Vereinfachung der Fehlersuche
Aus den zur Verfügung stehenden Techniken für das Problem ist eine geeignete auszuwählen
Ein wichtiger Punkt hierbei ist aber auch das für das jeweiligen Paradigma erfahrene Programmierer zur Verfügung stehen müssen
sonst entsteht oft der gegenteilige Effekt. [Bearbeiten]
Zur Designphase
Software-Experten sind sich darüber einig
dass praktisch jedes nicht-triviale Programm Fehler enthält
Deshalb wurden Techniken entwickelt
mit Fehlern innerhalb von Programmen tolerant umzugehen
Ausnahmebehandlung
Redundanz und die Überwachung von Programmen (z
Zu diesen Techniken gehören defensives Programmieren
B. durch Watchdog- timer
sowie die Plausibilisierung des Programmes während der Enwicklung und der Daten während des Programmablaufs. [Bearbeiten]
Bei der Programmierung
häufig gemachte Fehler automatisiert zu finden
Darüberhinaus werden eine Reihe fortgeschrittener Anwendungen angeboten
die entweder den Quellcode oder den Binärcode analysieren und versuchen
In diese Kategorie fallen etwa Programme zur Ausführungsüberwachung
die üblicherweise fehlerhafte Speicherzugriffe und Memory leaks zuverlässig aufspüren
Beispiele sind das frei erhältliche Tool Valgrind und das kommerzielle Purify
Eine weitere Kategorie von Prüfprogrammen umfasst Anwendungen
die Quell- oder Binärcode statisch analysieren und etwa nicht geschlossene Ressourcen und andere Probleme auffinden und melden können
Darunter fallen etwa Findbugs
lint und Splint. [Bearbeiten]
Beim Testen
Es ist durchaus sinnvoll das der Test vor dem eigentlichen Programm entwickelt wird
Damit wird erreicht das nicht ein Test geschrieben wird der zu dem bereits geschriebenen Programm passt
Dies kann durch Ermittlung von Testfällen anhand der Spezifikation bereits während der Analyse- bzw
Designphase erfolgen
Die Ermittlung von Testfällen in diesem frühen Stadium der Softwareentwicklung ermöglicht zudem die Prüfung der Anforderungen an das Programm auf Testbarkeit und Vollständigkeit
Die anhand der Spezifikation ermittelten Testfälle stellen die Basis für die Abnahmetests und können kontinuierlich über den gesamten Entwicklungsprozess verfeinert werden
Manche Softwareanbieter führen Test-Phasen teilweise öffentlich durch und geben Betaversionen heraus
um die unvorhersehbar vielfältigen Nutzungsbedingungen verschiedener Anwender durch diese selbst testen und kommentieren zu lassen
weil sie erst beim Kunden reift. [Bearbeiten]
Dies nennt man scherzhaft auch „Bananensoftware“
Fehlerfreiheit
In Spezialfällen ist ein Beweis der Fehlerfreiheit eines Programms möglich
Diese Technik findet in der Praxis aufgrund des immensen Aufwandes jedoch äußerst selten Anwendung
wie z
in denen der Einsatz von Software mit hohen finanziellen
Insbesondere in Bereichen
wirtschaftlichen oder menschlichen Risiken verbunden ist
bei der die Korrektheit einer Software formal-mathematisch nachgewiesen wird
verwendet man zudem eine Verifizierung genannte Methode
B. bei militärisch oder medizinisch genutzer Software oder in der Luft- und Raumfahrt
Dieser Methode sind allerdings enge Grenzen gesetzt und sie ist daher bei komplexen Programmen praktisch unmöglich
teilweise auch theoretisch unmöglich anzuwenden; siehe auch Berechenbarkeit. [Bearbeiten]
Folgen von Programmfehlern
welche über 80 Millionen US-Dollar gekostet hatte. Zwischen 1985 und 1987 gab es mehrere Unfälle mit dem medizinischen Bestrahlungsgerät Therac-25
Die Folgen eines Programmfehlers können außerordentlich sein: 1962 führte ein fehlender Bindestrich in einem Fortran-Programm zum Verlust der Venus-Sonde Mariner 1
weil Programmcode
die Steuersysteme zum Erliegen brachte
Infolge einer Überdosis
die durch fehlerhafte Programmierung und fehlende Sicherungsmaßnahmen verursacht wurde
der von der Ariane 4 übernommen wurde und nur für einen (von der Ariane 4 nicht überschreitbaren) Bereich funktionierte
nachdem ebendieser Bereich von der Ariane 5 überschritten wurde. 1999 verpasste die NASA-Sonde Climate Orbiter den Landeanflug auf den Mars
ein Patient verstarb drei Wochen nach der Bestrahlung. 1996 wurde der Prototyp der Ariane 5-Rakete der Europäischen Raumfahrtbehörde eine Minute nach dem Start zerstört
mussten Organe entfernt werden
weil die Programmierer das falsche Maßsystem verwendeten – Yard statt Meter
Die NASA verlor dadurch die mehrere hundert Millionen Dollar teure Sonde. [Bearbeiten]
Das Wort „Bug“
Die Bezeichnung Bug – der englische Ausdruck für einen Programmfehler – entstand angeblich
als 1945 eine Motte in einem der ersten Computer einen Kurzschluss verursacht hatte
entdeckte den Bug und klebte die Motte in ihr Logbuch ein
das heute am Smithsonian Institute aufbewahrt wird
US Navy Captain Grace Murray Hopper
eine Pionierin der Computerwissenschaft
wenn ihre Programme fehlerhaft waren
bis der Ausdruck Bug schließlich allgemein gebräuchlich wurde. Eine andere Version zur Entstehung von „debugging“: Das merkwürdige Wort debugging kommt angeblich aus den Tagen der ersten Computer
es sei wohl wieder ein Insekt
Daraufhin behaupteten Programmierer oft scherzhaft
Damals waren Computer noch riesige Schränke voll Relais oder Vakuumröhren
bevor die Verarbeitung weiter gehen konnte
Wenn nur ein einziges Teil dieser komplizierten Maschinen ausfiel
stand der ganze Computer still und der Fehler musste erst behoben werden
die sich in den Computern herumtrieben und Teile beschädigten oder Kurzschlüsse verursachten
Angeblich waren des öfteren kleine Käfer (englisch bug) für die Schäden verantwortlich
Deshalb bezeichnet man auch heute im Englischen noch Fehler in Programmen oder Hardware als Bug (Aussprache bagg) und das Suchen und Beheben der Fehler heißt Debugging
die eingedeutschte Form Debuggen
Diese angebliche Herkunft ist aber falsch; das Wort „Bug“ wurde in der gleichen Bedeutung bereits im 19
Jahrhundert nachgewiesen; seine Herkunft gilt unter Etymologen bislang als ungeklärt. Siehe auch: Moderne Legende Das Wort „Bug“ bezieht sich streng genommen auf Programmfehler
Durch die Existenz sogenannter Bugreporting-Tools wie z
BB
ugzilla oder Mantis hat sich der Begriff aber verbreitertB
ugs sind dann nicht mehr zwingend Programmfehler
sondern können auch Wünsche („RFE“s) der Nutzer oder allgemeine Vorgänge seinE
twa wird in sogenannten Metabugs alle im Rahmen des evolutionären Entwicklungmodells zu erledigenden Punkte erwähntE
in Bug ist dann ein Element einer Aufgabenliste für eine ProgrammversionM
anche Open Source Projekte wie zB
weil dieser Ausdruck treffender den Sachverhalt umschreibt. [Bearbeiten]
OpenOffice sprechen deshalb lieber von „Issues“
Literatur
William E
Jeff Rashka
John Paul: Software automatisch testen
Mitp-Verlag
Perry: Software Testen
ISBN 3826608879 Elfriede Dustin
ISBN 3540676392 Cem Kaner
Jack Falk
Berlin
November 2002
Springer
Hung Q
Januar 2001
ISBN 0471358460 [Bearbeiten]
Juni 1999
Nguyen: Testing Computer Software
John Wiley & Sons
Weblinks
The First Computer Bug (http://www.waterholes.com/~dennette/1996/hopper/bug.htm) http://www-aix.gsi.de/~giese/swr/index.html – Über die Auswirkungen größerer Softwarefehler en:Computer bug es:Error de software fi:Ohjelmointivirhe fr:Bogue he:ב×?×’ hu:Kernel panic ja:ãƒ?ã‚° nl:Bug pl:Bug (programowanie) pt:Bug zh:程åº?错误
[X] Schliessen
Dieser Artikel basiert auf dem Artikel
Programmfehler
aus der freien Enzyklopädie
wikipedia
und steht unter der
GNU Lizenz für freie Dokumentation
. In der wikipedia ist eine
Liste der Autoren
verfügbar.
Elektronische Datenverarbeitung
Elektronische Daten Verarbeitung
Babelfish
Liste der Herrscher namens Philipp
Sinclair ZX81
Jean-Paul Sartre
Wolter-Teleskop
Bausatz
Star Trek: Der Erste Kontakt
Programmierer
[ Zurück ]
Inhalt Lexikon:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
1
2
3
4
5
6
7
8
9
Chat
|
Lexikon
|
Reisen
|
Versicherung
|
Forum
|
Kontakt