Ugh.
Petra hat ja schon sehr qualifiziert geantwortet, ich kann noch was Grundlegendes beisteuern.
es gibt so Aussagen wie „alle 100 Codezeilen ist ein Fehler“
Sowohl der Begriff „Codezeile“ als auch der Begriff „Fehler“ sind zu schwammig, um hier wasserdichte Angaben machen zu können. Bugs, die regelmäßig zum Komplettausfall führen, werden mit halbwegs modernen Test- und Analysetools sicherlich so gut wie vollständig vor der Auslieferung eliminiert (nicht geschlossene Schleifen, falsch geschriebene reserved words usw.). So was wird man tendenziell nicht finden.
Eins darunter fängt der Graubereich an. Angenommen, ein Programm soll eine Division ausführen und der Divisor kann nicht Null werden (weil er bspw. aus einer Routine kommt, die nur von Null verschiedene Werte liefern kann) - muss man dann die Prüfung auf division by zero durchführen? Wenn man das unterlässt, ist das dann ein Fehler? Wenn es einer ist, wie soll man ihn entdecken? (Antwort: Es ist ein Fehler, und sogar ein ziemlich gemeiner, auch wenn er in der vorhandenen Konfiguration nicht auftreten kann). Anderes Beispiel wäre ein Kommentar, der überhaupt nicht zum Code passt und völlig in die Irre führt - das Programm wird mit diesem fehlerhaften Kommentar fehlerlos laufen; der arme Hund, der den Code warten muss, wird das trotzdem als gravierenden Fehler empfinden - viel schlimmer, als Iv statt If zu schreiben …
Der „Y2K- Bug“ war in diesem Sinne nie ein Bug, sondern ein Mangel in der Konfiguration - wäre der Computer 500 Jahre vorher erfunden worden, hätten alle davon betroffenen Programme mehr als 500 Jahre lang anstandslos funktioniert.
Je nach Zählweise wirst du also ganz unterschiedliche Angaben zur Fehlerhäufigkeit finden. Und dass die Entwickler nicht die größtmögliche Zahl veröffentlichen werden, dürfte auch klar sein - abgesehen davon, dass sie die „genaue Zahl“ auch nicht kennen, weil es diese eben nicht gibt.
Noch ein Beispiel aus der Systemanalyse: Ein Programm benötigt die Berechnung von Fakultäten, für was auch immer. Mathematisch ist die Fakultät rekursiv definiert mit
0!=1 ∧ n! = n\*(n-1)!
Ein Programm, das die Fakultät rekursiv berechnet, ist mathematisch völlig richtig, informationstechnisch aber fehlerhaft, weil die Lösung ohne Rekursion viel effizienter ist. Fehler?
Gar so einfach ist es eben nicht.
Aga,
CBB