Donnerstag, 21. Mai 2009

Projektmanagementfehler

Hier ein Sammlung meiner liebsten Projektmanagement-Fehler:
  • Es wird eine neue Software  entwickelt die am Markt verfügbar ist, aber in schlechterer Qualität.
  • Projekte mit diversen Unterprojekten werden ohne Koordinator versucht.
  • Projekte mit diversen Unterprojekten werden ohne Integrationskonzept und ohne Personalaufwand für die Integration versucht.
  • Einheitliche Richtlinien für grosse Projekte werden nicht entwickelt oder nicht umgesetzt bzw. es wird die Umsetzung wird nicht überwacht.
  • Usability wird als Beiwerk in Projekten betrachtet.
  • Projektpläne werden nicht an veränderte Bedingungen angepasst.
  • Hippe Techniken werden ohne Rücksicht auf die Bedingungen im Projekt eingesetzt.
  • Erkannte Architekturfehler werden ignoriert.
  • Komplexe Projekte werden ohne Entwicklungsiterationen versucht.
  • Zeitverzug in Projekten wird ignoriert, es wird dann auf auf die Selbstheilungskräfte im Projekt gesetzt.
  • Man ignoriert elementare Anforderungen des Kunden um sich selbst zu verwirklichen.
  • Man lässt den Kunden alles Bestimmen (zu diesem Thema gibt es übrigen eine Simpsons-Folge in der Homer ein Auto entwirft).
  • Gute Projektidee werden durch mangelhafte Benutzeroberflächen sabotiert, weil bei der Planung niemanden Aufgefallen ist, dass die Software durch eine GUI bedient werden soll. Selbst nach dem erkennen dieses Problem werden keine Ressourcen in die GUI investiert unter dem Motto "Wir haben eine Software mit den versprochenen Funktionen umgesetzt.", dass Niemand sie bedienen kann ist nicht unser Problem.
  • Schwierigkeiten in Projekten werden nicht konsequent angegangen sondern es wird entweder versucht das Problem zu ignorieren (Probleme die ich nicht sehe sind auch nicht da.) oder es wird herum lamentiert und die sich Sachen schöngeredet und versucht es nicht wie einen Fehler aussehen zu lassen.

Mittwoch, 20. Mai 2009

Spring

Zur Zeit arbeiten wir an einem Projekt (Server, Fat-Client) in welchem Spring eingesetzt wird. Primär wird dort nur Dependency Injection (DI) verwand. Andere Dinge wie Aspekte, Lokalisierungsunterstützung oder Messageing kamen nicht zum Einsatz. Ein Probleme die dort auftrat waren:
  • Hohe Startup-Zeiten des Clients
  • Inkonsistentes Logging
  • Laufzeit-Spring-Fehler 
  • Unzureichende Integration von Spring in Eclipse
Die hohen Startup-Zeiten in Kombination mit dem Problem das viele Spring-Fehlermeldungen erst zur Laufzeit auftraten haben aus meiner Sicht die ganze Entwicklung des Projektes behindert. Aus diesen Gründen wäre es besonders sinnvoll gewesen, wenn der Projektcode Test Driven entwickelt worden wäre. So hätte man viele Zeit-fressende Iterationen den Entwicklern erspart. 

Dienstag, 19. Mai 2009

Test Driven Development (TDD) Vorlesung - Einführung

Bei iTunes gibt es den etwas weniger bekannten Bereich iTunes U. Dort können Universitäten Podcast oder Videopodcast veröffentlichen. Hier habe ich unter anderem eine Vorlesung von RWTH Aachen zu Thema Test Driven Development  von Prof. Jan Borchers (Link) gefunden. Auch wenn dort Xcode als Entwicklungsumgebung verwandt wird, so ist es doch eine gute Einführung in das Thema für Leute die sich das erste Mal mit dem Thema beschäftigen wollen. Leider enthält diese Vorführung einen sehr entscheidenden Fehler. Es wird hier demonstriert wie man Test schreibt. Was fehlt ist, wie man den Code schreibt. Bei TDD ist das schreiben von Code nicht equivalent zum schreiben von herkömmlichen Code, das hängt mit den kurzen Round-Trip-Zeiten zusammen, d.h. zwischen schreiben eines Test und dem schreiben des dazugehörigen Codes vergeht sehr wenig Zeit, z.B. eine Minute auch wird dort nur beiläufig angerissen, wie Test zu schreiben sind. Dies hat aber aus meiner Erfahrung einen entscheidenden Einfluss auf den späteren Code. Aber solche Dinge könnte man ja schon als Vertiefung des TDD ansehen. Sauberer wäre es schon gewesen, die wichtigen Dinge des TDD gleich am Anfang zu erwähnen:

  • Test first
  • Kurze Round-Trip-Zeiten
  • Boundary Test
  • Testen mit falschen Parametern (Fehlerbehandlung)
  • Einbeziehung von Code-Überdeckung
  • Übergang vom Black-Box-Testen zum White-Box-Testen

Freitag, 8. Mai 2009

Spassvögel bei Sun

Warum heisst die grundlegende Klasse in Java eigentlich Object?

Test Driven Development (TDD)

Letztens wurde ich gefragt, wie ich das Problem löse, schwer testbare Klassen zu testen. Eine Möglichkeit wären natürlich Mock-Objekte, also Objekte die fürs Testen gewisse Funktionen als Dummy bereitstellen ggf. auch Datenbanken mit Testdaten aufbauen. Dies ist zwar etwas aufwendiger als das schreiben reiner Tests aber sonst nicht weiter aufregend. Da diese Antwort scheinbar nicht ausreichte, war meine nächste Antwort, dass das Objektmodell dann wohl fehlerhaft wäre und man dort ansätzen müsste. Diese Antwort war wohl nichts für Verfechter der reinen Objekt-orientierten Analyse und Entwurfs. Es wurde daraufhin auch deutlich, dass das Gegenüber unter Extreme Programming (XP) und TDD wohl nur als eine Technik wie z.B. Hibernate verstanden. XP und TDD sind an dieser Stelle mehr, sie sind ein Wechsel bei der Art und Weise wie Software entwickelt wird. Das heisst natürlich nicht, dass sich XP, TDD und Objekt-orientierte Softwareentwicklung sich ausschliessen. XP und TDD sind die nächste Evolutionsstufe der Softwareentwicklung, der Objekt-orientierten Softwareentwicklung.

Montag, 4. Mai 2009

Mac OS X, die beste Plattform für Java-Entwickler?

Vor einigen Jahren behauptete Apple, MaxOSX sei die beste Plattform für Java-Entwickler. Das stimmt nur zum teil. Einige Zeit verbaute Apple Intel Core Prozessoren. Diese sind im Gegensatz zu den Intel Core 2 Prozessoren nicht 64 Bit tauglich und leider bietet Apple Java 6 nur für 32 Bit Prozessoren an. Von Sun gibt es leider kein Java für den Mac. Auf meinem noch ganz guten iMac mit einem Core Duo Prozessor kann ich nicht mehr entwickeln. Kurze Hoffnung hatte ich als ich diesen Link fand. Aber der Backport lief bei mir nicht.

Zur Zeit setzt ich deshalb VirtualBox und Windows ein um auf meinem Mac mit Java 6 zu entwickeln. Ob das so gewollt ist?

Übrigen hier noch ein nicht mehr ganz so frischer Link  zu diesem Thema.