Programm Code trennen bzw nicht mischen?

Welche Rolle spielt die Entropie in der Softwareentwicklung

die Vision

Wer kennt nicht das Problem, man hat eine Vorstellung für ein Programm und möchte es realisieren. Jetzt ist nicht jeder gleich ein Fachspezialist, Programmierer und Designer um so eine Idee umzusetzen. Es ist also eine Arbeitsteilung angesagt.

die Umsetzung

Es müssen Masken gestaltet, Tabellen und Funktionen definiert werden, damit der Programmierer beginnen kann.

Der Fachspezialist definiert seine Tabellen, Funktionen und Bedingungen. Der Anwender gestaltet seine Masken und es gibt Design Vorgaben. Aus all diesen Vorgaben soll der Programmierer nun ein Programm gestalten. Zur Erleichterung kann man eine Prototyp Software zum Gestalten der Masken verwenden bzw ein Excel Sheet für die Tabellen.

das Problem

Der Programmierer nimmt nun alles und es verschwindet in einem Programmcode, wo alles kräftig vermischt wird und wo diese Mischung oft später keiner so richtig mehr versteht. Wie heißt das Feld und was steckt genau drin ist dem Programmierer egal, es muss nur auf der richtigen Stelle in der Maske und schlussendlich in der richtigen Tabelle landen. Für den Anwender ist der Name und der Inhalt wichtig, wie das Feld auf die Maske kommt und woher der Inhalt kommt ist ihm egal.

Macht es Sinn, diese unterschiedlichen Interessen und Sichtweisen in einem Code zu vereinen?

die Abhilfe

Was, wenn man diese Vorgaben nicht in ein Programm einbaut, sondern getrennt aufbaut?

Es wird dem Programmierer nicht mehr erlaubt alles in einem Code zu vermischen. Vielmehr muss er die Vorgaben lesen und diese in seinem Code anwenden. Es werden getrennte Arbeitsbereiche geschaffen, die ein gemeinsames Produkt ergeben.

Der Programmierer muss sich nicht mehr um die Namen, die Masken und Tabellen kümmern. Für eine Anpassung muss nicht gleich ein neuer Code erzeugt werden, es werden nur die Vorgaben angepasst. Schließlich braucht man keine tieferen Programmierkenntnisse um eine Maske zu gestalten oder Felder zu berechnen, aber genau diese Bauteile machen einen Großteil des Programms aus.

Der Fachspezialist kann nun seine Tabellen und Funktionen schreiben, der Anwender seinen Maskenablauf gestalten und der Programmierer kümmert sich um die Softwarebausteine für das Programm, was ja schon mehr als schwierig ist.

neue Strukturen

Plötzlich gibt es nicht mehr nur eine Programmstruktur in der sich alle zurechtfinden müssen. Vielmehr ermöglicht die Business und Maskenstruktur ein getrenntes und durchschaubares Arbeiten nach unterschiedlichen Strukturen. Änderungswünsche arten nicht gleich zum Zeit oder Strukturproblem aus. Tests lassen sich leichter kombinieren, so kann eine neues Programm mit einer bereits getesteten Vorgänger Business Version überprüft werden.

die Vorteile

Was würde so eine Trennung bringen? Vor allem Schnelligkeit und Transparenz. Schnellere und realistischere Prototypen. Einfachere Tests und eine stabilere Anwendung. Leichtere Aufteilung in Projektphasen, es gibt keine zwingende Spezifikations Deadline und das Programm wird nicht mehr zum alleinigen Nadelöhr. Änderungen und Anpassungen lassen sich leichter und schneller umsetzen, es ist nichts in Stein gemeißelt. Bessere Verteilung der Arbeit zwischen Programmierer, Fach Spezialist und Anwender. Eine leichtere Weiterentwicklung der Funktionen. Aber vor allem mehr Transparenz und Durchblick und die Vorgaben können in die Dokumentation einfließen. Der Business Code wäre vom Programmcode völlig getrennt. Feldberechnungen, Bedingungen, Vorgaben, Abfragen wären ohne Probleme ersichtlich und vor allem ohne ein spezielles Programmiertool lesbar.

Ein weiterer Vorteil ist, dass der aktuelle Code oder besser dessen Vorgaben Teil der Dokumentation sind. Aber auch die Inbetriebnahme erleichtert sich, mit einem einfachen Copy kann man eine Version vom Test in den Echt Account übernehmen, vorausgesetzt es ändert sich nichts an der Datenbank. Somit sind einfache Teilinbetriebnahmen möglich.

Neben den Vorgaben, die meist in XML geschrieben werden, spielt auch das "Code in Code Integrieren" eine immer bedeutendere Rolle. Ob es nun eine SQL Anweisung ist oder eine Feldberechnung, der Code Schnipsel wird somit außerhalb des eigentlichen Programmes definiert.

die Nachteile

Gibt es Nachteile? Klar, das Programmieren wird komplexer und die Trennung kostet sicherlich etwas an Programm Laufzeit. Die Frage ist, wie nachhaltig soll das Programm sein und wie umfangreich ist das Programm. Für ein kleines Programm, das man nie wieder angreift, zahlt sich eine Trennung sicherlich nicht aus. Also für Programme bei denen man ausgeht, dass sich nichts mehr ändert.

ein Beispiel

Anhand einer mobilen Zeiterfassung möchte ich die Trennung etwas in Zahlen erläutern. Dazu wird für die Mitarbeiter eine WebApp fürs Smartphone benötigt und für die Administration eine Desktopversion. Beide verwenden die selbe Maskensoftware jedoch mit einem unterschiedlichen Styles. So kommt beim Smartphone bereits HTML5 zum Einsatz. Im gemeinsamen BusinessCode sind auch noch SQL und Perl Code Schnipsel enthalten. Die Lösung setzt auf Perl mit Apache als Webserver und Mysql als Datenbank auf.

Files

  • Die App besteht im wesentlichen aus 7 Files

  • Bereiche
    • Fachspezialist
      • 1.BusinessCode.xml
    • Anwender
      • 2.MaskenCodePC.xml
      • 3.MaskenCodeMobile.xml
    • Programmierer
      • 4.MaskenProgramm.pl (Webserver)
      • 5.DatenProgramm.pm (Datenbank)
    • Style
      • 6.Style4PC.xsl (HTML4)
      • 7.Style4Mobile.xsl (HTML5)

Lines of Code

http://cloc.sourceforge.net

File Code Zeilen Proz
5.DatenProgramm.pm 5427 30%
1.BusinessCode.xml 3127 17%
4.MaskenProgramm.pl 2926 16%
2.MaskenCodePC.xml 2721 15%
6.Style4PC.xsl 2388 13%
3.MaskenCodeMobile.xml 1027 6%
7.Style4Mobile.xsl 735 4%
Gesamt 18351 100%

Der Programmier hat mit 46% den größten Anteil, gefolgt mit 21% von den Masken und jeweils 17% für Business und Style. Wird der Programm Code öfters verwendet, nimmt der Aufwand dabei ab.

Sprache Code Zeilen Proz
Perl 8353 46%
XML 6875 37%
XSL 3123 17%
Gesamt 18351 100%

Der Perl Code ist natürlich um einiges komplexer als der XML oder XSL Code. Am einfachsten ist natürlich der XML Code, welcher aber auch den flexiblen Teil darstellt.

Lines of Code fürs Business

Der Business Code enthält auch SQL und Perl Code Schnipsel. Vor allem Berechnungen und Prüfungen werden mit Code Schnipseln umgesetzt. Der SQL Code dient als Grundlage für die Listen und Optionen.

Sprache Code Zeilen Proz
Perl 1323 75%
SQL 433 25%
Gesamt 1756 100%

Mehrwert als Dokumentation

Der MaskenCode dient zum Erstellen der Masken, kann aber auch für Dokumentation und Recherche benutzt werden.

[root@j4590 check]# xmlsearch -f 2.MaskenCodePC.xml  /appli/prog  -a "name,#maske[1]/bez/."
File: 2.MaskenCodePC.xml
Pfad: /appli/prog 
-----+-------+---------------+-------------------------------+
pos  | <tag> | name          | #maske[1]/bez/.               | 
-----+-------+---------------+-------------------------------+
30   | prog  | login-einfach | Login                         | 
75   | prog  | menu          | Hauptmenü                     | 
189  | prog  | menu02        | Buchungen                     | 
254  | prog  | buchen        | Buchen - Einstieg             | 
418  | prog  | buchen02      | Buchungskorrektur - Einstieg  | 
548  | prog  | buchen03      | Buchungen erfassen            | 
698  | prog  | buchen-fzg    | Buchen - Einstieg             | 
803  | prog  | info          | Information - Einstieg        | 
900  | prog  | baustelle     | Baustelle - Einstieg          | 
1102 | prog  | artikel       | Artikel - Erfassen (Einstieg) | 
1330 | prog  | salden01      | Salden - Einstieg             | 
1545 | prog  | user          | Userwartung - Einstieg        | 
1744 | prog  | taet01        | Tätigkeitswartung - Einstieg  | 
1927 | prog  | fahrzeuge     | Fahrzeug-Wartung - Einstieg   | 
2135 | prog  | regeln01      | Regeln - Einstieg             | 
2284 | prog  | liste01       | Baustellen Liste              | 
2476 | prog  | liste02       | Tagesliste Liste              | 
2690 | prog  | liste03       | Saldenliste Liste             | 
2929 | prog  | liste04       | User Liste                    | 
3086 | prog  | liste05       | Tätigkeits Liste              | 
3219 | prog  | liste06       | Fahrzeug Liste                | 
3314 | prog  | liste07       | Tagesliste Material           | 
3456 | prog  | liste08       | Artikelliste mit Barcode      | 
-----+-------+---------------+-------------------------------+
[root@j4590 check]# 

  • Desktop MaskenCode für Wartung und Einstellungen
  • pos entspricht der Position im XML File

die Erkenntnis

Wie bei so vielem im Leben, lässt sich auch in der Software Erstellung der zweite Hauptsatz der Thermodynamik (Entropie) anwenden. Auch in der Softwareerstellung gibt es das Problem des Vermischen und des nachträglichen Herausfiltern. Ist etwas einmal vermischt, muss man ein vielfaches an Energie aufwenden um es wieder zu trennen. So kann ein Ausbau oft aufwendiger als ein Einbau sein.

-- ErnstHerko - 2016-04-26

Edit | Attach | Watch | Print version | History: r2 < r1 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r2 - 2016-04-30 - ErnstHerko
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback