Selbst kleine Skripte werden, wenn man sie in die große weite Welt entlässt, mit der Zeit ziemlich groß. Mit zur Zeit über 1500 Zeilen ist gsm-ussd für das, was es kann, eigentlich nicht besonders groß, aber es wird mir langsam etwas unübersichtlich. Das mag auch an meinem eigenen Unvermögen liegen, ist aber grundsätzlich ein paar Designentscheidungen geschuldet. Den meisten davon war ich mir zu Beginn noch nicht mal bewußt, bin ihnen aber trotzdem gefolgt:

  • Möglichst wenig externe Abhängigkeiten
  • Möglichst eine einzelne Datei
  • Möglichst keine Konfiguration
  • Einfache Installation

An Abhängigkeiten ist – außer perl als Skriptsprache – nur noch Expect.pm dabei, welches in den mir bekannten (großen) Distributionen im Repository steckt. Zu Beginn verwendete ich beispielsweise noch Log::Log4Perl, habe dies aber durch eine eigene kleine DEBUG()-Funktion ersetzt. Ansonsten kann gsm-ussd als einzelne Datei an beliebiger Stelle im Verzeichnisbaumk stehen und wird funktionieren. Eine Konfigurationsdatei existiert nicht. Zur Installation stehen zusätzlich ein RPM und ein DEB Paket parat.

Diese Entscheidungen bringen aber auch Probleme mit sich.

  • Testen wird schwieriger
  • Wiederverwendung wird schwieriger
  • Weniger Flexibilität in der Entwicklung

Änderungen an bestehendem Code sind schwerer zu testen, ob sie Regressionen verursachen. Ideen eigene Programme für SMS-Versand/Empfang (gsm-sms) oder ein reines PIN/PUK-Setz-Programm (gsm-pin) wären auf der bestehenden Basis nicht schwer zu erstellen, würden aber duplizierten Code und damit erhöhten Pflegeaufwand bedeuten.

Kurz: Der ursprüngliche Ansatz war korrekt für ein einfaches, kleines Skript, wie gsm-ussd auch begonnen hat. Mittlerweise passen sie aber nicht mehr.

Meine Konsequenzen:

  • Der 0.3er Zweig von gsm-ussd wird erhalten bleiben, aber nur noch reinem Bugfixing vorbehalten sein. Im git-Repository wird das der Branch „v0.3“ sein.
  • In der weiteren Entwicklung werde ich den Code wesentlich stärker modularisieren und objektorientiert designen. Der Entwicklung kann im git-Repository im Zweig „dev“ gefolgt werden. Intern wird dieser Zweig 0.4er Versionsnummern bekommen.
  • Hat der neue Code dann eine gewisse Stabilität gewonnen, wird er in einem Schlag zum Master übernommen und dann unter der Versionsnummer 0.5.x weitergeführt werden.

Solltet ihr also in nächster Zeit keine großen Ankündigungen zu gsm-ussd auf freshmeat.net oder so finden, keine Bange. Die Entwicklung stoppt nicht, sondern konzentriert sich erst mal auf eine solide Basis für weitere Ideen.