Produktivität in der Software-Entwicklung - Spezialfall Open

Document Sample
Produktivität in der Software-Entwicklung - Spezialfall Open Powered By Docstoc
					Produktivitat in der Software-Entwicklung -
            ¨
Spezialfall Open Source: Software-Metriken
                   Stefan Koch
               13. September 2002




               Stefan Koch


       Abteilung fur Informationswirtschaft
                   ¨
    Institut fur Informationsverarbeitung und
              ¨
              Informationswirtschaft
                               a
           Wirtschaftsuniversit¨t Wien
                                  ¨
      Augasse 2-6, A-1090 Wien, Osterreich
         Telefon: +43-1-31336-5206
      E-mail: Stefan.Koch@wu-wien.ac.at
      URL: http://wwwai.wu-wien.ac.at/




                        1
Inhaltsverzeichnis




1. Grundlagen
2. Lines-of-Code
3. Cyclomatic Complexity
4. Halstead-Maß
5. Metriken der objekt-orientierten Program-
   mierung
6. Mannmonat
7. Messung von Produktivitat in Open Sour-
                          ¨
   ce Projekten




                    1
Grundlagen

 • Metrik: Zuordnung einer Zahl zu einer Entit¨t, um ein
                                                   a
   spezielles Attribut dieser Entitat zu charakterisieren
                                   ¨
 • Klassen von Software-Metriken
    – Produktmetriken: Maßzahlen fur das Software-Produkt
                                  ¨
    – Prozessmetriken: Quantifizierung von Attributen des
      Entwicklungsprozesses und der Entwicklungsumgebung
 • Attribute von Entit¨ten
                      a
                                            a
    – interne, d.h. solche, die an der Entit¨t selbst gemessen
      werden
    – externe, d.h. solche, die nur daran gemessen werden
       o                     a
      k¨nnen, wie die Entit¨t in einer Beziehung zu ihrer
      Umwelt steht
 • Messung von Software-Metriken
                      a
    – direkt: ohne Abh¨ngigkeit von einem anderen Attribut
    – indirekt: inkludiert die Messung eines oder mehrerer
      anderer Attribute
    – objektiv oder algorithmisch: Messung kann prazise nach
                                                  ¨
      einem Algorithmus vorgenommen werden, Ergebnis ist
      daher reproduzierbar und hangt nicht von Ort, Zeit
                                   ¨
      oder Beobachter ab
    – subjektiv
                             2
• Anforderungen an Software-Metriken (Meta-Metriken zur
  Evaluation von Metriken, meist nur subjektiv messbar)
   – Einfachheit
   – Validitat (wird das gemessen, was gemessen werden
            ¨
     soll)
                           a                 ¨
   – Robustheit (Sensitivit¨t der Metrik auf Anderungen,
     die die Performanz der Software nicht beeinflussen)
   – Analysierbarkeit mit statistischen Mitteln
   – Eignung im Rahmen des Software-Projektmanagements
                                 a
   – ’wholeness’ (die Komplexit¨t einer zusammengesetz-
     ten Entitat soll mindestens die Summe der Komple-
               ¨
        a
     xit¨ten ihrer Teile betragen)
               a               ¨
   – Sensitivit¨t auf atomare Anderungen
   – andere Auflistung: ’association, consistency, discrimi-
     native power, tracking, predictability, repeatability’
• Verwendung und Nutzen
   – jede Erhebung sollte von klaren und wohldefinierten
     Zielen geleitet sein, da jede Messung Kosten verur-
     sacht (z.B. Goal/Question/Metric-Ansatz: ausgehend
     von der Definition der Projektziele wird systematisch
     eine Verfeinerung dieser in Form einer Reihe von Fra-
     gen vorgenommen, die dann jeweils durch passende
     Metriken mit quantitativen Daten beantwortet wer-
           o
     den k¨nnen; damit soll eine zielgerichtete Erhebung

                           3
                            a          o
     von ausschließlich tats¨chlich ben¨tigten Metriken si-
     chergestellt werden.)
   – Feststellung (’assessment’) im Rahmen der Steuerung
     eines Software-Projekts (Wie weit sind wir?)
   – Vorhersage (’prediction’) von Charakteristiken von Pro-
                          a
     jekten (Aufwandssch¨tzung)
   – andere Einteilung: taktische Anwendung in Rahmen
     des Projektmanagements, strategische Anwendung im
     Rahmen der Prozessverbesserung (basierend auf den
     Daten von alten Projekten wird der Entwicklungspro-
     zess angepasst)
• meistens gemessen: Gr¨ße und Komplexit¨t von Software-
                       o                a
  Artefakten, Aufwand der Entwicklung
• inzwischen aber auch: andere Artefakte der Entwicklung
                          a
  von Software, z.B. die w¨hrend dieses Prozesses mittels
  E-Mail oder Diskussiongruppen stattfindende Kommuni-
  kation




                           4
Lines-of-Code

 • eine der gebr¨uchlichsten Metriken fur die Gr¨ße einer
                a                      ¨        o
   Software
 • LOC oder Programmzeilen
 • jedoch unterschiedliche Definitionen (Was wird gez¨hlt?)
                                                    a
    – ausfuhrbare Programmzeilen oder Anweisungen in je-
          ¨
           a
      der g¨ngigen Definition inkludiert
    – Kommentare ?
    – Leerzeilen ?
    – ohne diese beiden: NCSS (Non Commentary Source
      Statements)
    – Deklarationen von Variablen oder Prozeduren ?
    – Anweisungen im Header ?
    – Compiler-Anweisungen ?
    – Programmzeile kann mehrere Anweisungen umfassen
      (Trennzeichen)
          ¨                  a           o
    – bei Uberarbeitungen: Z¨hlung von L¨schen und Mo-
      difikation von einzelnen Programmzeilen
       a
    – Z¨hlung bei Wiederverwendung von Code-Bestandteilen
      (Reuse)
 • organisationsweit einheitliche Definition unumganglich
                                                 ¨

                            5
• Verbindung zum Anreizsystem beachten
   – weder uberlange Programme sinnvoll, um gute Pro-
            ¨
             a
     duktivit¨tskennzahlen zu erreichen
                                 a     a
   – noch Programme unter unverh¨ltnism¨ßig hohem Zeit-
               o
     aufwand m¨glichst kurz halten
• Vorteil: einfach, verst¨ndlich, automatisiert erhebbar
                         a
• Probleme
                                  o
   – Sprachabhangigkeit, fur die L¨sung eines Problems sind
                ¨          ¨
     in unterschiedlichen Sprachen unterschiedlich viele Zei-
          o
     len n¨tig (damit keine Vergleichbarkeit der erhobenen
     Daten)
   – mißt eigentlich nur Große (etwa fur die Speicherung
                           ¨          ¨
     oder einen Ausdruck)
                          a
   – und nicht Komplexit¨t (Beispiel rekursive Program-
     me: geringe Anzahl von LOC, aber hoher Schwierig-
     keitsgrad bei der Entwicklung)




                            6
                       Beispiel
use DBI;
#open log files
while(<CVS>) {
my $count;
if (/^RCS file: cvsroot([^]+)(.+),/)
{
$project=$1;$realfile=$1."/".$2;
$file=$realfile;
$file =~ tr/’/"/;
$sumadd=0;$sumdel=0;$count++;

my $instr="insert into file values (’$file’,’$project’)";
print $instr;
}
elsif (/^date: (.+); author: (w+); state: Exp;$/)
{
$date=$1;$prog=$2;
$lines_total=‘wc -l ¨
                    $datadir/$realfile¨‘;
}
close CVS;
}

LOC: 21, 20 (ohne Leerzeilen), 19 (ohne Kommentar), 17
(ohne Deklarationen), 12 (nur Zeilen mit Befehlen), 16 (je-
der Befehl)?

                          7
Cyclomatic Complexity

 • zyklomatische Komplexit¨t (McCabe)
                          a
 • beruht auf der Kontrollflußstruktur (’control flow graph’
   oder ’flowgraph’) eines Programms
 • mißt die Anzahl der linear unabh¨ngigen Wege durch den
                                   a
   Flowgraph F
 • bei e Kanten, n Knoten und p Zusammenhangskompo-
   nenten
                    v(F ) = e − n + 2p          (1)
 • v(F ) ≥ 1
 • Knoten: Block sequentieller Anweisungen, die keine inter-
   nen Verzweigungen aufweisen
 • Kante: moglicher Kontrollfluß zwischen den Knoten
           ¨
 • Zusammenhangskomponenten: unabh¨ngige Programmkom-
                                      a
   ponenten (Module oder Prozeduren, immer mindestens 1)
 • Annahme: Module mit einer Cyclomatic Complexity von
                                  a
   mehr als 10 besonders fehleranf¨llig
 • erlaubt Aussagen uber die Komplexit¨t des Kontrollflusses
                    ¨                 a
 • beeinflußt vor allem das Testen, bei dem alle Pfade be-
   trachtet werden sollten

                             8
• eigentlicher Umfang des Programmes wird nicht beachtet,
  da jeder Knoten des Graphen beliebig viele Anweisungen
  enthalten kann, solange sich keine Verzweigung darunter
  befindet




          e = 15                   e = 11
          n = 13                   n = 9
          v(F) = 15 - 13 + 2       v(F) = 11 -9 + 2




                               9
Halstead-Maß

 • Grundidee: Z¨hlen von Operatoren (Symbole, die den Wert
               a
   oder die Anordnung eines Operanden beeinflussen) und
   Operanden (Variablen oder Konstanten)
 • gemessen werden jeweils die Gesamtanzahl sowie die An-
   zahl der verschiedenen Operatoren bzw. Operanden in der
   vorliegenden Implementierung (N1 und N2 bzw. η1 und
   η2 )
 • Beispiel (N1=4, N2=4, η1=2, η2=3)
   print $name;
   print $adresse;
   print $alter;
   $alter++;
 • Vokabular: η = η1 + η2
 • Implementierungslange: N = N1 + N2
                    ¨
 • Gr¨ße der Implementierung eines Algorithmus: Volumen
      o
                            a
   V = N log2 η (in Bit, abh¨ngig von Implementierungs-
   sprache)
 • es kann dann das Verh¨ltnis zum minimalen oder poten-
                           a
   tiellen Volumen (in einer Programmiersprache, in der der
   betrachtete Algorithmus bereits definiert oder implemen-
   tiert ist, zum Beispiel als Subroutine oder Prozedur) be-
   rechnet werden (Programmstufe L)
                            10
• Schwierigkeit D des Verst¨ndnisses invers zu der Programm-
                           a
                                              a
  stufe (um ein Konzept jemandem zu erkl¨ren, der uber  ¨
                                            o
  nur geringes Wissen verfugt, muß ein h¨heres Volumen
                           ¨
  verwendet werden)
• Kombination mit Cyclomatic Complexity: in einem er-
  sten Schritt wird jeder Kontrollstruktur eine Cyclomatic
  Complexity gleich ihrer Schachtelungsebene plus eins zu-
  geordnet, fur jeden Operator oder Operand, der Teil ei-
              ¨
  ner Kontrollstruktur ist, wird zu N1 oder N2 eins hinzu-
  gefugt, plus der Schachtelungsebene der jeweiligen Kon-
     ¨
  trollstruktur (also im Endeffekt die Cyclomatic Comple-
  xity der Kontrollstruktur), ergibt gewichtetes Maß fur die
                                                      ¨
             a
  Komplexit¨t (die Operatoren und Operanden auf hohen
  Schachtelungsebenen werden hoher bewertet)
                                  ¨




                            11
Metriken der objekt-orientierten Pro-
grammierung

 • steigende Popularitat des objekt-orientierten Paradigmas
                      ¨
 • Analyse und die Quantifizierung von Attributen der ent-
   sprechenden Designs und Software-Artefakte zunehmend
   wichtiger
 • bekanntester Ansatz von Chidamber und Kemerer (Maß-
   zahlen fur jede Klasse, teilweise gute Indikatoren fur feh-
            ¨                                          ¨
         a
   leranf¨llige Klassen)
                                             a
    – ’weighted methods per class’: Komplexit¨t einer Klas-
      se, fur jede Funktion der Wert 1
           ¨
                                    a         a
    – ’depth in inheritance tree’: L¨nge des l¨ngsten Pfades
      durch die Vererbungshierarchie bis zum betrachteten
      Modul
    – ’number of children’: Anzahl der Klassen, die direkt
      von dieser erben
    – ’coupling between methods’: Anzahl der Module, die
      mit dem betrachteten gekoppelt sind (wenn eine da-
      von die Funktionen und/oder die Instanzvariablen der
      anderen benutzt)
    – ’response for a class’: Anzahl der Methoden, die poten-
                                 o
      tiell ausgefuhrt werden k¨nnen, wenn ein Objekt der
                  ¨
                                               a
      betrachteten Klasse eine Nachricht empf¨ngt

                             12
   – ’lack of cohesion on methods’: Anzahl der Methoden-
     Paare, die keine gemeinsamen Instanzvariablen haben,
     abzuglich der Anzahl der Methoden-Paare, die solche
         ¨
     besitzen
• Erganzungen und andere Ans¨tze:
     ¨                      a
   – ’inheritance coupling’: Anzahl der Vaterklassen, mit
     der eine Klasse gekoppelt ist (wenn eine der geerbten
     Methoden eine neue oder neu definierte Variable oder
     Methode benutzt)
   – ’coupling between methods’: Anzahl der neuen oder
     neu definierten Methoden, mit denen die geerbten Me-
     thoden gekoppelt sind
   – ’number of objects/memory allocation’: Anzahl der
     Befehle, die neue Objekte oder Speicher in einer Klasse
     allozieren
                                                      o
   – ’average method complexity’: durchschnittliche Gr¨ße
     der Methoden einer Klasse (z.B. in LOC)
   – MOOD-Gruppe: Method Inheritance Factor, Attribu-
     te Inheritance Factor, Coupling Factor, Clustering Fac-
     tor, Polymorphism Factor, Method Hiding Factor, At-
     tribute Hiding Factor und Reuse Factor (alle in Pro-
     zenten, sollen grundlegende Mechanismen des objekt-
     orientierten Paradigmas wie Kapselung oder Vererbung
     ohne Berucksichtigung der Implementierungssprache
               ¨
     ansprechen, Systemsicht, und damit komplement¨r zua
     dem Ansatz von Chidamber und Kemerer)
                           13
Mannmonat

• Mann- oder Personenmonate sind die gebr¨uchlichste Me-
                                          a
  trik fur den Aufwand, beispielsweise eines Projekts wie
        ¨
  einer Software-Entwicklung
• 1 Mannmonat bedeutet vereinfacht die T¨tigkeit eines Men-
                                        a
  schen uber ein Monat
        ¨
• 1 Mannmonat sind 19 Manntage bzw. 152 Mannstunden,
  12 Mannmonate sind ein Mannjahr
• Mannmonate sind der gebr¨uchlichste Output von Auf-
                          a
          a
  wandssch¨tzungsmodellen
• grundsatzlich wurden logischerweise 24 Mannmonate der
         ¨       ¨
  Arbeit eines Menschen fur 2 Jahre, oder von 24 Menschen
                         ¨
  fur 1 Monat entsprechen
   ¨
• Zusammenhang ist aber nicht durchgehend gegeben:
                  o
   – durch eine h¨here Anzahl von Beteiligten entstehen
       o
     h¨here Kommunikationskosten (wenn jeder mit jedem
     in einer Gruppe von n Personen kommunizieren muss,
     im Ausmaß von n(n − 1)/2 oder von quadratischer
     Ordnung), die den linearen Zuwachs an Fortschritt pro
     Person irgendwann ubersteigt
                         ¨
   – Aufgaben sind nicht auf beliebig viele Personen ver-
     teilbar (in der Software-Entwicklung wie in der Pro-
     duktion physischer Guter), wenn die Entwicklungszeit
                          ¨
                           14
  verringert werden soll, muss dies aber passieren: in der
  SW-Entwicklung Modularisierung (Klassen) mit defi-
  nierten Schnittstellen (auch zur Reduzierung der not-
  wendigen Kommunikation und Koordination)
                                              ¨
– ’The Mythical Man-Month’ (Brooks): bei Uberschrei-
  ten von Terminen wird durch das Management oft
  mehr Personal zugefuhrt; dadurch, daß die erfahrenen
                       ¨
  Mitarbeiter diese nun anlernen mussen, damit sie pro-
                                     ¨
                                       o
  duktiv werden, kann sogar eine Verz¨gerung eintreten
  (Brooks’s Law: ’Adding manpower to a late software
  project makes it later’)




                         15
                       a
Messung von Produktivit¨t in Open
Source Projekten
Grundproblematik

 • Ziel ist es, die Produktivit¨t bei dieser Form der Entwick-
                               a
   lung zu messen
 • kann als Grundlage fur Vergleiche mit kommerzieller Ent-
                       ¨
   wicklung dienen, um Gemeinsamkeiten und Unterschiede
   zu erkennen
 • m¨glicherweise w¨re eine Kombination der verschiedenen
     o             a
                                         ¨
   Entwicklungsmodelle interessant (z.B. Ubernahme von Ide-
                                           a
   en zur Motivation von Mitarbeiter oder ¨hnliches)
 • besonders interessant daher: beteiligte Personen, deren Auf-
   wand, Zusammenarbeit, Kommunikation, sowie die Ent-
   wicklung uber die Zeit (wann arbeiten wieviele Personen
             ¨
   mit, wie entwickelt sich Grosse der Software, wie das Aus-
                              ¨
   maß der Kommunikation)
 • bisher relativ wenige empirische Arbeiten
    – empirische Untersuchung des GNOME-Projektes (sie-
      he unten)
    – vergleichbare empirische Untersuchung des Apache-Projekts
      (siehe unten)
    – Fragebogen-Untersuchung zur Motivation
                             16
   – Fragebogen-Untersuchung aus sozialwissenschaftlicher
     Perspektive zu Motivation, Aufwand etc. unter Linux-
     Kernel-Entwicklern (siehe unten)
   – Untersuchung von Mitwirkenden und Projekten an-
                                      a
     hand von Linux Software Map Eintr¨gen (siehe unten)
   – Untersuchung von Autoren und Projekten anhand von
     Credits im Source Code von RedHat Linux und fresh-
     meat (siehe unten)
          a
   – Beitr¨ge in Sourceforge (siehe unten)
                     o
   – Evolution der Gr¨sse von Linux und Subsystemen
• Nachteile fur die Untersuchung
             ¨
   – kein zentrales Management, daher keine entsprechende
     Datenaufzeichnung
                                         a          a
   – keine Entlohnung, daher keine Zeitbl¨tter oder ¨hnli-
     ches
• Vorteile fur die Untersuchung
            ¨
   – freier Zutritt zur Entwicklergemeinde im OS-Modell
   – daher alle Koordinations- und Kooperationsmechanis-
     men wie Source-Code-Verwaltung oder Mailing-Listen
             a
     frei zug¨nglich
   – Source Code frei
   – grundsatzliche Einstellung zu Themen wie Forschung,
            ¨
     Pressefreiheit,...

                           17
Messung im GNOME-Projekt

• Grundidee: Verwendung von ¨ffentlich zug¨nglichen Da-
                            o            a
  tenquellen
   – beeinflußt weiteren Ablauf des Entwicklungsprozesses
     nicht
   – meist kostengunstig
                  ¨
   – objektive oder algorithmische Messung
   – historische Daten vorhanden
• Untersuchungsgegenstand GNOME Projekt
   – GNU Network Object Model Environment
   – unter GNU GPL
   – Konkurrenz KDE (K Desktop Environment) aufgrund
     der Verwendung der Qt-Bibliothek von Troll Tech (nicht
     vollig ’frei’) abgelehnt
      ¨
   – Grundung im Sommer 1997
       ¨
   – Ziel
      ∗ GNOME Desktop: benutzerfreundliches graphisches
        User Interface inklusive einiger Applets
      ∗ GNOME Entwicklungsplattform: Sammlung von Werk-
        zeugen (zum Beispiel Glade Builder zum Prototy-
        pen und Erstellen von Benutzerschnittstellen), Bi-
        bliotheken (wie dem Toolkit GTK+ fur User Inter-
                                              ¨
                           18
        faces) und Komponenten zur Anwendungsentwick-
        lung unter Unix
      ∗ GNOME Office: Reihe von Buro- und Produkti-
                                     ¨
           a
        vit¨tsapplikationen (GIMP, AbiWord, Gnumeric)
   – Release 1.0 im Marz 1999
                       ¨
   – Technologie: strikt objekt-orientierte Architektur, Im-
     plementierungssprache vor allem C
   – gutes Beispiel
      ∗ Beispiel fur eine moderne Software-Entwicklung
                  ¨
      ∗ Entwicklung ist vollst¨ndig dokumentiert und auch
                              a
                                               a       a
        die historischen Daten sind uneingeschr¨nkt zug¨ng-
        lich, Source-Code-Verwaltungssystem vom Beginn
        des Projektes an eingesetzt
      ∗ umfangreiches und vielf¨ltiges Projekt
                                 a
      ∗ attraktiv, in der Open Source Gemeinschaft aner-
                                                      a
        kannt, und auch in den Medien entsprechend pr¨sent
• Vorgehen bei der Analyse eines Projektes anhand von vor-
  handenen Datenquellen
   – Erlangung eines generellen Verstandnisses fur die Or-
                                     ¨          ¨
     ganisation, das Projekt und den Entwicklungsprozeß.
   – Identifikation moglicher Datenquellen.
                    ¨
   – Identifikation von Metriken zur Erfolgsmessung des
     Projekts und des Prozesses.
   – Identifikation von Metriken, die aus den Datenquellen
                        o
     gewonnen werden k¨nnen.
                           19
   – Extraktion der Daten und Durchfuhrung der Analyse.
                                    ¨
   – Interpretation der Ergebnisse.
• zentraler Punkt: Source-Code-Verwaltung
• im GNOME-Projekt: CVS mit Bonsai-Frontend im Ein-
  satz
• weitere Datenquelle: Mailing-Listen des GNOME-Projektes
• Speicherung der gewonnenen Daten in einer Datenbank,
  daher Erstellung eines Datenmodells
                                                Name
                               Person


    E-Mail                                                        Alias
                     Poster                Programmierer
                          1                      m
                                                                  LOC
      schreibt
                                    trägt bei                    Datum
                                  ("checkin")
                                                                 Revision
        n        1
                         ist Antwort auf                         Komm.
      Posting
                     n                                       n
                                                     n
                                                         File              Name
      Datum          Inhalt      Subject
                                                         m                 Pfad
                              gehört zu

                     Name         1             Revision gehört zu     n
                                 Modul                               Release

                                                           Nummer           Datum

       Abbildung 1: Datenmodell eines Open Source Projektes



                                           20
• Extraktion der Daten uber Perl-Scripts (zuerst Queries
                       ¨
  uber WWW, dann Parsing und Befullung der Datenbank)
  ¨                               ¨
• Abfragen an die Datenbank und Auswertung der Ergeb-
  nisse




                          21
Empirische Ergebnisse

 • Definition der verwendeten Metriken
                            o
    – Hinzugefugte und gel¨schte Lines-of-Code: Definition
               ¨
      aus dem Source-Code-Verwaltungssystem CVS uber-   ¨
      nommen, daher wird jede Zeile, ausgenommen Leer-
      zeilen gezahlt, jede Zeile, die geandert wurde, als eine
                ¨                       ¨
         o
      gel¨schte und eine hinzugefugte Zeile gewertet, Diffe-
                                    ¨
                                        ¨                  o
      renz dieser beiden Werte ist die Anderung in der Gr¨ße
      der entsprechenden Datei in dem betrachteten Zeit-
      raum, kann aufsummiert werden
    – Anzahl von Checkins: wie oft wurde etwas in CVS ein-
      gechecked
    – Zeit eines Programmierers im Projekt: Zeitraum zwi-
      schen seinem ersten und seinem letzten Checkin, obere
                           a
      Schranke fur die tats¨chliche Arbeitszeit
                 ¨
    – Aktive Zeit eines Files: analog
    – Anzahl aktiver Programmierer: Programmierer wird
      als aktiv definiert, wenn er in dem betrachteten Zeit-
      raum (z.B. ein Monat) mindestens einen Checkin durch-
      gefuhrt hat
         ¨
    – Anzahl von Postings: jede Nachricht an eine der Mailing-
                                                           a
      Listen des GNOME-Projekts wird als ein Posting gez¨hlt,
      kann Reply auf ein anderes Posting sein

                             22
• Beitr¨ge der Programmierer
       a
   – 301 unterschiedliche Programmierer
                                                       o
   – insgesamt 6 300 000 LOC hinzugefugt, 4 500 000 gel¨scht,
                                     ¨
     Gesamtgroße von GNOME circa 1 800 000 LOC am
              ¨
     Ende
   – Durchschnittswert fur die durch einen Programmierer
                        ¨
                              a
     hinzugefugten LOC betr¨gt 21 000 mit Standardab-
             ¨
     weichung von 67 000
                   o
   – Anzahl der gel¨schten LOC: Durchschnitt von 15 000
     mit 48 000 Standardabweichung

       300




       200




       100




         0
             0.
             50
             10 00.
             15 000
             20 000 0
             25 000 0
             30 000 0
             35 000 0
             40 000 0
             45 000 0
             50 000 0
             55 000 0
             60 000 0
             65 000 0
             70 000 0
             75 000 0
             80 000 0
             85 000 0
             90 000 0
             95 000 0
              0
                0
                0 0
                0 .
                0 .
                0 .
                0 .
                0 .
                0 .
                0 .
                0 .
                0 .
                0 .
                0 .
                0 .
                0 .
                0 .
                0 .
                0 .
                00 .0
                  00
                     .0




                                      u
  Abbildung 2: Histogramm der hinzugef¨gten LOC pro Programmierer


                                          a
   – Unterschiede in den geleisteten Beitr¨gen sehr hoch
                                23
                                          Abbildung 3: Histogramm der gel¨schten LOC pro Programmierer
                                     .0
                                00
                           00
                      60             .0
                                00
                           00
                      55             .0
                                00
                           00
                      50             .0
                                00
                           00
                      45             .0
                                00
                           00
                      40             .0
                                00
                           00
                      35             .0
                                00
                           00
                      30             .0
                                00




                                                                         o




                                                                                                         24
                           00
                      25             .0
                                00
                           00
                      20             .0
                                00
                           00
                      15             .0
                                00
                           00
                      10             0
                                0.
                           00
                      50
                        0
                      0.




300




      200




            100




                  0
                                              a
– Umfrage unter 142 Linux-Kernel-Entwicklern: ¨hnli-
  che Ergebnisse
   60



   50



   40



   30



   20



   10


    0
        0.0       10000.0   20000.0   30000.0   40000.0   50000.0   60000.0   70000.0
              5000.0   15000.0   25000.0   35000.0   45000.0   55000.0   65000.0

Abbildung 4: Histogramm der LOC pro Linux-Kernel-Programmierer


– Analyse des Apache-Projekts: insgesamt knapp 400
                                                o
  Programmierer, die 15 Programmierer mit den h¨chsten
       a
  Beitr¨gen fur 88 Prozent der hinzugefugten LOC ver-
             ¨                          ¨
  antwortlich
– Untersuchung des Source Codes von RedHat Linux
  und freshmeat: 12 700 verschiedene Programmierer,
  oberste Dezil fur 72 Prozent und das zweite Dezil fur
                 ¨                                   ¨
  knapp 9 Prozent des Codes verantwortlich
                                  o
– GNOME-Projekt: Kerngruppe gr¨ßer, 15 Programmie-
               o            a
  rer mit den h¨chsten Beitr¨gen nur fur 52 Prozent der
                                      ¨
                                           25
          hinzugefugten LOC verantwortlich, fur 80 Prozent sind
                   ¨                         ¨
          die obersten 52 Programmierer notwendig, fur 90 Pro-
                                                     ¨
          zent die obersten 83
          1.0




           .8




           .6




           .4




           .2



          0.0
                1        33        65        97         129         161         193         225         257         289
                    17        49        81        113         145         177         209         241         273

Abbildung 5: Prozentueller Anteil jedes Programmierers am Gesamtcode (Program-
mierer geordnet nach deren Anteil)



       – Folgerung:
           ∗ innerer Kreis von Programmierern existiert, der fur
                                                              ¨
             einen Großteil des Source Codes verantwortlich ist
           ∗ Unterschied zu kommerzieller Entwicklung
           ∗ Große der Gruppe circa funf bis knapp zwanzig
                ¨                      ¨
             Prozent aller Programmierer, damit relativ einfa-
             che Koordination und Kommunikation

                                                         26
   ∗ ¨hnlich zu Chief Programmer Team Organisation:
     a
                        o
     jeder Teil eines gr¨ßeren Projekts von einem Team
     bearbeitet, das einem Chirurgenteam nachempfun-
     den ist, zentrale Person stellt der Chief Programmer
     dar, der weitgehend alleine fur Spezifikation, Design
                                   ¨
     und Codierung verantwortlich ist, wird von einer
     Reihe weiterer Mitglieder des Teams unterstutzt, so
                                                    ¨
     zum Beispiel von einem Administrator, einem Ver-
     antwortlichen fur die Dokumentation, einem Tester
                     ¨
     oder einem Bibliothekar fur alle Aufzeichnungen in-
                                ¨
     klusive des Source Codes
– weiterer Indikator fur den Beitrag eines Programmie-
                      ¨
  rers: Anzahl der Checkins (insgesamt 220 000), Mittel-
  wert von 731 mit einer Standardabweichung von 1 857,
  ¨hnliche Verteilung
  a
– Zeit eines Programmierers bei dem Projekt hat einen
  Mittelwert von 246 Tagen, Standardabweichung von
  213, deutlich geringerer Unterschied zwischen den ein-
  zelnen Personen
                                         o
– Korrelationen: LOC hinzugefugt und gel¨scht hoch (auf-
                               ¨
  grund Definition wenig uberraschend), zwischen den
                           ¨
  hinzugefugten LOC und der Anzahl der Checkins eben-
           ¨
                    a
  falls hoch (daher ¨hnlicher Programmierstil), zwischen
  Zeit bei dem Projekt und der Gesamtzahl der hinzu-
  gefugten LOC eher niedrig (Zeit im Projekt stellt da-
      ¨
  mit keinen geeigneten Indikator fur den Output dar,
                                    ¨
  Unterschied zu kommerzieller Software-Entwicklung,
                        27
       80




       60




       40




       20




        0
            0.


                 10


                          20


                                   30


                                            40


                                                      50


                                                               60


                                                                        70


                                                                                 80


                                                                                          90


                                                                                                   10
            0


                  0.


                           0.


                                    0.


                                             0.


                                                       0.


                                                                0.


                                                                         0.


                                                                                  0.


                                                                                           0.


                                                                                                    00
                      0


                               0


                                        0


                                                 0


                                                           0


                                                                    0


                                                                             0


                                                                                      0


                                                                                               0


                                                                                                        .0




Abbildung 6: Histogramm der Zeit jedes Programmierers bei dem Projekt




                                                 28
    Leute verbringen Zeit anders)

                     700000


                     600000


                     500000


                     400000


                     300000


                     200000
      LOC gelöscht




                     100000


                          0

                     -100000
                         -200000    0    200000      400000   600000   800000 1000000


                              LOC hinzugefügt

                     u           o           u
Abbildung 7: Hinzugef¨gte und gel¨schte LOC f¨r jeden Programmierer




                                                29
                              1200


                              1000


                               800


                               600


                               400
          Zeit beim Projekt




                               200


                                 0


                              -200
                               -200000      0    200000     400000   600000   800000   1000000


                                     LOC hinzugefügt

                     u                               u
Abbildung 8: Hinzugef¨gte LOC und Zeit beim Projekt f¨r jeden Programmierer




                                                       30
• Beitr¨ge in den Mailing-Listen
       a
   – 1 881 Personen in Mailing-Listen aktiv
   – insgesamt 19 909 Postings, 6 903 Antworten (’replies’)
                                a
   – Durchschnitt von 10.6 Beitr¨gen pro Person mit einer
     Standardabweichung von 43
   – 175 identifizierte Programmierer: insgesamt fur 7 455
                                                 ¨
              a
     der Beitr¨ge verantwortlich (Anteil von uber 34 Pro-
                                             ¨
     zent), durchschnittliche Anzahl 43
   – Beziehung zwischen der Anzahl der hinzugefugten LOC
                                               ¨
     als Maßzahl fur die Programmierleistung und der An-
                  ¨
     zahl der Postings als Maßzahl fur die Beteiligung an
                                    ¨
     der Kommunikation: hohe Korrelation




                           31
                      1200


                      1000


                       800


                       600


                       400


                       200
           Postings




                         0


                      -200
                       -200000      0    200000     400000   600000   800000   1000000


                             LOC hinzugefügt

                     u                      u
Abbildung 9: Hinzugef¨gte LOC und Postings f¨r jeden identifizierten Programmie-
rer




                                               32
• Files des Projektes
   – 38 634 unterschiedliche Files
   – zu einem bestimmten File hinzugefugten LOC weisen
                                      ¨
     einen Mittelwert von 163 mit einer Standardabwei-
     chung von 1 136 auf
   – geloschte LOC Mittelwert von 116, eine Standardab-
        ¨
     weichung von 984

      40000




      30000




      20000




      10000




          0
              0.

                   50

                         10

                                  15

                                           20

                                                    25

                                                             30

                                                                      35

                                                                               40

                                                                                        45

                                                                                                 50

                                                                                                          55

                                                                                                                   60
              0

                    00

                             00

                                      00

                                               00

                                                        00

                                                                 00

                                                                          00

                                                                                   00

                                                                                            00

                                                                                                     00

                                                                                                              00

                                                                                                                       00
                        .0

                              0.

                                       0.

                                                0.

                                                         0.

                                                                  0.

                                                                           0.

                                                                                    0.

                                                                                             0.

                                                                                                      0.

                                                                                                               0.

                                                                                                                        0.
                                  0

                                           0

                                                    0

                                                             0

                                                                      0

                                                                               0

                                                                                        0

                                                                                                 0

                                                                                                          0

                                                                                                                   0

                                                                                                                            0




                                           u
      Abbildung 10: Histogramm der hinzugef¨gten LOC pro File


                         o
   – durchschnittliche Gr¨ße einer Datei zum Abschluß des
     Beobachtungszeitraumes 46 LOC
   – Anzahl der Checkins, die fur ein einzelnes File durch-
                               ¨
                         a
     gefuhrt wurden, betr¨gt im Mittel 6 (Standardabwei-
        ¨
                                                     33
    chung 18)
–   aktive Zeit eines Files Mittelwert von 95 Tagen mit
    einer Standardabweichung von 152
–   Korrelation zwischen den fur ein File hinzugefugten
                                  ¨                     ¨
            o
    und gel¨schten LOC wieder sehr hoch
–   zwischen Gesamtanzahl der zu einem File hinzugefugten¨
    LOC und der Anzahl der Checkins dieses Files nur
    schwache Beziehung
–   zwischen den insgesamt und den durchschnittlich bei
    einem einzelnen Checkin zu einem File hinzugefugten ¨
                  a                     o
    LOC eine st¨rkere Beziehung (gr¨ßere Dateien unter
    Verwendung von umfangreicheren Checkins)
–   nur ein sehr schwacher Zusammenhang zwischen dem
    Zeitraum vom ersten bis zum letzten Checkin und der
    Gesamtanzahl der hinzugefugten LOC
                                 ¨
–   Existenz einer kleinen Gruppe von großen und oft uber-
                                                        ¨
    arbeiteten Files
–   im Durchschnitt 1.8 unterschiedliche Programmierer
    (Standardabweichung von 2.2) arbeiten zusammen an
    einer Datei, folglich hohe Arbeitsteiligkeit, Abstimmungs-
    aufwand auf File-Ebene scheint zu hoch
–     o
    gr¨ßere Dateien werden von mehr Personen bearbeitet,
                                                   o
    doch deren Zahl bleibt im Vergleich zur Gr¨ße relativ
    niedrig
–   Großteil der Leistung der aktiveren Programmier er-
                              o
    folgt im Rahmen von gr¨ßeren Dateien, im Gegensatz
                          34
zu den wenig aktiven Programmierern, die die Mehr-
zahl ihrer LOC zu kleinen Dateien hinzufugen
                                        ¨




                    35
• Entwicklung des Gesamtprojektes
                                o
   – stetiges Wachstum in der Gr¨ße des GNOME-Projektes
   – auch die jedes Monat erbrachte Gesamtleistung in hin-
     zugefugten LOC steigt uber die Zeit eindeutig an
          ¨                 ¨
                                    a
   – nach Norden (siehe Aufwandssch¨tzung) wurde Abfla-
                                            ¨
     chen auf Projektende hindeuten

      700000


      600000


      500000


      400000


      300000


      200000


      100000


           0
               JA
                M 19
                M 1
                JU 1 7
                SE 19 7
                N 19
                JA 1 7
                M 19
                M 1
                JU 19 8
                SE 19 8
                N 19
                JA 1 8
                M 19 8
                M 1
                JU 1 9
                SE 19 9
                N 19
                 O 9




                 O 9




                 O 9
                 AY 99




                 AY 99




                 AY 99
                 AR 9




                 AR 9




                 AR 9
                  N




                  N 997




                  N 99
                  L 99




                  L 9




                  L 99
                  P 97




                  P 98




                  P 99
                  V




                  V




                  V 9
                    19
                       99
                        7




                        8




                        9




                                u         u
          Abbildung 11: Hinzugef¨gte LOC f¨r jedes Monat




                               36
                                                99
                                             19
                                           V 9
                                          O 9
                                         N 19




                                                     Abbildung 12: Anderung in den LOC f¨r jedes Monat
                                           P 99
                                         SE 19 9
                                           L 99
                                         JU 1 9
                                          AY 99
                                         M 1 9
                                          AR 9
                                         M 19
                                           N 998
                                         JA 1 8




                                                                                        u
                                           V
                                          O 9
                                         N 19
                                           P 98
                                         SE 19 8
                                           L 99
                                         JU 1 8
                                          AY 99
                                         M 1 8




                                                                                                         37
                                          AR 9
                                         M 19
                                           N 997
                                         JA 1 7
                                           V
                                          O 9
                                         N 19
                                           P 97
                                         SE 19 7
                                           L 99




                                                                   ¨
                                         JU 1 7
                                          AY 99
                                         M 1 7
                                          AR 9
                                         M 19
                                           N
                                         JA




                               -100000
300000




         200000




                  100000




                           0
                                                Abbildung 13: Gr¨ße des GNOME-Projektes f¨r jedes Monat (in LOC)
                                           99
                                        19
                                      V 9
                                    O 9
                                   N 19
                                      P 99
                                   SE 19 9
                                     L 99
                                   JU 1 9
                                    AY 99
                                   M 1 9
                                    AR 9
                                   M 19 8
                                     N 99
                                   JA V 1 8
                                    O 9




                                                                                         u
                                   N 19
                                      P 98
                                   SE 19 8
                                     L 99
                                   JU 1 8
                                    AY 99
                                   M 1 8
                                    AR 9




                                                                                                                   38
                                   M 19 7
                                     N 99
                                   JA V 1 7
                                    O 9
                                   N 19
                                      P 97
                                   SE 19 7
                                     L 99
                                   JU 1 7
                                    AY 99
                                   M 1 7
                                    AR 9
                                   M 19




                                                                o
                                     N
                                   JA




                        -1000000
2000000




          1000000




                    0
• Entwicklung von Teil-Projekten
   – Betrachtung von Teilprojekten wie Gnumeric, gnome-
     core
   – teilweise Verflachung
   – daher Reihe von Sub-Projekten in unterschiedlichen
     Phasen des Lebenszyklus

     120000



     100000



      80000



      60000



      40000



      20000


          0
         NOV 97   MAR 98    JUL 98        NOV 98   MAR 99   JUL 99
              JAN 98   MAY 98    SEP 98       JAN 99   MAY 99    SEP 99

                    o                   u
    Abbildung 14: Gr¨ße von Gnome-core f¨r jedes Monat (in LOC)




                                     39
                                    99




                                         Abbildung 15: Gr¨ße von Gnumeric f¨r jedes Monat (in LOC)
                                 P
                               SE 99
                                 G
                               AU 99
                                 L
                               JU 99
                                 N
                               JU 99
                                AY
                               M 99
                                 R
                               AP 99
                                AR
                               M 99




                                                                           u
                                 B
                               FE 99
                                 N
                               JA 98




                                                                                                     40
                                EC
                               D 98
                                  V
                                O
                               N 98
                                  T
                                C
                               O 98
                                 P
                               SE 98




                                                         o
                                 G
                               AU 98
                                 L
                               JU 98
                                 N
                               JU




300000




         200000




                  100000




                           0
• Entwicklung der Anzahl der Programmierer
   – deutliches Plateau
   – mogliche Grunde:
      ¨         ¨
      ∗ Anzahl der sinnvoll eingesetzten Personen propor-
                                   o
        tional zur Menge der zur L¨sung anstehenden Pro-
        bleme (keine beliebige Arbeitsteiligkeit)
      ∗ Brooks’s Law - h¨here Anzahl von Entwicklern kann
                         o
        nicht parallel arbeiten (wegen zu hoher Kommuni-
        kationskosten)
      ∗ eingesetzte Technologie zur Koordination und Kom-
        munikation nicht ausreichend fur mehr Personen
                                       ¨
      ∗ Reputation (Eintritt eher zu Beginn sinnvoll)
   – sehr starker Zusammenhang zwischen der Anzahl der
     aktiven Programmierer und der in diesem Monat er-
     brachten Leistung (damit hohe Eignung fur die Vor-
                                             ¨
     aussage der in einem Open Source Projekt erbrachten
     Leistung)




                          41
                                                        99




                                                             Abbildung 16: Entwicklung der Anzahl aktiver Programmierer
                                                     19
                                                   V 9
                                                 O 9
                                                N 19 9
                                                   P 9
                                                SE 19 9
                                                  L 99
                                                JU 1 9
                                                 AY 99
                                                M 1 9
                                                 AR 9
                                                M 19 8
                                                  N 99
                                                JA V 1 8
                                                 O 9
                                                N 19 8
                                                   P 9
                                                SE 19 8
                                                  L 99
                                                JU 1 8
                                                 AY 99
                                                M R1 8
                                                 A 9




                                                                                                                          42
                                                M 19 7
                                                  N 99
                                                JA 1 7
                                                   V
                                                 O 9
                                                N 19 7
                                                   P 9
                                                SE 19 7
                                                  L 99
                                                JU 1 7
                                                 AY 99
                                                M 1 7
                                                 AR 9
                                                M 19
                                                  N
                                                JA




160


      140


            120


                  100




                                            0
                        80


                             60


                                  40


                                       20
                         Anzahl Programmierer
                         600000


                         500000


                         400000


                         300000


                         200000
       LOC hinzugefügt




                         100000


                              0


                         -100000
                               -20     0    20   40     60   80   100   120   140   160


                                  Anzahl aktiver Programmierer

                                               u         u
Abbildung 17: Aktive Programmierer und hinzugef¨gte LOC f¨r jedes Monat




                                                   43
• Entwicklung der Produktivitat
                             ¨
   – fur jedes Monat als die durchschnittliche Anzahl der
      ¨
     von jedem aktiven Programmierer hinzugefugten LOC
                                               ¨
     definiert
   – kein Sinken der Produktivitat zu verzeichnen
                                ¨
   – sogar ein stark positiver Zusammenhang zwischen der
     Anzahl der aktiven Programmierer und der Produkti-
        a
     vit¨t
                                             a
   – Brooks’s Law damit verletzt (Produktivit¨t sollte ei-
     gentlich abnehmen)
   – jedoch Vorliegen eines Plateaus in der Besetzung (siehe
     vorne), moglicherweise selbststandiges Einpendeln an
              ¨                     ¨
                     o                    a
     diesem Punkt h¨chster Produktivit¨t (normalerweise
     durch Intervention des Managements verhindert)




                           44
                                              99
                                           19
                                         V 9
                                        O 9
                                       N 19
                                         P 99
                                       SE 19
                                         L 99




                                                   Abbildung 18: Entwicklung der Produktivit¨t
                                       JU 19 9




                                                                                            a
                                        AY 9
                                       M 19
                                        AR 99
                                       M 19 8
                                         N 9
                                       JA 19
                                         V 8
                                        O 9
                                       N 19
                                         P 98
                                       SE 19 8
                                         L 9
                                       JU 19 8
                                        AY 9
                                       M 19




                                                                                                 45
                                        AR 98
                                       M 19
                                         N 97
                                       JA 19
                                         V 7
                                        O 9
                                       N 19
                                         P 97
                                       SE 19 7
                                         L 9
                                       JU 19 7
                                        AY 9
                                       M 19
                                        AR 97
                                       M 19
                                         N
                                       JA




5000




       4000




              3000




                     2000




                            1000



                                   0
• Entwicklung in den Mailing-Listen
                              a
   – besonderes hohes Niveau w¨hrend starkem Anstieg in
     Manpower, anscheinend zur Koordination/Einweisung
      o
     n¨tig
   – nur schwacher Zusammenhang zwischen Postings in
     einem Monat und gesamter Programmierleistung

      4000




      3000




      2000




      1000




         0
             JA
              M 19
              M 19
              JU 19 7
              SE 19 7
              N 19
              JA 19
              M 19
              M 19
              JU 19 8
              SE 19 8
              N 19
              JA 19
              M 19 8
              M 19
              JU 19 9
              SE 19
              N 19
               O 9




               O 9




               O 9
               AY 9




               AY 9




               AY 9
               AR 97




               AR 98




               AR 99
                N




                N 97




                N 9
                L 9




                L 9




                L 99
                P 97




                P 98




                P 99
                V 7




                V 8




                V 9
                  19
                     99




                                          u
                  Abbildung 19: Postings f¨r jedes Monat




                                   46
• Vergleich mit Sourceforge
   – Plattform fur Open Source Projekte
                  ¨
   – stellt Tools wie Hosting, Source-Code-Verwaltung, Bug
     Tracking, Mailing-Listen etc. zur Verfugung
                                            ¨
   – ahnliche Vorgehensweise: zuerst Web-Seiten nach Pro-
     ¨
     jekten abfragen, fur jene mit CVS dieses uber Command-
                       ¨                      ¨
     Line abfragen (dazu ist download des Source Codes
       o
     n¨tig, ca. 30 GB) und Ergebnisse parsen
   – Projekte insgesamt (29.6. 2001) laut Sourceforge: 23
     000
   – Projekte mit aktivem CVS: 21 355
   – Projekte mit Inhalt in CVS: 8 791
   – Projekte erfolgreich abgefragt: 8 621
   – Checkins insgesamt: 7 734 082
   – Files insgesamt: 2 474 175
   – Programmierer insgesamt: 12 395
   – ingesamte LOC hinzugefugt: 663 801 121
                                ¨
                         o
   – ingesamte LOC gel¨scht: 87 405 383
   – Verteilung der Leistung zwischen Programmierern wie
     gehabt (beste 10% fur 80% der Leistung verantwort-
                           ¨
     lich)
   – Durchschnitt 1,86 Programmier/Projekt, Standardab-
     weichung 2,61
   – fur Programmierer korrelieren hinzugefugte LOC und
      ¨                                       ¨
     Anzahl der Projekte nur wenig
                              47
Abbildung 20: Prozentueller Anteil jedes Programmierers am Gesamtcode (Program-
mierer geordnet nach deren Anteil)




                                      48
– mit dem Status eines Projektes (Lebensphase) korre-
  liert am starksten die Anzahl der Programmierer
             ¨
– Anzahl der Programmierer eines Projektes und hinzu-
  gefugte LOC korrelieren
     ¨




                      49