Flickware //2642

Es war einmal eine Anwendungssoftware. Diese Software war ursprünglich für einen bestimmten Einsatzzweck konzipiert und spezifiziert worden. Sie war einigermaßen straightforward und sauber implementiert worden. Eine Herausforderung war gewesen, dass die Anwendung auf verschiedenen Betriebssystem und mit unterschiedlichen Nutzereinstellungen zurechtkommen musste. Danach erfüllte sie alle an sie gestellten Anforderungen einwandfrei.
Im Laufe einiger Jahre gab es immer wieder mal kleine Verbesserungen und Erweiterungen, aber keine größeren Veränderungen in ihrer Architektur.

Dann ergab es sich irgendwann, dass die Nutzerschaft ein neues Feature wünschte, das die ursprüngliche Funktionalität gut ergänzte, aber in dieser nicht vorgesehen war.
Eine neue Anwendung für dieses Feature hätte einen großen Teil des Quellcodes benötigt, so dass man sich entschloss, das neue Feature in die ursprüngliche Anwendung zu integrieren. Aus Nutzerseite schien dies naheliegend und wünschenswert.
Bei der Entwicklung wäre ein großer Teil des Codes doppelt vorgekommen – entweder genau gleich oder mit geringfügigen Modifikationen. So entschloss sich der verantwortliche Entwickler, dieses Problem dadurch zu lösen, dass er bei den entsprechenden Funktionen zusätzliche Parameter übergab, die er abfragen konnte, und je nach dem den Code in unterschiedliche Zweige laufen ließ.
Das war ein bisschen Fieselei, aber letztendlich funktierte die neue Version so, wie sie sollte.

Wieder verging einige Zeit. Die Software lief gut, einige kleinere Käfer wurden behoben, ein paar eher unbedeutende Verbesserungen eingebaut.
Dann wieder hatte jemand die Idee, eine weitere größere Ergänzung für das Programm zu verlangen. Wieder ein ähnliches Vorgehen. Diesmal war die Angelegenheit noch komplizierter, da Teile des Codes jetzt dreifach benutzt werden mussten und sich dabei immer wieder in die Quere kamen. Im Endeffekte hakte es bei der fertigen Software dann. Langjährige Nutzer wurden unzufrieden. Der Entwickler musste immer wieder nachbessern, wenn Nutzer von Problemen berichteten. Schließlich liefen die häufigsten Anwendungsfälle halbwegs stabil, aber einige Macken blieben.

Nach einiger Zeit ergab sich die Notwendigkeit, eine der implementierten Funktionalitäten für einen anderen Zweck zu erweitern und zu verfeinern. Die Entwickler taten ihr bestes, aber inzwischen war die Anwendung so kompliziert, dass sich Ausführungsstränge miteinander verhedderten und sich gegenseitig blockierten. Die historisch gewachsene Anwendung lief nicht mehr stabil, blieb früher oder später hängen oder stürzte ab.

Über Anne Nühm (breakpoint)

Die Programmierschlampe.
Dieser Beitrag wurde unter Uncategorized abgelegt und mit , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

12 Antworten zu Flickware //2642

  1. keloph schreibt:

    irgendwann verkommt jedes messer zum schraubenzieher.

    Gefällt 3 Personen

  2. pirx1 schreibt:

    Verleser der Tages …

    Gefällt 1 Person

  3. Plietsche Jung schreibt:

    Ein Phänomen, an dem viele SW Entwicklungen krepieren …
    Es hilft nichts. Alte Zöpfe abschneiden, neu spezifizieren und machen.
    Alles andere wird mühsamer und teurer.

    Gefällt 2 Personen

  4. ednong schreibt:

    Ist das nicht immer so bei Software? Also bei SW, die man dann erweitert, obwohl die dafür nicht gedacht /modular genug war?

    Ich halte mittlerweile auch mehr davon, neu und modularer zu schreiben. Denn frickelst du einmal drin herum, frickelst du immer dran herum.

    Gefällt 1 Person

    • Modulare Entwicklung ist begrenzt.
      Die Funktionalität, die man ursprünglich gar nicht im Kopf hatte, wird man im SW-Design nicht abbilden.
      Irgendwann ist sicher der Punkt erreicht, wo eine Neuentwicklung vermutlich besser wäre. Aber es fällt schwer, dafür bewährten Code wegzuschmeißen.

      Gefällt mir

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s