Template Engine – was ist das ?

am 03 Jan 2018 in Tech, WebDesign von
Bisher unkommentiert »

Da Template-Engines diverse Vorteile bieten, werden diese in der modernen Webentwicklung häufig eingesetzt. Doch was sind Template-Engines überhaupt und wie werden diese benutzt? In diesem Artikel werde ich euch einen kurzen Überblick über das Thema geben und euch ein Anwendungsbeispiel dafür vorstellen.

 

Was ist eine Template Engine?

Template-Engines werden dazu eingesetzt, Arbeitsprozesse zu teilen und aus Vorlagen, sogenannten Templates, Internetseiten zu generieren. Möglich wird das durch Platzhalter in der Template-Datei welche variable Werte annehmen können. Dadurch können diese Platzhalten mit generischen und aktuellen Inhalten gefüllt werden. Jedoch können die meisten Template-Engines noch mehr als nur Platzhalter austauschen. Es können Schleifen geschrieben werden oder bedingte Anweisungen implementiert werden. Dadurch können mit wenig Zeilen Code zum Beispiel etliche Produkte aus einer Datenbank ausgelesen werden oder ein bestimmter Bereich einer Webseite nur geladen werden, wenn eine bestimmte Variable gesetzt ist.

Ein Beispiel einer solchen Template-Engine ist Smarty. Smarty basiert auf der weit verbreiteten Scriptsprache PHP und wird in diversen Webseiten eingesetzt. Im Folgenden wird die Verwendung von Smarty dargelegt. Im ersten Schritt wird eine PHP-Variable dem Objekt Smarty zugewiesen nachdem dieses instanziiert wurde. Die zugewiesene Variable kann ein Array oder ein String sein und zuvor zum Beispiel aus einer Datenbank gelesen worden sein (siehe Abbildung 1).

Abbildung 2: Ausgabe einer Variablen mit Smarty

Nachdem die Variable in PHP zugewiesen wurde, ist diese im Template verfügbar und kann als HTML ausgegeben werden (siehe Abbildung 12: Ausgabe einer Variablen mit Smarty). Hierbei sind die zuvor angesprochenen Platzhalter mit einer geschweiften Klammer für den späteren Interpreter markiert.

Abbildung 2: Ausgabe einer Variablen mit Smarty

Angenommen, der Variablen „firstname“ wurde der Wert „Max“ und der Variablen „lastname“ der Wert „Mustermann“ zugewiesen: Das Ergebnis des Aufrufs von Abbildung 2 würde dann wie folgt aussehen (siehe Abbildung 13: Ergebnis der Templateausgabe).

Abbildung 3: Ergebnis der Template-Ausgabe

 

Fazit:

Die Verwendung einer Template-Engine bringt diverse Vorteile mit sich. Die wichtigsten sind die Trennung von Logik und Darstellung. Dadurch wird nicht nur eine Arbeitstrennung zwischen Backend-Entwickler und Frontend-Entwickler möglich, sondern auch die Sicherheit der Applikation verbessert. Da ein Frontend-Entwickler nun nichtmehr im Backend arbeitet, kann er auch keine sicherheitsrelevanten Fehler mehr begehen. Er ist nun einzig für die Darstellung der Daten verantwortlich. Ein weiterer Vorteil ist die einfache Änderung von Weblayouts. Es muss im Code nichtmehr, oder nur noch sehr begrenzt zwischen Logik und Darstellung unterscheiden werden, wodurch Änderungen viel weniger Aufwand mit sich bringen. Aus diesen Gründen empfehle ich euch für das nächste Webprojekt die Verwendung einer solchen Template-Engine. Es benötig zwar anfangs etwas Einarbeitungszeit, jedoch erspart es in der Summe mehr Zeit als dadurch verloren geht.

Ein weiteres Beispiel für eine Template Engine ist Twig.

Getagged: , ,

Single Page Applications

am 26 Nov 2017 in Tech, WebDesign von
Bisher unkommentiert »

Wer ständig mit dem Internet zu tun hat und etwas aufmerksamer durch die
verschiedenen Internetseiten surft, wird etwas feststellen: Immer mehr Internetseiten sind
nicht mehr wie früher Aufgebaut als eine Ansammlung von Seiten, die miteinander
verlinkt sind, sondern es gibt nur noch eine einzelne Seite auf der alle gewünschten
Informationen zu sehen sind, oder nachgeladen werden.

Dass dies nicht nur ein Trend ist, dem nur wenige innovative Startups folgen, wird
durch die vielen Giganten im Internet deutlich. So ist zum Beispiel die komplette Seite von
Facebook zum Großteil eine Single Page Application, auch SPA genannt. Doch auch Gmail,
Google Maps, Twitter und dir fallen bestimmt noch mehr Seiten ein, sind alles SPA’s.

Doch warum wird diese Technik so häufig und gerne eingesetzt? Dies lässt sich leicht
durch die vielen Vorteile, die eine SPA mit sich bringt nachvollziehen. Denn unter anderem
verringert eine solche Internetseite die Serverlast des Betreibers enorm. Die eigentliche Seite
wird nur einmal heruntergeladen und anschließend müssen nur noch Informationen, Texte
und Bilder nachgeladen werden. Es müssen nicht bei jeder Navigation alle Skripte, Header
und Stylesheets der Seite neu geladen werden. Dies bringt einen großen Vorteil für Seiten, die
sehr große Benutzerzahlen zu verzeichnen haben. Ein weiterer Nutzen bringt das SPA-Paradigma bei Seiten die hohe Interaktivität zwischen dem Benutzer und der Anwendung
benötigen. Hier kann eine solche Seite wie eine typische Desktopanwendung auftreten, sodass
man garnicht mehr das Gefühl hat, im Internet unterwegs zu sein. Dies ist zum Beispiel bei
Google Docs der Fall.

Wenn wir jetzt die Vorteile einer SPA wissen, müssen wir jetzt nur noch mehr über die
technische Realisierung einer solchen Web-App erfahren. Ermöglicht werden diese Art von
Internetseiten nur durch JavaScript oder andere auf clientseitig laufende Skripte.
Hierbei ist der Begriff AJAX der Kern einer jeden SPA. Denn nur durch AJAX
(Asynchronous JavaScript and XML) ist es möglich, Inhalte dynamisch nachzuladen,
nachdem die Seite fertig geladen wurde. Dazu gibt es auch immer mehr mächtige
Frameworks, die eigens dafür entwickelt wurden. So sind AngularJS, React oder Backbone.js
nur die Bekanntesten unter den vielen Verfügbaren.

Da wir jetzt auch die Technik dahinter verstehen, sollten wir uns aber noch über die
Nachteile einer SPA im Klaren sein. Denn ein großes und nicht zu vernachlässigendes Manko
ist die Suchmaschinenoptimierung einer Single Page Application. Da der komplette Inhalt
der Seite nicht sofort beim aufrufen der Seite verfügbar ist, können die meisten Crawler nicht
alle Inhalte erfassen, die die Seite zur Verfügung stellt. Außerdem wird beim Klick auf einen
Link keine neue Seite geladen, da alle Inhalte nur nachgeladen werden und es im
wesentlichen nur eine Seite gibt. Daher sollte bei Firmenseiten oder ähnlichem auf eine SPA
verzichtet werden. Denn eine solche Seite ist im Normalfall nicht bei den obersten
Suchergebnissen gelistet.

Folglich sollte genauestens überlegt werden, was die Ziele einer Seite sind, bevor die
eigene Seite als Single Page Application gebaut wird. Kann der SEO-Faktor vernachlässigt
werden, oder ist viel Interaktion gefragt, so kann getrost auf bekannte Frameworks wie
AngularJS gesetzt werden. Ist jedoch ein gutes SEO-Ranking erforderlich, so sollte von dieser
Technologie abgeraten werden und eher eine Seite im klassischen Stil entwickelt
werden.

Quellen

http://www.dtelepathy.com/blog/design/8-reasons-why-pageless-design-is-the-future-of-the-web
http://t3n.de/news/single-page-webdesign-beispiele-323225/
http://singlepageappbook.com/goal.html
https://de.wikipedia.org/wiki/Single-Page-Webanwendung
https://blog.secu-ring.de/software/single-page-applications-loesung-fuer-probleme/
http://www.flyacts.com/blog/seo-und-spa-single-page-applications-unvereinbar-oder-unzertrennlich/

FloNET – evolutionäres Lernen

am 26 Nov 2017 in Aktuelles, Tech von
Bisher unkommentiert »

Vor ca. Einem Jahr beschloss ich, herauszufinden wie man Neurale Netzwerke benutzt um Intelligente Programme programmieren zu können. Das Thema künstliche Intelligenz ist ein Thema, das in Zukunft immer mehr Teil unseres täglichen Lebens wird, daher ist es sicher kein Fehler, etwas Wissen in diesem Gebiet zu haben. Umso erfreuter war ich, als ich ein Video mit dem Titel “Deep Learning without an PhD” fand, anscheinend eine einfache Anleitung als Videoform. Als ich jedoch bereits nach wenigen Minuten gar nichts mehr verstand, stellte ich das Thema Neurale Netzwerke ersteinmal hinten an. Etwas später fand ich diesen Artikel (Den Blog kann ich übrigens nur wärmstens empfehlen!). Dort wird auch unter anderem beschrieben, wie ein Gehirn grundsätzlich funktioniert. Auf Basis von diesem Wissen konnte ich dann eine eigene Version eines Neuralen Netzwerks programmieren.

Funktionsweise

Die Funktionsweise meiner Version ähnelt teilweise verbreiteten Methoden, jedoch gibt es auch einige Unterschiede. Ich werde im Folgenden meine Version beschreiben, doch der Grundgedanke eines Neuralen Netzwerks ist überall der selbe.

Das Neuron

Ein Neuron ist der kleinste Teil eines Neuralen Netzwerks, und damit auch von unserem Gehirn. Ob ein Neuron ein Signal weitergibt, das es erhalten hat, hängt davon ab wie stark es aktiviert wurde. Wurde das Neuron oft genug und mit genug Energie aktiviert, gibt es irgendwann einen Impuls an weitere Neuronen weiter.

In diesem Bild ist ein Neuron dargestellt, wie ich es in meiner Implementierung benutze. Von der vorherigen Schicht übergibt ein Neuron in diesem Beispiel einen Wert von 1.3 an das Neuron. Dieses würde nun null weitergeben, da der Threshold-Wert von 2.1 nicht überschritten wurde. Jedoch übergibt ein zweites vorheriges Neuron zusätzlich noch den Wert 1.8. Das Neuron addiert alle Werte, die es bekommt, und vergleicht es mit seinem Threshold Wert. In diesem Fall wurde er überschritten, weshalb das Neuron seinen festgelegten Outputwert weiterreicht. Dieser ist für jedes Neuron individuell, genau wie sein Threshold-Wert. Durch diese parametergesteuerte Interaktion können einfache Logikoperationen ausgeführt werden.

Das Netz

Das Netz besteht aus vielen verbundenen Neuronen, wie es oben beschrieben wurde. In diesem Beispiel besitzt das Netz 3 Inputfelder/Neuronen. Diese Werte werden von dort an die erste Reihe an Neuronen weitergeleitet. Dieses Netz besitzt 3 sogenannte “hidden layers”. Diese sind für die Berechnung der Outputwerte zuständig, in diesem Fall sind es 2. Alle Parameter können frei gewählt werden, und an das jeweilige Szenario angepasst werden.

Wie geeignet, oder “intelligent”, ein Netz ist, hängt davon ab, wie die Parameter der einzelnen Neuronen gewählt werden. Dann sind gängige Machine Learning Aufgaben wie Bild- oder Spracherkennung möglich. Auch wenn diese modellhaften Netze nicht exakt dem eines Gehirns nachempfunden sind, sind sie doch recht ähnlich. Das heißt, mit den richtigen Parametern müssen sehr intelligente Systeme möglich sein, da uns das biologische Vorbild beweist, was mit einfacher Signalübergabe möglich ist.
Doch diese Parameter des Netzes müssen erst einmal bestimmt werden. Mit zufälligen Parametern wird das Netz nur zufällige Ausgaben machen, die niemandem etwas Nützen. Die größten Unterschiede zwischen verschiedenen Machine Learning Methoden liegen genau hier, bei dem kritischen Teil. Komplexe Methoden, versuchen zum Beispiel, zu analysieren, welche Parameter besser zum Ziel verholfen haben, und welche nicht, und passt diese entsprechend an. Dies ist jedoch mathematisch sehr komplex, weshalb ich mich für eine andere Methode entschied:

Evolution

Ich verwende Auslese und Mutation, wie sie aus der Darwinistischen Evolutionstheorie stammt, um die Fitness meiner Netze zu steigern. Zu Beginn generiere ich eine festgelegte Anzahl an Netzen. Die Netze sind in ihren Netzeigenschaften gleich, jedoch werden alle Parameter der Neuronen zufällig bestimmt. Dazu gehören die Parameter maxX, outX und welche Neuronen miteinander verbunden sind. Zu diesem Zeitpunkt wird mit sehr hoher Wahrscheinlichkeit kein Netz ansatzweise einen Zweck erfüllen. Jedoch teste ich trotzdem jedes Netz, und bestimme einen Fitness-Wert. Dieser sagt aus, wie gut das Netz abgeschnitten hat. Habe ich zu jedem Netz eine Bewertung, kann ich beginnen, die nächste Generation vorzubereiten. Dafür sind 3 Schritte notwendig:

  1. Auslese
    Die Netze, die in der Rangliste in der unteren hälfte sind, werden gelöscht. (Das Gegenstück in der Realität wäre einen Darwin-Award zu gewinnen)
  2. Mutation
    Die Plätze, die durch die Auslese frei geworden sind, werden ersetzt durch neue Netze. Diese sind mutierte Versionen der Netze, die in der Rangliste die obere Hälfte besetzen. Bei einem Mutationsvorgang werden die Parameter der Neuronen leicht abgewandelt. So entsteht ein Netz, das teilweise neue Eigenschaften besitzt, zum Größten Teil jedoch noch dem Vorfahren-Netz entspricht. Die Mutation findet unter bestimmten Parametern statt, die angeben wie wahrscheinlich eine Mutation ist, und wie stark sich diese Auswirkt.
  3. Frisches Genmaterial
    Da die Netze mit jeder Generation ähnlicher werden, kann es sein dass sie sich in eine bestimmte Richtung entwickeln, von wo keine Möglichkeit zu einer Lösungsfindung vorhanden ist. Deshalb werden mit jeder Generation wenige Verlierer ersetzt durch komplett neu zufällig generierte Netze.

Löst ein Netz eine Aufgabe besonders gut, wird es auch in der nächsten Generation vorhanden sein. Es wird erst aussortiert werden, wenn es von vielen anderen Netzen in der Fitness überholt wurde, Zum Beispiel durch Mutationen von sich selbst, die kleine Verbesserungen aufweisen. Auf diese Weise werden die Parameter immer besser gewählt. Dieser Evolutionäre Lernvorgang wird dann beendet, wenn die Ergebnisse zufriedenstellend sind. Das Gewinner Netz der letzten Generation kann nun alleine verwendet werden, um Aufgaben zu lösen. Da die Rechnung, die in einem Netzwerk passiert auf einfachen Rechnungen basiert, ist die Endlösung auch relativ performant.

Diese Art des Lernens ist im Vergleich mit anderen Lernmethoden nicht sehr elegant, da es zum Großteil auf Zufall und “trial and error” basiert.

Implementierung: Autonomes Fahren

Um FloNET zu testen habe ich in Unity eine Umgebung gebaut, in der Fahrzeuge durch Hindernisparcours navigieren können. Jedes Fahrzeug besitzt fünf Sensoren, die in Unterschiedlichen Winkeln den Abstand zu einer Wand angeben. Diese fünf Abstände werden an das Neurale Netz weitergegeben, das dem Fahrzeug zugeordnet ist. Das Netz bestimmt basierend darauf den Wert, der das Fahrzeug steuert (Lenkung) Dafür wählte ich Netze mit drei hidden layers, sechs Neuronen in einem layer, fünf Inputs und einem Output. Jede Generation besteht aus 20 Fahrzeugen, die gleichzeitig Gegeneinander antreten. Kollidiert ein Fahrzeug mit einer Absperrung, bleibt es stehen. Ist die Zeit des Testlaufs um, wird die nächste Generation generiert. Als Fitnesswert wird die gefahrene Distanz der Fahrzeuge benutzt.

In dem Video ist ein Lernvorgang zu sehen, wie diese Fahrzeuge über mehrere Generationen immer weniger kollidieren, bis sie irgendwann die Teststrecke komplett durchqueren können.
Leider ist das Interface sehr unübersichtlich, doch manche Bezeichnungen solltest du aus dem vorherigen Text wiedererkennen können. Ab 1:20 sind die fühlerartigen Abstandssensoren als rote Linien zu erkennen.
In diesem Versuch ist es bereits nach zwölf Generationen gelungen, ein paar Netze zu erzeugen, die die Teststrecke durchqueren können. In diesem Fall war sehr früh ein Netz dabei, das bereits in den Grundzügen die Fähigkeit besaß, Hindernissen auszuweichen. Dies bringt die Evolution schneller voran. Doch auch mit weniger Glück sind die Netze spätestens nach 20 Generationen in der Lage, sicher zu navigieren.

Fazit

Der Ansatz über Evolution intelligente Systeme zu schaffen, halte ich für sehr vielversprechend, da wir Menschen auch ein Produkt der Evolution sind. FloNET ist in seiner Funktionalität sehr eingeschränkt, außerdem ist es mit PHP als Sprache nicht sehr performant. Ein großer Teil der außerdem noch zum biologischen Vorbild fehlt, ist die Fähigkeit, dass sich das Netz selbst anpassen kann. Die hier generierten Netze lernen nicht mehr, sobald sie eingesetzt werden.

Das Konzept von evolutionärem Lernen ist nicht neu, wie ich später feststellen musste. Es gibt bereits viele Beispiele im Internet. Dort habe ich mir dann auch die Idee abgeschaut, Fahrzeuge selbstständig fahren zu lassen.
Ich denke jedoch, dass es eine gute Demonstration ist, wie mächtig evolutionäre Algorithmen sein können. Ich denke dass es nicht die Lösung für Künstliche Intelligenz ist, jedoch glaube ich, dass es als Werkzeug sehr nützlich sein kann. So könnte man zum Beispiel spezielle Netze, die eigene Neuronenverbindungen herstellen können, nach ihrer Lernfähigkeit bewerten und evolutionär verbessern.

Falls du Interesse hast, FloNET zu benutzen, kannst du das gerne tun. Alle PHP Scripte findest du in dem Repository.

Kollaboration über Microsoft Sharepoint

am 26 Nov 2017 in Aktuelles, Tech von
Bisher unkommentiert »

Sharepoint ist eine “Enterprise-Platform” von Microsoft, welche für Geschäftsanwendungen entwickelt wurde. Es bietet ein breites Portfolio an nützlichen und produktivitätssteigernden Funktionen für große und kleine Unternehmen.

Die Vorzüge von Sharepoint

Verbesserung der Teamproduktivität

Sharepoint beinhaltet viele Anwendungen innerhalb eines Systems, darunter zählen unter anderem Teamsites für die Kollaboration innerhalb eines Teams, eine umfangreiche Funktion zur Dokumentenablage und -organisation, sowie Benachrichtigungsfunktionen für Inhalte etc.

Umfangreiche Berechtigungsstruktur

Innerhalb von Sharepoint gibt es die Möglichkeit, die Berechtigungen nach Belieben anzupassen. So beschränken sich die Berechtigungsstufen nicht nur auf das Lesen, Schreiben und Löschen, sondern es sind sogar komplett eigene Berechtigungen einstellbar. Hierbei können die Berechtigungen vom Elternobjekt auf alle Subsites vererbt werden, oder, je nach Bedarf, auf einzelne Listen und Dokumenten spezifizierte Berechtigungen vergeben werden. Es ist auch möglich User-Gruppen zu erstellen (z. B. Abteilung, Team, Projektverantwortliche etc.).

Projektmanagement ohne Umwege

Durch sog. “Project Sites” hat man bereits wichtige Tools für das Projektmanagement auf einem Blick. Durch Features wie die Timeline, die einem die wichtigen Termine im Projektverlauf grafisch darstellt, kann es den Benutzern vereinfacht werden, das ganze Projekt im Überblick zu behalten. Die benutzerdefinierten Listen besitzen ein quasi unbegrenztes Potential für mögliche Projektmanagement-Maßnahmen.

Firmenweite Suchfunktion

Gerade bei großen Unternehmen ist es oft schwierig, bestimmte Dokumente zu finden, was zum Teil mit einem recht großen Zeitaufwand in Verbindung steht. Sharepoint bietet eine umfassende Suchfunktion, die – wenn sie richtig kalibriert ist – die Suchzeit auf ein Minimum reduziert.

Exzellente Dokumentenablage

Sharepoint ist eine hervorragende Plattform um Dokumente abzulegen und ist Netzwerklaufwerken überlegen. So kann man innerhalb einer Sharepoint Teamsite Dokumente jeglicher Art ablegen und kategorisieren. Ein besonderes Augenmerk wird hierbei auf Dateien aus Microsoft-Programmen gelegt (Word, Excel etc.). Diese sind direkt bearbeitbar und es besteht sogar die Möglichkeit Dokumente auszuchecken und zu versionieren, was die Kollaboration vereinfacht.

Möglichkeiten für ein Social Intranet

Da Sharepoint ein Web Content Management System ist, ist es damit ohne Weiteres möglich, ein Intranet innerhalb des Systems zu erstellen. Es gibt bei Sharepoint keinen vorgegebenen Seitenaufbau, denn das Layout aller Sites ist frei anpassbar. Durch einige soziale Funktionen, wie einer eigenen Profilseite (sog. “MySite”), sowie Likes und Kommentarfunktionen bietet Sharepoint eine optimale Basis für Firmenintranets. Durch die Anbindung an das Microsoft Active Directory, einem Nutzer-Verwaltungssystem, das mit Windows zu einem System mit einem Single-Sign-On kombiniert werden kann, werden Zugriffsprobleme ausgeschlossen.

Einfache Handhabung für Anwender

Microsoft Sharepoint hält sich an das Microsoft-typische Oberflächendesign, welches man bereits von Software wie Microsoft Word oder Microsoft PowerPoint kennt. Selbst für User, die mit Microsoft-Software nicht vertraut sind, bietet Sharepoint durch das minimalistische Design für den Endanwender dennoch eine hohe Benutzerfreundlichkeit. Nachdem eine Teamsite in Sharepoint angelegt wurde, besteht kaum Verwaltungsaufwand, was der Produktivität zugute kommt.

Anwendung von Geschäftsprozessen

Über Sharepoint ist es möglich, Geschäftsprozessen eine Form zu geben. Es gibt z. B. Möglichkeiten, Mitarbeiterbefragungen durchzuführen, was nur eine von vielen Anwendungen ist. Auch Aufgaben wie das Darstellen der Urlaubsplanung sind in Sharepoint mit Listen oder Zeitleisten durchführbar. Durch individuelle Workflows und Freigabeprozesse sind auch zusammenhängende Tätigkeiten standardisiert anlegbar. Ein Beispiel hierfür wäre die Anlage von neuen Mitarbeitern, welches mehrere Schritte beinhaltet (Mitarbeiter im HR anlegen, Hardware-Ausstattung, Zugänge anlegen etc.) und sich deshalb über mehrere Abteilungen erstreckt.

Automatisiertes Software Testing

am 24 Nov 2017 in Tech von
Bisher unkommentiert »

An allen Ecken und Enden wird derzeit über automatisiertes Software Testing gesprochen, vor allem wenn es um die Steigerung von Qualität von Software geht, führt wenig an diesem Thema vorbei.
Als angehender Entwickler weißt du bereits wie wichtig Tests für deine Software sind! Richtig? Wenn nicht lass dir gesagt sein, solltest du keine Tests schreiben wirst du in Schwierigkeiten bekommen. Vielleicht nicht zum Zeitpunkt der Fertigstellung des Projektes, aber spätestens, wenn das Stück Software, dass du geschrieben hast, gewartet oder erweitert werden muss. Die Wahrscheinlichkeit für Probleme steigt noch stärker, wenn mehrere Entwickler an dem Projekt arbeiten. Musst du dann Änderungen vornehmen funktionieren andere Teile der Software vielleicht nicht mehr, ohne dass du es merkst. Im schlimmsten Fall merkt es jemand anderes. Und das sind Situationen, die wohl keiner gerne durchlebt.
Wie kann man diese Situationen nun vermeiden? Durch Tests. Genauer: durch automatisierte Tests, die nach jeder Änderung am Code gestartet werden und alles neu hinzugekommene und bereits vorhandene in den verschiedenen Klassen testen.
Einen guten Anfang für automatisierte Tests bilden Unittests. Dies sind Tests die genau eine Funktion einer Klasse testen. Ziel ist die Sicherstellung, dass diese alleine funktionieren und in verschiedenen Fällen das jeweils korrekte, erwartete, Ergebnis liefern.
Unittests erfüllen deshalb die folgenden Eigenschaften:

  • Mit Unittests wird Code isoliert getestet von anderem Code in der Applikation sowie von externen Abhängigkeiten und Events.
  • Unittests sind wiederholbar und vorhersehbar. Das bedeutet ändert sich nichts am Code oder dem Test selbst wird das Ergebnis auch immer gleichbleiben.
  • Unittests sind unabhängig, sie funktionieren egal in welcher Reihenfolge sie Aufgerufen werden. Muss eine Reihenfolge eingehalten werden, ist bei der Implementierung etwas falsch gelaufen.

Neben Unittests gibt es auch andere Tests die automatisiert werden können. Dazu gehören unter anderem Integrationstest und UI-Tests.
Welche Tests sind nun am wichtigsten? Alle sind wichtig. Ein guter Anfang sind Unittests und wichtig beim automatisierten Testen ist es einfach anzufangen. Mit der Zeit wird das Formulieren und Schreiben von Test immer einfacher und schneller gehen. Die Qualität eures Codes wird steigen und die Projekte insgesamt etwas besser laufen.

Test Driven Development

am 24 Nov 2017 in Tech von
Bisher unkommentiert »

Das Testen seines geschriebenen Codes ist wichtig. Aber wie kann man das Testen effektiv und effizient in die täglich anfallenden Entwicklungsarbeiten einbinden? Eine Methode die dies ermöglicht ist die Testgetriebene Entwicklung (Test Driven Development – TDD).

Bevor eine Zeile Funktionaler Code geschrieben wird, muss bereits ein Test für diesen Code, vorhanden sein. Der Test wird voll ausformuliert, wird jedoch zu Beginn fehlschlagen, da der zu testende Code noch nicht geschrieben wurde. Steht der Test kann mit dem eigentlichen Code angefangen werden. Es wird mit so wenig wie möglich Code versucht die Anforderungen umzusetzen und den Testfall damit zu bestehen. Anschließend wird versucht den Code weiter zu verbessern und Code Smells zu beseitigen.

Beim ersten Lesen der Beschreibung und betrachten des Schaubildes sieht das nach mehr Arbeit aus. Einfacher und Zeit schonender wäre es doch wie gewohnt den Code einfach runter zu schreiben? Das ist aber nur auf den ersten Blick der Fall und wenn überhaupt auf die initiale Entwicklung bezogen. Durch TDD entsteht von Beginn an vollständig getesteter Code, der qualitativ hochwertiger ist und nur das macht was in den Anforderungen beschrieben wurde. Müssen nun Änderungen am Code vorgenommen werden, können diese über die bereits bestehenden Tests direkt und ohne zusätzlichen Aufwand verifiziert werden. Das spart auf lange Sicht Zeit in der Entwicklung von zusätzlichen Features oder dem finden und beseitigen von Bugs.

Fazit

TDD sollte nicht als testen von Software verstanden werden. Es sollte als Methode bzw. als Werkzeug gesehen werden um in kleinen Schritten soliden Code zu produzieren. Fehler in der Entwicklung können dadurch vermieden bzw. früh erkannt werden.

Es einfach mal versuchen wird auf jeden Fall nicht schaden, also viel Spaß dabei.