About

This page contains a single entry from the blog posted on November 3, 2007 2:10 AM.

The previous post in this blog was Ein Bisschen GUI muss sein....

The next post in this blog is ActiveRecord::BaseWithoutTable.

Many more can be found on the main index page or by looking through the archives.

Powered by
Movable Type 3.31

« Ein Bisschen GUI muss sein... | Main | ActiveRecord::BaseWithoutTable »

Der SLOC-SCHOCK

Gerade schaute ich mich ein wenig auf koders.com um. Wer die Seite kennt, weiß bestimmt, dass zu den dort aufgelisteten Projekten immer eine kleine Statistik angezeigt wird, die u.A. über den Anteil der im jeweiligen Projekt verwendeten Programmiersprachen, geschätzte Entwicklungskosten etc. informiert. Und da blieb mein Auge mehrfach hängen, als ich (mal wieder) feststellte, welche Kosten da auch für kleine Projekte (ein paar wenige Tausend Zeilen Code) aufgeführt werden. Da packte mich die Neugier: ich installierte mir David A. Wheeler's Programm sloccount. Dieses Programm leistet genau oben Beschriebenes, sprich es zählt die Physical Source Lines of Code (SLOC), also Programmquelltext minus Kommentare minus trivialem wie HTML, SQL, CSS usw., listet eine kleine Statistik über die verwendeten Programmiersprachen auf und wagt einige Schätzungen über den Entwicklungsaufwand anzustellen.

Für meinen bisher im Rahmen der Diplomarbeit entstandenen Code der wäre das also:

SLOC    Directory       SLOC-by-Language (Sorted)
2020    app             ruby=2020
1319    test            ruby=1319
603     db              ruby=603
61      config          ruby=61
4       public          ruby=4
0       components      (none)
0       doc             (none)
0       lib             (none)
0       log             (none)
0       script          (none)
0       templates       (none)
0       tmp             (none)
0       top_dir         (none)
0       vendor          (none)

Totals grouped by language (dominant language first):
ruby:          4007 (100.00%)

Total Physical Source Lines of Code (SLOC)                = 4,007
Development Effort Estimate, Person-Years (Person-Months) = 0.86 (10.31)
(Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05))
Schedule Estimate, Years (Months)                         = 0.51 (6.07)
(Basic COCOMO model, Months = 2.5 * (person-months**0.38))
Estimated Average Number of Developers (Effort/Schedule)  = 1.70
Total Estimated Cost to Develop                           = $ 20,616
(average salary = $10,000/year, overhead = 2.40).

WHOW! sag ich da nur! Bei den Zahlen kriegt man ja locker einen SLOCkauf ;-) -- also mal abgesehen davon, dass die Entwicklungszeit schonmal um bald eine Größenodnung höher angesetzt wird als was ich bisher aufgewendet habe, sind die Entwicklungskosten (wie ich mal mit einem Jahresgehalt von 10'000$ bzw. €) angesetzt habe) von rund 20'000 Währungseinheiten schon beachtlich. Wer bezahlt das am Ende?

Aber mal abgesehen vom Preis: Ich arbeite seit nunmehr rund 1.5 Monaten an dem Programm. Bei meiner tatsächlichen täglichen Arbeitszeit kommt man vielleicht auf 2.5-3 Monate. Das würde also entweder bedeuten, dass ich ein überaus kongenialer Superprogrammierer wäre (oh yeah...!), oder -- vielleicht geringfügig realistischer -- mir das RAILS-Framework bislang rund 7-8 Monate Arbeit abgenommen hat.

Wenn man sich obige Zahlen genauer anschaut, fällt auf, dass für das gesamte app/views-Verzeichnis nicht ein SLOC gezählt wird -- OK, es handelt sich dabei hauptsächlich um HTML, aber hey -- das ist längst nicht alles a) autogeneriert und b) mit einem dubiosen WYSIWYWETG-Programm erstellt! ein [cat find app/views/ | wc -l ] ergab, dass es sich dabei um immerhin 6607 Zeilen handelt, wovon ich mal behaupte, mindestens 1800-2000 Zeilen selber geschrieben (OK, und Copy&Pasted :-)) zu haben. Da fällt eigentlich auch nicht mehr so sehr ins Gewicht, dass von den 1300 Zeilen unter test/ vielleicht nur 350 Zeilen von mir selbst stammen.

Interessehalber hab ich auch mal ein mittlerweile verabschiedetes Projekt von vor 1-3 Jahren (eine Vereins-Internetplattform in PHP) in sloccount gefüttert. Unter dem Strich kamen da fast runde 24'000 Zeilen Code, 67 Monate Entwicklungsaufwand und ca. 107'000 € Entwicklungskosten bei heraus (mit Jahresgehalt für Studi = schlappe 8'000 EUR gerechnet) -- Kann man sowas eigentlich als Spende von den Steuern absetzen? ;-) (interessanterweise wurde die Plattform innerhalb von rund 3.5 Jahren entwickelt -- 67 Monate entsprechen aber mehr als 5 Jahren ... also doch Superkräfte? :-D)

Was sagen hier die erfahrenen Entwickler von InnoQ zu? Wie schätzt ihr euren Aufwand ab? Sind diese Zahlen reine Fantasie? Der eine oder andere wie auch immer geartete Kommentar würde mich da schon interessieren.

TrackBack

TrackBack URL for this entry:
http://www.innoq.com/movabletype/mt-tb.cgi/2851

Comments (2)

Solche Tools sind meiner Einschätzung nach nicht dazu gedacht, Dir eine tatsächliche Abschätzung zu liefern, sondern Vergleichswerte.

Ich erstelle Aufwandsschätzungen immer mit Hilfe eines mehr oder minder groben Realisierungskonzepts. Daraus ermittle ich eine Kennzahl, die mir erlaubt, den Aufwand bzw. Aufgaben mit Erfahrungen aus der Vergangenheit zu vergleichen und zu korrigieren.

Insgesamt sagt diese Kennzahl allerdings noch nicht viel aus, wenn man nicht weiss, wer es umsetzt. Es gibt tatsächlich Entwickler bzw. Teams, die um ein Vielfaches produktiver sind als der Durchschnitt. Gleichermaßen gibt es Entwickler, die um ein Vielfaches schlechter als der Durchschnitt sind. Man kann bei der Durchschnittsbetrachtung also gerne mal Faktor 10 daneben liegen. :-)

Gerade, wenn man enge Zeitpläne hat, ist es wichtig, die tatsächlichen Erwartungen miteinzubeziehen anstatt einen Durchschnittswert anzunehmen.

Wir mussten in der Vergangenheit in einem Projekt kurzfristig vierzigmal so viel Funktionalität umgsetzen, wie es ein anderes Team im vergleichbaren Zeitraum geschafft hat. So etwas geht allerdings auf Kosten anderer Dinge: Anforderungsmanagement, Dokumentation, Wartungsfreundlichkeit, Betreibbarkeit und ähnliches. - Ich denke solche Faktoren sind unrealistisch.

Allerdings kann die Wahl geeigneter Werkzeuge und die Zusammenstellung eines fähigen Teams erstens Projektinitialisierungs- und Einarbeitungsaufwände drastisch reduzieren und die Produktivität im Anschluss ebenfalls drastisch steigern. Hier halte ich einen Faktor von 5-10 schon für realistisch.

Ob Du Deine Leistungen der Vergangenheit als Spende absetzen kannst, fragst Du am Besten mal einen Steuerberater. Aber: Unabhängig von der Funktionsweise des SLOC-Tools, denke ich, dass Du zu den produktiveren Entwicklern in der Welt zählst.

Trotz allem: Gib nicht zuviel auf Lines of Code... :-)

+1 zu Phillips letztem Kommentar: Isoliert halte ich LOC/SLOC für vollkommen wertlos -- wenn ich stupide 500 mal die prinzipiell gleiche Datenbankzugriffslogik programmiere und so 50.000 Zeilen Code bekomme, ist das etwas völlig anderes als ein 50.000 Zeilen langes algorithmisch komplexes Tourenplanungsverfahren.

Sehr schon dazu auch: http://www.joelonsoftware.com/items/2007/10/26.html

Post a comment

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)