Projektentwicklung
Die Projektentwicklung befasst sich systematisch mit der Organisation, Planung, Umsetzung und Evaluation eines Programmiervorhabens.
Softwareprojekte sind wie alle anderen Arten von Projekten nicht einfach umzusetzen. Deshalb stellt sich die Frage, wie man die Entwicklung (Organisation, Planung, Umsetzung, Evaluation) eines Projekts so gestalten kann, dass die gewünschten Ziele dann möglichst auch erreicht werden – und zwar innerhalb der zur Verfügung stehenden Zeit.
Das Wasserfallmodell
Im Projektmanagement galt lange Zeit das sogenannte «Wasserfallmodell»:
Dummerweise stellt sich heraus, dass diese – auf den ersten Blick sehr einleuchtende – Herangehensweise an die Projektentwicklung speziell bei komplexeren Vorhaben (und ein Programm zu entwickeln ist einigermassen komplex) oft nicht gut funktioniert. Dafür gibt es verschiedene Gründe:
- Häufig ist es nicht möglich, die Ziele des Projekts zu Beginn genau genug festzulegen – beispielsweise weil es an Vorwissen fehlt, weil ein Teilziel von der (ungewissen) Umsetzung eines anderen Teilziels abhängt, weil man erst durch praktische Versuche herausfinden muss, ob ein Teilziel im Bereich des Möglichen liegt, usw.
- Auch die Planung der eigentlichen Umsetzung krankt daran, dass es schwer oder unmöglich ist, das ganze Projekt im Vorhinein genau genug durchzuplanen. Gerade wie lange einzelne Schritte brauchen, ist oft im Voraus kaum abzuschätzen.
- Erschwerend kommt dazu, dass sich Teilziele häufig im Verlauf des Projekts noch ändern, z.B. weil sich erst in der Praxis herausstellt, was einfach und was schwer umzusetzen ist, oder weil einem erst im konkreten Umgang mit der Problemstellung die zündende Idee kommt.
- Das wohl schwerwiegendste Problem ist aber dieses: Häufig stellt man erst gegen Ende fest, dass man etwas Grundlegendes nicht zum Funktionieren bringt, und dann ist die Deadline da und das Projekt auf ganzer Linie gescheitert.
Iterative Planung
In Anerkennung dieser Probleme hat sich insbesondere im Softwarebereich eine alternative Art der Projektentwicklung durchgesetzt: die iterative Planung.
Iterative Development
Bei der iterativen Planung wird zu Beginn das Fernziel des Projekts nur grob festgelegt – die Planung und Entwicklung bezieht sich dann immer auf das Erreichen des jeweils nächsten Teilziels in Form einer neuen Version des Programms (oft «milestones» genannt), das der Idealvorstellung des Fernziels wieder ein Stückchen näher kommt. Innerhalb einer Iteration durch diesen «design cycle» finden sich dann die üblichen Schritte des Wasserfallmodells.
Analogie
Es ist anzunehmen, dass Sie in die Kanti eingetreten sind mit dem Fernziel, die Matura zu schaffen. Aber natürlich haben Sie sich nicht zu Beginn hingesetzt und sich jeden einzelnen Schritt bis zu Maturprüfung genau aufgeschrieben. Stattdessen haben Sie sich vermutlich zunächst darüber informiert, was genau Sie tun müssen, um das erste (ggf. halbe) Jahr zu überstehen. Und nach der ersten Promotion werden Sie dasselbe für das zweite Jahr tun, sich ggf. auch genauere Pläne zurechtlegen für Problemfächer oder bestimmte Arbeiten – und genau das bezeichnet man als iterative Planung.
Das Besondere an der Iterativen Planung ist also, dass man die grosse Aufgabe in kleinere Verbesserungsschritte aufteilt (Stichwort: Algorithmisches Denken!) und die konkrete Planung, Umsetzung und Evaluierung immer auf das jeweils aktuelle Zwischenziel bezieht. Auf diese Weise arbeitet man dauernd an Teilzielen, die in greifbarer Nähe sind (siehe Gründe 1 & 2), man bleibt flexibel bei der Wahl des jeweils nächsten umzusetzenden Teilziels (siehe Grund 3), und man hat eigentlich immer eine funktionierende – und zunehmend bessere – Version (siehe Grund 4). Selbst wenn die Zeit letztendlich nicht für ganz alles reicht, was man sich vorgestellt hatte, hat man also zumindest einen Teil des Wegs geschafft und steht zum Abgabetermin nicht mit leeren Händen da. Aber umgekehrt könnte es ja auch besser laufen als ursprünglich angenommen, und man kann die Flexibilität der Iterativen Planung nutzen, um sogar noch mehr tolle Erweiterungen einzubauen.
Bei-Spiel LittleFishBigFish
Das Prinzip der Iterativen Planung besagt nicht, dass man auf die (schriftliche!) Planung verzichten kann, nur greifen Planung und Umsetzung der einzelnen Schritte enger ineinander. Um das selber zu erfahren, sollen Sie sich an der Umsetzung eines kleinen Spiels in Greenfoot versuchen.
Die Spielidee ist simpel: Ein Aquarium voller Raubfische und sonstiger Kreaturen, eine davon steuert der Spieler mit den Pfeiltasten. Wann immer zwei Kreaturen aufeinandertreffen, wird die kleinere gefressen und die grössere wächst ein bisschen – es geht also darum, den grossen Gegnern auszuweichen und gleichzeitig die kleineren zu verspeisen. Der Spieler gewinnt, wenn er das gesamte Aquarium leer gefressen hat.
Für dieses Beispielprojekt sind die ersten Schritte bereits erledigt:
In LittleFishBigFish.zip finden Sie eine funktionierende Basisversion des Spiels, das Vorhaben und die bereits erfolgten Schritte sind in Projektskizze_LittleFishBigFish.docx (pdf) beschrieben.
In einer ersten Arbeitsphase geht es darum, den existierenden Code zu verstehen und ein paar kleine, konkrete Verbesserungen umzusetzen (eine Anleitung dazu finden Sie in der Projektskizze, Abschnitte 1-3).
Danach gehen Sie über zu weiteren Iterationen durch den design cycle, indem sie jeweils eine neue Erweiterung (= Teilziel) in Angriff nehmen, sich die genauen Umsetzungsschritte überlegen (in der Projektskizze notieren) und sie dann konkret im Szenario umsetzen – bis sie bei einer neuen, verbesserten Version angelangt sind und sich das nächste Teilziel vornehmen können.
Projektskizze
Für grössere und komplexere Vorhaben gibt es verschiedene Arten von Hilfsmitteln, die bei der Projektsteuerung (=Planung, Organisation, Dokumentation, usw.) eingesetzt werden. Für unseren Bedarf soll dafür ein einziges Dokument genügen – Sie haben diese sogenannte Projektskizze bei der Arbeit mit dem obigen Beispielprojekt bereits kennen gelernt. Wie Ihnen hoffentlich klar geworden sein sollte, dient die Projektskizze verschiedenen Zwecken, z.B. der Definition der Ziele des Gesamtprojekts sowie jeweiliger Teilziele, der detaillierteren Planung der Umsetzung sowie (rückblickend) der Dokumentation des Projektverlaufs. Wichtig ist, dass die Skizze projektbegleitend genutzt wird, also immer den gegenwärtigen Stand ihrer Bemühungen reflektieren sollte. Nur wenn sie durchgehend mit diesem Dokument arbeiten, kann es Ihnen tatsächlich dabei helfen, die nötigen Planungsschritte zum richtigen Zeitpunkt zu erledigen, nicht den Überblick zu verlieren und ggf. rechtzeitig zu bemerken, wenn/wo das Projekt aus dem Ruder läuft.
Je nach Art und Umfang eines Projekts kann es übrigens sinnvoll sein, noch weitere Dinge in eine solche Projektskizze einzubauen, z.B. eine genauere Zeitplanung, Aufgabenverteilung über Teammitglieder, oder eine rückblickende Reflexion über den Verlauf des Projekts.
Weitere Spielprojekte
Aufgabe
Zur Vertiefung Ihrer Projektmanagement- sowie Programmierkenntnisse finden Sie hier noch weitere Bei-Spiele in ähnlicher Form wie das obige Fisch-Szenario, also mit Basisversion und einer schon teilweise ausgefüllten Projektskizze.
Wer sich traut, kann auch eine eigene Spielidee ohne Programmvorlage umsetzen.
Benutzen Sie dafür das Template Projektskizze_Vorlage.docx (pdf) für die Formulierung eigener Projektideen (inkl. Basisversion) – und natürlich für die Projektsteuerung während der Umsetzungsphase.
Unter ProPraBsp.zip finden Sie ein prüfungsnäheres Szenario, das Sie für die Vorbereitung auf die praktische Prüfung benutzen können. Allgemein formulierte Aufgabenbeispiele sind in Aufgaben_ProPraBsp.pdf zu finden, noch konkretere in Programmieraufgaben-zum-Szenario-ProPraBsp-Konkret.pdf.