| 
 | 
|  | 
| 
 | 
| Dieses Dokument ist verfübar auf: English Deutsch Francais | 
| ![[Photo of the Author]](../../common/images/RalfWieland.jpg)  von Ralf Wieland <rwieland(at)zalf.de> Über den Autor: Ich entwickle ein räumliches Simulationssystem (SAMT) zur Umweltsimulation. Dazu verwende ich Fuzzy-Modelle, Neuronale Netze, zelluläre Automaten. Alles erfolgt unter Linux, das ich seit Version 0.99pl12 nutze. Inhalt: | 
| Fehler in Software![[Illustration]](../../common/images2/article381/badew.gif)  Zusammenfassung: 
    Die Frage nach der in einer Software enthaltenen Menge an
    Fehlern ist heikel und wird kontrovers diskutiert. Oft wird die
    Fehlerrate als Maß für die Güte einer Software
    genommen. Ist das korrekt? Anhand einer einfachen
    Modellrechnung werden unterschiedliche Strategien und
    Konsequenzen diskutiert. Der Artikel soll zu einer kritischen
    Sicht und zu einer Diskussion anregen.
    
 | 
Die Frage, ob Open Source Software oder Closed Source
    Software besser ist, wird in den Computerzeitschriften hitzig
    diskutiert. Je nachdem welche Seite die Studie in Auftrag gab,
    fallen die Ergebnisse aus. Die jeweilige Gegenseite weiß
    um die Schwächen und so kommen die Antworten und
    Kommentare recht schnell. Der Anwender hat von diesen Studien
    und Diskussionen kaum einen Nutzen. Er ist eher verwirrt und
    das Interesse, an dieser an sich interessanten und vor allem
    praktischen Frage läßt nach. Die Situation erinnert
    an die Zeit als Benchmarks aktuell waren. Jeder neue Rechner
    schlug den Konkurrenten im Benchmark. Nur leider sah die Praxis
    anders aus. Der Nutzer wollte keine Benchmarks ausführen,
    sondern seine Arbeit flüssig erledigen. Heute ist diese
    unsinnige Benchmark Protzerei einer durchaus praktikablen
    Beurteilung gewichen. Die Schlacht tobt um die Fehler in der
    Software.
    Ohne fundamentale Ableitungen und Untersuchungen, soll mittels
    eines einfachen und hoffentlich plausiblen Modellansatzes das
    Problem beleuchtet werden. Vielleicht kommt es zu einer
    Diskussion und zu Verfahren, die dann eine ähnliche
    Entwicklung wie bei den Benchmarks bewirken. Es wäre
    schön, könnte ich hier eine Anregung geben und ein
    Mosaiksteinchen zu einer kritischeren Sicht beitragen.
Open Source Software und auch Closed Source Software
    enthalten Fehler. Ich gehe davon aus, dass die Programmierer
    gleich gut sind, somit die durchschnittliche Fehlerzahl/(1000
    Zeilen Code) gleich hoch ist. Closed Source Entwickler sehen
    sich Kunden gegenüber, die u.U. auch gerichtlich gegen sie
    vorgehen können. Aus eigenem Interesse sind sie
    verpflichtet einen Teil ihrer Entwicklungszeit in Tests zu
    investieren. Auch ist es marktwirtschaftlich nicht
    günstig, wenn eine Software nur so von Fehlern strotzt.
    (Leider kommt Letzteres trotzdem recht oft vor.) Bei Open
    Source Entwicklern ist dieser Druck in der Regel nicht so
    groß. Siehe hierzu die GPL, die jegliche
    Garantie- und Schadenersatzansprüche ausschließt.
    Trotzdem zeichnet sich Open Source Software durch hohe
    Qualität und Sicherheit aus. Hier kommt zum Tragen, dass
    durch die Weitergabe der Quellen, die Möglichkeit Fehler
    zu entdecken und zu beseitigen ungemein größer ist
    als bei ihrem Gegenpart. Um die Sache etwas anschaulicher zu
    machen, soll ein einfaches Modell genutzt werden. Eine
    größere Closed Source Software soll mit einer die
    gleichen Funktionen realisierenden Open Source Variante
    verglichen werden. Der Vergleich ist rein fiktiv, soll nur die
    möglichen Konsequenzen verdeutlichen. Beide Varianten
    sollen per Definition 100 Fehler enthalten. Diese Zahl dient
    nur als Anhaltspunkt. Im ersten Modellfall wird folgendes
    angenommen: Die Softwarefirma bereinigt ihre Software in
    umfangreichen Tests um 20 Fehler. Die Open Source Entwickler
    geben die Software möglichst früh weiter und
    verzichten auf eine umfangreiche Testphase. Dafür arbeiten
    die Open Source Entwickler sehr eng mit den Anwendern zusammen
    und korrigieren 80% der gemeldeten Fehler. (100% ist selbst bei
    Open Source nicht möglich, manchmal kommen auch neue
    Fehler hinzu!). Durch die Offenheit des Quellcodes werden
    monatlich im Schnitt 10% der in der Software enthaltenen Fehler
    entdeckt.
    Ganz anders ist das bei Closed Source. Hier werden Fehler
    schwieriger entdeckt. Im Modellansatz sollen 8% der noch
    enthaltenen Fehler gemeldet werden (ein sehr optimistischer
    Ansatz). Für die Closed Source Firma ist die Beseitigung
    der Fehler mit erheblichen Kosten verbunden, da hier in der
    Regel auch andere Vertriebswege als das Internet bedient werden
    müssen. Die Firma wird also bestrebt sein, nur unbedingt
    notwendige Änderungen vorzunehmen. Im Modell sind das 50%
    der gemeldeten Fehler. Wie gesagt, es handelt sich um ein
    fiktives Modell. Falls aber genaue Zahlen verfügbar sind,
    wäre es interessant diese zu nutzen.
    
| Open Source | Closed Source | |||||
| Monat | Fehler | gemeldete | korrigierte | Fehler | gemeldete | korrigierte | 
| 1 | 100 | 10 | 8 | 80 | 6,4 | 3,2 | 
| 2 | 92 | 9,2 | 7,4 | 76,8 | 6,1 | 3,1 | 
| 3 | 84,6 | 8,5 | 6,8 | 73,7 | 5,9 | 2,9 | 
| 4 | 77,9 | 7,8 | 6,2 | 70,8 | 5,7 | 2,8 | 
| 5 | 71,6 | 7,2 | 5,7 | 67,9 | 5,4 | 2,7 | 
| 6 | 65,9 | 6,6 | 5,3 | 65,2 | 5,2 | 2,6 | 
| 7 | 60,6 | 6,1 | 4,9 | 62,6 | 5 | 2,5 | 
| 8 | 55,8 | 5,6 | 4,5 | 60,1 | 4,8 | 2,4 | 
| 9 | 51,3 | 5,1 | 4,1 | 57,7 | 4,6 | 2,3 | 
| 10 | 47,2 | 4,7 | 3,8 | 55,4 | 4,4 | 2,2 | 
| 11 | 43,4 | 4,3 | 3,5 | 53,2 | 4,3 | 2,1 | 
| 12 | 40 | 4 | 3,2 | 51,1 | 4,1 | 2 | 
Sieht man sich die Fehleranzahl nach der Grenznutzungsdauer des Programms von einem Jahr an, so ist die Open Source Variante leicht in Vorteil. Wichtiger als die absolute Anzahl der Fehler ist aber die Fehlerzahl während der Nutzungsdauer. Nach etwa einem halben Jahr sind im Beispiel die Fehlerzahlen gleich. Mit anderen Worten, die Nutzer der Open Source Software müssen in der Anfangsphase mit erheblich mehr Fehlern rechnen. Auch müssen sie viel häufiger Patchen, was zusätzliche Kosten verursacht. Ist aber die Software über ihre ersten Versionen hinweg, kehrt sich die Qualität um. Nun ist die Open Source Software günstiger.
In einem zweiten Modellfall soll bei gleichen Ausgangswerten auch die Open Source Software einen umfangreichen Test unterzogen werden. Beide Varianten gehen nun mit gleichen Fehlerzahlen an den Start.
| Open Source | Closed Source | |||||
| Monat | Fehler | gemeldete | korrigierte | Fehler | gemeldete | korrigierte | 
| 1 | 80 | 8 | 6,4 | 80 | 6,4 | 3,2 | 
| 2 | 73,6 | 7,4 | 5,9 | 76,8 | 6,1 | 3,1 | 
| 3 | 67,7 | 6,8 | 5,4 | 73,7 | 5,9 | 2,9 | 
| 4 | 62,3 | 6,2 | 5 | 70,8 | 5,7 | 2,8 | 
| 5 | 57,3 | 5,7 | 4,6 | 67,9 | 5,4 | 2,7 | 
| 6 | 52,7 | 5,3 | 4,2 | 65,2 | 5,2 | 2,6 | 
| 7 | 48,5 | 4,9 | 3,9 | 62,6 | 5 | 2,5 | 
| 8 | 44,6 | 4,5 | 3,6 | 60,1 | 4,8 | 2,4 | 
| 9 | 41,1 | 4,1 | 3,3 | 57,7 | 4,6 | 2,3 | 
| 10 | 37,8 | 3,8 | 3 | 55,4 | 4,4 | 2,2 | 
| 11 | 34,8 | 3,5 | 2,8 | 53,2 | 4,3 | 2,1 | 
| 12 | 32 | 3,2 | 2,6 | 51,1 | 4,1 | 2 | 
Jetzt sieht die Lage viel besser für die Open Source Software aus. Ein umfangreicher Test ist wichtig! In diesem Zusammenhang ist auch folgende ZD-Net-Meldung einzuordnen: " Andrew Morton, Kernel-Maintainer und enger Mitstreiter von Linus Torvalds im Linuxkernel-Projekt warnt vor möglicherweise zunehmenden Instabilitäten bei der Weiterentwicklung von Linux." Er sieht die Testphase nicht mehr gewährleistet. Es ist also auch für Open Source entscheidend, wie die Tests organisiert sind und wie effektiv sie durchgeführt werden. Eine Delegation der Tests an die Anwender ist nur eine zweitbeste Lösung.
Das Modell geht von sehr einfachen Annahmen aus. So wird die
    Fehlererkennungsrate als konstant angenommen. In der Praxis ist
    das aber nicht so. Ein neues Programm wird von Interessierten
    getestet. Hier wird eine große Zahl von Fehlern entdeckt.
    Nach und nach wird das Programm dann auch für die
    Allgemeinheit interessanter und die Zahl der entdeckten Fehler
    verändert sich. Sie kann sowohl zunehmen als auch abnehmen
    während dieser Phase. Das hängt neben der Anzahl der
    verbliebenen Fehler stark von der Anzahl, der Aktivität,
    dem Kenntnisstand etc. der Nutzer ab. In der Reifephase nimmt
    die Zahl der Fehlermeldungen in der Regel ab. Das ist aber
    nicht nur auf die Reife des Programms zurückzuführen,
    sondern auch auf das abnehmende Interesse der Nutzer, die
    Abwanderung von Nutzern auf Konkurrenzprodukte etc. Die
    Fehlererkennungsrate schwankt also im Laufe der Nutzung.
    Ebenso ist die Patchwilligkeit der Entwickler nicht zeitlich
    konstant. Hier soll ein wichtiger Aspekt einmal angesprochen
    werden, die Badewannenkurve in technischen
    Zuverlässigkeitsberechnungen.
Eine technische Einrichtung, sei es nun eine
    Werkzeugmaschine, ein Auto oder ein Rechner durchläuft
    während seines Betriebs unterschiedliche Phasen. In der
    ersten Phase, den sogenannten "Kinderkrankheiten", gibt es
    häufig Ausfälle. Diese sind auf Bedienfehler,
    fehlerhafte Teile, fehlerhaften Zusammenbau, fehlenden "burn
    in" Prozess etc. zurückzuführen. Nach einer gewissen
    Zeit verringern sich die Fehler und das System läuft lange
    zuverlässig. Zum Schluß der Nutzung stellen sich
    Abnutzungserscheinungen ein. Das System wird in dieser Phase
    wieder fehleranfälliger. Trägt man die Zahl der
    entdeckten Fehler über die Zeit auf, so entsteht das
    typische Bild einer Badewanne.
    Bei Software scheint das alles anders. Es werden ständig
    Verbesserungen vorgenommen. Die Software müßte also
    immer besser werden. Wird sie aber nicht! Sehr oft wird
    Software, die einmal recht gut lief durch Verbesserungen immer
    unzuverlässiger. Wie kommt das? Neben einer Reihe von
    Gründen scheint meiner Meinung nach ein ganz wichtiger
    Grund zu sein, dass der ursprüngliche Entwickler der
    Software nicht mehr die Entwicklung trägt. Oft hat er das
    Projekt verlassen, oder andere Aufgaben übernommen. Die
    Entwickler, die mit der Pflege vertraut sind, kennen nicht mehr
    alle Einzelheiten des Projektes. Die Weiterentwicklung des
    Projektes erfolgt weniger inhaltlich durch Integration neuer
    Methoden, sondern mehr oberflächlich durch Integration in
    andere Umgebungen, wie beispielsweise graphische
    Nutzerinterfaces. Mit dieser "Softwarepflege" nimmt die
    Zuverlässigkeit oft ab. Die daraus resultierende Kurve
    kann einer Badewannenkurve durchaus ähneln.
Die absolute Anzahl der Fehler in einem Softwareprojekt ist nie bekannt. Sie kann aber aus Erfahrungswerten (z.B 1Fehler/(1000 Programmzeilen)) abgeschätzt werden. Leider ist diese Abschätzung von der Art der Software, vom Programmierer, den Werkzeugen etc. abhängig, so dass es nur grobe Anhaltspunkte gibt. Betrachtet man, wie in Studien immer wieder zu beobachten, die Anzahl der entdeckten Fehler pro Zeiteinheit, kann das ein völlig falsches Bild setzen. Anscheinend hat die Closed Source Software eine bessere Güte, da die Zahl der entdeckten Fehler kleiner als die bei der Open Source ist. Das wird von Firmen gern hervorgehoben, ist aber nicht zulässig. Entscheidend ist nicht die Anzahl bis zu einem Zeitpunkt entdeckten Fehler, sondern die Anzahl der verbleibenden Fehler. Letztere kann sehr unterschiedlich ausfallen, wie die Modellrechnungen zeigten. Sehr wichtig ist außerdem, wie schnell auf entdeckte Fehler reagiert wird und natürlich wie gefährlich diese Fehler waren. Bei unserem Projekt ist es wichtig, die Anwender in die Entwicklung einzubeziehen. Der Anwender bekommt häufige Patches und liefert Fehlerberichte und Hinweise, Wünsche für die Weiterentwicklung. Für die Entwicklung wissenschaftlicher Software kann dieser Weg optimal sein. Andere Projekte, die z.B. Internetapplikationen entwickeln, müssen viel mehr in die Sicherheit investieren, was eine umfangreiche Testphase voraussetzt.
Die einfache Modellrechnung zeigte, dass Open Source nicht
    per se zuverlässiger ist. Sie hat durch ihre Offenheit das
    Potential besser zu werden. Zu beachten ist, dass dieser
    Prozeß der Stabilisierung Zeit benötigt und vom
    Anwender das häufige Einspielen von Patches erfordert. In
    der Regel ist Letzteres für den Nutzer von Open Source
    wichtiger als für den Nutzer von Closed Source. Wobei das
    auch wieder vom Umfeld abhängt. So können Fehler in
    vernetzten Microsoft Systemen allein durch ihre höhere
    Verbreitung eine größere Auswirkung haben als
    Linuxrechner.
    Ein umfangreicher Test sollte unabhängig von Art der
    Software durchgeführt werden. Hier kann Open Source die
    bessere Lösung sein, da durch die Quelloffenheit der Kreis
    der Tester einfach erweiterbar ist. Ein Tester, der den
    Quelltext versteht und dem Fehler auf den Grund geht, leistet
    viel mehr als ein Nutzer der einen Fehlerbericht abgibt.
    Der Bewertung nach der Fehlerrate sollte man kritisch
    gegenüber stehen. Nur wenn die Randwerte (wie sind die
    Fehler einzuordnen, wie wird auf sie reagiert, wieviele Nutzer
    sind betroffen, wie wird auf Fehlermeldungen von Seiten der
    Entwickler reagiert, wieviele Nutzer melden Fehler, werden die
    gemeldeten Fehler öffentlich etc.) bekannt sind, sagt die
    Fehlerrate etwas aus. Ein Verschweigen der Randbedingungen kann
    ein völlig falsches Bild vermitteln.
     Ich habe mich bemüht einige Gedanken zu diesem
    kontroversen Thema zusammenzutragen und möglichst objektiv
    zu bleiben. Um zu wirklich beweiskräftigen Aussagen zu
    kommen, müssen die Abschätzungen durch Messungen
    unterlegt werden. Es wäre schön, könnten
    möglichst viele an diesen Messungen und Tests beteiligen
    und diese Tests statistisch auswerten. Damit könnte die
    Schwäche der obigen Modellrechnung, die auf reinen
    Annahmen beruht, überwunden werden.
    
| Der LinuxFocus Redaktion schreiben © Ralf Wieland "some rights reserved" see linuxfocus.org/license/ http://www.LinuxFocus.org | Autoren und Übersetzer: 
 | 
2005-06-26, generated by lfparser version 2.52