Anmelden

Schlüsseltechnologie· Staffel 1· Folge 37

STP037: Berühmte Softwarefehler

Donnerstag, 4. Mai 2023 · 1 h 06

MP3

Shownotes

<p>Wir alle machen Fehler. So gut, so trivial. Wenn allerdings Elektronenrechner im Spiel sind, kann das durchaus kritisch werden. In manchen Fällen sogar tödlich.</p><h2>Shownotes</h2>Errata zu STP034 von Thomas aus Berlin:</p>
<blockquote>
<p>Am Ende der Folge wundert sich ttimeless darüber, warum <code>sin(pi)</code> auf dem Taschenrechner immer ein Ergebnis von 0,0548... produziert. Du versuchst, das dann mit möglichen Ungenauigkeiten der Abbildung von pi zu erklären.</p>
<p>Ich glaube, die Antwort ist viel einfacher: In der normalen Einstellung DEG erwartet der Taschenrechner die Eingabe in Grad und <code>sin(pi°) = 0,0548...</code> ist damit auch korrekt. Stellt man den Taschenrechner auf RAD (Radiant), dann rechnet der Taschenrechner auch korrekt <code>sin(pi) = 0</code>.</p>
</blockquote>
<ul>
<li>
<p>"Off by One" ("um eins daneben")</p>
<ul>
<li>Diese Folge ist Nr. 37 und somit die 38. Folge dieses Podcasts!</li>
<li>häufige Konvention in der IT: Nummerierung fängt bei Null an
<ul>
<li>In einer Liste mit 10 Elementen das vorderste den Index 0 und das hinterste den Index 9.</li>
<li>formal plausibel, da Null die erste natürliche Zahl ist (ansonsten ist ℕ unter Addition keine Gruppe; siehe <a href="cs.utexas.edu/users/EWD/transcriptions/EWD08xx…;)</li>
<li>technisch plausibel, da die Speicheradresse einer Liste für gewöhnlich die Speicheradresse des vordersten Elementes ist; dieses hat also einen Abstand von 0 zum Beginn der Liste</li>
</ul>
</li>
<li>siehe auch <a href="de.wikipedia.org/w/index.php?title=Zaunpfahlfe…;
<li>Thema heute: Wie katastrophal können die Auswirkungen solcher kleinen Fehler sein?</li>
</ul>
</li>
<li>
<p>mechanische Fehler: <a href="commons.wikimedia.org/w/index.php?title=File:F… actual case of bug being found."</a></p>
</li>
<li>
<p>Überlauf: <a href="de.wikipedia.org/w/index.php?title=Ariane_V88&… V88 (1996)</a></p>
<ul>
<li>erster Flug der Ariane 5</li>
<li>Steuerungssoftware war von der Ariane 4 übernommen und nicht auf derart große Horizontalgeschwindigkeiten ausgelegt</li>
<li>Überlauf bei Konvertierung von float64 in int16; aber bei dieser konkreten Variable keine Überlaufprüfung wegen Ressourcenknappheit</li>
<li>größeres Motiv laut Untersuchungsbericht: in der Gefahrenabschätzung wurde nicht hinreichend berücksichtigt, dass die Software (und nicht nur die Hardware) fehlerhaft sein könnte</li>
<li>Folge: erster großflächiger Einsatz von Fehlersuche mittels statischer Code-Analyse</li>
</ul>
</li>
<li>
<p>Überlauf: Y2K Bug -> siehe STP016</p>
</li>
<li>
<p>Überlauf: <a href="de.wikipedia.org/w/index.php?title=Heartbleed&… (2014)</a></p>
</li>
<li>
<p>Drift: <a href="www-users.cse.umn.edu/~arnold/disasters/Patrio… Missile Incident (1991)</a>, <a href="gao.gov/assets/imtec-92-26.pdf">siehe auch</a></p>
<ul>
<li>Hintergrund: 28 Amerikaner getötet durch Raketenbeschuss auf eine US-Basis in Saudi Arabien während des 1. Golfkriegs</li>
<li>Fehler im Raketenabwehrsystem: aufgrund Rundungsfehler driftet die interne Uhr um einen Faktor von 0,00000095</li>
<li>nach 100 Stunden Dauerbetrieb ist die Drift bei 0,34 Sekunden; entspricht bei Raketen mit Mach 4 einer Distanz von etwa 500 Metern</li>
</ul>
</li>
<li>
<p>Spezifikation falsch gelesen (oder Kommunikationsproblem): <a href="de.wikipedia.org/w/index.php?title=Mars_Climat… Climate Orbiter (1999)</a></p>
<ul>
<li>NASA hatte metrische Einheiten verwendet (Impuls in Newtonsekunden), die Navigationssoftware von Lockheed Martin hingegen imperiale Einheiten (Impuls in Pound-Force-Sekunden)</li>
</ul>
</li>
<li>
<p>Clusterfuck: <a href="de.wikipedia.org/w/index.php?title=Therac-25&a… (1985-1987)</a>, unter anderem:</p>
<ul>
<li><del>verteiltes</del> verstreutes System: fehlerhafte Synchronisation zwischen einem Messprozess und einem parallel arbeitenden Steuerprozess</li>
<li>Benutzerführung: in bestimmten Situationen wurde nach der Eingabe neuer Daten der alte Datensatz weiterverwendet, obwohl die Benutzeroberfläche den neuen Datensatz anzeigte</li>
<li>Überlauf: 8-Bit-Flag für die Anzeige der Notwendigkeit einer Sicherheitsprüfung konnte von 255 auf 0 überlaufen und dadurch die Prüfung überspringen</li>
</ul>
</li>
<li>
<p>überfordert von Komplexität: <a href="en.wikipedia.org/w/index.php?title=Corrupted_B… Blood (2005)</a></p>
<ul>
<li>vor COVID-19 eines der wichtigsten Studienobjekte für das Verbreitungsmuster einer Pandemie, inklusive Tiervektoren und asymptomatisch infektiösen Patienten</li>
<li>ein bestimmter Bosskampf in "World of Warcraft" versieht Spielercharaktere mit einem negativen Statuseffekt, der sie langsam tötet und der auf naheliegende Charaktere ansteckend wirkt</li>
<li>Spieler sollten mit diesem Statuseffekt den Bosskampf nicht verlassen können, aber die Reittiere der Spieler konnten es!</li>
</ul>
</li>
<li>
<p>analog zu Copy-Paste-Fehler: <a href="en.wikipedia.org/w/index.php?title=Mariner_1&a… 1 (1962)</a></p>
<ul>
<li>Programmcode wurde auf Papier geschrieben, dort wurde fehlerhafterweise mit "R" statt mit dem korrekten "R̅" (R mit Überstrich) gerechnet</li>
</ul>
</li>
<li>
<p>Copy-Paste-Fehler: <a href="de.wikipedia.org/w/index.php?title=Pentium-FDI…;
<ul>
<li>Division von Fließkommazahlen (siehe STP009) beim Pentium verwendet einen Algorithmus, der zur Beschleunigung eine Tabelle von vorberechneten Werten verwendet</li>
<li>fünf Einträge in dieser Tabelle wurden nicht richtig in das finale Chip-Design übernommen</li>
<li>Ergebnis: bestimmte Divisionen liegen um einen Bruchteil eines ‰ daneben</li>
<li>Rückrufaktion im Wert von über 400 Millionen $</li>
<li>"Wie viele Intel-Mitarbeiter braucht man, um eine Glühbirne zu wechseln? 1,9999983256"</li>
<li>im Gespräch erwähnt: <a href="en.wikipedia.org/w/index.php?title=Fast_invers… Inverse Square Root</a></li>
</ul>
</li>
</ul>

Anmelden oder registrieren

Jetzt

0:00 / 0:00