Bereits 10853 Beiträge!


Programminterne Steuerung

Beitrag von Maverick Zero, am 22.07.2013
Durchschnittliches Voting: 7.852


Nach dem Weggang eines Kollegen älteren Semesters habe ich einige seiner Themen übernommen und durfte mich in diverse von ihm geschriebene Programme einarbeiten. Noch bei der Übergabe sprach ich ihn auf einige Dinge an, die ich als umständlich oder potentiell problematisch umgesetzt ansehe. Die Erklärungen dazu waren ganz klassischer Natur: "Habe ich schon immer so gemacht", "Es funktioniert aber", "an den Code muss eh nie wieder jemand ran", "das kommt so selten vor, dass da ein Fehler auftritt... und wenn, dann ist der dadurch zerstörte Datensatz doch ganz schnell rekonstruiert". Ah ja..., schon klar...

So kam es dann nach seinem Weggang, dass eine (fähige) Anwenderin (in-house) sich bei mir meldet, dass sie mit einem Programm (zur Pflege und Auswertung mehrerer Tabellen mehrerer Datenbanken für sehr spezielle Anwendungsfälle. ) ein Problem hat, weil egal welche Parameter sie mitgibt und wie sie die Steuertabellen pflegt, nie das von ihr erwartete Ergebnis rauskommt. Obwohl Sie angibt, dass mit Tabelle 1, 2 und 3 auf Datenbanken X und Z alle Felder verarbeitet werden sollen, werden Tabellen 2, 5, 7 und 8 auf Datenbank Y mit Feldeinschränkung angefasst.

Ich lasse mir das merkwürdige Verhalten zeigen, probiere es selbst einmal und muss zugestehen: Hier ist etwas komisch. Da sich das Problem mit den direkt vorhandenen Hilfen und der Programmdokumentation nicht erklären lässt, mache ich mich also daran, den Quellcode nachzuvollziehen.

Über viele huntert Codezeilen stolpere ich über haufenweise Unsinn.
Da gibt es lange Strecken an Codezeilen die keinerlei Funktion haben. "Schiebe den Wert von Variable A nach Variable A, von B nach B, etc...".
Es folgen die wildesten Verbrechen gegen QM-Handbuch und Styleguides: wieso sprechende Variablen? var1, var2, var3 für unterschiedliche Zwecke in einer komplexen Berechnung geht doch auch. Der Benutzer sieht den Code eh nie, und der Programmierer, der das Ding verbrochen hat weiss ja schliesslich, für was die Unterroutine "dbop_0000173" zuständig ist. Ebenso die dbop_0000172. Und dbop_0000171. Und die anderen 170...
Dazu gesellen sich dann mehrere unnütze, langsame Stringverkettungen um Dinge zu montieren, die bereits an anderer Stelle schon längst im Speicher liegen. Einmal Dinge von der Datenbank laden reicht doch. Man muss es nicht doppelt und dreifach machen, nur um dann wieder und wieder Teilergebnisse zu verketten. Kein Grund dass das Programm nicht funktioniert, aber umständlich, langsam und schwierig in der Wartung. Insgesamt einfach kein schöner Stil.

Schlussendlich kam ich dem eigentlichen Grund des Problems aber auf die Spur:
Diese Spur nannte sich "Include-File" mit mehr als 15.000 Codezeilen.

Ein wenig zu groß, ein wenig zu verdächtig.

Beim Öffnen traf es mich dann wie ein Schlag:
Jede einzelne Tabelle, jede Tabellenspalte, Datentyp, Längenangabe, Zuordnungsregel, Rechenvorschrift, Fixwert und so weiter war hier händisch eingetragen in einem riesigen Berg halbgarer Logiken und Verzweigungen.
Kurzum: Eine hartgecodete Steuerungslogik im Programmcode. Sämtliche Steuertabellen und Konfigurationen waren hier in Form von Programmcode als Duplikat umgesetzt.

Ein paar weitere Codezeilen vervollständigten das Bild:

Beim Programmstart lädt das Programm die Steuereinträge aus den vom Benutzer gepflegten Tabellen und schreibt in die Ausgabe etwas Marke "Es wird nun Vorgang A mit Konfiguration 1234 durchgeführt."
Danach schmeissst das Programm sämtliche bisher gelesenen Werte aus dem Speicher, springt dann in die hartgecodete Logik und baut sich damit die Konfiguration zusammen, mit der dann weitergearbeitet wird.

Dass das zu keinem sinnvollen Ergebnis führt muss wohl nicht separat erwähnt werden...


Somit wird aber auch klar, warum der Herr Kollege immer informiert werden wollte, wenn etwas an der Programmsteuerung gedreht wurde. Er musste jeden einzelnen Eintrag im Programmcode nachziehen...
Jahre lang....


ACHTUNG Archivsystem!

Es sind keine neuen Einträge, Bewertungen oder Kommentare mehr möglich.