Kategorie-Archiv: Software Engineering

Tutorials and more

Aufwandsschätzung als Kernaufgabe des IT-Managements

Der starke Fokus auf Kosten/Nutzen erfordert eine genauere Planung zukünftiger und post mortem Analyse vergangener Projekte. Das Multiprojektmanagement hat die Aufgabe anstehende Projekte einer einheitlichen Bewertung zu unterziehen. Vor dem Hintergrund knapper Investitionsbudgets stellt sich vor dem Anfang der Projekte die Frage nach strategischer Relevanz und Wirtschaftlichkeit. Die Ertragsmessung von IT-Projekten gilt bis heute zu den größten Herausforderungen. Die Probleme der monetären Quantifizierung von IT-Systemen liegen vor allem in der Darstellung dieser Erträge in Nutzengrößen.[1] Eine weitere Herausforderung besteht darin die Aufwände für diese Projekte im Vorfeld genauer zu schätzen um zugeteilte Ressourcen optimiert auszulasten.  Ein Schätzverfahren für Projekte im MPM muss somit den Anforderungen, Projekte im Vorfeld nach deren Kosten/Nutzen zu bewerten und dem Wunsch nach exakten Informationen, gerecht werden. Valide Schätzungen der zu erwarteten Entwicklungsaufwände sind für IT-Projekte der erste und wichtigste Erfolgsfaktor. Die Genehmigung des Projektes durch das MPM hängt grundlegend von der Wirtschaftlichkeit des geplanten Projektes ab. Der Nutzen muss höher sein als die Kosten, sonst gelangt das Projekt nicht über den Projektantrag hinaus. Die Dringlichkeit einer aufwändigen Schätzung für IT-Projekte wird von den meisten Unternehmen unterschätzt. Der qualitative und kommerzielle Projekterfolg hängt maßgeblich von einer genauen Schätzung ab, mit der Voraussetzung, dass das geplante Produkt möglichst ausführlich spezifiziert ist. Doch gerade in der agilen Entwicklung ist eine möglichst exakte Produktspezifikation, wie sie im Wasserfallmodell zu finden ist, nicht möglich. Statt zu Projektstart auf der Basis eines detaillierten Pflichtenheftes einen fixen Projektplan für die Projektlaufzeit zu erstellen, wird in einem agilen Vorgehen wie SCRUM[2] das Projekt im Release Plan nur grob in Sprints[3] gesplittet, in denen, vom Entwicklerteam, definierte Funktionsumfänge bereitgestellt werden.[4] Fehler in der Schätzung haben in der Regel weitreichende und fatale Auswirkungen auf die Durchführung eines Projektes. Großzügige Schätzungen oder hohe Unsicherheitsgrade die den Blick auf die wesentlichen Aufgaben und Risiken vermeiden, werden für Entwicklungsprojekte schon mit dem Start zu einer hohen Bürde. Das nächsten Abschnitte stellen die gängigsten Schätzmethoden vor.

Übersicht bekannter Schätzmethoden

Die vermeintliche Genauigkeit algorithmischer Verfahren wird hoch gepriesen. In der Projektpraxis vieler Unternehmen werden diese Verfahren aber kaum genutzt. Die nächste Abbildung gibt einen Überblick und eine grobe Klassifizierung der bekanntesten Schätzmethoden.

Klassifizierung

Klassifizierung der Schätzmethoden (in Anlehnung zu [5])

Empirische Schätzmethoden nutzen Erfahrungen und Referenzinformationen aus vergangenen Projekten deren Qualität stark von der Ähnlichkeit und Vergleichbarkeit abgeschlossener Projekte abhängt. Algorithmische Verfahren errechnen den Aufwand für ein Softwareprojekt mit Hilfe mathematischer Formeln und dem Durchlaufen einer Reihe von Schritten.

Analogiemethode

In der Analogiemethode werden Daten aus bereits abgeschlossenen Projekten als Grundlage für das zu schätzende Projekt herangezogen. Die vorherigen Projekte müssen vergleichbar mit dem geplanten Projekt sein. Der Aufwand der in der Vergangenheit angefallen ist, ist für Unterschiede in Aufgabenstellung und Realisierungsbedingungen entsprechend anzupassen. Das umzusetzende Projekt muss hohe Ähnlichkeiten zu bereits durchgeführten Entwicklungen aufweisen. Datenquellen können entweder eine eigene Erfahrungsdatenbank, empirische Untersuchungen oder Benchmarks sein. Die Verwendung der Analogiemethode wird mit einer Abfolge von 3 Schritten beschrieben.[6]

  • Für das zu schätzende Projekt wird die aus der Aufgabenstellung, Umfang und Schwierigkeitsgrad ein Leistungsprofil erstellt.
  • In zweiten Schritt werden die Unterschiede zwischen dem geplanten und dem abgeschlossenen Projekt ermittelt
  • Im letzten Schritt wird das Delta zwischen abgeschlossenem und neuem Projekt bestimmt und bewertet.

Die Vorteile der Analogiemethodik sind die frühe Verfügbarkeit der Ergebnisse und der geringe Aufwand. Trotzdem lassen sich die Zahlen nicht optimal vergleichen weil eine hohe Voraussetzung bezüglich der Qualität der Daten besteht. Diese Methode ist somit für Prototypprojekte ungeeignet da vergleichbare Projekte meistens nicht vorhanden sind.[7]

Agile COCOMO II

Es gibt sehr viele Kostenschätzmodelle die auf Basis des COCOMO Modells entwickelt wurden. Agile COCOMO II ist eine solche Schätzmethode welches vom Center for Software Engineering der Univeristy of Southern California entwickelt wurde. Sie enthält das vollständig parametrische COCOMO Model und ist eine analogiebasierte Schätzung. Die webbasierte Anwendungen ist über die Seite der University of Southern California[8] zu erreichen. Noch gibt es zu dieser Methode zu wenige empirische Untersuchungen die einen Einsatz in der Praxis empfehlen.

Function Point Analyse (FPA)

Die Function Point Analyse (auch –Analyse oder –Methode) wurde in den 1970er und 1980er Jahren von Allan J. Albrecht für das Unternehmen IBM entwickelt. Die FPA misst die Größe einer Anwendung objektiv und unabhängig von technischen Randbedingungen.[9] Alan J. Albrecht hat die Problematik der Codemessung erkannt und führte das Function-Point-Maß ein, welches zur damaligen Funktionsmodellierung mit Funktionsbäumen (HIPO-Diagramm) passte. In einem weiteren Beitrag wurde die Zählmethode näher erläutert[10]. Ziel der FPA war die Eliminierung der Einflüsse, die sich aus der Verwendung unterschiedlicher Programmiersprachen ergeben und eine Schätzung zu einem früheren Zeitpunkt. Ausgangspunkt der Schätzungen sind Funktionen, die die Geschäftsvorfälle aus Sicht der Anwender abdecken sollen. Vorteile durch Function Points:

  • Klar definierte Vorgehensweise
  • Gute Vergleichsmöglichkeit
  • Nicht Lines of Code sondern die Anforderungen stehen im Vordergrund

Nachteile:

  • Anforderungen nicht immer einer Kategorie zuordenbar
  • Großer Aufwand für große Projekte
  • Kategorienaufgliederung veraltet und somit nach objektorientierten Kriterien nicht nachvollziehbar
  • Baukastenprinzip vernachlässigt Abhängigkeiten und Synergien zwischen Programmteilen

Die FPA wurde noch einmal von Barry W. Boehm erweitert indem er den Fokus von der Umsetzungsdauer hin zur Komplexität eines Features verschoben hat. Warum trotzdem das Schätzen der Komplexität, wie man es aus dem Planning Poker in Scrum kennt, nicht weiter verfolgt werden sollte, wird im Blogbeitrag „Schätzmethoden in der Praxis“ unter „Warum Schätzen in abstrakten Maßen nicht ausreicht“ erläutert.

Bewertung der bekanntesten Schätzmethoden

Tendenziell gelten empirische Verfahren als weniger aufwändig, algorithmische Verfahren dafür als genauer und standardisierter.  In der nächsten Tabelle werden die gängigen Bewertungen der wichtigsten Schätzverfahren aufgezeigt. [11]

Methode Komplexität Vorteile Nachteile
Function Points eher hoch Quasistandard, Transparenz Datenbasis nötig, teilw. Subjektiv
COCOMO II mittel bis hoch gut für erste grobe Schätzung, Toolunterstützung Größenbestimmung muss vorliegen
Expertenschätzung gering bis mittel schnell und flexibel Subjektivität, Transparenz
Analogieverfahren gering bis mittel schnell für ähnliche Projekte nicht anwendbar für neuartige Projekte, Datenbasis nötig
Prozentsatzmethode gering früh einsetzbar nach erster Phase Datenbasis nötig, Varianz für neue Projekte

Quellen: [1] Wieczorrek, H. W. & Mertens, P., 2005. Management von IT-Projekten. Berlin Heidelberg: Springe Verlag. , S. 215 – 216)
[2] Scrum (englisch für Gedränge) ist ein Vorgehensmodell der Softwaretechnik. Quelle: Wikipedia
[3] Stellt einen festgelegten Zyklus (Iteration) in der Regel von zwei bis vier Wochen dar, bei dem das Produkt entwickelt wird.
[4]Kesten, R., Müller, A. & Schröder, H., 2012. IT-Controlling. München: Franz Vahlen GmbH.
[5] Plewan, H.-J., 2006. Methodische Aufwandsschätzung aus Sicht eines agilen Projektmanagements. Agiles Projektmanagement, pp. 83-100.
[6] Biethahn, Mucksch & Ruf, 2004. Ganzheitliches Informationsmanagement., S. 208)
[7] Litke, H.-D., 2007. Projektmanagement. München: Hanser.
[8] Agile Cocomo II Sunset.usc.edu
[9] Albrecht, A. J., 1979. Measuring Application Development Productivity, Procedure of Joint SHARE. GUIDE and IBM Symposium, Oktober.
[10] Vgl.  (Albrecht & Gaffney, Software function, source lines of code, and development effort prediction: A software science validation ;, 1983)
[11] Plewan, H.-J., 2006. Methodische Aufwandsschätzung aus Sicht eines agilen Projektmanagements. Agiles Projektmanagement, pp. 83-100.

Ja zu Aufwandsschätzungen – aber wann?

Der richtige Zeitpunkt der Aufwandsschätzung ist ein wichtiger Aspekt für jedes Software-Entwicklungsprojekt. Voraussichtliche Aufwände sollen möglichst früh und möglichst genau geschätzt werden. Die erste Aufwandsschätzung wird von den Projektmanagern meistens sehr früh eingefordert. Meistens sind das aber Schätzwerte die zu ungenau sind. Die Cone of Uncertainty, eine Verlaufsbeschreibung von Unsicherheiten in einem Projekt, besagt, dass eine Schätzung vor der Anforderungsphase im Durchschnitt noch mit einer Unsicherheit von Faktor 4 belastet ist. Die Varianz von 4x bis 0,25 bedeutet, dass ein auf 12 Monate geschätztes Projekt am Ende tatsächlich zwischen 3 und 48 Monate dauern kann.[1]

Cone of Uncertainty[2]

Infolgedessen verweigern die Entwickler Aussagen zu jeglichen Aufwänden um bei einem Scheitern die Konsequenzen einer verbindlichen Schätzung zu umgehen. Eine verbindliche Schätzung wird in der mir bekannten Praxis generell nicht gegeben, trotzdem werden die Entwickler wegen Aussagen wie „Wir werden ungefähr zu diesem Zeitpunkt fertig“ an die Wand genagelt, wenn dieser Zeitpunkt überschritten wird.

Trotzdem ist es wichtig, dass die Entwickler beziehungsweise der Projektleiter eine Schätzung am Anfang eines Projektes abgeben. Diese Angaben sind wichtig für die Projek- und Ressourcenplanung. Agile Teams schätzen Aufwände nur für kurze Sprints, diese reichen aber für eine langfristige Projektplanung nicht aus. Beiden Parteien, dem Programm- oder Multiprojektmanagement und den Entwicklern muss die Unsicherheit einer Schätzung bewusst sein. Mit einer strukturierten Vorprojektphase die konform mit den agilen Prinzipien ist, können zudem die Unsicherheitsfaktoren (auch wenn es nur zu einem geringen Teil ist) gemindert werden. Diese Schätzungen sollten mit jedem Sprint oder Meilenstein nachjustiert werden.



[1] Vgl. (McConnell, 1997)

[2] Quelle Microsoft.com

Git Repo in der Dropbox

Wie man ein git Repository in der Dropbox einrichtet!

1.     Dropbox installieren

2.     Git installieren

3.     Git-Bash starten

4.     In der Dropbox ein Repository Ordner anlegen
$ cd ~/Dropbox
$ mkdir -p repositorys/dein-projekt-name

5.     Ein leeres Git Repository anlegen
$ git init --bare repositorys/dein-projekt-name
Initialized empty Git repository in /Users/XXX/Dropbox/repositorys/dein-projekt-name/

6.     In der Dropbox prüfen ob im Ordner /dein-projekt-name 4 Ordner und 3 Dateien angelegt worden sind

7.     Lokales Repository anlegen:In der Git Konsole in den Pfad bei mir z.B. Workspace wechseln und einen neuen Ordner anlegen
oder in dein bestehenden Projektordner wechseln.
$ cd /c/workspace/mein-Projekt

8.     Mit dem Befehl „init“ machen wir aus unserem Projektordner ein git Repository (Hier wird der versteckte Ordner „.git“ angelegt)
$ git init .

9.     Wenn ihr einen einen leeren Ordner habt dann geht weiter zu Schritt 9 – Die, die schon ein Projekt
haben stellen den gesamten Code nun zum committen bereit:
$ git status                                 // Dieser Befehl zeigt uns die Dateien an die committet werden können, bzw. die "touched" sind.
$ git add .                                  // Mit dem . sagen wir, dass wir alle neuen, angefassten bzw. geänderten Dateien zum Committen bereitstellen
$ git commit -all -m "Initial commit"        // Dies ist der Commit Befehl mit (!sehr wichtig!) der Commit Message, hier musst du reinschreiben, was du alles geändert hast.

10.    Jetzt wird dieser Ordner mit dem Dropbox Ordner verbunden, gleichzeitig geben wir unserer Verbindung den Namen „dropbox“
$ git remote add dropbox /c/Users/XXX/Dropbox/repositorys/dein-projekt-name/

11.    Zum Schluss pushen wir unseren Code in unseren remote Repository
$ git push dropbox master

Damit jetzt auch andere Entwickler auf dieses Repository zugreifen können gehen wir wie folgt vor:

1.     Zuerst müssen wir sicherstellen, dass wir Zugriffsrechte auf den Dropboxordner haben.

2.     Danach wechseln wir in die git Konsole in z.B. unseren Workspace
$cd ~/workspace

3.     Wir clonen nun in den Ordner „workspace“ den Repository Ordner von der Dropbox
$ git clone -o dropbox /Users/xxxxx/Dropbox/repositorys/dein-projekt-name/

4.    Wenn bis jetzt alles richtig verlaufen ist, müssen wir jetzt den Ordner „dein-projekt-name“ in unserem workspace haben.
Jetzt kannst du Änderungen vornehmen, weiterprogrammieren, neue Dateien hinzufügen oder löschen

5.     Um diese Änderungen wieder für alle zugänglich zu machen, müssen wir unseren Code committen und wieder zurückpushen
$ git commit --all -m "Aenderung A, Aenderung B usw."
$ git push dropbox master