Fronz-Tec – The Spirit of a glory Future

ÜK 223: Multi-User Applikationen objektorientiert entwickeln | Tag 1

Ziele des moduls

  1. Einschätzen, ob eine Datenbank die Anforderungen erfüllt.
  2. Applikationen entwerfen und mittels Transaktionen Multi-User Fähigkeit sicherstellen.
  3. User-Interfaces, Datenbankanpassungen und Transaktionen implementieren.

Was ist eine Multi-user Applikation?

Eine Multi-User Applikation erlaubt es, dass mehrere Nutzer gleichzeitig die Applikation nutzen können. Dabei ist es wichtig, dass die Datenbank die Zugriffe so verwalten kann, dass Datensätze nicht überschrieben werden können, wenn ein User daran arbeitet.

Ein weiterer wichtiger Punkt ist die Sicherheit. Ein User sollte nicht in der Lage sein, Daten einzusehen, zu denen er keine Berechtigung hat.

Beispiele für Multi-User Applikationen:

  • Instagram
  • Webshop

erster tag

  1. Entwicklungsumgebung einrichten
  2. Erste Gehversuche und Projekt analysieren
  3. Reverse Engineering der bestehenden Applikation

Code Quality

TDD

Definition

Testgetriebene Entwicklung (auch testgesteuerte Programmierung, engl. test first development oder test-driven development (TDD)) ist eine Methode, die häufig bei der agilen Entwicklung von Computerprogrammen eingesetzt wird. 

Bedeutung

Bei dieser Art von Entwicklung werden immer zuerst Tests geschrieben, die zunächst natürlich fehlschlagen. Anschliessend wird genau so viel Code implementiert, sodass der Test erfolgreich durchläuft.

Nutzen

Mit Source-Fragmenten ergänzt.

Vorteil / Nachteil im verteilten Multi-User Umfeld

Vorteile
  •  Fehler werden früher entdeckt
  • Software wird für den Test optimiert
  • kein ungetesteter Code
  • wenig Redundanzen (kein unnötiger Code)
Nachteile
  • Es muss immer konsequent durchgeführt werden
  • Ausbildung/Übung erforderlich
  • Kein Ersatz für alle anderen Testarten
  • Hohe Komplexität

Macht eine testgetriebene entwicklung sinn?

Eine testgetriebene Entwicklung mag zwar Vorteile haben, ist aber kaum umsetzbar. Oft weiss man nicht im Voraus, wie eine Methode aufgebaut werden soll, sodass sie möglichst effizient und/oder funktional ist. Daher ist die Entwicklung von Tests, bevor man die entsprechende Methode sehr kompliziert und nicht zu empfehlen.

Eine bessere Vorgehensweise ist es, den Test leer definieren und ein ToDo: setzen, um diesen, nachdem man die Methode entwickelt hat, zu schreiben. So vergisst man nicht, den Test für die Methode zu schreiben und hat nicht die unnötige Komplexität, die mit TDD kommt.


Code Coverage 

Bedeutung/ Nutzen

Code Coverage/Testabdeckung ist das Verhältnis zwischen dem was getestet wird und dem was getestet werden könnte. 

Man sollte bei einer Applikation möglichst darauf achten, dass die Testabdeckung möglichst hoch ist.

Eine hohe Testabdeckung bringt eine höhere Sicherheit, da man schnell bemerkt, wenn auf einmal etwas nicht funktioniert.

Anwendungszweck

Eine hohe Testabdeckung ist wichtig im Multi User Umfeld, denn die Applikation wird von mehreren Usern gleichzeitig verwendet und es ist deswegen umso wichtiger, dass die Applikation richtig funktioniert.

Vorteil / Nachteil im verteilten Multi-User Umfeld

 Vorteil
  • Man merkt schnell, wenn etwas nicht mehr funktioniert
  • Die Qualität bleibt höher
  • Der Enduser hat ein besseres Erlebnis wegen weniger Bugs.
Nachteil
  • Eine hohe Testabdeckung benötigt auch sehr viel Zeit.
  • Es ist auch kostenaufwändig

Ist eine 100% Code Coverage sinnvoll?

Grundsätzlich ist es ein idealer Zustand, 100% Code Coverage zu haben. Doch realistisch gesehen ist dies oft nicht möglich aufgrund der Zeit. 

Ausserdem gibt es vielleicht gewisse Funktionen, die nicht immer getestet werden müssen.

Im Fazit heisst das: Man sollte immer eine möglichst hohe Testabdeckung anstreben, aber 100% sind nicht zwingend


Annotations

Definition

Als Annotation wird im Zusammenhang mit der Programmiersprache Java ein Sprachelement bezeichnet, das die Einbindung von Metadaten in den Quelltext  erlaubt. 

Bedeutung

Annotations werden mit dem @-Zeichen spezifiziert.

Mit Annotations können Klassen und Funktionen mit einer Kennzeichnung versehen werden. Zum Beispiel kann man mit @Override spezifizieren, dass man eine Funktion einer Superklasse überschreiben hat.

Nutzen

Gibt Klassen einen Status.

Anwendungszweck

Falls eine Funktion zur Datenverarbeitung durch eine andere ersetzt wurde, kann diese Funktion mit @Deprecated gekennzeichnet werden. So können die Programmierer sich über die Versionen auf die neuen Funktionen anpassen und werden notifiziert, welche Funktion man alternativ nutzen kann.

Vorteile/Nachteile

Vorteile
  • Programmierer können den Code so simpler verstehen.
nachteile
  • Viele Programmierer arbeiten ohne Annotationen also kann es dadurch trotzdem zu Verwirrungen führen.

Generics 

Konzept:

Ab Version 5.0 steht auch in der Programmiersprache Java mit den Generics ein syntaktisches Mittel für die generische Programmierung zur Verfügung. Damit lassen sich Klassen und Methoden (Methoden auch unabhängig von ihren Klassen) mit Typen parametrisieren.
Dies ermöglicht Typsicherheit

Vorteile/Nachteile

Ein Nachteil, der sich durch dieses System ergibt, ist die schwierigere Übersetzung.

Der Compiler hat keine andere Möglichkeit, als den Typparameter in jedem Fall durch den geforderten konkreten Typ zu ersetzen und den ganzen Code erneut zu kompilieren.


Lambda 

Definition

Ein Lambda-Ausdruck ist eine anonyme Funktion (d.h. eine Funktion ohne Namen), die einige Parameter und eine “Funktion” (Expression / Statement) akzeptiert.

Delegates ist ein Objekt, das eine Referenz auf eine Funktion enthält.

Anwendungszweck

Delegates werden verwendet, um Callback-Methoden zu definieren und die Event-Handling zu implementieren.

Vorteile/Nachteile

Vorteile
  • Anstatt eine Funktion zu definieren, kann man Lambda Expression verwenden. 

clean code -> easy to read

Nachteile
  • Wird unschön bei komplizierten Codes.

Code-Analyse

Definition

Statische Code-Analyse ist ein statisches Software-Testverfahren, welches zur Übersetzungszeit durchgeführt wird.

Bedeutung

Der Quelltext wird hierbei einer Reihe formaler Prüfungen unterzogen, bei denen bestimmte Sorten von Fehlern entdeckt werden können, noch bevor die entsprechende Software ausgeführt wird.

Nutzen

Code-Analyse wird verwendet, um Fehler im Code ausfindig zu machen.

Werkzeuge

Werkzeuge zur statischen CodeAnalyse können meistens nicht selbstständig ausgeführt werden und werden daher mit einer Entwicklungsumgebung verwendet.

Sie beschränken sich nicht nur auf Kodierungsregeln wie beispielsweise die MISRA-C-Regeln, sondern erkennen auch funktionale und technische Fehler, potentielle Bugs sowie auch qualitative Schwachstellen im Code, wie zum Beispiel duplizierten Code.

Siehe Wikipedia-Link für Liste mit Werkzeugen:

https://de.wikipedia.org/wiki/Liste_von_Werkzeugen_zur_statischen_Codeanalyse

Vorteile/Nachteile

Vorteile
  • Fehler  im Code können gefunden und anschliessend behoben werden.

Produkt-/Softwarelebenszyklus

  1. Planung
  2. Analyse
  3. Design
  4. Entwicklung
  5. Testen
  6. Ausliefern

Typora

Beschreibung

Typora ist ein Editor für Markdown. Dieser Editor kann innert Sekunden Markdown formatiert darstellen. Er kann direkt die Markdown Syntax interpretieren. 
Ebenfalls kann auch die Syntax Ansicht verwendet werden. Zusätzlich zum normalen Typora können noch Themes heruntergeladen werden, welche nur das Design von Typora selber ändern.
Dies hat einen Einlfuss auf das Aussehen des Textes.

Vorteile/Nachteile

Vorteile
  • Es kann sehr schnell und einfach ein Markdown für eine selber codierte Library geschrieben werden.
  • Typora ist kostenlos.
  • Typora kann auf OSX, Windows und Linux installiert werden.
  • Es bietet sehr viel Funktionen für den Export oder die Textverarbeitung.
  • Das Design und die Usability von Typora ist sehr schön.
Nachteile
  • Die Vorschau von Markdown-Links wird in Typora ähnlich wie im Quelltext angezeigt.
  • Die links werden in einem PDF nicht angezeigt, wenn das Markdown zu einem PDF exportiert wird.
  • Wenn Typora geöffnet wird, ist nur eine weisse Fläche zu sehen. Man weiss  auf den ersten Blick nicht, was man nun tun soll oder machen kann.

Markdown

Definition

Markdown ist eine vereinfachte Auszeichnungssprache. Ein Ziel von Markdown ist, dass schon die Ausgangsform ohne weitere Konvertierung leicht lesbar ist.

Als Auszeichnungselemente (Tags) wurden daher vor allem Auszeichnungsarten verwendet, die in Plain-Text und E-Mails üblich sind.

Auch andere Auszeichnungssprachen,  wie reStructuredText oder Textile , hatten Einfluss auf die Syntax. Der MIME-Type lautet text/markdown.

Verbreitung

Genutzt wird Markdown auf Plattformen wie GitHub, Stack Overflow oder Ghost. Häufig wird Markdown in Readme-Dateien verwendet.

Auszeichnungbeispiel

Für die Auszeichnung von Text verwendet Markdown vor allem Satzzeichen und gestattet in einigen Fällen mehrere gleichwertige Methoden.

Zeichen, die für gewöhnlich als Formatbefehle verstanden werden, können mit einem Backslash übergangen werden. So wird beispielsweise ein Sternsymbol (*) am Zeilenbeginn als Aufzählungszeichen interpretiert; will man wirklich ein Sternchen, leitet man es mit einem Backslash ein: \*.

Vorteile/Nachteile

Vorteile
  • Leicht zu lesen und benutzen (auch ohne Kenntnisse in Programmierung).
  • Auf allen Geräten und Textverarbeitungsgeräten darstellbar.
  • Viele Funktionen für die Textbearbeitung in Plain-Text.
  • Schnelle Formatierung.
Nachteile
  • “Auszeichnungssprache”- keine ausführliche Text-Stilbearbeitung wie z.B. in Word möglich.

Maven

Beschreibung

Der Name Maven kommt aus dem Jiddischen und bedeutet so viel wie „Sammler des Wissens“.
Maven ist ein Build-Management-Tool der Apache Software Foundation und basiert auf Java. Mit ihm kann man insbesondere Java-Programme standardisiert erstellen und verwalten.
Apache Maven ist (ähnlich wie Ant und Gradle) ein leistungsfähiges Werkzeug, um viele in der Softwareentwicklung immer wieder anfallende Prozeduren zu automatisieren und zu vereinfachen. Es wird manchmal als “Build Management System” bezeichnet und ist Teil vom “Software Configuration Management (SCM)”.
Während Ant eher kommandoorientiert arbeitet, ist Maven eher strategisch orientiert, realisiert mehr Abstraktionen, wird deklarativer gesteuert, berücksichtigt Abhängigkeiten besser und ist besonders für aufwändigere Multimodulprojekte geeignet.
Die Konfiguration von Maven läuft durch eine XML datei mit dem Namen pom.xml
Ein kleiner Nachteil ist hier aus meiner Sicht, dass die XML Datei schnell sehr gross werden kann.
Jedoch ist das XML grundsätzlich ziemlich übersichtlich.

Standard-Verzeichnisstruktur

Ein wesentliches Element des Prinzips Convention over Configuration ist die Standard-Verzeichnisstruktur von Maven. Sofern ein Projekt sich daran hält, müssen die Pfadnamen nicht spezifiziert werden, was die zentrale Konfigurationsdatei pom.xml stark vereinfacht. Auf oberster Stufe gibt es die beiden
Verzeichnisse src und targetsrc enthält alle Dateien, die als Eingabe für den Verarbeitungsprozess dienen und in target werden automatisch alle erzeugten Dateien abgelegt. Auch weitere Verzeichnisstufen sind standardisiert und Plugins, die neue Arten von Eingabedateien verarbeiten oder neue Arten von Ausgabedateien erzeugen, geben dafür Standardpfade vor.
Die folgende Struktur zeigt einige der wichtigsten Verzeichnisse.
  • src: alle Eingabedateien
    • src/main: Eingabedateien für die Erstellung des eigentlichen Produkts
      • src/main/java: Java-Quelltext
      • src/main/resources: andere Dateien, die für die Übersetzung oder zur Laufzeit benötigt werden, beispielsweise Java-Properties-Dateien
    • src/test: Eingabedateien, die für automatisierte Testläufe benötigt werden
      • src/test/java: JUnit-Testfälle für automatisierte Tests
  • target: alle erzeugten Dateien
    • target/classes: kompilierte Java-Klassen

Weitere Build-Management-Tools

Wie bereits im oberen teil erwähnt, gibt es zum Beispiel noch Ant als Build-tool. Das ist das erste das es gegeben hat. Maven ist darauf aufgebaut.
Dann gibt es auch noch Gradle. Das ist etwas neuer als Maven und auch darauf aufgebaut. Gradle hat nicht XML für die Konfiguration. Gradle verwendet Groovy als sprache für ihre Konfig Datei.
Die Gradle files sind meist Kompakter als die pom files. Jedoch ist es etwas Komplizierter Gradle in die Tiefe gut zu verstehen
.
Gradle ist vorallem sehr gut geeignet für Grössere Projekte in denen man eigene build prozesse definieren möchte, man kann sozusagen eigene methoden im Gradle file programmieren.
Maven eignet sich gut für Kleine Projekte, kann jedoch ebenfalls für grössere Projekte eingesetzt werden.

Dependency-Management

Ein Dependency-Management-Tool hilft dabei mit den Dependencies umzugehen. Wenn ein Projekt verschiedene Abhängigkeiten hat.
Neue Module einbinden muss usw. ist dies mit Maven oder Gradle um einiges einfacher als wenn man das von Hand machen muss.

Infrastructure as a Service

Beschreibung

IaaS ist ein Geschäftsmodell, welches die Rechnerinfrastruktur bei bedarf mietet anstatt diese im Vorraus zu kaufen. Daraus ergeben sich viele Anwendungsmöglichkeiten:
  • plötzlicher Wachstum ist kein Problem; Infrastruktur ist skalierbar.
  • Für selten ausgeführte Anwendungen, muss nicht extra Infrastruktur gekauft werden, welche bei nicht ausführung überflüssig ist.
Grösster Anbieter ist Amazon Web Service. Dieser bietet zum Beispiel Produkte wie EC2 (Elastic Compute Cloud) an. Diese virtuelle Server besitzen keine feste Vertragslaufzeit, sondern wird Stundenweise manchmal sogar Sekundenweise abgerechnet.
Unter anderem kann man bei Amazon Web Service S3 (Simple Storage Service) mieten, welches theoretisch eine beliebig grosse Datenmenge speichern kann. Ebenfalls hier wird nur nach Gebrauch abgerechnet und man muss nicht Speicher kaufen, welchen man gar nicht brauch.
Bekannte Firmen, welche einer dieser Dienste brauchen, sind zum Beispiel Netflix, Dropbox oder Reddit.

Vorteile/Nachteile

Vorteil
Ein klarer Vorteil von IaaS ist, dass man nur für die Dienste bezahl, welche man im Endeffekt auch benutzt. Somit sind die Kosten überschaubar und gut kalkulierbar.
Nachteil
Ein Nachteil ist, dass sie ganz vom Anbieter abhängig sind. Das betrifft die Verfügbarkeit als auch das Tempo der Dienste.

CD

Beschreibung

CD steht für Continuous Delivery und beschreibt den Prozess, Techniken und Werkzeuge,  die das Deployment einer Software erleichtern und verbessern. 
Die Automatisierung der Auslieferungprozesses ermöglicht eine schnelle, zuverlässige und wiederholbare Deployments.
CD wird meist im Zusammenhang mit agilen Methoden verwendet.
Ein Beispiel für eine CD Software ist Teamcity.

CI

Beschreibung

CI steht für Continuous Integration. 
Dieser Begriff wird benutzt, wenn ein Programm fortlaufend weiterentwickelt wird.
Durch diese Art der Entwicklung steigt auch die Code-Qualität und die Effizienz, da Entwickler immer über den neusten Stand des anderen informiert sind.
Ein sehr bekanntes Tool für Continuous Integration ist Git. Dieses kann selbst gehostet werden, oder es kann ein kostenpflichtiger Account bei GitLab erstellt werden.

Vorteile/Nachteile

Vorteile
  • Fehler werden  früh zu erkennt
  • Kontinuierlicher Arbeitsfluss wird garantiert

 

Nächster in Artikel

Vorheriger in Artikel

Antworten

© 2022 Fronz-Tec

Thema von Anders Norén