Automatisiertes Software Testing

am 24. November 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. November 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.

Hackerangriffe auf Fahrzeuge

am 22. November 2017 in Aktuelles von
Bisher unkommentiert »

Dass Computer, Smartphones oder auch Smart-TVs gehackt werden können ist nichts
Neues. Wie schaut es jedoch bei Autos aus?

Datenerhebung in Fahrzeugen

Autonom fahrende Autos nehmen eine Schlüsselrolle in der Zukunft der Mobilität ein,
doch auch heutzutage sind Autos schon rollende Computer. Bis zu 80 datenerhebende
Geräte arbeiten mittlerweile in einem modernen Auto, von denen viele bereits auch über
einen Internetzugang verfügen. Die Datenerhebung war ursprünglich zur Diagnose in
Werkstätten gedacht, mittlerweile verbauen jedoch auch KFZ-Versicherungen
sogenannte „Telematik-Boxen“, welche zahlreiche Daten erheben und an die
Versicherung übermitteln. Neben der Box kann auch ein entsprechendes Gerät an die
OBD-Schnittstelle (OBD = On-Board-Diagnose; Fahrzeugdiagnosesystem)
angeschlossen werden. Diese Systeme übermitteln Daten wie das Bremsverhalten, die
Geschwindigkeit oder die Position des Autos, sodass das Fahrverhalten beurteilt und
der Versicherungsbeitrag dynamisch angepasst werden kann.
Nachträglich installierte Smart-Dongles ermöglichen auch in älteren Fahrzeugen eine
Datenübertragung per WLAN oder SIM-Card, womit sich beispielsweise ein
elektronisches Fahrtenbuch führen lässt. Der Schutz von außen ist bei Dongles häufig
sehr mangelhaft, manche besitzen sogar sind nicht einmal einen Passwortschutz.

Erhebliche Sicherheitslücken mit lebensgefährlichen Auswirkungen

Dass all diese neuen Technologien potentielle Gefahren mit sich bringen, sollte klar
sein. Ein Hackerangriff auf ein Smartphone oder einen Computer ist für den Betroffenen
oft sehr ärgerlich und kann auch wirtschaftliche Folgen haben. Ein Hackerangriff auf ein
Fahrzeug kann jedoch auch lebensbedrohliche Auswirkung haben, wenn beispielsweise
Fahrassistenzsysteme beeinflusst werden.
Große Cyberattacken auf Fahrzeuge sind bislang nicht bekannt. Fakt ist aber, dass es
bereits im Jahr 2015 zwei amerikanischen Sicherheitsexperten gelungen ist, sich in das
Infotainmentsystem eines fahrenden Jeep Cherokee einzuhacken. Sie nutzten dafür die
Internetverbindung des Fahrzeugs und schleusten so einen Virus ein, mit dem sie auf
die Steuerung des Radios, der Klimaanlage, der Geschwindigkeit oder auch die
Bremsen zugreifen konnten. Der Hersteller benötigte acht Monate um die
Sicherheitslücke zu beheben – betroffen waren 1,4 Millionen Fahrzeuge. Dem Hack
gingen aber auch mehrere Monate Programmierarbeit voraus.
Fahrzeuge der Marke BMW konnten lange Zeit mit verhältnismäßig einfachen Mitteln
über das Mobilfunknetz entriegelt werden. Betroffen waren hier mehr als 2,2 Millionen
Autos, die mit dem Vernetzungssystem „ConnectedDrive“ ausgestattet waren und ab
März 2010 ausgeliefert wurden. Grund hierfür war eine Sicherheitslücke, auf die der
ADAC zufällig gestoßen ist.

Ausblick

Ob es solche Sicherheitslücken auch bei anderen Herstellern gibt ist völlig unklar.
Dennoch steht die Automobilindustrie in der Pflicht sichere Systeme zu entwickeln und
vor allem eine IT-Architektur zu schaffen, die es heutigen Autos ermöglicht, auch noch in
10 oder 20 Jahren sicherheitstechnisch optimal geschützt zu sein. Durch die immer
stärkere Vernetzung steigen auch die Möglichkeiten für kriminelle Aktivitäten, da neue
Systeme auch neue Sicherheitslücken mit sich bringen.

Quellen:

http://www.faz.net/aktuell/wirtschaft/unternehmen/allianz-warnt-vor-hackerangriffen-aufautos-
15251834.html

http://www.handelsblatt.com/auto/test-technik/heikle-datenstroeme-im-fahrzeug-84-
prozent-fuerchten- hacker-angriffe-im-auto/9547924-2.html

http://www.faz.net/aktuell/wirtschaft/netzwirtschaft/wikileaks-enthuellungen-ist-einhackerangriff-auf-
ein-auto-moeglich-14916347.html

https://blog.lapid.de/der-richtige-fahrstil-machts-telematik-tarife-von-versicherungen
http://www.focus.de/digital/computer/auto-hacker-angriff-auf-auto-hersteller-luecke-nurbei-us-
jeep_id_4832650.html

React

am 16. November 2017 in Aktuelles von
Bisher unkommentiert »

Was ist der Grund für das Bestehen von ReactJs neben anderen großen Frameworks wie Angular, Ember, Backbone, Vue und all den anderen? Was unterscheidet das Framework von den anderen erwähnten, was ist JSX und wie funktionieren hier Komponenten?
Diesen Fragen möchten wir in diesem Blog-Artikel auf den Grund gehen. Doch zuvor sollten wir klären, worum es sich bei ReactJs überhaupt handelt.

Was ist ReactJS?

In vielen Internetforen streiten sich zahlreiche Entwickler darum,
welches das bessere Framework ist. Dabei wird ReactJs mit
AngularJs oder VueJs verglichen. Doch dabei wird leider ein sehr
wichtiger und großer Unterscheid von ReactJs zu den meisten
anderen Frameworks übersehen oder vielleicht auch nur ignoriert.
ReactJs ist kein komplettes Frontend-Framework wie zum
Beispiel Angular. Während Angular ein Full-Stack-Frontend-
Framework ist, beschreibt React bei dem bekannten Model-View-
Controller-Modell (MVC-Modell) hauptsächlich das „V“, also die
View.

Das ist ein Unterschied, welchen viele Entwickler nicht verstehen.
React gibt dir lediglich eine Template-Sprache und einige dazugehörige Funktionen, um HTML zu rendern. Als nicht mehr und nicht weniger versteht React seine Aufgabe. React ist nur ein Framework, um Komponenten, welche mit HTML und JavaScript erstellt werden, zu generieren und diese mit ihren verschiedenen Status im Browser als HTML anzuzeigen.

Alleine mit React können daher auch keine voll funktionsfähigen, dynamischen Anwendungen erstellt werden.

Vorteile von React

Virtual DOM

Ein großer Vorteil von React ist der sogenannte virtual DOM. Hier benutzt React nicht den normalen Browser DOM, sondern pflegt seinen eigenen DOM. Dadurch kann ReactJS bei einer
Änderung einer Komponente genau prüfen, was sich visuell geändert hat, und kann dann nur diesen Teil der Anwendung aktualisieren.

JSX

Auch die „eigene“ Templatesprache JSX ist ein großer Vorteil von ReactJs. Mittels dieser Syntax können ganz einfach HTML und JavaScript vermischt werden. Hier kann dann ähnlich wie bei Templatesprachen wie TWIG oder JADE ganz einfach ein Template mit JavaScript-Variablen erstellt werden, welche sich dynamisch ändern.

Serverseitiges Rendern

Auch die Tatsache, dass React auf dem Server zu HTML gerendert werden kann, ist ein riesiger Vorteil von ReactJs. Denn dadurch erhöht sich die SEO wesentlich im Vergleich zu anderen JavaScript Frameworks.

UI-Tests

Auch lassen sich mit React sehr einfach und intuitiv UI-Tests integrieren. Dadurch kann die Funktionsfähigkeit von Anwendungsoberflächen garantiert werden, und es unterstützt das Test-Driven Developement!

Nachteile von React

Doch React hat nicht nur Vorteile, was es zu einem alternativlosen Framework machen würde, sondern hat auch ein paar Nachteile verglichen mit anderen Frameworks.

Nur View-Ebene

Wie bereits erwähnt, bedient React nur das „V“ vom Model-View-Controller-Modell. Was es einerseits einfacher macht, ist andererseits ein Nachteil. Denn man hat mit ReactJs nicht eine All-in-one-Lösung, sondern benötigt für die anderen Teile des MVC-Modells andere Frameworks oder Lösungen.

Kein Event-System

Auch bietet ReactJs kein eigenes Event-System, das einige Arbeiten erleichtert, sondern es muss auf andere Alternativen oder Lösungen zurückgegriffen werden.

Relativ schwieriger Einstieg

Ein weiterer Minuspunkt für ReactJs ist die relativ flache Lernkurve. Es ist schwierig, in die Welt von React einzusteigen. Wenn jedoch erst mal die Grundlagen gelernt sind, lassen sich sehr schnell sehr schöne Anwendungen erstellen.

Wann sollte React verwendet werden und wann nicht?

Es hängt von den Anforderungen an die Website ab, ob React eingesetzt werden sollte oder nicht. Wenn jedoch eine große Anwendung mit vielen verschiedenen Komponenten und vielen verschiedenen Interfaces erstellt werden soll, kann ReactJs eine gute Lösung sein. Nicht umsonst nutzen sehr viele Seiten im Internet React. So wird React beispielsweise bei Facebook, Instagram oder auch bei der Webversion von WhatsApp verwendet.
Um noch mehr über React zu erfahren und einen kleinen Einstieg in das Programmieren mit ReactJs zu erhalten, empfehle ich dir dieses Video.

http://www.pro-tekconsulting.com/blog/advantages-disadvantages-of-react-js/
https://blog.andrewray.me/reactjs-for-stupid-people/
https://www.quora.com/What-are-the-advantages-of-using-React-js-for-an-application-instead-of-Angular-js-and-Ember-js
https://stories.jotform.com/7-reasons-why-you-should-use-react-ad420c634247
https://www.reddit.com/r/reactjs/comments/4edsvi/does_facebook_use_react_on_facebookcom/
https://upload.wikimedia.org/wikipedia/commons/thumb/a/a0/MVC-Process.svg/436px-MVC-Process.svg.png
https://www.pexels.com/photo/access-app-application-apps-267399/

React Native

am 16. November 2017 in Aktuelles von
Bisher unkommentiert »

Im letzten Blog-Artikel ging es um ReactJs. Wenn du den letzten Artikel noch nicht gelesen hast, dann lies ihn dir am besten vor diesem Artikel hier durch.
Während es sich bei ReactJs um ein Web-Frontend-Framework handelt, ist React Native zur App-Entwicklung entworfen worden. Um dir einen kurzen Überblick über React Native und die
Anwendungsfälle dieses Frameworks näherzubringen, fangen wir mit der Frage an, was React Native überhaupt ist.

Was ist React Native?

In einem Satz ist React Native ein Framework, um mobile Applikationen mithilfe von Javascript und der React Library zu erstellen. Ähnlich wie bei Frameworks wie Cordova oder Ionic, verfolgt React Native den Ansatz, mit einer Codebasis mehrere Plattformen zu versorgen.
Hierbei ist jedoch ein großer und entscheidender Unterschied zu all diesen sogenannten Hybrid
Frameworks. React Native benutzt nicht wie viele andere Frameworks eine Webview, um eine App auf dem Smartphone nativ erscheinen zu lassen, sondern wandelt das geschriebene JavaScript
und JSX in nativen Code für die jeweilige Plattform um. Dadurch ergeben sich einige Vorteile, welche ich weiter unten hervorhebe.
React Native hat bereits einige Konzepte von React, wie die Komponenten, die Status, die Lebenszyklus-Methoden und weitere implementiert. Daher ist es auch einfach, sich in React Native hinein zu finden, wenn bereits zuvor React beherrscht wird.

 

Vorteile von React Native

Eine Codebasis, viele Plattformen
Da React Native mit einer Codebasis mehrere verschiedene Plattformen wie iOS und Android unterstützt, kann hier einiges an Entwicklerressourcen eingespart werden. Außerdem ist es nicht mehr erforderlich mehrere Projekte für jede Plattform zu erstellen, sondern es kann mit einem Projekt jedes mobile Betriebssystem bedient werden. Dies erleichtert die Entwicklung, Wartung und Verbreitung einer solchen App ungemein.

Geschwindigkeit und Performance

Da React Native kein hybrides Framework ist, welches nur eine Webview verwendet, um Code auf mehreren Plattformen auszuführen, sondern das JavaScript und JSX in nativen Code umwandelt, hat dies natürlich auch Einfluss auf die Performance der Anwendung. Hier erzielt eine mit React Native programmierte App wesentlich bessere Werte, als eine hybride App mit Cordova oder auch Ionic entwickelt. Außerdem ist dadurch das Look and Feel nativ, wohingegen sich eine hybride App oftmals nicht nativ anfühlt.

Bekannte Entwicklungssprache

Ein Vorteil von React Native ist nicht nur, dass lediglich eine Codebasis für mehrere Plattformen gebraucht wird. Auch ist die gewählte Sprache ein weiterer Pluspunkt. Denn fast jeder Entwickler hat sich schon einmal mit JavaScript beschäftigt, was den Einstieg natürlich wesentlich vereinfacht.

Nachteile von React Native

Funktionsumfang

React Native hat bereits einige native Smartphone-Funktionen integriert, welche über eine
bestimmte API angesprochen werden können. Jedoch kann bisher nicht der komplette Funktionsumfang abgerufen werden, wie es bei nativen Apps möglich ist. Zwar können diese Funktionen durch eigene native Module erweitert werden, jedoch ist es relativ kompliziert und nicht so einfach.

Neues Framework

Außerdem ist ein bisheriger Nachteil von React Native, dass dieses Framework so neu ist. Dadurch ist die Dokumentation noch nicht so ausführlich und ausgereift, wie bei anderen mehr genutzten Frameworks. Durch diese noch relativ junge und kleine Community werden dadurch auch langsamer neue Funktionen hinzugefügt, als es bei anderen der Fall ist. So dauert es
beispielsweise bisher noch relativ lange, bis neue SDKs der Plattformen integriert werden und die alten erneut werden.

Wann sollte React Native verwendet werden und wann nicht?

Das noch relativ neue Framework wird immer beliebter und auch immer mehr von größeren Firmen eingesetzt. So benutzen inzwischen Instagram, Netflix wie auch AirBnB React Native. Doch wann solltest du React Native als Framework zu App-Erstellung in Betracht ziehen?
Das hängt ganz von deinen Gegebenheiten und Ressourcen ab. Wenn eine App mit nicht allzu großem Funktionsumfang und einem kurzen Zeitraum zur Entwicklung erstellt werden muss, so
bietet sich React Native an. Wenn jedoch deine App mehr besondere Funktionen beinhaltet, die React Native nicht unterstützt, dann ist es oft besser, auf eine andere Lösung oder sogar auf die native Entwicklung zu setzen.

https://medium.com/@cristiano.codelab/a-brief-overview-about-react-native-fbf3d476e93
https://www.smashingmagazine.com/2016/04/consider-react-native-mobile-app/
https://www.devbridge.com/articles/pros-cons-of-react-native-crash-course/
https://www.altexsoft.com/blog/engineering/the-good-and-the-bad-of-reactjs-and-react-native/
https://www.quora.com/What-are-the-disadvantages-of-%E2%80%9CReact-Native%E2%80%9D
https://www.buddybuild.com/blog/5-reasons-to-use-react-native
https://www.pexels.com/photo/apps-business-cellphone-cellular-telephone-533446/

 

 

Corporate Blogging: Teil 2

am 07. November 2017 in Aktuelles von
Bisher unkommentiert »

Best Practices

Möchte auch dein Unternehmen einen Corporate Blog starten, weiß aber noch nicht
genau wie? Im Folgenden einige Best Practices:

  1. Definiere Ziele
  2. Bevor der eigene Corporate Blog startet, sollte genau überlegt werden, welche
    Ziele verfolgt werden. Denn ohne Ziel ist keine Bewertung möglich, ob der
    Blog letztendlich erfolgreich ist oder nicht.

  3. Erstelle einen Redaktionsplan
  4. Ein Blog lebt zum einen von seinen Lesern, zum anderen aber von den
    Inhalten. Deshalb sollte schon zu Beginn ein Redaktionsplan erstellt werden,
    sodass regelmäßig neue Beiträge erscheinen und der Leser sich auf eine
    gewisse Blogfrequenz einstellen kann.

  5. Verwende multimediale Inhalte
  6. Gibt es passende Grafiken oder prägnante Bilder sollten diese auf jeden Fall
    verwendet werden. Multimediale Inhalte können nicht nur schneller aufgefasst
    werden, sie ziehen auch die Aufmerksamkeit des Lesers auf sich und können
    dazu animieren sich genauer mit dem Beitrag auseinanderzusetzen.

  7. Verlinke auf vorherige Beiträge
  8. Häufig bauen Blogbeiträge aufeinander auf oder haben einen gewissen Bezug
    zu einem älteren. Ist dies der Fall ist es durchaus sinnvoll den Beitrag am
    Ende zu verlinken. Dadurch werden dem Leser weitere Informationen
    geliefert, sodass er sich automatisch intensiver mit dem Unternehmen
    auseinandersetzt.

  9. Die richtigen Themen
  10. Hier kommen wieder die Ziele ins Spiel: Ausgehend von den Zielen sollten
    auch die Themen gewählt werden. Soll beispielsweise das Image verbessert
    werden, können Themen gewählt werden, die die Werte des Unternehmens
    attraktiv darstellen. Allgemein gilt aber: Liefere nur Beiträge, die für die
    Zielgruppe relevant sind und ihnen einen Mehrwert bieten.

  11. Tracking der wichtigsten Kennzahlen
  12. Daten wie monatliche Besucher, Seitenaufrufe, Verweildauer oder auch die
    Kommentaranzahl sind entscheidend für die Erfolgsmessung. Ebenfalls macht
    es Sinn ein monatliches Reporting zu erstellen, sodass auf einen Blick die
    Entwicklung des Blogs nachvollzogen werden kann.

  13. Positionierung als Experte
  14. Die Möglichkeit sich auf einen Themenbereich zu konzentrieren und sich dort
    als Experte zu positionieren darf nicht unterschätzt werden.

  15. Nutze die Interaktionsmöglichkeiten
  16. Die Kommentare auszuwerten oder auch Umfragen zu nutzen, kann helfen ein
    Meinungsbild der Kunden/User über das Unternehmen herauszuarbeiten.
    Ausgehend von dieser Grundlage kann dann die zukünftige Produktstrategie
    entsprechend angepasst werden.

  17. Abonnement Optionen
  18. Es ist auch wichtig dem Leser die Möglichkeit zu geben mittels eines
    Newsletters oder RSS-Feeds den Blog zu abonnieren. Durch informative und
    interessante Inhalte werden Abonnenten gewonnen, sodass sich langsam
    eine feste Stammleserschaft aufbauen kann.
    Mit diesen Hinweisen sollte es leichter fallen einen Corporate Blog erfolgreich zu
    starten. Dass es aber auch viel Zeit bedarf eine Leserschaft aufzubauen ist
    selbstverständlich. Dennoch sollte Ausdauer bewiesen werden, um so die
    Möglichkeiten eines Blogs voll ausschöpfen zu können.

Quellen:
http://www.imediaconnection.com/articles/ported-articles/red-dotarticles/2010/jul/best-practices-for-a-killer-corporate-blog/
https://www.business.com/articles/jack-danielson-corporate-blogging/
http://www.campaignercrm.com/en/community/blog/crm/post/10-best-practices-forcorporate-blogging/