Filter anzeigen

All

News

Referenzen

  • #Software
  • #Development
  • #Testing
  • #JavaScript
  • #TDD
  • #Meetup
  • #Netzwerk
  • #JS Meetup
  • #Technologie
  • #ePrivacy
  • #DSVGO
  • #Datenschutz
  • #Digitalisierung
  • #Agil
  • #Apps
  • #Frontend
  • #Web
  • #Backend
  • #Informationsmanagement
  • #Referenzen
  • #Controlling
  • #Excel
  • #Microsoft
  • #Planning
  • #Projektmanagement
  • #Reporting
  • #SharePoint
  • #Prozesse
  • #Individualsoftware
  • #Förderung
  • #SAB
  • #UseCase
  • #Quality
  • #Electron
  • #React
  • #Tiefbau

Integration Tests

September 2019

von Paul Friedemann

#Software #Development #Testing
"Wieso hat da niemand daran gedacht?" So oder so ähnlich könnte die Beschwerde des Projektmanagers klingen, nachdem bei einem Release einer neuen Softwareversion Teile der Anwendungen nicht mehr funktionieren, die eigentlich gar nicht angefasst werden sollten. Die Ursache liegt meist darin, dass die Komponenten einzeln betrachtet zwar funktionieren, ihr Zusammenspiel aber nicht explizit geprüft wurde. Wie Sie solche Probleme verhindern können, lesen sie hier.

Nutzer simulieren oder doch noch nicht

Integration Tests haben einen kritischen Platz im Testplan, da sie einerseits annähernd so schnell sein sollen wie Unit Tests, andererseits jedoch die ersten Schritte zur Nutzersimulation wie bei E2E-Tests darstellen sollen. Doch was genau soll der Integration Test denn testen?

Die Grundlagen zu Integrations Tests

Sollten Unit Tests einzelne Komponenten auf ihre Funktionalität testen und diese somit gewährleisten, geht es bei Integration Tests um die Interaktion von Komponenten. Denn nur weil eine Komponente einzeln funktioniert, ist noch lange nicht klar, ob das Zusammenspiel ebenfalls klappt. Aus dem Unit Test Artikel sollte folgender Code bereits bekannt sein:

//Produktiv-Code
type  OperationType  =  "add"  |  "mult"  |  "div" | "mod";
function  processNumbers(x: number, y: number, operation: OperationType): number {
  switch (operation) {
    case  "add":
      return  x  +  y;
    case  "mult":
      return  x  *  y;
    case  "div":
      return  x  /  y;
    case  "mod":
     return  x  %  y;

  return  0;
}

Mithilfe der Unit Tests konnte die Funktionalität dieser Funktion gewährleistet werden. Eine andere Funktion soll zwei Preise verarbeiten können:

//Produktiv-Code
function handlePrices(price1: string, price2: string): string {
  return processNumbers(price1, price2, 'add');
}

Sollte in diese Funktion jemand Preise der Form "13€", also als String, eingeben, so wird die getestete Funktion processNumbers nicht funktionieren, da sie nicht auf Strings ausgelegt ist. Wenn eine statisch typisierte Sprache TypeScript verwendet wird, wird hier der Compiler bereits Fehler anzeigen, weil processNumbers mit Strings aufgerufen wird. Bei dynamischen Sprachen können solche Art Probleme mit Integration Tests frühzeitig aufgedeckt werden.

Aufbau eines Integration Tests

Integration Tests sind in ihrem Aufbau den Unit Tests sehr ähnlich. Es gibt wieder drei Abschntte: eine Initialisierung, die eigentliche Aktion und die Behauptung:

//Test-Code
describe('Test handlePrices', () => {
  it('should return true for two valid prices', () => {
    const price = '13€';
    const expectedResult = '26€';

    const result = handlePrices(price, price);

    expect(result).toEqual(expectedResult);
  });
});

Würde man den Test mit dem oben geschriebenen Produktiv-Code ausführen, würde dieser fehlschlagen. Daher müssen am Code Änderungen vorgenommen werden, um die gewünschte Funktionalität zu erreichen. Unter der Annahme, dass Preise an letzter Stelle das Eurozeichen haben und davor der Zahlenwert steht, ergibt sich die folgende Funktion:

//Produktiv-Code
function handlePrices(price1: string, price2: string): string {
  const value1 = parseInt(price1.slice(0, -1));
  const value2 = parseInt(price2.slice(0, -1));
  return processNumbers(value1, value2, 'add') + '€';
}

Nach der Überarbeitung wird die Funktion den Test bestehen.

Komplexität von Integration Tests

Das oben aufgeführte Beispiel ist erneut sehr simpel, um den Rahmen dieses Artikels nicht zu sprengen. In größeren Anwendungen können in Integration Tests auch Netzwerkanfragen getestet werden oder die Reaktion einer Komponente auf einen Button-Klick, also deutlich komplexere Strukturen. Wichtig ist es, den Unterschied zwischen Unit und Integration Tests zu kennen. Beim Integration Test muss man sich darauf verlassen können, dass die verwendeten Funktionen das tun, was sie sollen, also in diesem Fall die korrekte Addition zweier Zahlen durch die processNumbers-Funktion. Die Anzahl der Integration Tests sollte im Vergleich zur Anzahl der Unit Tests geringer sein, da nicht für jede einzelne Funktion ein Test geschrieben wird und auch weil Integration Tests deutlich aufwendiger sind. So kann aufgrund von Netzwerkanfragen oder ähnliches die Dauer eines Tests einige Sekunden dauern und dadurch eine Vielzahl solcher Tests auch sehr viel Zeit benötigen. Daher sollten Unit Tests und Integration Tests seperat gehalten werden.

Was kommt nach Integration Tests?

Mit Unit und Integration Tests ist das Projekt bereits sehr gut getestet und kann in vielen Fällen schon einwandfrei funktionieren. Um jedoch die eigentliche Nutzeraktion zu simulieren, gibt es End-To-End-Testing, welches in einem weiteren Artikel besprochen wird.

Sollten Sie Fragen zu Integration Tests oder Testing allgemein haben, dann wenden Sie sich an launch@esveo.com, wir helfen Ihnen gern weiter!

Unit Tests

August 2019

von Paul Friedemann

#Software #Development #Testing
Source Code ist nicht statisch, sondern dynamisch. Im Laufe der Zeit ändern sich die Anforderungen und damit muss auch eine Software angepasst werden. Bei solchen Anpassungen müssen Entwickler stets darauf bedacht sein, dass ihre Änderungen keine unerwarteten Nebeneffekte in entfernten Ecken des Programm erzeugen. Wie sie neue Anforderungen problemlos und mit Zuversicht umsetzen können, lesen sie hier.

Die Grundlage allen Testings

In einem früheren Artikel ging es bereits um die Gründe für ein ausführliches Testen. Hier sollen nun die sogenannten Unit Tests genauer unter die Lupe genommen werden. Zu den Unit Tests gehören alle Tests, die einzelne Funktionalitäten testen und dabei unabhängig von anderen Teilen des Codes bleiben. Alle Codebeispiele sind in Typescript geschrieben. Dadurch können Typfehler bereits beim Programmieren vermieden werden, da die Funktionsargumente und der Rückgabewert einen eindeutigen Typ zugewiesen bekommen.

Ablauf eines Unit Tests

Ein typischer Unit Test kann in drei Phasen unterteilt werden. Zuerst wird der Teil des Produktiv-Codes initialisiert (Arrange), der getestet werden soll. Dieser wird "system under test" oder kurz "SUT" genannt. Hierfür soll die folgende Funktion dienen, die zwei Zahlen addiert und das Ergebnis zurückgibt. Zudem können in der Arrange-Phase Vorbereitungen für den eigentlichen Test getroffen werden, wie zum Beispiel das Generieren von Testinputs oder erwarteten Outputs.

//Produktiv-Code
function add(x: number, y: number): number {
  return x + y;
}

Da es sich bei unserem SUT um eine sehr simple Funktion handelt, ist eine Initialisierung nicht nötig. Die Funktion wird einfach in der zweiten Phase, der eigentlichen Aktion verwendet (Act). Hier wird genau die Aktion durchgeführt, die getestet werden soll. Zum Abschluss wird überprüft, ob das Ergebnis der Funktion dem gewünschten Ergebnis entspricht. Wir stellen also eine Behauptung (Assertion) auf und prüfen, ob diese zutrifft. Daraus ergibt sich, ob der Test fehlschlägt oder durchläuft. Am folgenden Beispiel sollen die drei Phasen (Arrange, Act, Assert, kurz "AAA") einmal verdeutlicht werden.

//Test-Code
import { add } from './add'; // Funktion die getestet werden soll importieren

// Wir beschreiben, welches Module oder welche Komponente gerade getestet wird
describe('Add', () => {
  // Jeder Testcase prüft eine funktionalität.
  it('should return 4 when adding 2 and 2', () => {
    //Arrange
    //bleibt leer, weil Testfall sehr simpel ist

    //Act
    const result = add(2, 2);

    //Assert
    expect(result).toBe(4);
  });
});

Führt man diesen Test nun mit einer entsprechenden Test-Umgebung aus, bei JavaScript/TypeScript empfiehlt sich Jest, sollte dieser fehlerfrei durchlaufen. Damit wäre der erste Test erfolgreich geschrieben.

Komplexere Funktionen

Bei der Add-Funktion sind nicht viele Testfälle nötig, da diese sehr simpel ist. Jedoch ist das nicht immer der Fall. Die folgende Funktion verarbeitet zwei Zahlen je nachdem welche Verarbeitungsmethode vom Nutzer ausgewählt wird:

//Produktiv-Code
type  OperationType  =  "add"  |  "mult"  |  "div" | "mod";
function  processNumbers(x: number, y: number, operation: OperationType): number {
  switch (operation) {
    case  "add":
      return  x  +  y;
    case  "mult":
      return  x  *  y;
    case  "div":
      return  x  /  y;
    case  "mod":
     return  x  %  y;

  return  0;
}

Der Rückgabewert der Funktion ist davon abhängig, welcher Operationstyp verwendet wird. Daher sollte für jede einzelne Operation ein Test geschrieben werden.

//Test-Code
import { processNumbers } from './processNumbers'; //Funktion importieren

describe('processNumbers', () => {
  it('should return 15 for add', () => {
    const result = processNumbers(10, 5, 'add');
    expect(result).toBe(15);
  });
  it('should return 50 for mult', () => {
    const result = processNumbers(10, 5, 'mult');
    expect(result).toBe(50);
  });
  it('should return 2 for div', () => {
    const result = processNumbers(10, 5, 'div');
    expect(result).toBe(2);
  });
  it('should return 0 for mod', () => {
    const result = processNumbers(10, 5, 'mod');
    expect(result).toBe(0);
  });
});

Durch diese Tests wird jede Zeile der Funktion überprüft und ist somit vollständig einsatzbereit. Doch was macht einen guten Test eigentlich aus?

Eigenschaften eines Unit Tests

Unit Tests sollten eine Reihe von Eigenschaften haben. Darunter zählen unter anderem:

  • simpel: Da Unit Tests die Grundlage bilden, sollten sehr viele davon geschrieben werden. Dementsprechend sollte der Aufwand für einen einzelnen Test sehr gering sein.
  • lesbar: Es sollte deutlich erkennbar sein, welcher Bereich getestet wird. Dadurch kann bei einem Fehler schnell das Problem identifiziert werden.
  • zuverlässig: Tests sollten nur fehlschlagen, wenn es einen Bug im Code gibt. Daher sollten Negationen bei den Behauptungen vermieden werden und die Tests sollten unabhängig von äußeren Einflüssen (Systemzeit oder ähnliches) funktionieren.
  • schnell: Unit Tests werden oft und in Massen durchgeführt, daher sollten sie keine teuren Funktionen enthalten.
  • kein Integration Test: Unit Tests sollen einzelne Funktionen testen und das unabhängig von äußeren Einflüssen. Diese müssen zur Not simuliert (mocking) werden. In Unit Tests sind keine Datenbank- oder Netzwerkzugriffe zu finden.

Unit Tests geschafft und jetzt?

Nur weil die einzelnen Funktionen funktionieren, heißt das nicht, dass das ganze Programm fehlerfrei ist. Das richtige Zusammenspiel mehrerer Komponenten ist der nächste Teil, der gründlich untersucht werden muss. Hierfür gibt es die Integration Tests, die im nächsten Artikel dieser Testing-Reihe genauer behandelt werden.

Nutzen Sie bisher Unit Tests oder Tests allgemein? Erzählen sie uns gern ihr Feedback oder stellen sie uns ihre Fragen an launch@esveo.com.

Iterables, Iterators und Generators in JavaScript

August 2019

von Andreas Roth

#Software #Development #JavaScript
Jeder JavaScript-Entwickler arbeitet mit Arrays. Doch manchmal ist diese Datenstruktur nicht die richtige Wahl. Wenn man mit extrem großen Datenmengen oder unendlichen Sequenzen arbeiten möchte, kommen Arrays nicht in Frage und man benötigt Alternativen. Eine recht neue, bisher wenig verwendete Option sind Iterables und Iteratoren, die genau für solche Anwendungsfälle entwickelt wurden und in anderen Sprachen (z.B. Python oder C#) schon längst Standard sind.

Iterables statt Arrays in JavaScript

Vorwort

Wir bei esveo wenden in vielen Projekten die Programmiersprache JavaScript bzw. TypeScript an. Aufgrund der vielfältigen Anwendungsmöglichkeiten und der extremen Stärke des Ökosystems dieser Sprachen, war das bisher nie eine schlechte Entscheidung. Im Vergleich zur Entwicklung in anderen Sprachen und Umgebungen ist die Komplexität der Anwendungen erst in den letzten Jahre so angestiegen (wie in einem anderen Artikel erläutert wurde), dass man die Unterstützung von Frameworks und Design Patterns sucht. Eines dieser Patterns ist der Iterator, bzw. Iterables: Ein vereinheitlichtes Muster, mit denen ein Strom an Datenblöcken abgebildet werden kann.

Wieso keine Arrays?

Muss man eine Vielzahl von Werten in einer Variable ablegen, greift man üblicherweise zu einem Array bzw. zu einer Liste. Wieso sollte man jetzt also weg vom bewährten Vorgehen? Der große Nachteil bei Arrays ist, dass alle Werte gleichzeitig im Speicher gehalten werden müssen. Muss bei der serverseitigen Programmierung zum Beispiel eine Datei eingelesen und verarbeitet werden, sollte man die Zeilen der Datei nicht gleichzeitig laden und anschließend verarbeiten, da der Arbeitsspeicher des Servers so nur unnötig befüllt wird. Stattdessen verarbeitet man jede Zeile einzeln und kann so eine hohe Spitze im Ressourcenverbrauch vermeiden. Genau an diesem Punkt kommen Iterables und Iterator ins Spiel.

Iterables & Iterator

Der grundlegende Baustein für die Verwendung von Iterables ist der Iterator. Ein Object, auf welchem man die next() Methode aufrufen kann, um den nächsten Wert zu erhalten. Als Resultat erhält man hierbei ein Objekt mit den Schlüsseln value und done, die den aktuellen Wert, bzw. die Information über den Zustand des Iterators beinhalten.

In TypeScript sieht das Interface des Iterators und des IteratorResults ungefähr (für die Erklärung wurden 2 Methoden wegglassen, die hier nicht benötigt werden) so aus:

interface IteratorResult<ValueType> {
  done: boolean;
  value: ValueType;
}

interface Iterator<ValueType> {
  next: (value?: any) => IteratorResult<ValueType>;
}

Eine Beispielimplementierung, die eine Reihe aufsteigender Zahlen erzeugt, könnte so aussehen:

let n = 0;
const numberIterator = {
  next: () => {
    const nextResult = { value: n, done: false };
    n++;
    return nextResult;
  },
};

numberIterator.next(); // { value: 0, done: false }
numberIterator.next(); // { value: 1, done: false }
numberIterator.next(); // { value: 2, done: false }

Für eine einfache Zahlenfolge ist das doch erstaunlich viel Aufwand. Noch dazu kommt, dass ein einzelner zustandsbehafteter Iterator wenig Mehrwert bietet. Stattdessen möchte man eher seine eigenen Klassen als "iterierbar" markieren. Dafür wird das Interface des Iterables verwendet. Per Definition ist ein Objekt ein Iterable, wenn es im Schlüssel Symbol.iterator eine Methode enthält, die einen Iterator als Resultat liefert:

interface Iterable<ValueType> {
  [Symbol.iterator](): Iterator<ValueType>;
}

Eine Implementierung der Zahlenfolge könnte dann so aussehen:

const numbers = {
  [Symbol.iterator]: () => {
    let n = 0;
    return {
      next: () => {
        const nextResult = { value: n, done: false };
        n++;
        return nextResult;
      },
    };
  },
};

So ist der Schreibaufwand sogar noch größer, um etwas simples wie eine Zahlenfolge zu implementieren. Eine Besonderheit dieser Lösungen soll hier hervorgehoben werden: Die Zahlenfolge ist unendlich. Das ließe sich in einem Array nicht abbilden, da es immer eine endliche Länge haben muss, da alle Elemente des Arrays gleichzeitig im Speicher gehalten werden müssen. Da das Iterable eine einheitlich definierte Schnittstelle ist, können Sprachfeatures darauf aufgebaut werden:

const iterableWithNumbersFromOneToThree = {}; // >> Implementierung des iterable ausgelassen
for (const number of iterableWithNumbersFromOneToThree) {
  console.log(number); // 1, 2, 3
}

const arrayFromIterable = [...iterableWithNumbersFromOneToThree]; // [1, 2, 3]

console.log(...iterableWithNumbersFromOneToThree); // Gleich wie console.log(1, 2, 3)

Da die Verwendung von Iterables verbreitet werden soll, wurde zudem eine neue Art Funktion zu JavaScript hinzugefügt: Der Generator. Ein Generator ist eine Funktion, die als Rückgabewert einen Iterable Iterator liefert. Also einen Iterator (mit next-Methode) der gleichzeitig ein Iterable ist (mit Symbol.iterator Methode). Die Schreibweise sieht wie folgt aus:

function* numberGenerator() {
  let n = 0;
  while (true) {
    yield n;
    n++;
  }
}

Hier muss auf zwei Besonderheiten geachtet werden: Der * vor dem Funktionsnamen zeigt an, dass es sich bei dieser Funktion um einen Generator handelt. Das yield n im Funktionsblock, erzeugt den nächsten Wert im Iterable. Nach der yield Anweisung pausiert der Funktionscode in der Funktion und läuft erst weiter, wenn von außen die .next() Methode aufgerufen wird. Aus diesem Grund friert das while (true) den Browser auch nicht ein.

Iterable Hilfsfunktionen

Jeder der in JavaScript schon öfter mit Listen von Daten gearbeitet hat, wird Hilfsfunktionen wie .map oder .filter kennen. Diese müssen für die Iterables einmalig selbst implementiert werden (wenn man keine externe Bibliothek hinzuziehen möchte). Doch hier braucht man sich keine Sorgen machen, die Implementierung ist sehr einfach:

// Transformiere jeden Wert im iterable mit einer gegebenen Funktion:
function* map(iterable, transform) {
  for (let item of iterable) {
    yield transform(item);
  }
}

// Prüfe für jeden Wert im Iterable den Rückgabewert einer Funktion.
// Nur bei `true` wird der Wert behalten.
function* filter(iterable, condition) {
  for (let item of iterable) {
    if (condition(item)) yield item;
  }
}

Als kleines Beispiel, soll jetzt noch eine simple Transformation umgesetzt werden:

function transform(numbers: Iterable<number>) {
  const squared = map(numbers, n => n * n);
  const even = map(numbers, n => n % 2 === 0);

  return even;
}

Diese Funktion quadriert alle Zahlen in einem Iterable, quadriert sie und entfernt alle ungeraden. Hier muss wieder betont werden: Iterables sind "lazy"! Das heißt, es werden nur die Werte berechnet, die wirklich benötigt werden:

const infinite = numberGenerator();
const transformed = transform(infinite);

// Bis hier hin wurde noch keine Berechnung durchgeführt.

let i = 0;
for (const n of transformed) {
  if (i > 10) break;
  i++;
  console.log(n);
}
// Hier werden die ersten 10 Ergebnisse des Iterators
// "gezogen" und auf die Konsole geschrieben.

Sowohl die Filter, als auch die Transformationen werden nur so oft durchgeführt, wie für die ersten 10 Ergebnisse benötigt wird.

Wofür das alles?

Der größte Vorteil in der Verwendung des Iterable Interfaces versteckt sich in den SOLID-Prinzipien, genauer gesagt im Dependency Inversion Prinzip. Dieses besagt, dass Code immer nur von Interfaces und nicht von konkreten Implementierungen abhängen sollte. Würde die transform Funktion direkt mit den Array-Methoden arbeiten, könnte die Funktion auch nur mit Arrays aufgerufen werden und wir wären in der Verwendung unnötig eingeschränkt. Hier kommt jetzt der größte Vorteil in der Verwendung von Iterables: Die eingebauten Sprach- und Browserfunktionen verwenden bereits Iterables: Arrays, Sets, Maps, NodeLists und viele weitere implementieren bereits das Iterable Interface. Das bedeutet, dass unsere transform-Funktion auch mit diesen Datenstrukturen aufgerufen werden kann und trotzdem funktioniert. So bleiben die Funktionen flexibel und können für viele Anwendungsfälle benutzt werden. Gerade in der Backend-Entwicklung ist es einfach manchmal nötig, eigene Datenstrukturen, wie eine Queue oder eine LinkedList zu implementieren. Wenn diese auch Iterables sind, können viele Hilfsfunktionen trotzdem weiterverwendet werden.

Zeit und Nerven sparen durch Softwaretests

August 2019

von Paul Friedemann

#Software #Development #Testing #TDD
Jede genutzte Anwendung wird getestet. Das geschieht entweder freiwillig durch den Entwickler, der vorausschauend Tests für seine Anwendung schreibt, oder unfreiwillig durch den Endnutzer (Kunde), der wütend beim Entwickler anruft, weil wieder eine Anwendung nicht das macht, was sie soll. Um diese unangenehmen Gespräche zu vermeiden, sollte das Testen fester Bestandteil der Softwareentwicklung sein. Doch wie fängt man am besten damit an?

Zeit und Nerven sparen durch Softwaretests

Wozu Testen

Software ist allgegenwärtig. Die schnellste Route zu einem bestimmten Ort finden sie schnell per Handy-App. Ebenso ihre E-Mails, die sie aber auch im Browser oder durch ein E-Mail Programm auf ihrem Rechner abrufen können. Diese Funktionalitäten sind fest in unseren Alltag integriert und wer möchte schon die Bahn verpassen, weil die App, anstatt der genauen Abfahrtszeit, eine Fehlermeldung ausgibt. Um sowas zu vermeiden, sollte jeder Softwareentwickler Zeit ins Testen investieren.

Tests in Projekte integrieren

Ein neues großes Projekt kann als Designstrategie die "Testgetriebene Entwicklung" (engl. Test-Driven Development, TDD) verwenden. Für jede neue Funktionalität wird dabei der folgende Zyklus durchlaufen:

  • Test schreiben, der zunächst fehlschlägt
  • Gewünschte Funktionalität implementieren, sodass der Test erfolgreich abgeschlossen wird
  • Verbesserungen an Code und Tests vornehmen

Software, die nach diesem Prinzip entwickelt wird, hat deutliche Vorteile:

  • Kein ungetesteter Code
  • Wenig Redundanzen, da sehr schnell Verbesserungen vorgenommen werden
  • Code beschränkt sich auf das Wesentliche

Natürlich kann aber auch bereits geschriebener Code nachträglich um Tests erweitert werden. Doch was für Tests denn eigentlich?

Arten von Tests

Bevor jedoch überhaupt ein Test geschrieben werden muss, sind bereits mit Erweiterungen der Entwicklungsumgebung viele Schreib- und Typisierungsfehler vermeidbar. Linter (z.B. ESLint) helfen bei der Einhaltung der Syntaxregel einer Programmiersprache und um ein einheitliches Code-Design durchzusetzen. Auch die Wahl der genutzten Sprache kann einen enormen Einfluss auf die Anzahl potentieller Fehlerquellen haben. So bietet Typescript als Erweiterung von JavaScript ein Typsystem, um beim Programmieren Typfehler, wie den Vergleich von Zeichenketten und Nummern, zu vermeiden. Damit ist die erste Art von Tests bereits abgedeckt, die sogenannten "statischen Tests". Sie sind die Art von Tests, die bereits ohne Ausführung von Code durchgeführt werden.

Die dynamischen Tests, also Code ausführende Tests, können prinzipiell in drei Kategorien unterteilt werden. Die Grundlage und somit die Vielzahl aller Tests bilden die Unit Tests. Hierbei werden einzelne Funktionalitäten isoliert getestet.

Selbst wenn Funktionen einzeln problemlos funktionieren, ist das für die Interaktion mehrerer nicht ohne Weiteres gewährleistet. Daher ist die Implementierung von Integration Tests notwendig, die das Zusammenspiel mehrerer Bausteine testen.

Um letztlich die Interaktion des Nutzers zu simulieren, gibt es sogenannte End-to-End Tests (E2E-Tests), die das Verhalten eines Nutzers in der fertigen Oberfläche simulieren sollen.

Da ein genaueres Eingehen auf die einzelnen Arten den Rahmen sprengen würde, bleibt es in diesem Artikel bei einem kleinen Überblick. In Zukunft wird es aber auch Artikel zu den einzelnen Arten von Tests geben.

Zusammenfassung

Tests wirken im ersten Moment sehr überflüssig oder zu zeitintensiv, jedoch erspart eine ausführliche Testabdeckung viel Ärger mit den Kollegen oder dem Kunden. Natürlich kann es trotz Tests mal zu einem Bug im "fertigen" Produkt kommen, doch die Vielzahl wird bereits vorher gefunden und korrigiert. Daher sollte eine größere Anwendung getestet werden, wobei Unit Tests den größten Anteil haben sollten, gefolgt von Integration Tests und letztlich E2E-Tests zur Nutzersimulation.

Sollten sie Fragen zu Testing haben, dann helfen wir ihnen gern und finden gemeinsam eine Lösung für ihr Problem!

Warum auch Sie zu einem Tech-Meetup gehen sollten.

August 2019

von Andreas Roth

#Meetup #Netzwerk #JS Meetup #Technologie
Wurden Sie schon mal von einem Kollegen gefragt, ob Sie zu einem Tech-Meetup mitkommen wollen? Wie haben Sie reagiert? Für das nächste Mal möchten wir Ihnen 8 Gründe nennen, wieso sich eine Teilnahme lohnen kann.

Im letzten halben Jahr war ich regelmäßiger Besucher des JS-Meetups in Dresden (organisiert von DresdenJS). Mein initiales Ziel war es, etwas dazu zu lernen und mich mit anderen JavaScript-Begeisterten auszutauschen. Inzwischen habe ich festgestellt, dass so ein Meetup noch viele weitere Verzüge mit sich bringt. Selbst wenn Sie kein Entwickler sondern Projektleiter, Product Owner oder Geschäftsführer eines Unternehmens sind, kann sich der Besuch eines solchen Netzwerktreffens lohnen.

1. Nette Leute treffen

Selbst wenn man alleine ist, braucht man keine Scheu haben, zu einem Meetup zu gehen. Alle Anwesenden wissen, was ein Meetup ist und sind daher auch mit dem Ziel da, neue Leute kennen zu lernen. Dementsprechend sind alle offen für neue Bekanntschaften und werden keine Neuankömmlinge ausschließen. In der Regel sind in der Agenda solcher Veranstaltungen auch direkt Zeiten für den inoffiziellen Austausch eingeplant, sodass die Gespräche auch gerne mal weg vom Kernthema gehen können. Wenn Sie also an einem solchen Abend noch nichts vor haben, könnte ein Meetup die richtige Beschäftigung für Sie sein.

2. Praxiserfahrung sammeln

Ein wichtiger Punkt der Meetups sind natürlich die Vorträge zu unterschiedlichsten Themen. Häufig vertreten sind Präsentationen von Lösungen und Lösungsansätzen aus dem Praxisalltag. In diesen erzählen die Redner von realen Cases, Herausforderungen und Problemlösungen. Ein Beispiel ist hier der Vortrag von Sergey Ryzhov (@latviancoder), in dem er zeigt, wie 3m5 den Porsche Finder als Large Scale React App umgesetzt haben. Am spannensten sind hier die Wege zum Ziel: Es wird über Rückschläge und Fehlentscheidungen berichtet, sodass man als Zuhörer, wenn man mal in einer ähnlichen Situation ist, nicht die gleichen Fehler machen muss. Dadurch können Sie wertvolle Erfahrungen sammeln, die Sie für Ihre Projekte verwenden können. Wenn Sie ganz fleißig sind, können Sie sich sogar die Kontaktdaten der Redner notieren und Sie gegebenenfalls kontaktieren, falls Nachfragen nötig sind.

3. Up-to-date bleiben

Während die Praxisvorträge von Projekten handeln, die schon einige Zeit laufen oder sogar abgeschlossen sind, gibt es auch immer wieder Präsentationen zu aktuellen Trends. Gerade in der schnelllebigen Welt des Webs ist die Auseinandersetzung mit diesen Themen enorm wichtig. So wurde beispielsweise von Lucas Recknagel (@lucasrecknagel) erklärt, welche Funktionen in den nächsten Jahren zu JavaScript hinzugefügt werden. Solche Vorträge helfen dem Zuhörer dabei, die richtigen Technologieentscheidungen zu treffen, wenn ein neues Projekt oder eine Überarbeitung eines bestehenden Projekts anstehen. Hier hilft es Ihnen dann, schon einen gewissen Überblick über die verschiedenen Optionen zu haben.

4. Inspirieren lassen

Hin und wieder gibt es auch Vorträge über Themen, die in der Praxis (aktuell) weniger Verwendung finden. Es soll aufgezeigt werden, was für Möglichkeiten es noch alles gibt, über die man vielleicht noch nie nachgedacht hat. So wird man als Entwickler auch mal aus der gewohnten Umgebung geholt und entdeckt Konzepte, die auch in Standardprojekten für große Mehrwerte eingesetzt werden können. Ein Beispiel dafür ist der Vertag von mir über Generators, Iterators und Iterables in JavaScript, der vermitteln sollte, wie mit diesen Komponenten generischere Schnittstellen umgesetzt werden können. Dieser Vortrag wird demnächst auch im Rahmen eines weiteren Blogartikels aufbereitet, folgen Sie uns also bei LinkedIn um die nötige Inspiration zu finden.

5. Nachwuchs finden

Das Einstellen neuer Talente ist nach wie vor ein großes Problem. Eine Möglichkeit können Meetups sein. Durch die Vorträge und den Austausch in lockeren Gesprächen haben Unternehmen die Gelegenheit präsent zu sein. Einerseits können Unternehmen Mitarbeiter als Redner zum Meetup schicken, wodurch man der Community eine kurze Vorstellung über die Firma geben kann. Andererseits können in den Gesprächen nach den Vorträgen Kontakte geknüpft werden, sodass man auch Personen kennenlernen kann, die gerade auf der Suche nach einem Arbeitgeber sind.

6. Arbeitgeber treffen

Der Vorteil aus 5. lässt sich natürlich auch umdrehen. Indem man sich in Gesprächen oder Vorträgen einbringt, können Unternehmen direkt mehr über einen erfahren, wodurch wertvolle Business-Kontakte entstehen können. Durch das Halten von Präsentationen kann man außerdem direkt zeigen, dass man sich engagiert und sich auch gerne mit den aktuellen Themen auseinandersetzt. So können Sie direkt mehrere mögliche Arbeitgeber kennenlernen, ohne dass Sie sich erst auf diversen Jobbörsen umsehen müssten.

7. Mit Unternehmen kooperieren

Ganz egal ob Sie Selbständiger, Trainer oder Angestellter sind, durch die Gespräche und Vorträge wird sich häufig herausstellen, dass Sie andere Erfahrungen und Kenntnisse haben, als die anderen Teilnehmer, sodass sich schnell Anknüfpungspunkte oder Kooperationsmöglichkeiten ergeben. Durch den Austausch und die Zusammenarbeit mit anderen Unternehmen, können Sie Kapazitätsengpässe ausgleichen, Expertenwissen kurzfristig dazugewinnen oder Ideen für gemeinsame Projekte generieren.

(8. Mit esveo in Kontakt treten)

Wir hoffen, dass wir Sie inzwischen davon überzeugen konnten, sodass Sie beim nächsten Meetup vielleicht auch dabei sind. Auch wir werden in Zukunft wieder auf diversen Meetups und Konferenzen vertreten sein, zögern Sie also nicht uns anzusprechen, wir freuen uns über jedes Gespräch. Zudem werden wir unsere Beiträge auch auf diesem Blog veröffentlichen, folgen Sie uns also, damit Sie keine Neuigkeiten verpassen.

ePrivacy-Verordnung: Wie der europäische Datenschutz die Online-Märkte verändert

July 2019

#ePrivacy #DSVGO #Datenschutz #Digitalisierung
Seit dem 25.Mai 2018 gilt europaweit die Datenschutz-Grundverordnung (EU-DSGVO). Mit Inkrafttreten ging ein gewisses Raunen in der Wirtschaft um. Viele Unwägbarkeiten, unklare Rechtslagen und rudimentärer Informationsfluss seitens behördlicher Institutionen zeigen sich auch ein Jahr nach dem Ende der Übergangsfrist noch sehr deutlich und beschäftigen die europäische Wirtschaft maßgeblich. Nun soll mit der ePrivacy-Verordnung (ePVO) eine Ergänzung zur DSGVO entstehen, welche wesentliche Auswirkungen im Bereich der Erhebung, Speicherung und des Trackings von Onlinedaten hat.

Aktueller Stand des Datenschutzes zur Umsetzung ad hoc

Mit Ende der Übergangsregelung der EU-DSGVO zum Mai 2018 und deren Inkrafttreten wurde diese allgemein gültig und bindet die Unternehmen an deren Umsetzung. Anhängig zum erweiterten Datenschutzrecht wird nun die sog. ePrivacy Verordnung von der Europäischen Union überarbeitet. Es soll damit ein agilerer Datenschutz geschaffen werden. Die ergänzende Verordnung ist bis dato jedoch noch in der Erarbeitung. Ein erster Entwurf wurde 2017 der Datenschutzkommission der Europäischen Union vorgelegt. Wesentliche Änderungen und Empfehlungen dieser müssen jedoch eingearbeitet werden. Somit liegt der Entwurf der Verordnung noch nicht den politischen Entscheidern vor. Interessenverbände konnten noch keine wesentliche Einsicht erhalten. Zum Ende des Jahres sollte ein finaler Entwurf der Trilogverhandlungen (Kommission, Parlament, Rat) vorgelegt werden. In Fachkreisen wird dies jedoch bezweifelt. Aufgrund der absehbaren Tragweite der Geltung, sollte man sich dennoch bereits jetzt mit der Thematik auseinandersetzen.

Wesentliche Änderungen

Im Grundsatz dient die erweiternde und ergänzende Verordnung zum Schutz der Privatsphäre von Personen im Hinblick auf die Geheimhaltung und die Vertraulichkeit derer Kommunikation, die über die Datenschutz-Grundverordnung hinaus geht. So wird die Nutzung IP-basierter Kommunikationsdienste seit 2009 bereits kontinuierlich ausgeweitet, dennoch fallen sog. Over-the-Top-Dienste (Messenger oder VoIP Dienste, wie WhatsApp, Skype, Threema, Email-Dienste oder M2M Kommunikationsdienste) derzeit nicht unter geltende Regelungen, mit der ePVO soll sich dies zumindest in der momentanen Theorie ändern. Einen für Unternehmen wesentlicheren Anteil hat die Verordnung im Bereich des Onlineauftritts bzw. der Onlinekommunikation. Jedoch zeigt sich im Streit um die ePrivacy Verordnung noch keine Einigung. Auf der Suche nach Kompromissen werden nur weitere Diskussionspapiere seitens des Europäischen Rates vorgelegt. Ob und inwieweit die e-Privacy Verordnung Einwilligungen für zu Werbezwecken genutzte Trackingmaßnahmen und Cookies vorsieht, ist noch nicht gänzlich absehbar. Wahrscheinlich Anforderungen kristallisieren sich jedoch heraus womit ein Blick auf Diese sich lohnt.

Mögliche digitale Umsetzung der Änderungen

Mit Eintritt der ePVO werden Unternehmen vor eben diese weitreichenden Herausforderungen gestellt. Insbesondere im Bereich des Online Marketings und der Online Kommunikation zeigen sich diese Auswirkungen. Betroffen sind hierbei in erster Linie entsprechende Cookies, also die Speicherung personenbezogener Daten.

Somit wird mit der e-Privacy-Verordnung das sog. Opt-In-Verfahren wahrscheinlich verpflichtend, da mit der Verordnung nicht mehr zwischen personenbezogen und pseudonymisierten bzw. anonymisierten Daten unterschieden wird. Lediglich Cookies, die keinerlei personenbezogene Daten speichern, dürfen damit weiterhin eingesetzt werden.

Die folgende Tabelle gliedert die zu erwartenden Einwilligungsvoraussetzungen én detail und bietet einen ersten Überblick über den erweiternden Anwendungsbereich der Verordnung:

Verpflichtende Einwilligung Datenschutzgrundverordnung (EU - DSVGO) e-Privacy Verordnung (ePVO)
Speichern von anonymisierten Daten
Speichern von pseudonymisierten Daten
Analyse-Cookies für anonymisierte Besucherstatistiken
Tracking- und Retargeting-Cookies
Tracking-Pixel
Device-Fingerprinting
Jedes Third Party-Advertising
Speichern von Geräteinformationen (IP-Adresse, Browsertyp, Betriebssystem, etc.)
Speichern von Namen, Adressen, Kontaktdaten

Insgesamt zeigt sich also, dass eine detailliertere Auseinandersetzung mit der Verwendung von Cookies und Trackingdaten von Nöten sein wird. Zur Realisierung und Umsetzung dieser Maßnahmen empfiehlt sich ferner eine Beratung nach entsprechenden Anforderungen und Bedürfnissen.

Eine eindeutige Einwilligung bedarf es jedoch insbesondere für:

  • Die Speicherung von Gerätedaten wie

    • IP- Adresse
    • Browsertyp
    • Betriebssystem (OS)
  • Cookies zur Wiedererkennung
  • Tracking Cookies

Ausblick

Bis zum Ende des Jahres soll der EU Kommission die finale Verordnung vorgelegt werden. Zum gegenwärtigen Stand scheint dies allerdings diskutabel, da sich in vielen Bereichen noch Handlungs- beziehungsweise Verbesserungspotentiale herauskristallisieren. Zur Einsichtnahme des aktuellen Stands der Verordnung empfiehlt sich der Bericht des europäischen Parlaments (http://www.europarl.europa.eu/doceo/document/A-8-2017-0324_EN.html), die Statusupdates des Bundesverbandes für Digitale Wirtschaft (BVDW) e.V. (https://www.bvdw.org/themen/recht/kommunikationsrecht-eprivacy/) oder der Datenschutzkommission der EU. Den Unternehmen, die schlussendlich deren Umsetzung vorantreiben müssen bleibt angeraten sich in der Realisierung des erweiternden Datenschutzes auf Spezialisten im digitalen Bereich zurückzugreifen und den Prozess bis zum Eintreten der Verordnung aktiv zu verfolgen.

Berechtigungssystem auf dem nächsten Level

July 2019

von Johann Roth

#Agil #Apps #Frontend #Web #Backend #Informationsmanagement #Referenzen
Je umfangreicher ein BI-System (Business Intelligence) ist, desto kritischer ist ein robustes Berechtigungssystem, das unerlaubte bzw. unerwünschte Zugriffe verhindert und dennoch für den Nutzer transparent und verständlich ist. In diesem Blog-Artikel zeigen wir, wie wir zur Erfüllungen der individuellen Wünsche und den mit der Zeit gewachsenen Anforderungen eines Kunden an ein von uns entwickeltes System diesen Einschränkungen begegnet sind und sie erfolgreich durch ein Berechtigungssystem auf dem nächsten Level überwinden konnten.

BI-Systeme(Business Intelligence) sind Systeme, die einem Unternehmen vorhandene Daten aufnehmen und verarbeiten können. Der Erkenntnisgewinn durch Analyse, Strukturierung und Aufbereitung der Daten soll Entscheidungen des Managements stützen.

Wozu braucht man ein Berechtigungssystem?

Je umfangreicher das BI-System, desto kritischer ist ein robustes Berechtigungssystem. Nutzer sollen in unterschiedlichen Rollen jeweils nur die für sie relevanten Daten einsehen bzw. einpflegen können. Bestimmte Auswertungen wie beispielsweise globale Marktübersichten sollen dem Management vorbehalten bleiben.

Die Grundbestandteile von Berechtigungssystemen

  • Rechte erlauben das Durchführen bestimmter Aktionen (z.B. Lesen, Ändern, Anlegen, Löschen) auf Datensatzätze des BI-Systems (z.B. ein Fertigungsauftrag, eine produzierte Komponente, ein Kundenprojekt)
  • Rollen erlauben die Sammlung und Zusammenfassung von Rechten (z.B. Controlling, Vertrieb, Management)
  • Nutzern des Systems können Rollen zugewiesen werden

Sobald mindestens eine Rolle einem Nutzer ein bestimmtes Recht gibt, darf der Nutzer die entsprechende Aktion ausführen.

Dieser Aufbau erlaubt es neue Rollen zu schaffen, die bestehende Rechte kombinieren. Dabei bleibt die Implementierung der eigentlichen Aktionen unangetastet, da weiterhin nur die Rechte geprüft werden, die ein Nutzer von seinen Rollen erhält.

Das Problem: Granulare Rechte auf einzelnen Feldern

Sollte der Fall auftreten, dass ein Nutzer nur bestimmte Teile eines Datensatzes einsehen darf, stößt ein simples Berechtigungssystem technisch an seine Grenzen.

Erste Lösungsansätze

Ein möglicher Ausweg bzw. Umweg ist das Aufteilen der einzelnen Felder eines Datensatzes in Teildatensätze (z.B. Preis als Teil der Finanzdaten und Stückzahl und technische Ausprägung als Teil der Produktionsdaten eines Fertigungsauftrags).

Technisch bringt dieses Aufsplitten einige Nachteile mit sich:

  • eigentlich zusammengehörende Daten werden auf Teildatensätze verteilt: das technische Datenmodell wird damit komplexer
  • zur Übermittlung an Nutzeroberflächen müssen Teildatensätze wieder zusammengeführt werden
  • die Zuordnung von Teildaten in die jeweiligen Teildatensätze ist nicht immer eindeutig möglich
  • ein Verändern von Rechten eines einzelnen Feldes ist nicht möglich, ohne das Feld in einen neuen Teildatensatz zu verschieben, der die entsprechend gewünschten neuen Rechte umsetzt
  • das Verschieben eines Feldes von einem in einen anderen Teildatensatz ist technisch aufwändig, und damit das Berechtigungssystem wenig flexibel.
  • das Aufteilen eines Datensatzes in Teildatensätze ist eine direkte Veränderung des Datenmodells, lediglich um neuen Anforderungen an das Rechtesystem gerecht zu werden.

Unsere Anforderungen an das Berechtigungssystem: Use Case

In einem von uns entwickelten System ergab sich genau diese Anforderung, Rechte granular auf einzelnen Feldern definieren zu können. Aus den zuvor genannten Nachteilen einer Standardlösung haben wir folgende Ansprüche an unsere Lösung gestellt:

  • Das Berechtigungssystem soll es erlauben, auf Feld-Ebene Rechte für unterschiedliche Nutzerrollen zu definieren.
  • Es soll nicht nötig sein, Datensätze aufzuteilen. Das bestehende Datenmodell soll unangetastet bleiben.
  • Eine Pflege der Rechte für jedes einzelne Feld in Datensätzen soll ohne großen technischen Aufwand möglich sein.
  • Ein Nutzer soll jederzeit Feedback darüber bekommen, warum eine gewisse Aktion für ihn nicht möglich ist und welche Rollen benötigt werden, um die Aktion ausführen zu können.

Unser technischer Ansatz: Berechtigungen auf eigener Ebene

In üblichen Umsetzungen von Berechtigungssystemen werden alle Rechte für alle Datensätze zentral an der Rolle definiert (Rolle 🠦 Datensatz 🠦 Rechte).

In unserer Lösung sind dagegen ausgehend vom Feld die Rechte sämtliche Rollen definiert (Datensatz 🠦 Feld 🠦 Rolle 🠦 Rechte).

In einer technisch separaten Ebene kann jedem Feld ein Regelsatz zugewiesen werden, der genau definiert, welche Rollen welche Rechte auf diesem Feld erteilen. Um den Pflegeaufwand zu begrenzen kann für einen Datensatz ein Standard-Regelsatz definiert werden.

Sämtliche Rechte sind damit direkt am Feld gesammelt. Das erlaubt dem System sehr leicht zu ermitteln, welche Rollen benötigt werden, um ein bestimmtes Recht auf einem Feld zu erhalten.

Eine flexible und transparente Lösung für ein komplexes Problem

Mit unserer Lösung haben wir es geschafft, ein Berechtigungssystem umzusetzen, das flexibel den fachlichen Anforderungen des Kunden gerecht wird. Komplexe Regeln für Berechtigungen bis auf Feld-Ebene können durch das System ohne großen Aufwand abgebildet werden. Aufgrund des detaillierten Feedbacks, das der Nutzer bei fehlenden Rechten , bleibt dem Nutzer das System auch bei umfassenden und komplexen Regelsätzen transparent.

Wenn Sie weitere Fragen oder Ideen zu diesem Thema haben, kommen Sie gerne auf uns zu. Gemeinsam finden wir eine Lösung, das garantieren wir!

Automatisieren von Tracking und Reporting in Großprojekten

June 2019

von Robert Kramer

#Controlling #Excel #Microsoft #Planning #Projektmanagement #Reporting #SharePoint
Wieviel Nerven lassen Sie als Projektmanager oder Mitarbeiter im Projektcontrolling, wenn die Vorlagen kontraintuitiv sind und nicht korrekt genutzt werden, das Daten sammeln meist einen halben Tag in Anspruch nimmt und Sie dann noch jede Menge Rückfragen haben?

Reporting as usual und bitte keine neue Software

Große Projekte, wie die Einführung von SAP Systemen, erfordern oft einen hohen Aufwand für die Zusammenstellung und Aufbereitung von Informationen für Fortschrittskontrolle und Reporting. Insbesondere das sammeln und plausibilisieren der Informationen aus zahlreichen Dateien bindet wertvolle Ressourcen und benötigt Zeit (bis zum nächsten Update).

Standardisierte Tools sind quasi nicht vorhanden, weshalb für verschiedenste Anwendungszwecke immer neue Tools und Reports durch die Anwender erstellt werden. Von dem manuellen sammeln der Daten durch nicht vorhandene Automatisierung ganz zu schweigen. Wieviel Zeit und Geld investieren Sie in diesem Bereich?

In den meisten Fällen ist es Grundvoraussetzung die Lösung schnell und flexibel im Rahmen bestehender Infrastruktur umzusetzen, da die Einführung und Prüfung einer Software langwierige Prozesse in der IT anstößt und anderweitig dringend benötigte Ressourcen bindet.

Mit den Standardtools von Microsoft Lösungen entwickeln die effizient sind

Die Produktwelt von Microsoft-SharePoint und Office bietet eine Vielzahl an Möglichkeiten um mit Templates, Datenbanken und automatisierten Reports zu arbeiten. Diese Lösungen müssen sauber abgestimmt, aufgesetzt und implementiert werden.

Im ersten Schritt wird hierzu, unabhängig von der Technologie, analysiert, welche Daten, zu welchem Zeitpunkt von welcher Gruppe benötig werden und wie diese Daten bereitgestellt werden. Hierzu ist es nötig zunächst die verschieden Verantwortungsgruppen im Projekt, die bereits fest vorgesehen Datenquellen (z.B.: existierende Standardsoftware wie SAP oder HP ALM) und die existierenden Reporting Prozesse zu kennen. Außerdem ist es in diesem Schritt bereits sinnvoll, sich einen Überblick über die verwendbaren Tools und Infrastruktur zu verschaffen.

Anschließend kann auf dieser Basis analysiert werden, welche Reporting-Prozesse am meisten manuelle Arbeit benötigen bzw. am fehleranfälligsten aufgrund von Eingabe oder Übertragungsfehlern sind. Diese Prozesse sind unser erster Ansatzpunkt.

Dieser Prozess kann nun mit Hilfe bestehender Tools automatisiert und optimiert werden. Hierzu bieten sich Tools an, die fast überall zu finden sind. Zum Beispiel lassen sich SharePoint Listen Recht einfach als Datenbank nutzen, SAP oder das Active Directory können flexible und schnell Daten bereitstellen und Excel oder Access bieten eine Oberfläche,die jeder Anwender im Projekt ohne große Einarbeitung versteht.

Sobald hier eine erste Automatisierung erfolgt ist, kann man diese sofort den Nutzer zur Verfügung stellen und sie in einer agilen Arbeitsweise iterativ optimieren. So wird in den kritischen Prozessen schnell ein Mehrwert geschaffen und man kann sich den nächsten Prozessen zuwenden.

Auf dieses Weise haben wir in der Vergangenheit bereits Lösungen entwickelt, die hunderte Nutzer mittels bekannter Standardtools wie Excel und SharePoint miteinander arbeiten lassen. Durch Schnittstellen zu Drittsystemen, wie dem HP Application Lifecycle Management, Business Warehouse oder SAP, werden die Daten angereichert. Außerdem ist eine Datenhaltung in der Microsoft Azure Cloud und die Nutzung von React Modulen für SharePoint Sites und Web Parts möglich.

Unsere Lösung verbindet hierbei verschiedene Systeme, die in Summe ein Reporting ergeben das alle Details darstellt, klare Vorgaben macht und darüber hinaus eine Abstraktion für das Management ermöglicht. Und das ad-hoc!

Projektpläne in Excel, SharePoint und MS-Project

Ein hervorragendes Beispiel für hohen manuellen Aufwand im Projektmanagement stellen Projektpläne dar. Die einen nutzen MS-Project, die anderen Excel. Häufig sogar beides!

Häufig sind hier die Grundlagen des Plans nach festen und bekannten Regeln zu erstellen, die aber entweder nicht dokumentiert oder nicht automatisiert sind. Hierzu haben wir die obigen Tools miteinander verknüpft und so ein schnell, regelbasiertes und einfach nutzbares Setup in Excel ermöglich, dass die Projektpläne anschließend in MS-Project überführt und darüber hinaus online in SharePoint für alle zugänglich macht.

In SharePoint verfügbare Projektpläne bieten mehreren Nutzern gleichzeitig die Möglichkeit die Tasks abzuhaken oder zu kommentieren. Der Fortschritt wird dann automatisch mit MS-Project und Excel synchronisiert. Daraus entstehen automatisiert entsprechende Reports in Excel und PowerPoint.

Die Vorteile eines solchen Systems

In SharePoint können Projektpläne mit Einschränkungen in den Berechtigungen versehen werden können. Das erlaubt Ihnen mehr Vorgaben zu machen und Manipulation entgegenzuwirken. Dank der automatischen Synchronisierung sparen Sie sich das Zusammentragen der Informationen und damit viel Zeit und Ressourcen.

Die Vorteile für den Projektmanager:

  • Der aktuelle Stand des Projektes ist immer sofort einsehbar
  • Er kann gezielt Fragen stellen
  • Die neusten Reports sind zu jeder Zeit verfügbar
Projektcontrolling Grafik

Excel: Frontend für den User um die Daten aggregieren und darzustellen. SharePoint: Datenbank und online Task Tracker für Projekt Teilnehmer MS-Project: Projektplaner für den Projektmanager mit Synchronisierung der anderen Quellen Qualitätssysteme (HPLM): Synchronisierung der formalen Validierungen im QM-System mit den Tasks in SharePoint

User: ~500 weltweit

Wenn Sie weitere Fragen oder Ideen zu diesem Thema haben, kommen Sie gerne auf uns zu. Gemeinsam finden wir eine Lösung, das garantieren wir!

Excel ist nicht die Lösung für alle Probleme

May 2019

von Jack Engelmann

#Excel #Prozesse #Agil #Individualsoftware
Die Erstellung von Excel Tools ist ein wertvolles Mittel um kleine, repetitive Aufgaben zu automatisieren. Allerdings werden Excel Tools oft für deutlich größere Aufgaben genutzt. Folgen sind mangelnde Transparenz und das Erschweren der Zusammenarbeit. Die Entwicklung maßgeschneiderter Software ist für unternehmenskritische Aufgaben oft ein geeigneteres Mittel und hilft Ihrem Unternehmen langfristig zu wachsen.

Es herrscht heutzutage Einigkeit darüber, dass Unternehmensprozesse digitalisiert werden müssen. Uneins ist man sich dagegen in der Art und Weise, wie diese Digitalisierung umgesetzt werden soll.

Warum die meisten auf Excel setzen

Ein Großteil der Unternehmen setzt vorrangig auf Excel-Tools. Ein Grund dafür ist, dass der rudimentäre Umgang mit Excel im Berufsleben mittlerweile vorausgesetzt wird und Excel optimal dafür ist, kleine Aufgaben zu automatisieren. Doch meistens werden die Aufgaben mit der Zeit komplexer. Aus einer Aufgabe werden mehrere und aus einem leicht verständlichen Excel-Tool entsteht eine ganze Landschaft zusammenhängender Tools, bei der es schwerfällt, den Überblick zu behalten.

Wildwuchs in der Systemlandschaft

Mit dem Unternehmen wächst auch die Komplexität der Excel-Landschaft. Ein simples Überschreiben einer Formel durch einen unerfahrenen Nutzer kann ausreichen, um ein komplettes System lahm zu legen. Aus einem gut wartbaren Tool ist ein schwer kontrollierbares System geworden. Es ist schwer nachzuvollziehen, wer was geändert hat und geregelte Zusammenarbeit ist nahezu unmöglich.

Wofür Excel gut ist

Erfahrene Nutzer kommen häufig sehr schnell zu ersten Ergebnissen. Excel ist optimal, um repetitive Berechnungen zu automatisieren oder um Prototypen für Anwendungen zu erstellen. Zusätzlich ist Excel auf fast jedem Business-Rechner installiert, es ist keine Einrichtung nötig, um ein Excel-Tool zu präsentieren und zu verbreiten.

Wofür Excel nicht gut ist

Mittlerweile wird Excel kaum noch als Tabellenkalkulation eingesetzt – also für den Zweck, für den es ursprünglich entworfen wurde –, vielmehr als Standard-Lösung, um ganze Unternehmensprozesse wie Planung und Reporting abzubilden. Für diese Einsatzwecke ist Excel aber nicht gut gerüstet.

Excel verhindert geregelte Zusammenarbeit

Excel-Tabellen sind nicht für paralleles Arbeiten entworfen. Wenn die Tabelle zentral gespeichert wird, muss koordiniert werden, wer die Datei grade bearbeitet, um einen Datenverlust zu vermeiden. Alternativ kann nach der Bearbeitung die neue Version an den nächsten weitergeleitet werden. Offenkundig sind beides keine zeitgemäßen Lösungen.

Excel-Tabellen sind schwer zu versionieren

Der zeitliche Verlauf der Bearbeitungsschritte an einer Excel-Tabelle ist schwer nachzuvollziehen. Es ist schwer herauszufinden, wer, wann und was geändert wurde. Meist kann jeder alles ändern. Unterschiedliche Stände zu vergleichen, ist nur händisch möglich.

Excel-Tabellen sind fehleranfällig

Excel ermöglicht keine umfassende Validierung von Eingaben. Dadurch entstehen schnell Fehler, die in der Regel lange unbemerkt bleiben. Ein unvorsichtiger Umgang mit Zellen, die Formeln behandeln, kann ganze Kalkulationen invalidieren ungültig machen.

Die Lösung: Individualsoftware

Individualsoftware bietet viele Vorteile. Unter anderem ist sie ist deutlich besser skalierbar. Damit ist die Entwicklung von Individualsoftware meist ein Investition, die mittel- und langfristig das Wachstum des Unternehmens fördert.

Individualsoftware verbessert die User-Experience

Individualsoftware erlaubt die Erstellung optisch ansprechender Oberflächen, die die Arbeit angenehmer und sicherer machen. Fehler in der Eingabe können validiert werden und der Nutzer bekommt sofort eine Rückmeldung von der Anwendung.

Individualsoftware ermöglicht die geregelte Zusammenarbeit

Mithilfe neuer Web-Technologien gestaltet sich die Zusammenarbeit deutlich effizienter und einfacher. Die Möglichkeit der parallelen Bearbeitung beschleunigt Prozesse. Darüber hinaus werden Berechtigungen zugewiesen, sodass jeder Nutzer nur das sehen und ändern kann, was in seinem Aufgabenbereich liegt.

Individualsoftware kann Daten versionieren

Nutzen Sie Individualsoftware, um den Verlauf von Datenständen transparent zu machen. Auf diese Weise wird ersichtlich, wer welche Daten wann verändert hat. Die Entwicklung Intelligenter Oberflächen erlaubt es, verschiedene Datenstände miteinander zu vergleichen und ungewollte Änderungen rückgängig zu machen.

Individualsoftware hilft Prozesse zu verstehen und auszuwerten

Individualsoftware kann die eingepflegten Daten nutzen, um automatisiert Reportings zu erstellen. Dank zugeschnittene Analysen werden Erkenntnisse gewonnen, auf deren Grundlage Prozesse automatisiert werden können.

Wie geht es jetzt weiter?

Excel-Tools haben nach wie vor ihre Berechtigung, sollten aber nicht dauerhaft verwendet werden, um erfolgskritische Prozesse abzubilden. Individualsoftware macht solche Prozesse oft deutlich effektiver und kann agil mit dem Unternehmen wachsen. Wir können Ihnen dabei helfen, Excel-Landschaften schrittweise durch effektivere Systeme zu ersetzen und bereits frühzeitig vorbeugen, dass unwartbare Excel-Landschaften überhaupt erst gar nicht entstehen.

Sachsen macht die Digitalisierung bezahlbar

April 2019

von Kay Spiegler

#Förderung #Digitalisierung #SAB
Das Bundesministerium für Wirtschaft und Energie hat sich zum Ziel gemacht den digitalen Wandel zu gestalten. In vielen Bereichen mangelt es insbesondere Klein - und Mittelständischen Unternehmen (KMU) an der Finanzierung sowie der Umsetzung entsprechender Maßnahmen in diesem Bereich. Das Förderangebot der „Mittelstandsrichtlinie – Elektronischer Geschäftsverkehr (E – Business)“ soll hierbei eine Möglichkeit bieten Ihr Unternehmen digital für die Zukunft zu rüsten. Im Folgenden erhalten Sie einen kleinen Einblick über etwaige Voraussetzungen, Schritte und weitere Informationen.

Umsetzung der Industrie 4.0

In Anbetracht einer immer mehr vernetzten Welt im Zuge der Industrie 4.0 bestehen im digitalen Bereich besonders Potentiale für den Mittelstand. Ob nun ein neuer Webshop im Rahmen einer neuen Marketingstrategie, zur Verbesserung des digitalen Vertriebs, einer Individualsoftware, angepasst an die Spezifika ihres Unternehmens, oder eines Monitoring der Produktionsprozesse im Hinblick auf Qualitätsstandards. Im Bereich des digitalen Wandels stehen KMU insbesondere anfangs vor komplexen Problemen konträrster Ursachen. Aufgrund dessen werden von staatlichen Einrichtungen, wie Anstalten öffentlichen Rechts (SAB, KfW, etc.), wie teils privaten Institutionen und Banken diverse Förderungsmöglichkeiten angeboten, die eine bestmögliche Umsetzung ermöglichen sollen. Besondere Akzente im lokalen Kontext setzt hierbei die Sächsische Aufbaubank, die unter anderem für mittelständische Unternehmen im Freistaat Sachsen eine Plattform zur Finanzierung im Bereich der Digitalisierung, wie z.B. das hier beschriebene E-Business Förderprogramm der Europäischen Union, bietet.

Welche Ziele werden mit dem Programm E-Business verfolgt?

Mit der Implementierung eines E-Business Konzeptes versteht sich unter anderem die Einführung und Weiterentwicklung von Informations- und Kommunikationstechnologien im Unternehmensbereich und die Entwicklung neuer Absatzmöglichkeiten sowie die Optimierung interner Prozesse. Hierbei lassen sich herkömmliche obsolete Strukturen vereinfachen und die Vernetzung und Digitalisierung ihres Unternehmens vorantreiben. Mit der Förderungsmaßnahme der SAB z.B. kann hier sowohl der finanzielle als auch der strategische Ablauf ermöglicht werden. Konkret bedeutet das die Planung, Konzeption und Vorbereitung neuer Projekte, deren technische Umsetzung, den Erwerb der Vorhaben-spezifischer Software und die letztendliche Einführung in das Unternehmen inklusive Schulung der Mitarbeiter.

Ihre Vorteile des E-Business

Insbesondere in den Bereichen der Unternehmensführung und Produktionsplanung ist der digitale Wandel in der Wirtschaft bemerkbar, von dem der Mittelstand nicht gefeit ist. Die Vorteile globalisierter Absatz- und Zulieferermärkte führen auch zu komplexeren Anforderungen in den herkömmlichen Unternehmensbereichen. Mit dem E-Business werden diese Prozesse in simple und anwendungsfreundliche Prozesse und Tools überführt, die es Ihnen erleichtert betriebliche Vorgänge zu überwachen und stetig zu verbessern. Von Vornherein steht unsererseits die inhaltliche Auseinandersetzung mit ihren Problemen im Fokus. Die Identifizierung der Problemstellung und eine individuelle, für sie angepasste Lösungsfindung ist das Ziel, und wird durch eine beständige Betreuung unsererseits geschaffen und gemeinsam als Teil ihres Teams umgesetzt.

Art und Umfang der Förderung

In erster Linie dient der nicht rückzahlbare Zuschuss als Anregung Ihr Unternehmen mittels moderner Informations- und Kommunikationstechnologie zu verbessern. Der Fördertopf ist hierbei explizit auf eine Individuallösung ausgelegt, die Bottom-Up, also mit ihrem Unternehmen, implementiert wird und gemeinsam wächst. Durch die detaillierte Analyse und Begleitung ihrer Prozesse unsererseits werden hierbei schlanke und effiziente digitale Strukturen geschaffen, die ihnen den Unternehmensalltag erleichtern sollen. Hierbei können ungeahnte Potentiale in unterschiedlichsten Bereichen, wie z.B. der Erschließung neuer Absatzmöglichkeiten, (Geschäfts-)Prozessoptimierung und Verschlankung ihrer Logistik, entdeckt und genutzt werden. Die monetäre Unterstützung bietet dadurch einen attraktiven Anreiz und bietet die Chance einer individuellen Anpassung der Lösungen nach ihren entsprechenden Wünschen. Für die Beratung zur Lösungsfindung (Planung, Konzipierung, Vorbereitung), der Entwicklung und Implementierung (inkl. Schulung) individueller Lösungen werden Bezuschussungen entsprechend folgender Voraussetzungen gewährt:

  • Beratungsförderung (5 Tagewerke) mit bis zu 900€ pro Tag
  • Förderung der technischen Realisierung und des Erwerbs der individuellen Software
  • Implementierung der entwickelten Lösung inkl. einer Schulung (diese kann bis zu 20% der Gesamtausgaben bezuschusst werden)
  • Projektdauer soll nicht zwölf Monate übersteigen

Weitere Voraussetzung ist hierbei eine 50%ige Eigenbeteiligung, die sich insgesamt auf bis zu 25.000 € belaufen kann – entsprechend der Förderhöchstmenge für zuwendungsfähige Ausgaben i.H.v. 50.000 €. Die Bezuschussung kann alle drei Jahre, ohne Einschränkungen, neu beantragt werden. Ferner wird Arbeitgebern, die der Tariflohnzahlung (oder einer Tariflohn ähnlichen Zahlung) entsprechen, ein zusätzlicher Bonus für „Gute Arbeit“ in Höhe von 10% auf den Regelfördersatz gewährt. https://www.sab.sachsen.de/

Voraussetzungen

Ihr Unternehmen darf für eine Förderfähigkeit kein Großunternehmen i.S.d. EU Empfehlung (2003/361/EG) darstellen: Konkret bedeutet dies, dass ihr Unternehmen folgende Kriterien erfüllen muss:

  • Weniger als 250 Mitarbeiter-innen haben
  • Jahresumsatz ≤ 50 Millionen €
  • Bilanzsumme ≤ 43 Millionen €
  • Zeitraum weniger als zwölf Monate

Ferner gilt: Sie haben ihren Sitz oder eine Betriebsstätte im Freistaat Sachsen. Ihr geplantes Vorhaben darf ebenfalls nicht länger als zwölf Monate laufen und Sie sind förderfähig nach der De-Minimis-Verordnung (regelt den maximalen Beihilfebetrag über die letzten 2 Jahre (Förderhöchstbetrag)).

Vom Problem bis zur maßgeschneiderten Lösung

Sie wollen keine Lösung von der Stange, sondern einen Schritt in den digitalen Wandel wagen, der auch die Anforderungen und Bedürfnisse ihres Unternehmens erfasst? Sie wollen schlanke Prozesse und Resultate, die gemeinsam mit ihrem Unternehmen wachsen. Die Förderung der Digitalisierung von Geschäftsprozessen (E-Business) des EFRE Strukturfonds der EU und der Sächsischen Aufbaubank bietet Ihrem Unternehmen einen finanziellen Anreiz hierfür. Im Bereich des Ausbaus und der Erfassung ihrer Prozesse und Strukturen, der Entwicklung einer für sie passenden digitalen Lösung und der begleitenden Implementierung schaffen wir für Sie diese digitale Lösungen, die sich Ihnen anpassen, nicht umgekehrt! Weitere Angaben und Dokumente über die Finanzierung ihres Vorhabens finden Sie hier: sab.sachsen.de/e-business Informieren Sie sich gerne über unsere umfassenden Lösungen für intelligentere, schnellere und einfachere Geschäftsprozesse in allen Branchen oder kontaktieren Sie uns direkt unter: launch@esveo.com

Tiefbau trifft Digitalisierung

March 2019

von Clemens Ritthaler

#Agil #UseCase #Quality #Electron #React #Tiefbau
Ausgereifte Lösungen für komplexe Probleme liegen fast nie auf der Hand. Am Beispiel mit einem Kunden aus dem Bauwesen zeigen wir, wie Kollaboration funktionieren kann und wo die Digitalisierung Potentiale birgt. Außerdem bieten wir Ihnen Einblicke in unsere Arbeitsweise und Lösungsansätze.

Es ist etwa halb zehn, als wir ankommen. Nahe einer Autobahn mitten in Brandenburg ist auf einer Baustelle ein Container-Büro aufgestellt. Die Zufahrt ist matschig und uneben, mein Tankstellen Kaffee schwappt ein wenig über. Die Bauleitung und der Quality Manager begrüßen uns - es haben sich wieder neue Anforderungen an die Software zum Qualitätsmanagement ergeben.

Computer dort arbeiten lassen, wo algorithmisch verfahren wird

Täglich werden auf den Baustellen große Datensätze mit Qualitätsindikatoren erhoben. Noch zwei Jahre zuvor hatte der Quality Manager die Aufgabe, diese Datenmengen händisch zu strukturieren und auf Nachbesserungsbedarf zu prüfen. Der Einfallsreichtum dabei war beeindruckend. Mithilfe kleinteiliger Skripte und Teilautomatisierungen lag der Arbeitsaufwand für die Analyse von hunderten Excel-Sheets pro Tag bei etwa drei Stunden. Dieser wichtige Analyseprozess war sehr fehleranfällig und konnte nur vom Quality Manager selbst durchgeführt werden.

Agile Entwicklung heißt Flexibilität und Kundenorientierung 

Die Bauleitung erkannte diese Problematik und trat an uns heran. Die Zielstellung war, den Prozess, soweit sinnvoll und möglich, zu automatisieren. In Zusammenarbeit mit Bauleitung und Quality Manager definierten wir Anforderungen, Wünsche und Vorstellungen, aller Beteiligten. Letztlich ergaben sich folgende Anforderungen auf Grundlage der User-Stories:

  • Die Bauprojekte sind verwaltbar und in verschiedene Teilmaßnahmen unterteilbar
  • Große Mengen Exceldateien, mit einem vordefinierten Aufbau können in die Software importiert werden
  • Der Export von Daten in verschiedene Ausgabeformate (XLS, CSV, XML etc. -flexibel erweiterbar)
  • Die Software funktioniert auch offline
  • Die Qualität der Messpunkte wird über klare Definitionen und Pflege von Soll-Vorgaben automatisch ausgewertet
  • Die Daten sind direkt in der Software einsehbar
  • Auffälligkeiten und Unstimmigkeiten können behoben und mit Begründungen annotiert werden

Das waren die Anforderungen. Für eine Standardsoftware zu speziell, für ein Exceltool zu breit. Wir entschieden uns für die Entwicklung einer Individualsoftware und legten wenig später eine grobe Softwarearchitektur mitsamt Technologien vor. Performant und intuitiv bedienbar musste das Ganze am Ende sein und auf Wunsch unseres Kunden, auch in Zukunft noch erweiterbar.

Tiefbau Skizze

Aktuelle Technologien schaffen Nachhaltigkeit  

Die Zeichen der Zeit deuten auf das Web. Dieser Trend zeichnet sich schon seit vielen Jahren ab. Die Einflusssphäre von Webtechnologien hat sich längst auf unsere Windows-, Android- und Apple-Geräte erweitert. Auch Anwendungen, die auf den ersten Blick nicht im Browser laufen, basieren auf Websprachen. Skype ist ein bekanntes Beispiel dafür. Selbst die von uns entwickelte Software fühlt sich für den Quality Manager wie eine native Desktopanwendung an.

Die Anwendung wird installiert und kann per Klick auf ein Desktop-Icon gestartet werden. Wie? Eine Besonderheit in der von uns gewählten Architektur ist die Nutzung von Electron. Stellen Sie sich vor, Sie können Google Docs mit einem Klick auf ein Windows-Icon auswählen. Die Software startet, obwohl Sie offline sind und es ist möglich die Google Docs-Dateien lokal auf ihrem PC speichern. Genau das vermag Electron zu tun.   Weitere zentrale Technologien für dieses Projekt, sind React, CouchDB, Typescript und Webpack.

Jung und verlässlich  

Grübelnd sitzt der Bauleiter am Tisch im Container-Büro. “Doch.”, sagt er schließlich. “Die Hilfslinien müssen wir auch selber setzen können, nur die Soll-Vorgaben reichen nicht. Das brauchen wir für das Projekt.” Der Quality Manager denkt kurz nach und nickt.   Seit die ersten Anforderungen vollständig umgesetzt sind, wendet sich das Unternehmen regelmäßig mit neuen Ideen an uns. Im Nachgang entwickelten wir Visualisierungen in Form von flexiblen konfigurierbaren Diagrammen. In dringlichen Fällen fügten wir auch schon innerhalb eines Tages neue Regeln und Features hinzu.
Ein Agiles Vorgehen und die enge Zusammenarbeit mit unseren Kunden trägt maßgeblich zum Projekterfolg bei. So setzten wir in der Vergangenheit Softwareprojekte mit auch mit kleinerem Budget in kürzester Zeit um. So wird die Digitalisierung auch in traditionellen Branchen machbar!

Wenn Sie weitere Fragen oder Ideen zu diesem Thema haben, kommen Sie gerne auf uns zu. Gemeinsam finden wir eine Lösung, das garantieren wir!

Welche überraschenden Möglichkeiten Webanwendungen eröffnen

February 2019

von Andreas Roth

#Agil #Apps #Frontend #Web
Eine neue Idee steht im Raum. Sie möchten eine neue App auf den Markt bringen, mit der Nutzer Ihren Service von überall in Anspruch nehmen können, egal ob online oder offline. Native Anwendungen für iOS und Android sowie eine Webversion separat zu entwickeln ist sehr teuer. Wir lösen dieses Problem für Sie Zeit- und Kostengünstig!

Power-Of-Web-Apps

Die Neue Idee

Eine neue Idee steht im Raum. Sie möchten für die Kunden ihres Unternehmens eine App auf den Markt bringen, mit der die Nutzer Ihren neuen Service von überall in Anspruch nehmen können. Dabei soll egal sein, ob sich jemand in einer Großstadt mit LTE befindet, oder in einem Zug sitzt, der gerade durch einen Tunnel fährt.

Natürlich soll diese App sowohl für Android als auch für iOS verfügbar sein, denn Sie müssen für jeden Ihrer Kunden erreichbar sein. Gleichzeitig benötigen Sie noch eine Webversion der Anwendung, denn User wollen den neuen Service ja auch am Laptop oder Desktop nutzen. Trotzdem müssen alle Systeme ein einheitliches Look & Feel vermitteln.

Statt drei verschiedene Versionen teuer zu entwickeln, kommen Webanwendungen zum Einsatz.

Die Anfänge des Web

Spult man einmal zurück zur Jahrtausendwende, wird man feststellen, dass das Internet anders aussieht als heute. Webseiten sind statische Dokumente, ähnlich wie Bücher in einer Bibliothek. Vor einiger Zeit geschrieben und jetzt unveränderbar. Nutzer konsumieren ohne zu interagieren. Das höchste der Gefühle ist ein Kontaktformular, in dem Nutzer ihr Anliegen schriftlich übermitteln können. Interaktionen wie zum Beispiel Navigation erfolgen immer nach dem Schema "Klick; warten bis das Modem die neue Seite geladen hat; Lesen".

Die Revolution des Web

Im Jahr 2004 startete dann ein Trend, der zwar von vielen belächelt wurde, das Web jedoch revolutioniert hat: Web 2.0

Welche Prinzipien liegen dem „Web 2.0“ zugrunde?

  • Das Web als Plattform für Anwendungen und Dienste
  • User wird zum Teilnehmer (Stichwort "Mitmach-Web")
  • Soziale Interaktion zwischen Usern

Das „Mitmachweb“ entsteht.

Der Nutzer ist nicht länger nur stiller Leser sondern Teilnehmer in einer großen Runde Gleichgesinnter. Vermehrt wird die Funktionalität direkt im Browser abgebildet. Ein Klick leitet nicht länger auf eine neue Seite, sondern öffnet einen Dialog oder startet einen Animation, die weiteren Inhalt offenlegt. Kommentarfelder, Gästebücher und GIFs prägen die Webseiten und ermöglichen es dem Nutzer, Teil von etwas zu werden. Etwas, das er zu dieser Zeit noch nicht richtig verstehen kann.

Die Entwicklung gewinnt an Fahrt

An diese wechselnden Anforderungen passen sich die existierenden und verwendeten Technologien an. Browser können nun besser mit Bildern und Videos umgehen. Findige Entwickler schließen sich zusammen und veröffentlichen Tools, mit denen die Umsetzung von interaktiven Elementen einfacher und einheitlicher wird.

Die ersten „Realtime“-Anwendungen

Um neue Kommentare zu lesen, muss die Seite nun nicht mehr neu geladen werden. Stattdessen ploppen neue Kommentare in dem Moment beim Nutzer auf, in dem ein anderen Nutzer "senden" klickt. Es ist also inzwischen möglich, Anwendungen zu bauen, die von einer Vielzahl von Nutzern on-demand aufgerufen und verwendet werden konnten. Schon damals musste man sich keine Gedanken darüber machen, wie Updates oder neue Versionen zu Nutzern kommen - beim Seitenaufruf waren sie einfach da.

Der kontrollierte Zugriff auf ihr Gerät

Bis jetzt waren die Anwendungen immer "eingeschlossen". Schnell wurde klar, dass der bedingungslose Zugriff auf das System des Besuchers keine gute Idee ist. Mit den steigenden Möglichkeiten bei der Umsetzung von Webseiten, steigt auch das Risiko des Missbrauchs. Um dem entgegen zu wirken entwerfen Browserentwickler bei Microsoft, Google, Mozilla oder Apple entsprechende Konzepte.

Wie kontrolliert man den Zugriff

Es wurden klar definierte Schnittstellen angeboten, die bei Benutzung immer eine Nachfrage beim User auslösen. Diese Anfrage stellt sicher, dass der Anwender auch wirklich bestimmte Funktionen seiner Hardware freigeben möchte. Aus diesem Grund tauchen immer mehr Webseiten Popups auf, die den Nutzer fragen, ob sein Microfon, sein Gerätestandort, die Kamera, etc. verwendet werden darf.

Browser merken sich was Sie tun

Neben dem Zugriff auf Hardwarefunktionalität wird inzwischen auch die Möglichkeit geboten, Daten auf dem Gerät abzuspeichern. Der Browser könnte sich also merken, welche Daten der User in ein Formular eingegeben hat und könnte diese beim nächsten Besuch wieder anzeigen, um die Bearbeitung fortzusetzen. Dennoch brauchte der Nutzer immer eine stehende Internetverbindung, um die Seite initial zu laden. Danach kann auf gespeicherte Daten zugegriffen werden, ohne dass diese von einem Server geladen werden müssen.

Das Web verlässt den Browser

Die extrem niedrigen Einstiegsbarrieren sorgen dafür, dass Webtechnologien sowohl von professionellen Entwicklern als auch von Hobbyisten schnell aufgegriffen werden, um simple Webauftritte oder auch komplexere Anwendungen umzusetzen. Das führte dazu, dass JavaScript (die Programmiersprache des Webs) inzwischen eine der mitbenutzen Programmiersprachen weltweit ist. Durch das extrem gute Angebot von Webentwicklern liegt der Schluss nahe, dass diese Technologien nicht nur für Webseiten im klassischen Sinne verwendet werden sollten. Immer mehr Apps und Desktopanwendungen setzen auf Webstandards, die mithilfe von WebViews in eine native Anwendung eingebettet werden.

Wo verstecken sich Webtechnologien

So sind zum Beispiel die Spotify Desktop-Anwendung (Eigenentwicklung - https://www.quora.com/What-is-the-technology-stack-behind-the-Spotify-web-client), Teile der Instagram App auf iOS und Android (React Native - https://instagram-engineering.com/react-native-at-instagram-dd828a9a90c7) oder die Chat-Anwendungen Micrsoft Teams und Slack (Electron Anwendungen) mit Webtechnologien entwickelt, ohne dass der Nutzer einen Unterschied zu klassischen Anwendungen merken würde.

Apps direkt aus dem Browser

Die neuesten Versionen der aktuellen Browser lassen die Grenze zwischen Website und App, weiter verschwimmen.

Progressive Web Applications (PWA`s)

Unter dem Namen "Progressive Web Applications" werden Webseiten entwickelt, die sich kaum noch von nativen Anwendungen abgrenzen lassen: Nach wiederholtem Besuch, wird der Nutzer gefragt, ob er die Anwendung zu seinem Homescreen hinzufügen möchte. Ab diesem Moment „lebt“ die Website zwischen den anderen nativen Apps, die der Nutzer installiert hat.

Progressive Web Applications (PWA`s) offline nutzen

Beim Verwenden des neuen Shortcuts auf dem Homescreen wird der Browser in einem Modus gestartet, in dem die Adressleiste und andere browsertypische UI-Elemente ausgeblendet sind. Der Nutzer merkt also nicht, dass er einen Link zu einer Webseite geöffnet hat. Des Weiteren können diese PWAs auch ohne laufende Internet Anbindung geöffnet werden. Funktionen wie das Versenden von Chat-Nachrichten sind offline jedoch nicht möglich. Dafür ist es möglich Offline-gespeicherte Daten abzurufen und lokal zu editieren, um sie zu einem späteren Zeitpunkt mit dem Server zu synchronisieren.

Webanwendungen interagieren nicht nur auf Anfrage

Entwickler haben sogar die Möglichkeit, Push-Notifications in ihre Webanwendungen einzubauen. Diese werden von einem Server an den Browser geschickt, der die Benachrichtigung auf dem Endgerät auslöst, auch wenn die Webseite gerade nicht geöffnet ist.

Die Grenzen der Technologie

Trotz der stetigen Weiterentwicklung von Webstandards, gibt es gewisse Limitationen, die eine allgemeingültige Empfehlung zur Entwicklung von Webanwendungen verhindern. Die starken Sicherheitsvorkehrungen der Browser sorgen dafür, dass aus der Anwendung nicht direkt auf das Dateisystem des Nutzers zugegriffen werden kann.

Nachteile von Webtechnologien

Ein weiterer Nachteil, in der Verwendung von Webtechnologien, sind die benötigten Ressourcen. Der Browser ist eine relativ schwergewichtiges Programm. Soll also eine Anwendung für Systeme mit starken Ressourceneinschränkungen entwickelt werden, die zusätzlich mit großen Datenmengen oder sehr komplexen Oberflächen ausgestattet ist, sollte eine native Anwendung verwendet werden.

Zusammenfassung: Das können Webanwendungen heute

Der Griff zu Webtechnologien ist häufig die richtige Wahl, um zu einer effizienten Lösung zu kommen, die von vielen Entwicklern weitergeführt werden kann. Neben normalen Interaktionen über Maus oder Touch sind aufwändige Animationen, Zugriffe auf Sensoren oder Hardware des Gerätes (Kamera, Mikrofon) kein Problem mehr. Auf modernen Endgeräten können die Nutzer die Webseite sogar so installieren, dass sie dann als native App mit voller Offlinefunktionalität eingesetzt werden kann.

Wenn Sie weitere Fragen oder Ideen zu diesem Thema haben, kommen Sie gerne auf uns zu. Gemeinsam finden wir eine Lösung, das garantieren wir!

Integration Tests

September 2019

von Paul Friedemann

#Software #Development #Testing

"Wieso hat da niemand daran gedacht?" So oder so ähnlich könnte die Beschwerde des Projektmanagers klingen, nachdem bei einem Release einer neuen Softwareversion Teile der Anwendungen nicht mehr funktionieren, die eigentlich gar nicht angefasst werden sollten. Die Ursache liegt meist darin, dass die Komponenten einzeln betrachtet zwar funktionieren, ihr Zusammenspiel aber nicht explizit geprüft wurde. Wie Sie solche Probleme verhindern können, lesen sie hier.

Nutzer simulieren oder doch noch nicht

Integration Tests haben einen kritischen Platz im Testplan, da sie einerseits annähernd so schnell sein sollen wie Unit Tests, andererseits jedoch die ersten Schritte zur Nutzersimulation wie bei E2E-Tests darstellen sollen. Doch was genau soll der Integration Test denn testen?

Die Grundlagen zu Integrations Tests

Sollten Unit Tests einzelne Komponenten auf ihre Funktionalität testen und diese somit gewährleisten, geht es bei Integration Tests um die Interaktion von Komponenten. Denn nur weil eine Komponente einzeln funktioniert, ist noch lange nicht klar, ob das Zusammenspiel ebenfalls klappt. Aus dem Unit Test Artikel sollte folgender Code bereits bekannt sein:

//Produktiv-Code
type  OperationType  =  "add"  |  "mult"  |  "div" | "mod";
function  processNumbers(x: number, y: number, operation: OperationType): number {
  switch (operation) {
    case  "add":
      return  x  +  y;
    case  "mult":
      return  x  *  y;
    case  "div":
      return  x  /  y;
    case  "mod":
     return  x  %  y;

  return  0;
}

Mithilfe der Unit Tests konnte die Funktionalität dieser Funktion gewährleistet werden. Eine andere Funktion soll zwei Preise verarbeiten können:

//Produktiv-Code
function handlePrices(price1: string, price2: string): string {
  return processNumbers(price1, price2, 'add');
}

Sollte in diese Funktion jemand Preise der Form "13€", also als String, eingeben, so wird die getestete Funktion processNumbers nicht funktionieren, da sie nicht auf Strings ausgelegt ist. Wenn eine statisch typisierte Sprache TypeScript verwendet wird, wird hier der Compiler bereits Fehler anzeigen, weil processNumbers mit Strings aufgerufen wird. Bei dynamischen Sprachen können solche Art Probleme mit Integration Tests frühzeitig aufgedeckt werden.

Aufbau eines Integration Tests

Integration Tests sind in ihrem Aufbau den Unit Tests sehr ähnlich. Es gibt wieder drei Abschntte: eine Initialisierung, die eigentliche Aktion und die Behauptung:

//Test-Code
describe('Test handlePrices', () => {
  it('should return true for two valid prices', () => {
    const price = '13€';
    const expectedResult = '26€';

    const result = handlePrices(price, price);

    expect(result).toEqual(expectedResult);
  });
});

Würde man den Test mit dem oben geschriebenen Produktiv-Code ausführen, würde dieser fehlschlagen. Daher müssen am Code Änderungen vorgenommen werden, um die gewünschte Funktionalität zu erreichen. Unter der Annahme, dass Preise an letzter Stelle das Eurozeichen haben und davor der Zahlenwert steht, ergibt sich die folgende Funktion:

//Produktiv-Code
function handlePrices(price1: string, price2: string): string {
  const value1 = parseInt(price1.slice(0, -1));
  const value2 = parseInt(price2.slice(0, -1));
  return processNumbers(value1, value2, 'add') + '€';
}

Nach der Überarbeitung wird die Funktion den Test bestehen.

Komplexität von Integration Tests

Das oben aufgeführte Beispiel ist erneut sehr simpel, um den Rahmen dieses Artikels nicht zu sprengen. In größeren Anwendungen können in Integration Tests auch Netzwerkanfragen getestet werden oder die Reaktion einer Komponente auf einen Button-Klick, also deutlich komplexere Strukturen. Wichtig ist es, den Unterschied zwischen Unit und Integration Tests zu kennen. Beim Integration Test muss man sich darauf verlassen können, dass die verwendeten Funktionen das tun, was sie sollen, also in diesem Fall die korrekte Addition zweier Zahlen durch die processNumbers-Funktion. Die Anzahl der Integration Tests sollte im Vergleich zur Anzahl der Unit Tests geringer sein, da nicht für jede einzelne Funktion ein Test geschrieben wird und auch weil Integration Tests deutlich aufwendiger sind. So kann aufgrund von Netzwerkanfragen oder ähnliches die Dauer eines Tests einige Sekunden dauern und dadurch eine Vielzahl solcher Tests auch sehr viel Zeit benötigen. Daher sollten Unit Tests und Integration Tests seperat gehalten werden.

Was kommt nach Integration Tests?

Mit Unit und Integration Tests ist das Projekt bereits sehr gut getestet und kann in vielen Fällen schon einwandfrei funktionieren. Um jedoch die eigentliche Nutzeraktion zu simulieren, gibt es End-To-End-Testing, welches in einem weiteren Artikel besprochen wird.

Sollten Sie Fragen zu Integration Tests oder Testing allgemein haben, dann wenden Sie sich an launch@esveo.com, wir helfen Ihnen gern weiter!

Unit Tests

August 2019

von Paul Friedemann

#Software #Development #Testing

Source Code ist nicht statisch, sondern dynamisch. Im Laufe der Zeit ändern sich die Anforderungen und damit muss auch eine Software angepasst werden. Bei solchen Anpassungen müssen Entwickler stets darauf bedacht sein, dass ihre Änderungen keine unerwarteten Nebeneffekte in entfernten Ecken des Programm erzeugen. Wie sie neue Anforderungen problemlos und mit Zuversicht umsetzen können, lesen sie hier.

Die Grundlage allen Testings

In einem früheren Artikel ging es bereits um die Gründe für ein ausführliches Testen. Hier sollen nun die sogenannten Unit Tests genauer unter die Lupe genommen werden. Zu den Unit Tests gehören alle Tests, die einzelne Funktionalitäten testen und dabei unabhängig von anderen Teilen des Codes bleiben. Alle Codebeispiele sind in Typescript geschrieben. Dadurch können Typfehler bereits beim Programmieren vermieden werden, da die Funktionsargumente und der Rückgabewert einen eindeutigen Typ zugewiesen bekommen.

Ablauf eines Unit Tests

Ein typischer Unit Test kann in drei Phasen unterteilt werden. Zuerst wird der Teil des Produktiv-Codes initialisiert (Arrange), der getestet werden soll. Dieser wird "system under test" oder kurz "SUT" genannt. Hierfür soll die folgende Funktion dienen, die zwei Zahlen addiert und das Ergebnis zurückgibt. Zudem können in der Arrange-Phase Vorbereitungen für den eigentlichen Test getroffen werden, wie zum Beispiel das Generieren von Testinputs oder erwarteten Outputs.

//Produktiv-Code
function add(x: number, y: number): number {
  return x + y;
}

Da es sich bei unserem SUT um eine sehr simple Funktion handelt, ist eine Initialisierung nicht nötig. Die Funktion wird einfach in der zweiten Phase, der eigentlichen Aktion verwendet (Act). Hier wird genau die Aktion durchgeführt, die getestet werden soll. Zum Abschluss wird überprüft, ob das Ergebnis der Funktion dem gewünschten Ergebnis entspricht. Wir stellen also eine Behauptung (Assertion) auf und prüfen, ob diese zutrifft. Daraus ergibt sich, ob der Test fehlschlägt oder durchläuft. Am folgenden Beispiel sollen die drei Phasen (Arrange, Act, Assert, kurz "AAA") einmal verdeutlicht werden.

//Test-Code
import { add } from './add'; // Funktion die getestet werden soll importieren

// Wir beschreiben, welches Module oder welche Komponente gerade getestet wird
describe('Add', () => {
  // Jeder Testcase prüft eine funktionalität.
  it('should return 4 when adding 2 and 2', () => {
    //Arrange
    //bleibt leer, weil Testfall sehr simpel ist

    //Act
    const result = add(2, 2);

    //Assert
    expect(result).toBe(4);
  });
});

Führt man diesen Test nun mit einer entsprechenden Test-Umgebung aus, bei JavaScript/TypeScript empfiehlt sich Jest, sollte dieser fehlerfrei durchlaufen. Damit wäre der erste Test erfolgreich geschrieben.

Komplexere Funktionen

Bei der Add-Funktion sind nicht viele Testfälle nötig, da diese sehr simpel ist. Jedoch ist das nicht immer der Fall. Die folgende Funktion verarbeitet zwei Zahlen je nachdem welche Verarbeitungsmethode vom Nutzer ausgewählt wird:

//Produktiv-Code
type  OperationType  =  "add"  |  "mult"  |  "div" | "mod";
function  processNumbers(x: number, y: number, operation: OperationType): number {
  switch (operation) {
    case  "add":
      return  x  +  y;
    case  "mult":
      return  x  *  y;
    case  "div":
      return  x  /  y;
    case  "mod":
     return  x  %  y;

  return  0;
}

Der Rückgabewert der Funktion ist davon abhängig, welcher Operationstyp verwendet wird. Daher sollte für jede einzelne Operation ein Test geschrieben werden.

//Test-Code
import { processNumbers } from './processNumbers'; //Funktion importieren

describe('processNumbers', () => {
  it('should return 15 for add', () => {
    const result = processNumbers(10, 5, 'add');
    expect(result).toBe(15);
  });
  it('should return 50 for mult', () => {
    const result = processNumbers(10, 5, 'mult');
    expect(result).toBe(50);
  });
  it('should return 2 for div', () => {
    const result = processNumbers(10, 5, 'div');
    expect(result).toBe(2);
  });
  it('should return 0 for mod', () => {
    const result = processNumbers(10, 5, 'mod');
    expect(result).toBe(0);
  });
});

Durch diese Tests wird jede Zeile der Funktion überprüft und ist somit vollständig einsatzbereit. Doch was macht einen guten Test eigentlich aus?

Eigenschaften eines Unit Tests

Unit Tests sollten eine Reihe von Eigenschaften haben. Darunter zählen unter anderem:

  • simpel: Da Unit Tests die Grundlage bilden, sollten sehr viele davon geschrieben werden. Dementsprechend sollte der Aufwand für einen einzelnen Test sehr gering sein.
  • lesbar: Es sollte deutlich erkennbar sein, welcher Bereich getestet wird. Dadurch kann bei einem Fehler schnell das Problem identifiziert werden.
  • zuverlässig: Tests sollten nur fehlschlagen, wenn es einen Bug im Code gibt. Daher sollten Negationen bei den Behauptungen vermieden werden und die Tests sollten unabhängig von äußeren Einflüssen (Systemzeit oder ähnliches) funktionieren.
  • schnell: Unit Tests werden oft und in Massen durchgeführt, daher sollten sie keine teuren Funktionen enthalten.
  • kein Integration Test: Unit Tests sollen einzelne Funktionen testen und das unabhängig von äußeren Einflüssen. Diese müssen zur Not simuliert (mocking) werden. In Unit Tests sind keine Datenbank- oder Netzwerkzugriffe zu finden.

Unit Tests geschafft und jetzt?

Nur weil die einzelnen Funktionen funktionieren, heißt das nicht, dass das ganze Programm fehlerfrei ist. Das richtige Zusammenspiel mehrerer Komponenten ist der nächste Teil, der gründlich untersucht werden muss. Hierfür gibt es die Integration Tests, die im nächsten Artikel dieser Testing-Reihe genauer behandelt werden.

Nutzen Sie bisher Unit Tests oder Tests allgemein? Erzählen sie uns gern ihr Feedback oder stellen sie uns ihre Fragen an launch@esveo.com.

Iterables, Iterators und Generators in JavaScript

August 2019

von Andreas Roth

#Software #Development #JavaScript

Jeder JavaScript-Entwickler arbeitet mit Arrays. Doch manchmal ist diese Datenstruktur nicht die richtige Wahl. Wenn man mit extrem großen Datenmengen oder unendlichen Sequenzen arbeiten möchte, kommen Arrays nicht in Frage und man benötigt Alternativen. Eine recht neue, bisher wenig verwendete Option sind Iterables und Iteratoren, die genau für solche Anwendungsfälle entwickelt wurden und in anderen Sprachen (z.B. Python oder C#) schon längst Standard sind.

Iterables statt Arrays in JavaScript

Vorwort

Wir bei esveo wenden in vielen Projekten die Programmiersprache JavaScript bzw. TypeScript an. Aufgrund der vielfältigen Anwendungsmöglichkeiten und der extremen Stärke des Ökosystems dieser Sprachen, war das bisher nie eine schlechte Entscheidung. Im Vergleich zur Entwicklung in anderen Sprachen und Umgebungen ist die Komplexität der Anwendungen erst in den letzten Jahre so angestiegen (wie in einem anderen Artikel erläutert wurde), dass man die Unterstützung von Frameworks und Design Patterns sucht. Eines dieser Patterns ist der Iterator, bzw. Iterables: Ein vereinheitlichtes Muster, mit denen ein Strom an Datenblöcken abgebildet werden kann.

Wieso keine Arrays?

Muss man eine Vielzahl von Werten in einer Variable ablegen, greift man üblicherweise zu einem Array bzw. zu einer Liste. Wieso sollte man jetzt also weg vom bewährten Vorgehen? Der große Nachteil bei Arrays ist, dass alle Werte gleichzeitig im Speicher gehalten werden müssen. Muss bei der serverseitigen Programmierung zum Beispiel eine Datei eingelesen und verarbeitet werden, sollte man die Zeilen der Datei nicht gleichzeitig laden und anschließend verarbeiten, da der Arbeitsspeicher des Servers so nur unnötig befüllt wird. Stattdessen verarbeitet man jede Zeile einzeln und kann so eine hohe Spitze im Ressourcenverbrauch vermeiden. Genau an diesem Punkt kommen Iterables und Iterator ins Spiel.

Iterables & Iterator

Der grundlegende Baustein für die Verwendung von Iterables ist der Iterator. Ein Object, auf welchem man die next() Methode aufrufen kann, um den nächsten Wert zu erhalten. Als Resultat erhält man hierbei ein Objekt mit den Schlüsseln value und done, die den aktuellen Wert, bzw. die Information über den Zustand des Iterators beinhalten.

In TypeScript sieht das Interface des Iterators und des IteratorResults ungefähr (für die Erklärung wurden 2 Methoden wegglassen, die hier nicht benötigt werden) so aus:

interface IteratorResult<ValueType> {
  done: boolean;
  value: ValueType;
}

interface Iterator<ValueType> {
  next: (value?: any) => IteratorResult<ValueType>;
}

Eine Beispielimplementierung, die eine Reihe aufsteigender Zahlen erzeugt, könnte so aussehen:

let n = 0;
const numberIterator = {
  next: () => {
    const nextResult = { value: n, done: false };
    n++;
    return nextResult;
  },
};

numberIterator.next(); // { value: 0, done: false }
numberIterator.next(); // { value: 1, done: false }
numberIterator.next(); // { value: 2, done: false }

Für eine einfache Zahlenfolge ist das doch erstaunlich viel Aufwand. Noch dazu kommt, dass ein einzelner zustandsbehafteter Iterator wenig Mehrwert bietet. Stattdessen möchte man eher seine eigenen Klassen als "iterierbar" markieren. Dafür wird das Interface des Iterables verwendet. Per Definition ist ein Objekt ein Iterable, wenn es im Schlüssel Symbol.iterator eine Methode enthält, die einen Iterator als Resultat liefert:

interface Iterable<ValueType> {
  [Symbol.iterator](): Iterator<ValueType>;
}

Eine Implementierung der Zahlenfolge könnte dann so aussehen:

const numbers = {
  [Symbol.iterator]: () => {
    let n = 0;
    return {
      next: () => {
        const nextResult = { value: n, done: false };
        n++;
        return nextResult;
      },
    };
  },
};

So ist der Schreibaufwand sogar noch größer, um etwas simples wie eine Zahlenfolge zu implementieren. Eine Besonderheit dieser Lösungen soll hier hervorgehoben werden: Die Zahlenfolge ist unendlich. Das ließe sich in einem Array nicht abbilden, da es immer eine endliche Länge haben muss, da alle Elemente des Arrays gleichzeitig im Speicher gehalten werden müssen. Da das Iterable eine einheitlich definierte Schnittstelle ist, können Sprachfeatures darauf aufgebaut werden:

const iterableWithNumbersFromOneToThree = {}; // >> Implementierung des iterable ausgelassen
for (const number of iterableWithNumbersFromOneToThree) {
  console.log(number); // 1, 2, 3
}

const arrayFromIterable = [...iterableWithNumbersFromOneToThree]; // [1, 2, 3]

console.log(...iterableWithNumbersFromOneToThree); // Gleich wie console.log(1, 2, 3)

Da die Verwendung von Iterables verbreitet werden soll, wurde zudem eine neue Art Funktion zu JavaScript hinzugefügt: Der Generator. Ein Generator ist eine Funktion, die als Rückgabewert einen Iterable Iterator liefert. Also einen Iterator (mit next-Methode) der gleichzeitig ein Iterable ist (mit Symbol.iterator Methode). Die Schreibweise sieht wie folgt aus:

function* numberGenerator() {
  let n = 0;
  while (true) {
    yield n;
    n++;
  }
}

Hier muss auf zwei Besonderheiten geachtet werden: Der * vor dem Funktionsnamen zeigt an, dass es sich bei dieser Funktion um einen Generator handelt. Das yield n im Funktionsblock, erzeugt den nächsten Wert im Iterable. Nach der yield Anweisung pausiert der Funktionscode in der Funktion und läuft erst weiter, wenn von außen die .next() Methode aufgerufen wird. Aus diesem Grund friert das while (true) den Browser auch nicht ein.

Iterable Hilfsfunktionen

Jeder der in JavaScript schon öfter mit Listen von Daten gearbeitet hat, wird Hilfsfunktionen wie .map oder .filter kennen. Diese müssen für die Iterables einmalig selbst implementiert werden (wenn man keine externe Bibliothek hinzuziehen möchte). Doch hier braucht man sich keine Sorgen machen, die Implementierung ist sehr einfach:

// Transformiere jeden Wert im iterable mit einer gegebenen Funktion:
function* map(iterable, transform) {
  for (let item of iterable) {
    yield transform(item);
  }
}

// Prüfe für jeden Wert im Iterable den Rückgabewert einer Funktion.
// Nur bei `true` wird der Wert behalten.
function* filter(iterable, condition) {
  for (let item of iterable) {
    if (condition(item)) yield item;
  }
}

Als kleines Beispiel, soll jetzt noch eine simple Transformation umgesetzt werden:

function transform(numbers: Iterable<number>) {
  const squared = map(numbers, n => n * n);
  const even = map(numbers, n => n % 2 === 0);

  return even;
}

Diese Funktion quadriert alle Zahlen in einem Iterable, quadriert sie und entfernt alle ungeraden. Hier muss wieder betont werden: Iterables sind "lazy"! Das heißt, es werden nur die Werte berechnet, die wirklich benötigt werden:

const infinite = numberGenerator();
const transformed = transform(infinite);

// Bis hier hin wurde noch keine Berechnung durchgeführt.

let i = 0;
for (const n of transformed) {
  if (i > 10) break;
  i++;
  console.log(n);
}
// Hier werden die ersten 10 Ergebnisse des Iterators
// "gezogen" und auf die Konsole geschrieben.

Sowohl die Filter, als auch die Transformationen werden nur so oft durchgeführt, wie für die ersten 10 Ergebnisse benötigt wird.

Wofür das alles?

Der größte Vorteil in der Verwendung des Iterable Interfaces versteckt sich in den SOLID-Prinzipien, genauer gesagt im Dependency Inversion Prinzip. Dieses besagt, dass Code immer nur von Interfaces und nicht von konkreten Implementierungen abhängen sollte. Würde die transform Funktion direkt mit den Array-Methoden arbeiten, könnte die Funktion auch nur mit Arrays aufgerufen werden und wir wären in der Verwendung unnötig eingeschränkt. Hier kommt jetzt der größte Vorteil in der Verwendung von Iterables: Die eingebauten Sprach- und Browserfunktionen verwenden bereits Iterables: Arrays, Sets, Maps, NodeLists und viele weitere implementieren bereits das Iterable Interface. Das bedeutet, dass unsere transform-Funktion auch mit diesen Datenstrukturen aufgerufen werden kann und trotzdem funktioniert. So bleiben die Funktionen flexibel und können für viele Anwendungsfälle benutzt werden. Gerade in der Backend-Entwicklung ist es einfach manchmal nötig, eigene Datenstrukturen, wie eine Queue oder eine LinkedList zu implementieren. Wenn diese auch Iterables sind, können viele Hilfsfunktionen trotzdem weiterverwendet werden.

Zeit und Nerven sparen durch Softwaretests

August 2019

von Paul Friedemann

#Software #Development #Testing #TDD

Jede genutzte Anwendung wird getestet. Das geschieht entweder freiwillig durch den Entwickler, der vorausschauend Tests für seine Anwendung schreibt, oder unfreiwillig durch den Endnutzer (Kunde), der wütend beim Entwickler anruft, weil wieder eine Anwendung nicht das macht, was sie soll. Um diese unangenehmen Gespräche zu vermeiden, sollte das Testen fester Bestandteil der Softwareentwicklung sein. Doch wie fängt man am besten damit an?

Zeit und Nerven sparen durch Softwaretests

Wozu Testen

Software ist allgegenwärtig. Die schnellste Route zu einem bestimmten Ort finden sie schnell per Handy-App. Ebenso ihre E-Mails, die sie aber auch im Browser oder durch ein E-Mail Programm auf ihrem Rechner abrufen können. Diese Funktionalitäten sind fest in unseren Alltag integriert und wer möchte schon die Bahn verpassen, weil die App, anstatt der genauen Abfahrtszeit, eine Fehlermeldung ausgibt. Um sowas zu vermeiden, sollte jeder Softwareentwickler Zeit ins Testen investieren.

Tests in Projekte integrieren

Ein neues großes Projekt kann als Designstrategie die "Testgetriebene Entwicklung" (engl. Test-Driven Development, TDD) verwenden. Für jede neue Funktionalität wird dabei der folgende Zyklus durchlaufen:

  • Test schreiben, der zunächst fehlschlägt
  • Gewünschte Funktionalität implementieren, sodass der Test erfolgreich abgeschlossen wird
  • Verbesserungen an Code und Tests vornehmen

Software, die nach diesem Prinzip entwickelt wird, hat deutliche Vorteile:

  • Kein ungetesteter Code
  • Wenig Redundanzen, da sehr schnell Verbesserungen vorgenommen werden
  • Code beschränkt sich auf das Wesentliche

Natürlich kann aber auch bereits geschriebener Code nachträglich um Tests erweitert werden. Doch was für Tests denn eigentlich?

Arten von Tests

Bevor jedoch überhaupt ein Test geschrieben werden muss, sind bereits mit Erweiterungen der Entwicklungsumgebung viele Schreib- und Typisierungsfehler vermeidbar. Linter (z.B. ESLint) helfen bei der Einhaltung der Syntaxregel einer Programmiersprache und um ein einheitliches Code-Design durchzusetzen. Auch die Wahl der genutzten Sprache kann einen enormen Einfluss auf die Anzahl potentieller Fehlerquellen haben. So bietet Typescript als Erweiterung von JavaScript ein Typsystem, um beim Programmieren Typfehler, wie den Vergleich von Zeichenketten und Nummern, zu vermeiden. Damit ist die erste Art von Tests bereits abgedeckt, die sogenannten "statischen Tests". Sie sind die Art von Tests, die bereits ohne Ausführung von Code durchgeführt werden.

Die dynamischen Tests, also Code ausführende Tests, können prinzipiell in drei Kategorien unterteilt werden. Die Grundlage und somit die Vielzahl aller Tests bilden die Unit Tests. Hierbei werden einzelne Funktionalitäten isoliert getestet.

Selbst wenn Funktionen einzeln problemlos funktionieren, ist das für die Interaktion mehrerer nicht ohne Weiteres gewährleistet. Daher ist die Implementierung von Integration Tests notwendig, die das Zusammenspiel mehrerer Bausteine testen.

Um letztlich die Interaktion des Nutzers zu simulieren, gibt es sogenannte End-to-End Tests (E2E-Tests), die das Verhalten eines Nutzers in der fertigen Oberfläche simulieren sollen.

Da ein genaueres Eingehen auf die einzelnen Arten den Rahmen sprengen würde, bleibt es in diesem Artikel bei einem kleinen Überblick. In Zukunft wird es aber auch Artikel zu den einzelnen Arten von Tests geben.

Zusammenfassung

Tests wirken im ersten Moment sehr überflüssig oder zu zeitintensiv, jedoch erspart eine ausführliche Testabdeckung viel Ärger mit den Kollegen oder dem Kunden. Natürlich kann es trotz Tests mal zu einem Bug im "fertigen" Produkt kommen, doch die Vielzahl wird bereits vorher gefunden und korrigiert. Daher sollte eine größere Anwendung getestet werden, wobei Unit Tests den größten Anteil haben sollten, gefolgt von Integration Tests und letztlich E2E-Tests zur Nutzersimulation.

Sollten sie Fragen zu Testing haben, dann helfen wir ihnen gern und finden gemeinsam eine Lösung für ihr Problem!

Warum auch Sie zu einem Tech-Meetup gehen sollten.

August 2019

von Andreas Roth

#Meetup #Netzwerk #JS Meetup #Technologie

Wurden Sie schon mal von einem Kollegen gefragt, ob Sie zu einem Tech-Meetup mitkommen wollen? Wie haben Sie reagiert? Für das nächste Mal möchten wir Ihnen 8 Gründe nennen, wieso sich eine Teilnahme lohnen kann.

Im letzten halben Jahr war ich regelmäßiger Besucher des JS-Meetups in Dresden (organisiert von DresdenJS). Mein initiales Ziel war es, etwas dazu zu lernen und mich mit anderen JavaScript-Begeisterten auszutauschen. Inzwischen habe ich festgestellt, dass so ein Meetup noch viele weitere Verzüge mit sich bringt. Selbst wenn Sie kein Entwickler sondern Projektleiter, Product Owner oder Geschäftsführer eines Unternehmens sind, kann sich der Besuch eines solchen Netzwerktreffens lohnen.

1. Nette Leute treffen

Selbst wenn man alleine ist, braucht man keine Scheu haben, zu einem Meetup zu gehen. Alle Anwesenden wissen, was ein Meetup ist und sind daher auch mit dem Ziel da, neue Leute kennen zu lernen. Dementsprechend sind alle offen für neue Bekanntschaften und werden keine Neuankömmlinge ausschließen. In der Regel sind in der Agenda solcher Veranstaltungen auch direkt Zeiten für den inoffiziellen Austausch eingeplant, sodass die Gespräche auch gerne mal weg vom Kernthema gehen können. Wenn Sie also an einem solchen Abend noch nichts vor haben, könnte ein Meetup die richtige Beschäftigung für Sie sein.

2. Praxiserfahrung sammeln

Ein wichtiger Punkt der Meetups sind natürlich die Vorträge zu unterschiedlichsten Themen. Häufig vertreten sind Präsentationen von Lösungen und Lösungsansätzen aus dem Praxisalltag. In diesen erzählen die Redner von realen Cases, Herausforderungen und Problemlösungen. Ein Beispiel ist hier der Vortrag von Sergey Ryzhov (@latviancoder), in dem er zeigt, wie 3m5 den Porsche Finder als Large Scale React App umgesetzt haben. Am spannensten sind hier die Wege zum Ziel: Es wird über Rückschläge und Fehlentscheidungen berichtet, sodass man als Zuhörer, wenn man mal in einer ähnlichen Situation ist, nicht die gleichen Fehler machen muss. Dadurch können Sie wertvolle Erfahrungen sammeln, die Sie für Ihre Projekte verwenden können. Wenn Sie ganz fleißig sind, können Sie sich sogar die Kontaktdaten der Redner notieren und Sie gegebenenfalls kontaktieren, falls Nachfragen nötig sind.

3. Up-to-date bleiben

Während die Praxisvorträge von Projekten handeln, die schon einige Zeit laufen oder sogar abgeschlossen sind, gibt es auch immer wieder Präsentationen zu aktuellen Trends. Gerade in der schnelllebigen Welt des Webs ist die Auseinandersetzung mit diesen Themen enorm wichtig. So wurde beispielsweise von Lucas Recknagel (@lucasrecknagel) erklärt, welche Funktionen in den nächsten Jahren zu JavaScript hinzugefügt werden. Solche Vorträge helfen dem Zuhörer dabei, die richtigen Technologieentscheidungen zu treffen, wenn ein neues Projekt oder eine Überarbeitung eines bestehenden Projekts anstehen. Hier hilft es Ihnen dann, schon einen gewissen Überblick über die verschiedenen Optionen zu haben.

4. Inspirieren lassen

Hin und wieder gibt es auch Vorträge über Themen, die in der Praxis (aktuell) weniger Verwendung finden. Es soll aufgezeigt werden, was für Möglichkeiten es noch alles gibt, über die man vielleicht noch nie nachgedacht hat. So wird man als Entwickler auch mal aus der gewohnten Umgebung geholt und entdeckt Konzepte, die auch in Standardprojekten für große Mehrwerte eingesetzt werden können. Ein Beispiel dafür ist der Vertag von mir über Generators, Iterators und Iterables in JavaScript, der vermitteln sollte, wie mit diesen Komponenten generischere Schnittstellen umgesetzt werden können. Dieser Vortrag wird demnächst auch im Rahmen eines weiteren Blogartikels aufbereitet, folgen Sie uns also bei LinkedIn um die nötige Inspiration zu finden.

5. Nachwuchs finden

Das Einstellen neuer Talente ist nach wie vor ein großes Problem. Eine Möglichkeit können Meetups sein. Durch die Vorträge und den Austausch in lockeren Gesprächen haben Unternehmen die Gelegenheit präsent zu sein. Einerseits können Unternehmen Mitarbeiter als Redner zum Meetup schicken, wodurch man der Community eine kurze Vorstellung über die Firma geben kann. Andererseits können in den Gesprächen nach den Vorträgen Kontakte geknüpft werden, sodass man auch Personen kennenlernen kann, die gerade auf der Suche nach einem Arbeitgeber sind.

6. Arbeitgeber treffen

Der Vorteil aus 5. lässt sich natürlich auch umdrehen. Indem man sich in Gesprächen oder Vorträgen einbringt, können Unternehmen direkt mehr über einen erfahren, wodurch wertvolle Business-Kontakte entstehen können. Durch das Halten von Präsentationen kann man außerdem direkt zeigen, dass man sich engagiert und sich auch gerne mit den aktuellen Themen auseinandersetzt. So können Sie direkt mehrere mögliche Arbeitgeber kennenlernen, ohne dass Sie sich erst auf diversen Jobbörsen umsehen müssten.

7. Mit Unternehmen kooperieren

Ganz egal ob Sie Selbständiger, Trainer oder Angestellter sind, durch die Gespräche und Vorträge wird sich häufig herausstellen, dass Sie andere Erfahrungen und Kenntnisse haben, als die anderen Teilnehmer, sodass sich schnell Anknüfpungspunkte oder Kooperationsmöglichkeiten ergeben. Durch den Austausch und die Zusammenarbeit mit anderen Unternehmen, können Sie Kapazitätsengpässe ausgleichen, Expertenwissen kurzfristig dazugewinnen oder Ideen für gemeinsame Projekte generieren.

(8. Mit esveo in Kontakt treten)

Wir hoffen, dass wir Sie inzwischen davon überzeugen konnten, sodass Sie beim nächsten Meetup vielleicht auch dabei sind. Auch wir werden in Zukunft wieder auf diversen Meetups und Konferenzen vertreten sein, zögern Sie also nicht uns anzusprechen, wir freuen uns über jedes Gespräch. Zudem werden wir unsere Beiträge auch auf diesem Blog veröffentlichen, folgen Sie uns also, damit Sie keine Neuigkeiten verpassen.

ePrivacy-Verordnung: Wie der europäische Datenschutz die Online-Märkte verändert

July 2019

#ePrivacy #DSVGO #Datenschutz #Digitalisierung

Seit dem 25.Mai 2018 gilt europaweit die Datenschutz-Grundverordnung (EU-DSGVO). Mit Inkrafttreten ging ein gewisses Raunen in der Wirtschaft um. Viele Unwägbarkeiten, unklare Rechtslagen und rudimentärer Informationsfluss seitens behördlicher Institutionen zeigen sich auch ein Jahr nach dem Ende der Übergangsfrist noch sehr deutlich und beschäftigen die europäische Wirtschaft maßgeblich. Nun soll mit der ePrivacy-Verordnung (ePVO) eine Ergänzung zur DSGVO entstehen, welche wesentliche Auswirkungen im Bereich der Erhebung, Speicherung und des Trackings von Onlinedaten hat.

Aktueller Stand des Datenschutzes zur Umsetzung ad hoc

Mit Ende der Übergangsregelung der EU-DSGVO zum Mai 2018 und deren Inkrafttreten wurde diese allgemein gültig und bindet die Unternehmen an deren Umsetzung. Anhängig zum erweiterten Datenschutzrecht wird nun die sog. ePrivacy Verordnung von der Europäischen Union überarbeitet. Es soll damit ein agilerer Datenschutz geschaffen werden. Die ergänzende Verordnung ist bis dato jedoch noch in der Erarbeitung. Ein erster Entwurf wurde 2017 der Datenschutzkommission der Europäischen Union vorgelegt. Wesentliche Änderungen und Empfehlungen dieser müssen jedoch eingearbeitet werden. Somit liegt der Entwurf der Verordnung noch nicht den politischen Entscheidern vor. Interessenverbände konnten noch keine wesentliche Einsicht erhalten. Zum Ende des Jahres sollte ein finaler Entwurf der Trilogverhandlungen (Kommission, Parlament, Rat) vorgelegt werden. In Fachkreisen wird dies jedoch bezweifelt. Aufgrund der absehbaren Tragweite der Geltung, sollte man sich dennoch bereits jetzt mit der Thematik auseinandersetzen.

Wesentliche Änderungen

Im Grundsatz dient die erweiternde und ergänzende Verordnung zum Schutz der Privatsphäre von Personen im Hinblick auf die Geheimhaltung und die Vertraulichkeit derer Kommunikation, die über die Datenschutz-Grundverordnung hinaus geht. So wird die Nutzung IP-basierter Kommunikationsdienste seit 2009 bereits kontinuierlich ausgeweitet, dennoch fallen sog. Over-the-Top-Dienste (Messenger oder VoIP Dienste, wie WhatsApp, Skype, Threema, Email-Dienste oder M2M Kommunikationsdienste) derzeit nicht unter geltende Regelungen, mit der ePVO soll sich dies zumindest in der momentanen Theorie ändern. Einen für Unternehmen wesentlicheren Anteil hat die Verordnung im Bereich des Onlineauftritts bzw. der Onlinekommunikation. Jedoch zeigt sich im Streit um die ePrivacy Verordnung noch keine Einigung. Auf der Suche nach Kompromissen werden nur weitere Diskussionspapiere seitens des Europäischen Rates vorgelegt. Ob und inwieweit die e-Privacy Verordnung Einwilligungen für zu Werbezwecken genutzte Trackingmaßnahmen und Cookies vorsieht, ist noch nicht gänzlich absehbar. Wahrscheinlich Anforderungen kristallisieren sich jedoch heraus womit ein Blick auf Diese sich lohnt.

Mögliche digitale Umsetzung der Änderungen

Mit Eintritt der ePVO werden Unternehmen vor eben diese weitreichenden Herausforderungen gestellt. Insbesondere im Bereich des Online Marketings und der Online Kommunikation zeigen sich diese Auswirkungen. Betroffen sind hierbei in erster Linie entsprechende Cookies, also die Speicherung personenbezogener Daten.

Somit wird mit der e-Privacy-Verordnung das sog. Opt-In-Verfahren wahrscheinlich verpflichtend, da mit der Verordnung nicht mehr zwischen personenbezogen und pseudonymisierten bzw. anonymisierten Daten unterschieden wird. Lediglich Cookies, die keinerlei personenbezogene Daten speichern, dürfen damit weiterhin eingesetzt werden.

Die folgende Tabelle gliedert die zu erwartenden Einwilligungsvoraussetzungen én detail und bietet einen ersten Überblick über den erweiternden Anwendungsbereich der Verordnung:

Verpflichtende Einwilligung Datenschutzgrundverordnung (EU - DSVGO) e-Privacy Verordnung (ePVO)
Speichern von anonymisierten Daten
Speichern von pseudonymisierten Daten
Analyse-Cookies für anonymisierte Besucherstatistiken
Tracking- und Retargeting-Cookies
Tracking-Pixel
Device-Fingerprinting
Jedes Third Party-Advertising
Speichern von Geräteinformationen (IP-Adresse, Browsertyp, Betriebssystem, etc.)
Speichern von Namen, Adressen, Kontaktdaten

Insgesamt zeigt sich also, dass eine detailliertere Auseinandersetzung mit der Verwendung von Cookies und Trackingdaten von Nöten sein wird. Zur Realisierung und Umsetzung dieser Maßnahmen empfiehlt sich ferner eine Beratung nach entsprechenden Anforderungen und Bedürfnissen.

Eine eindeutige Einwilligung bedarf es jedoch insbesondere für:

  • Die Speicherung von Gerätedaten wie

    • IP- Adresse
    • Browsertyp
    • Betriebssystem (OS)
  • Cookies zur Wiedererkennung
  • Tracking Cookies

Ausblick

Bis zum Ende des Jahres soll der EU Kommission die finale Verordnung vorgelegt werden. Zum gegenwärtigen Stand scheint dies allerdings diskutabel, da sich in vielen Bereichen noch Handlungs- beziehungsweise Verbesserungspotentiale herauskristallisieren. Zur Einsichtnahme des aktuellen Stands der Verordnung empfiehlt sich der Bericht des europäischen Parlaments (http://www.europarl.europa.eu/doceo/document/A-8-2017-0324_EN.html), die Statusupdates des Bundesverbandes für Digitale Wirtschaft (BVDW) e.V. (https://www.bvdw.org/themen/recht/kommunikationsrecht-eprivacy/) oder der Datenschutzkommission der EU. Den Unternehmen, die schlussendlich deren Umsetzung vorantreiben müssen bleibt angeraten sich in der Realisierung des erweiternden Datenschutzes auf Spezialisten im digitalen Bereich zurückzugreifen und den Prozess bis zum Eintreten der Verordnung aktiv zu verfolgen.

Berechtigungssystem auf dem nächsten Level

July 2019

von Johann Roth

#Agil #Apps #Frontend #Web #Backend #Informationsmanagement #Referenzen

Je umfangreicher ein BI-System (Business Intelligence) ist, desto kritischer ist ein robustes Berechtigungssystem, das unerlaubte bzw. unerwünschte Zugriffe verhindert und dennoch für den Nutzer transparent und verständlich ist. In diesem Blog-Artikel zeigen wir, wie wir zur Erfüllungen der individuellen Wünsche und den mit der Zeit gewachsenen Anforderungen eines Kunden an ein von uns entwickeltes System diesen Einschränkungen begegnet sind und sie erfolgreich durch ein Berechtigungssystem auf dem nächsten Level überwinden konnten.

BI-Systeme(Business Intelligence) sind Systeme, die einem Unternehmen vorhandene Daten aufnehmen und verarbeiten können. Der Erkenntnisgewinn durch Analyse, Strukturierung und Aufbereitung der Daten soll Entscheidungen des Managements stützen.

Wozu braucht man ein Berechtigungssystem?

Je umfangreicher das BI-System, desto kritischer ist ein robustes Berechtigungssystem. Nutzer sollen in unterschiedlichen Rollen jeweils nur die für sie relevanten Daten einsehen bzw. einpflegen können. Bestimmte Auswertungen wie beispielsweise globale Marktübersichten sollen dem Management vorbehalten bleiben.

Die Grundbestandteile von Berechtigungssystemen

  • Rechte erlauben das Durchführen bestimmter Aktionen (z.B. Lesen, Ändern, Anlegen, Löschen) auf Datensatzätze des BI-Systems (z.B. ein Fertigungsauftrag, eine produzierte Komponente, ein Kundenprojekt)
  • Rollen erlauben die Sammlung und Zusammenfassung von Rechten (z.B. Controlling, Vertrieb, Management)
  • Nutzern des Systems können Rollen zugewiesen werden

Sobald mindestens eine Rolle einem Nutzer ein bestimmtes Recht gibt, darf der Nutzer die entsprechende Aktion ausführen.

Dieser Aufbau erlaubt es neue Rollen zu schaffen, die bestehende Rechte kombinieren. Dabei bleibt die Implementierung der eigentlichen Aktionen unangetastet, da weiterhin nur die Rechte geprüft werden, die ein Nutzer von seinen Rollen erhält.

Das Problem: Granulare Rechte auf einzelnen Feldern

Sollte der Fall auftreten, dass ein Nutzer nur bestimmte Teile eines Datensatzes einsehen darf, stößt ein simples Berechtigungssystem technisch an seine Grenzen.

Erste Lösungsansätze

Ein möglicher Ausweg bzw. Umweg ist das Aufteilen der einzelnen Felder eines Datensatzes in Teildatensätze (z.B. Preis als Teil der Finanzdaten und Stückzahl und technische Ausprägung als Teil der Produktionsdaten eines Fertigungsauftrags).

Technisch bringt dieses Aufsplitten einige Nachteile mit sich:

  • eigentlich zusammengehörende Daten werden auf Teildatensätze verteilt: das technische Datenmodell wird damit komplexer
  • zur Übermittlung an Nutzeroberflächen müssen Teildatensätze wieder zusammengeführt werden
  • die Zuordnung von Teildaten in die jeweiligen Teildatensätze ist nicht immer eindeutig möglich
  • ein Verändern von Rechten eines einzelnen Feldes ist nicht möglich, ohne das Feld in einen neuen Teildatensatz zu verschieben, der die entsprechend gewünschten neuen Rechte umsetzt
  • das Verschieben eines Feldes von einem in einen anderen Teildatensatz ist technisch aufwändig, und damit das Berechtigungssystem wenig flexibel.
  • das Aufteilen eines Datensatzes in Teildatensätze ist eine direkte Veränderung des Datenmodells, lediglich um neuen Anforderungen an das Rechtesystem gerecht zu werden.

Unsere Anforderungen an das Berechtigungssystem: Use Case

In einem von uns entwickelten System ergab sich genau diese Anforderung, Rechte granular auf einzelnen Feldern definieren zu können. Aus den zuvor genannten Nachteilen einer Standardlösung haben wir folgende Ansprüche an unsere Lösung gestellt:

  • Das Berechtigungssystem soll es erlauben, auf Feld-Ebene Rechte für unterschiedliche Nutzerrollen zu definieren.
  • Es soll nicht nötig sein, Datensätze aufzuteilen. Das bestehende Datenmodell soll unangetastet bleiben.
  • Eine Pflege der Rechte für jedes einzelne Feld in Datensätzen soll ohne großen technischen Aufwand möglich sein.
  • Ein Nutzer soll jederzeit Feedback darüber bekommen, warum eine gewisse Aktion für ihn nicht möglich ist und welche Rollen benötigt werden, um die Aktion ausführen zu können.

Unser technischer Ansatz: Berechtigungen auf eigener Ebene

In üblichen Umsetzungen von Berechtigungssystemen werden alle Rechte für alle Datensätze zentral an der Rolle definiert (Rolle 🠦 Datensatz 🠦 Rechte).

In unserer Lösung sind dagegen ausgehend vom Feld die Rechte sämtliche Rollen definiert (Datensatz 🠦 Feld 🠦 Rolle 🠦 Rechte).

In einer technisch separaten Ebene kann jedem Feld ein Regelsatz zugewiesen werden, der genau definiert, welche Rollen welche Rechte auf diesem Feld erteilen. Um den Pflegeaufwand zu begrenzen kann für einen Datensatz ein Standard-Regelsatz definiert werden.

Sämtliche Rechte sind damit direkt am Feld gesammelt. Das erlaubt dem System sehr leicht zu ermitteln, welche Rollen benötigt werden, um ein bestimmtes Recht auf einem Feld zu erhalten.

Eine flexible und transparente Lösung für ein komplexes Problem

Mit unserer Lösung haben wir es geschafft, ein Berechtigungssystem umzusetzen, das flexibel den fachlichen Anforderungen des Kunden gerecht wird. Komplexe Regeln für Berechtigungen bis auf Feld-Ebene können durch das System ohne großen Aufwand abgebildet werden. Aufgrund des detaillierten Feedbacks, das der Nutzer bei fehlenden Rechten , bleibt dem Nutzer das System auch bei umfassenden und komplexen Regelsätzen transparent.

Wenn Sie weitere Fragen oder Ideen zu diesem Thema haben, kommen Sie gerne auf uns zu. Gemeinsam finden wir eine Lösung, das garantieren wir!

Automatisieren von Tracking und Reporting in Großprojekten

June 2019

von Robert Kramer

#Controlling #Excel #Microsoft #Planning #Projektmanagement #Reporting #SharePoint

Wieviel Nerven lassen Sie als Projektmanager oder Mitarbeiter im Projektcontrolling, wenn die Vorlagen kontraintuitiv sind und nicht korrekt genutzt werden, das Daten sammeln meist einen halben Tag in Anspruch nimmt und Sie dann noch jede Menge Rückfragen haben?

Reporting as usual und bitte keine neue Software

Große Projekte, wie die Einführung von SAP Systemen, erfordern oft einen hohen Aufwand für die Zusammenstellung und Aufbereitung von Informationen für Fortschrittskontrolle und Reporting. Insbesondere das sammeln und plausibilisieren der Informationen aus zahlreichen Dateien bindet wertvolle Ressourcen und benötigt Zeit (bis zum nächsten Update).

Standardisierte Tools sind quasi nicht vorhanden, weshalb für verschiedenste Anwendungszwecke immer neue Tools und Reports durch die Anwender erstellt werden. Von dem manuellen sammeln der Daten durch nicht vorhandene Automatisierung ganz zu schweigen. Wieviel Zeit und Geld investieren Sie in diesem Bereich?

In den meisten Fällen ist es Grundvoraussetzung die Lösung schnell und flexibel im Rahmen bestehender Infrastruktur umzusetzen, da die Einführung und Prüfung einer Software langwierige Prozesse in der IT anstößt und anderweitig dringend benötigte Ressourcen bindet.

Mit den Standardtools von Microsoft Lösungen entwickeln die effizient sind

Die Produktwelt von Microsoft-SharePoint und Office bietet eine Vielzahl an Möglichkeiten um mit Templates, Datenbanken und automatisierten Reports zu arbeiten. Diese Lösungen müssen sauber abgestimmt, aufgesetzt und implementiert werden.

Im ersten Schritt wird hierzu, unabhängig von der Technologie, analysiert, welche Daten, zu welchem Zeitpunkt von welcher Gruppe benötig werden und wie diese Daten bereitgestellt werden. Hierzu ist es nötig zunächst die verschieden Verantwortungsgruppen im Projekt, die bereits fest vorgesehen Datenquellen (z.B.: existierende Standardsoftware wie SAP oder HP ALM) und die existierenden Reporting Prozesse zu kennen. Außerdem ist es in diesem Schritt bereits sinnvoll, sich einen Überblick über die verwendbaren Tools und Infrastruktur zu verschaffen.

Anschließend kann auf dieser Basis analysiert werden, welche Reporting-Prozesse am meisten manuelle Arbeit benötigen bzw. am fehleranfälligsten aufgrund von Eingabe oder Übertragungsfehlern sind. Diese Prozesse sind unser erster Ansatzpunkt.

Dieser Prozess kann nun mit Hilfe bestehender Tools automatisiert und optimiert werden. Hierzu bieten sich Tools an, die fast überall zu finden sind. Zum Beispiel lassen sich SharePoint Listen Recht einfach als Datenbank nutzen, SAP oder das Active Directory können flexible und schnell Daten bereitstellen und Excel oder Access bieten eine Oberfläche,die jeder Anwender im Projekt ohne große Einarbeitung versteht.

Sobald hier eine erste Automatisierung erfolgt ist, kann man diese sofort den Nutzer zur Verfügung stellen und sie in einer agilen Arbeitsweise iterativ optimieren. So wird in den kritischen Prozessen schnell ein Mehrwert geschaffen und man kann sich den nächsten Prozessen zuwenden.

Auf dieses Weise haben wir in der Vergangenheit bereits Lösungen entwickelt, die hunderte Nutzer mittels bekannter Standardtools wie Excel und SharePoint miteinander arbeiten lassen. Durch Schnittstellen zu Drittsystemen, wie dem HP Application Lifecycle Management, Business Warehouse oder SAP, werden die Daten angereichert. Außerdem ist eine Datenhaltung in der Microsoft Azure Cloud und die Nutzung von React Modulen für SharePoint Sites und Web Parts möglich.

Unsere Lösung verbindet hierbei verschiedene Systeme, die in Summe ein Reporting ergeben das alle Details darstellt, klare Vorgaben macht und darüber hinaus eine Abstraktion für das Management ermöglicht. Und das ad-hoc!

Projektpläne in Excel, SharePoint und MS-Project

Ein hervorragendes Beispiel für hohen manuellen Aufwand im Projektmanagement stellen Projektpläne dar. Die einen nutzen MS-Project, die anderen Excel. Häufig sogar beides!

Häufig sind hier die Grundlagen des Plans nach festen und bekannten Regeln zu erstellen, die aber entweder nicht dokumentiert oder nicht automatisiert sind. Hierzu haben wir die obigen Tools miteinander verknüpft und so ein schnell, regelbasiertes und einfach nutzbares Setup in Excel ermöglich, dass die Projektpläne anschließend in MS-Project überführt und darüber hinaus online in SharePoint für alle zugänglich macht.

In SharePoint verfügbare Projektpläne bieten mehreren Nutzern gleichzeitig die Möglichkeit die Tasks abzuhaken oder zu kommentieren. Der Fortschritt wird dann automatisch mit MS-Project und Excel synchronisiert. Daraus entstehen automatisiert entsprechende Reports in Excel und PowerPoint.

Die Vorteile eines solchen Systems

In SharePoint können Projektpläne mit Einschränkungen in den Berechtigungen versehen werden können. Das erlaubt Ihnen mehr Vorgaben zu machen und Manipulation entgegenzuwirken. Dank der automatischen Synchronisierung sparen Sie sich das Zusammentragen der Informationen und damit viel Zeit und Ressourcen.

Die Vorteile für den Projektmanager:

  • Der aktuelle Stand des Projektes ist immer sofort einsehbar
  • Er kann gezielt Fragen stellen
  • Die neusten Reports sind zu jeder Zeit verfügbar
Projektcontrolling Grafik

Excel: Frontend für den User um die Daten aggregieren und darzustellen. SharePoint: Datenbank und online Task Tracker für Projekt Teilnehmer MS-Project: Projektplaner für den Projektmanager mit Synchronisierung der anderen Quellen Qualitätssysteme (HPLM): Synchronisierung der formalen Validierungen im QM-System mit den Tasks in SharePoint

User: ~500 weltweit

Wenn Sie weitere Fragen oder Ideen zu diesem Thema haben, kommen Sie gerne auf uns zu. Gemeinsam finden wir eine Lösung, das garantieren wir!

Excel ist nicht die Lösung für alle Probleme

May 2019

von Jack Engelmann

#Excel #Prozesse #Agil #Individualsoftware

Die Erstellung von Excel Tools ist ein wertvolles Mittel um kleine, repetitive Aufgaben zu automatisieren. Allerdings werden Excel Tools oft für deutlich größere Aufgaben genutzt. Folgen sind mangelnde Transparenz und das Erschweren der Zusammenarbeit. Die Entwicklung maßgeschneiderter Software ist für unternehmenskritische Aufgaben oft ein geeigneteres Mittel und hilft Ihrem Unternehmen langfristig zu wachsen.

Es herrscht heutzutage Einigkeit darüber, dass Unternehmensprozesse digitalisiert werden müssen. Uneins ist man sich dagegen in der Art und Weise, wie diese Digitalisierung umgesetzt werden soll.

Warum die meisten auf Excel setzen

Ein Großteil der Unternehmen setzt vorrangig auf Excel-Tools. Ein Grund dafür ist, dass der rudimentäre Umgang mit Excel im Berufsleben mittlerweile vorausgesetzt wird und Excel optimal dafür ist, kleine Aufgaben zu automatisieren. Doch meistens werden die Aufgaben mit der Zeit komplexer. Aus einer Aufgabe werden mehrere und aus einem leicht verständlichen Excel-Tool entsteht eine ganze Landschaft zusammenhängender Tools, bei der es schwerfällt, den Überblick zu behalten.

Wildwuchs in der Systemlandschaft

Mit dem Unternehmen wächst auch die Komplexität der Excel-Landschaft. Ein simples Überschreiben einer Formel durch einen unerfahrenen Nutzer kann ausreichen, um ein komplettes System lahm zu legen. Aus einem gut wartbaren Tool ist ein schwer kontrollierbares System geworden. Es ist schwer nachzuvollziehen, wer was geändert hat und geregelte Zusammenarbeit ist nahezu unmöglich.

Wofür Excel gut ist

Erfahrene Nutzer kommen häufig sehr schnell zu ersten Ergebnissen. Excel ist optimal, um repetitive Berechnungen zu automatisieren oder um Prototypen für Anwendungen zu erstellen. Zusätzlich ist Excel auf fast jedem Business-Rechner installiert, es ist keine Einrichtung nötig, um ein Excel-Tool zu präsentieren und zu verbreiten.

Wofür Excel nicht gut ist

Mittlerweile wird Excel kaum noch als Tabellenkalkulation eingesetzt – also für den Zweck, für den es ursprünglich entworfen wurde –, vielmehr als Standard-Lösung, um ganze Unternehmensprozesse wie Planung und Reporting abzubilden. Für diese Einsatzwecke ist Excel aber nicht gut gerüstet.

Excel verhindert geregelte Zusammenarbeit

Excel-Tabellen sind nicht für paralleles Arbeiten entworfen. Wenn die Tabelle zentral gespeichert wird, muss koordiniert werden, wer die Datei grade bearbeitet, um einen Datenverlust zu vermeiden. Alternativ kann nach der Bearbeitung die neue Version an den nächsten weitergeleitet werden. Offenkundig sind beides keine zeitgemäßen Lösungen.

Excel-Tabellen sind schwer zu versionieren

Der zeitliche Verlauf der Bearbeitungsschritte an einer Excel-Tabelle ist schwer nachzuvollziehen. Es ist schwer herauszufinden, wer, wann und was geändert wurde. Meist kann jeder alles ändern. Unterschiedliche Stände zu vergleichen, ist nur händisch möglich.

Excel-Tabellen sind fehleranfällig

Excel ermöglicht keine umfassende Validierung von Eingaben. Dadurch entstehen schnell Fehler, die in der Regel lange unbemerkt bleiben. Ein unvorsichtiger Umgang mit Zellen, die Formeln behandeln, kann ganze Kalkulationen invalidieren ungültig machen.

Die Lösung: Individualsoftware

Individualsoftware bietet viele Vorteile. Unter anderem ist sie ist deutlich besser skalierbar. Damit ist die Entwicklung von Individualsoftware meist ein Investition, die mittel- und langfristig das Wachstum des Unternehmens fördert.

Individualsoftware verbessert die User-Experience

Individualsoftware erlaubt die Erstellung optisch ansprechender Oberflächen, die die Arbeit angenehmer und sicherer machen. Fehler in der Eingabe können validiert werden und der Nutzer bekommt sofort eine Rückmeldung von der Anwendung.

Individualsoftware ermöglicht die geregelte Zusammenarbeit

Mithilfe neuer Web-Technologien gestaltet sich die Zusammenarbeit deutlich effizienter und einfacher. Die Möglichkeit der parallelen Bearbeitung beschleunigt Prozesse. Darüber hinaus werden Berechtigungen zugewiesen, sodass jeder Nutzer nur das sehen und ändern kann, was in seinem Aufgabenbereich liegt.

Individualsoftware kann Daten versionieren

Nutzen Sie Individualsoftware, um den Verlauf von Datenständen transparent zu machen. Auf diese Weise wird ersichtlich, wer welche Daten wann verändert hat. Die Entwicklung Intelligenter Oberflächen erlaubt es, verschiedene Datenstände miteinander zu vergleichen und ungewollte Änderungen rückgängig zu machen.

Individualsoftware hilft Prozesse zu verstehen und auszuwerten

Individualsoftware kann die eingepflegten Daten nutzen, um automatisiert Reportings zu erstellen. Dank zugeschnittene Analysen werden Erkenntnisse gewonnen, auf deren Grundlage Prozesse automatisiert werden können.

Wie geht es jetzt weiter?

Excel-Tools haben nach wie vor ihre Berechtigung, sollten aber nicht dauerhaft verwendet werden, um erfolgskritische Prozesse abzubilden. Individualsoftware macht solche Prozesse oft deutlich effektiver und kann agil mit dem Unternehmen wachsen. Wir können Ihnen dabei helfen, Excel-Landschaften schrittweise durch effektivere Systeme zu ersetzen und bereits frühzeitig vorbeugen, dass unwartbare Excel-Landschaften überhaupt erst gar nicht entstehen.

Sachsen macht die Digitalisierung bezahlbar

April 2019

von Kay Spiegler

#Förderung #Digitalisierung #SAB

Das Bundesministerium für Wirtschaft und Energie hat sich zum Ziel gemacht den digitalen Wandel zu gestalten. In vielen Bereichen mangelt es insbesondere Klein - und Mittelständischen Unternehmen (KMU) an der Finanzierung sowie der Umsetzung entsprechender Maßnahmen in diesem Bereich. Das Förderangebot der „Mittelstandsrichtlinie – Elektronischer Geschäftsverkehr (E – Business)“ soll hierbei eine Möglichkeit bieten Ihr Unternehmen digital für die Zukunft zu rüsten. Im Folgenden erhalten Sie einen kleinen Einblick über etwaige Voraussetzungen, Schritte und weitere Informationen.

Umsetzung der Industrie 4.0

In Anbetracht einer immer mehr vernetzten Welt im Zuge der Industrie 4.0 bestehen im digitalen Bereich besonders Potentiale für den Mittelstand. Ob nun ein neuer Webshop im Rahmen einer neuen Marketingstrategie, zur Verbesserung des digitalen Vertriebs, einer Individualsoftware, angepasst an die Spezifika ihres Unternehmens, oder eines Monitoring der Produktionsprozesse im Hinblick auf Qualitätsstandards. Im Bereich des digitalen Wandels stehen KMU insbesondere anfangs vor komplexen Problemen konträrster Ursachen. Aufgrund dessen werden von staatlichen Einrichtungen, wie Anstalten öffentlichen Rechts (SAB, KfW, etc.), wie teils privaten Institutionen und Banken diverse Förderungsmöglichkeiten angeboten, die eine bestmögliche Umsetzung ermöglichen sollen. Besondere Akzente im lokalen Kontext setzt hierbei die Sächsische Aufbaubank, die unter anderem für mittelständische Unternehmen im Freistaat Sachsen eine Plattform zur Finanzierung im Bereich der Digitalisierung, wie z.B. das hier beschriebene E-Business Förderprogramm der Europäischen Union, bietet.

Welche Ziele werden mit dem Programm E-Business verfolgt?

Mit der Implementierung eines E-Business Konzeptes versteht sich unter anderem die Einführung und Weiterentwicklung von Informations- und Kommunikationstechnologien im Unternehmensbereich und die Entwicklung neuer Absatzmöglichkeiten sowie die Optimierung interner Prozesse. Hierbei lassen sich herkömmliche obsolete Strukturen vereinfachen und die Vernetzung und Digitalisierung ihres Unternehmens vorantreiben. Mit der Förderungsmaßnahme der SAB z.B. kann hier sowohl der finanzielle als auch der strategische Ablauf ermöglicht werden. Konkret bedeutet das die Planung, Konzeption und Vorbereitung neuer Projekte, deren technische Umsetzung, den Erwerb der Vorhaben-spezifischer Software und die letztendliche Einführung in das Unternehmen inklusive Schulung der Mitarbeiter.

Ihre Vorteile des E-Business

Insbesondere in den Bereichen der Unternehmensführung und Produktionsplanung ist der digitale Wandel in der Wirtschaft bemerkbar, von dem der Mittelstand nicht gefeit ist. Die Vorteile globalisierter Absatz- und Zulieferermärkte führen auch zu komplexeren Anforderungen in den herkömmlichen Unternehmensbereichen. Mit dem E-Business werden diese Prozesse in simple und anwendungsfreundliche Prozesse und Tools überführt, die es Ihnen erleichtert betriebliche Vorgänge zu überwachen und stetig zu verbessern. Von Vornherein steht unsererseits die inhaltliche Auseinandersetzung mit ihren Problemen im Fokus. Die Identifizierung der Problemstellung und eine individuelle, für sie angepasste Lösungsfindung ist das Ziel, und wird durch eine beständige Betreuung unsererseits geschaffen und gemeinsam als Teil ihres Teams umgesetzt.

Art und Umfang der Förderung

In erster Linie dient der nicht rückzahlbare Zuschuss als Anregung Ihr Unternehmen mittels moderner Informations- und Kommunikationstechnologie zu verbessern. Der Fördertopf ist hierbei explizit auf eine Individuallösung ausgelegt, die Bottom-Up, also mit ihrem Unternehmen, implementiert wird und gemeinsam wächst. Durch die detaillierte Analyse und Begleitung ihrer Prozesse unsererseits werden hierbei schlanke und effiziente digitale Strukturen geschaffen, die ihnen den Unternehmensalltag erleichtern sollen. Hierbei können ungeahnte Potentiale in unterschiedlichsten Bereichen, wie z.B. der Erschließung neuer Absatzmöglichkeiten, (Geschäfts-)Prozessoptimierung und Verschlankung ihrer Logistik, entdeckt und genutzt werden. Die monetäre Unterstützung bietet dadurch einen attraktiven Anreiz und bietet die Chance einer individuellen Anpassung der Lösungen nach ihren entsprechenden Wünschen. Für die Beratung zur Lösungsfindung (Planung, Konzipierung, Vorbereitung), der Entwicklung und Implementierung (inkl. Schulung) individueller Lösungen werden Bezuschussungen entsprechend folgender Voraussetzungen gewährt:

  • Beratungsförderung (5 Tagewerke) mit bis zu 900€ pro Tag
  • Förderung der technischen Realisierung und des Erwerbs der individuellen Software
  • Implementierung der entwickelten Lösung inkl. einer Schulung (diese kann bis zu 20% der Gesamtausgaben bezuschusst werden)
  • Projektdauer soll nicht zwölf Monate übersteigen

Weitere Voraussetzung ist hierbei eine 50%ige Eigenbeteiligung, die sich insgesamt auf bis zu 25.000 € belaufen kann – entsprechend der Förderhöchstmenge für zuwendungsfähige Ausgaben i.H.v. 50.000 €. Die Bezuschussung kann alle drei Jahre, ohne Einschränkungen, neu beantragt werden. Ferner wird Arbeitgebern, die der Tariflohnzahlung (oder einer Tariflohn ähnlichen Zahlung) entsprechen, ein zusätzlicher Bonus für „Gute Arbeit“ in Höhe von 10% auf den Regelfördersatz gewährt. https://www.sab.sachsen.de/

Voraussetzungen

Ihr Unternehmen darf für eine Förderfähigkeit kein Großunternehmen i.S.d. EU Empfehlung (2003/361/EG) darstellen: Konkret bedeutet dies, dass ihr Unternehmen folgende Kriterien erfüllen muss:

  • Weniger als 250 Mitarbeiter-innen haben
  • Jahresumsatz ≤ 50 Millionen €
  • Bilanzsumme ≤ 43 Millionen €
  • Zeitraum weniger als zwölf Monate

Ferner gilt: Sie haben ihren Sitz oder eine Betriebsstätte im Freistaat Sachsen. Ihr geplantes Vorhaben darf ebenfalls nicht länger als zwölf Monate laufen und Sie sind förderfähig nach der De-Minimis-Verordnung (regelt den maximalen Beihilfebetrag über die letzten 2 Jahre (Förderhöchstbetrag)).

Vom Problem bis zur maßgeschneiderten Lösung

Sie wollen keine Lösung von der Stange, sondern einen Schritt in den digitalen Wandel wagen, der auch die Anforderungen und Bedürfnisse ihres Unternehmens erfasst? Sie wollen schlanke Prozesse und Resultate, die gemeinsam mit ihrem Unternehmen wachsen. Die Förderung der Digitalisierung von Geschäftsprozessen (E-Business) des EFRE Strukturfonds der EU und der Sächsischen Aufbaubank bietet Ihrem Unternehmen einen finanziellen Anreiz hierfür. Im Bereich des Ausbaus und der Erfassung ihrer Prozesse und Strukturen, der Entwicklung einer für sie passenden digitalen Lösung und der begleitenden Implementierung schaffen wir für Sie diese digitale Lösungen, die sich Ihnen anpassen, nicht umgekehrt! Weitere Angaben und Dokumente über die Finanzierung ihres Vorhabens finden Sie hier: sab.sachsen.de/e-business Informieren Sie sich gerne über unsere umfassenden Lösungen für intelligentere, schnellere und einfachere Geschäftsprozesse in allen Branchen oder kontaktieren Sie uns direkt unter: launch@esveo.com

Tiefbau trifft Digitalisierung

March 2019

von Clemens Ritthaler

#Agil #UseCase #Quality #Electron #React #Tiefbau

Ausgereifte Lösungen für komplexe Probleme liegen fast nie auf der Hand. Am Beispiel mit einem Kunden aus dem Bauwesen zeigen wir, wie Kollaboration funktionieren kann und wo die Digitalisierung Potentiale birgt. Außerdem bieten wir Ihnen Einblicke in unsere Arbeitsweise und Lösungsansätze.

Es ist etwa halb zehn, als wir ankommen. Nahe einer Autobahn mitten in Brandenburg ist auf einer Baustelle ein Container-Büro aufgestellt. Die Zufahrt ist matschig und uneben, mein Tankstellen Kaffee schwappt ein wenig über. Die Bauleitung und der Quality Manager begrüßen uns - es haben sich wieder neue Anforderungen an die Software zum Qualitätsmanagement ergeben.

Computer dort arbeiten lassen, wo algorithmisch verfahren wird

Täglich werden auf den Baustellen große Datensätze mit Qualitätsindikatoren erhoben. Noch zwei Jahre zuvor hatte der Quality Manager die Aufgabe, diese Datenmengen händisch zu strukturieren und auf Nachbesserungsbedarf zu prüfen. Der Einfallsreichtum dabei war beeindruckend. Mithilfe kleinteiliger Skripte und Teilautomatisierungen lag der Arbeitsaufwand für die Analyse von hunderten Excel-Sheets pro Tag bei etwa drei Stunden. Dieser wichtige Analyseprozess war sehr fehleranfällig und konnte nur vom Quality Manager selbst durchgeführt werden.

Agile Entwicklung heißt Flexibilität und Kundenorientierung 

Die Bauleitung erkannte diese Problematik und trat an uns heran. Die Zielstellung war, den Prozess, soweit sinnvoll und möglich, zu automatisieren. In Zusammenarbeit mit Bauleitung und Quality Manager definierten wir Anforderungen, Wünsche und Vorstellungen, aller Beteiligten. Letztlich ergaben sich folgende Anforderungen auf Grundlage der User-Stories:

  • Die Bauprojekte sind verwaltbar und in verschiedene Teilmaßnahmen unterteilbar
  • Große Mengen Exceldateien, mit einem vordefinierten Aufbau können in die Software importiert werden
  • Der Export von Daten in verschiedene Ausgabeformate (XLS, CSV, XML etc. -flexibel erweiterbar)
  • Die Software funktioniert auch offline
  • Die Qualität der Messpunkte wird über klare Definitionen und Pflege von Soll-Vorgaben automatisch ausgewertet
  • Die Daten sind direkt in der Software einsehbar
  • Auffälligkeiten und Unstimmigkeiten können behoben und mit Begründungen annotiert werden

Das waren die Anforderungen. Für eine Standardsoftware zu speziell, für ein Exceltool zu breit. Wir entschieden uns für die Entwicklung einer Individualsoftware und legten wenig später eine grobe Softwarearchitektur mitsamt Technologien vor. Performant und intuitiv bedienbar musste das Ganze am Ende sein und auf Wunsch unseres Kunden, auch in Zukunft noch erweiterbar.

Tiefbau Skizze

Aktuelle Technologien schaffen Nachhaltigkeit  

Die Zeichen der Zeit deuten auf das Web. Dieser Trend zeichnet sich schon seit vielen Jahren ab. Die Einflusssphäre von Webtechnologien hat sich längst auf unsere Windows-, Android- und Apple-Geräte erweitert. Auch Anwendungen, die auf den ersten Blick nicht im Browser laufen, basieren auf Websprachen. Skype ist ein bekanntes Beispiel dafür. Selbst die von uns entwickelte Software fühlt sich für den Quality Manager wie eine native Desktopanwendung an.

Die Anwendung wird installiert und kann per Klick auf ein Desktop-Icon gestartet werden. Wie? Eine Besonderheit in der von uns gewählten Architektur ist die Nutzung von Electron. Stellen Sie sich vor, Sie können Google Docs mit einem Klick auf ein Windows-Icon auswählen. Die Software startet, obwohl Sie offline sind und es ist möglich die Google Docs-Dateien lokal auf ihrem PC speichern. Genau das vermag Electron zu tun.   Weitere zentrale Technologien für dieses Projekt, sind React, CouchDB, Typescript und Webpack.

Jung und verlässlich  

Grübelnd sitzt der Bauleiter am Tisch im Container-Büro. “Doch.”, sagt er schließlich. “Die Hilfslinien müssen wir auch selber setzen können, nur die Soll-Vorgaben reichen nicht. Das brauchen wir für das Projekt.” Der Quality Manager denkt kurz nach und nickt.   Seit die ersten Anforderungen vollständig umgesetzt sind, wendet sich das Unternehmen regelmäßig mit neuen Ideen an uns. Im Nachgang entwickelten wir Visualisierungen in Form von flexiblen konfigurierbaren Diagrammen. In dringlichen Fällen fügten wir auch schon innerhalb eines Tages neue Regeln und Features hinzu.
Ein Agiles Vorgehen und die enge Zusammenarbeit mit unseren Kunden trägt maßgeblich zum Projekterfolg bei. So setzten wir in der Vergangenheit Softwareprojekte mit auch mit kleinerem Budget in kürzester Zeit um. So wird die Digitalisierung auch in traditionellen Branchen machbar!

Wenn Sie weitere Fragen oder Ideen zu diesem Thema haben, kommen Sie gerne auf uns zu. Gemeinsam finden wir eine Lösung, das garantieren wir!

Welche überraschenden Möglichkeiten Webanwendungen eröffnen

February 2019

von Andreas Roth

#Agil #Apps #Frontend #Web

Eine neue Idee steht im Raum. Sie möchten eine neue App auf den Markt bringen, mit der Nutzer Ihren Service von überall in Anspruch nehmen können, egal ob online oder offline. Native Anwendungen für iOS und Android sowie eine Webversion separat zu entwickeln ist sehr teuer. Wir lösen dieses Problem für Sie Zeit- und Kostengünstig!

Power-Of-Web-Apps

Die Neue Idee

Eine neue Idee steht im Raum. Sie möchten für die Kunden ihres Unternehmens eine App auf den Markt bringen, mit der die Nutzer Ihren neuen Service von überall in Anspruch nehmen können. Dabei soll egal sein, ob sich jemand in einer Großstadt mit LTE befindet, oder in einem Zug sitzt, der gerade durch einen Tunnel fährt.

Natürlich soll diese App sowohl für Android als auch für iOS verfügbar sein, denn Sie müssen für jeden Ihrer Kunden erreichbar sein. Gleichzeitig benötigen Sie noch eine Webversion der Anwendung, denn User wollen den neuen Service ja auch am Laptop oder Desktop nutzen. Trotzdem müssen alle Systeme ein einheitliches Look & Feel vermitteln.

Statt drei verschiedene Versionen teuer zu entwickeln, kommen Webanwendungen zum Einsatz.

Die Anfänge des Web

Spult man einmal zurück zur Jahrtausendwende, wird man feststellen, dass das Internet anders aussieht als heute. Webseiten sind statische Dokumente, ähnlich wie Bücher in einer Bibliothek. Vor einiger Zeit geschrieben und jetzt unveränderbar. Nutzer konsumieren ohne zu interagieren. Das höchste der Gefühle ist ein Kontaktformular, in dem Nutzer ihr Anliegen schriftlich übermitteln können. Interaktionen wie zum Beispiel Navigation erfolgen immer nach dem Schema "Klick; warten bis das Modem die neue Seite geladen hat; Lesen".

Die Revolution des Web

Im Jahr 2004 startete dann ein Trend, der zwar von vielen belächelt wurde, das Web jedoch revolutioniert hat: Web 2.0

Welche Prinzipien liegen dem „Web 2.0“ zugrunde?

  • Das Web als Plattform für Anwendungen und Dienste
  • User wird zum Teilnehmer (Stichwort "Mitmach-Web")
  • Soziale Interaktion zwischen Usern

Das „Mitmachweb“ entsteht.

Der Nutzer ist nicht länger nur stiller Leser sondern Teilnehmer in einer großen Runde Gleichgesinnter. Vermehrt wird die Funktionalität direkt im Browser abgebildet. Ein Klick leitet nicht länger auf eine neue Seite, sondern öffnet einen Dialog oder startet einen Animation, die weiteren Inhalt offenlegt. Kommentarfelder, Gästebücher und GIFs prägen die Webseiten und ermöglichen es dem Nutzer, Teil von etwas zu werden. Etwas, das er zu dieser Zeit noch nicht richtig verstehen kann.

Die Entwicklung gewinnt an Fahrt

An diese wechselnden Anforderungen passen sich die existierenden und verwendeten Technologien an. Browser können nun besser mit Bildern und Videos umgehen. Findige Entwickler schließen sich zusammen und veröffentlichen Tools, mit denen die Umsetzung von interaktiven Elementen einfacher und einheitlicher wird.

Die ersten „Realtime“-Anwendungen

Um neue Kommentare zu lesen, muss die Seite nun nicht mehr neu geladen werden. Stattdessen ploppen neue Kommentare in dem Moment beim Nutzer auf, in dem ein anderen Nutzer "senden" klickt. Es ist also inzwischen möglich, Anwendungen zu bauen, die von einer Vielzahl von Nutzern on-demand aufgerufen und verwendet werden konnten. Schon damals musste man sich keine Gedanken darüber machen, wie Updates oder neue Versionen zu Nutzern kommen - beim Seitenaufruf waren sie einfach da.

Der kontrollierte Zugriff auf ihr Gerät

Bis jetzt waren die Anwendungen immer "eingeschlossen". Schnell wurde klar, dass der bedingungslose Zugriff auf das System des Besuchers keine gute Idee ist. Mit den steigenden Möglichkeiten bei der Umsetzung von Webseiten, steigt auch das Risiko des Missbrauchs. Um dem entgegen zu wirken entwerfen Browserentwickler bei Microsoft, Google, Mozilla oder Apple entsprechende Konzepte.

Wie kontrolliert man den Zugriff

Es wurden klar definierte Schnittstellen angeboten, die bei Benutzung immer eine Nachfrage beim User auslösen. Diese Anfrage stellt sicher, dass der Anwender auch wirklich bestimmte Funktionen seiner Hardware freigeben möchte. Aus diesem Grund tauchen immer mehr Webseiten Popups auf, die den Nutzer fragen, ob sein Microfon, sein Gerätestandort, die Kamera, etc. verwendet werden darf.

Browser merken sich was Sie tun

Neben dem Zugriff auf Hardwarefunktionalität wird inzwischen auch die Möglichkeit geboten, Daten auf dem Gerät abzuspeichern. Der Browser könnte sich also merken, welche Daten der User in ein Formular eingegeben hat und könnte diese beim nächsten Besuch wieder anzeigen, um die Bearbeitung fortzusetzen. Dennoch brauchte der Nutzer immer eine stehende Internetverbindung, um die Seite initial zu laden. Danach kann auf gespeicherte Daten zugegriffen werden, ohne dass diese von einem Server geladen werden müssen.

Das Web verlässt den Browser

Die extrem niedrigen Einstiegsbarrieren sorgen dafür, dass Webtechnologien sowohl von professionellen Entwicklern als auch von Hobbyisten schnell aufgegriffen werden, um simple Webauftritte oder auch komplexere Anwendungen umzusetzen. Das führte dazu, dass JavaScript (die Programmiersprache des Webs) inzwischen eine der mitbenutzen Programmiersprachen weltweit ist. Durch das extrem gute Angebot von Webentwicklern liegt der Schluss nahe, dass diese Technologien nicht nur für Webseiten im klassischen Sinne verwendet werden sollten. Immer mehr Apps und Desktopanwendungen setzen auf Webstandards, die mithilfe von WebViews in eine native Anwendung eingebettet werden.

Wo verstecken sich Webtechnologien

So sind zum Beispiel die Spotify Desktop-Anwendung (Eigenentwicklung - https://www.quora.com/What-is-the-technology-stack-behind-the-Spotify-web-client), Teile der Instagram App auf iOS und Android (React Native - https://instagram-engineering.com/react-native-at-instagram-dd828a9a90c7) oder die Chat-Anwendungen Micrsoft Teams und Slack (Electron Anwendungen) mit Webtechnologien entwickelt, ohne dass der Nutzer einen Unterschied zu klassischen Anwendungen merken würde.

Apps direkt aus dem Browser

Die neuesten Versionen der aktuellen Browser lassen die Grenze zwischen Website und App, weiter verschwimmen.

Progressive Web Applications (PWA`s)

Unter dem Namen "Progressive Web Applications" werden Webseiten entwickelt, die sich kaum noch von nativen Anwendungen abgrenzen lassen: Nach wiederholtem Besuch, wird der Nutzer gefragt, ob er die Anwendung zu seinem Homescreen hinzufügen möchte. Ab diesem Moment „lebt“ die Website zwischen den anderen nativen Apps, die der Nutzer installiert hat.

Progressive Web Applications (PWA`s) offline nutzen

Beim Verwenden des neuen Shortcuts auf dem Homescreen wird der Browser in einem Modus gestartet, in dem die Adressleiste und andere browsertypische UI-Elemente ausgeblendet sind. Der Nutzer merkt also nicht, dass er einen Link zu einer Webseite geöffnet hat. Des Weiteren können diese PWAs auch ohne laufende Internet Anbindung geöffnet werden. Funktionen wie das Versenden von Chat-Nachrichten sind offline jedoch nicht möglich. Dafür ist es möglich Offline-gespeicherte Daten abzurufen und lokal zu editieren, um sie zu einem späteren Zeitpunkt mit dem Server zu synchronisieren.

Webanwendungen interagieren nicht nur auf Anfrage

Entwickler haben sogar die Möglichkeit, Push-Notifications in ihre Webanwendungen einzubauen. Diese werden von einem Server an den Browser geschickt, der die Benachrichtigung auf dem Endgerät auslöst, auch wenn die Webseite gerade nicht geöffnet ist.

Die Grenzen der Technologie

Trotz der stetigen Weiterentwicklung von Webstandards, gibt es gewisse Limitationen, die eine allgemeingültige Empfehlung zur Entwicklung von Webanwendungen verhindern. Die starken Sicherheitsvorkehrungen der Browser sorgen dafür, dass aus der Anwendung nicht direkt auf das Dateisystem des Nutzers zugegriffen werden kann.

Nachteile von Webtechnologien

Ein weiterer Nachteil, in der Verwendung von Webtechnologien, sind die benötigten Ressourcen. Der Browser ist eine relativ schwergewichtiges Programm. Soll also eine Anwendung für Systeme mit starken Ressourceneinschränkungen entwickelt werden, die zusätzlich mit großen Datenmengen oder sehr komplexen Oberflächen ausgestattet ist, sollte eine native Anwendung verwendet werden.

Zusammenfassung: Das können Webanwendungen heute

Der Griff zu Webtechnologien ist häufig die richtige Wahl, um zu einer effizienten Lösung zu kommen, die von vielen Entwicklern weitergeführt werden kann. Neben normalen Interaktionen über Maus oder Touch sind aufwändige Animationen, Zugriffe auf Sensoren oder Hardware des Gerätes (Kamera, Mikrofon) kein Problem mehr. Auf modernen Endgeräten können die Nutzer die Webseite sogar so installieren, dass sie dann als native App mit voller Offlinefunktionalität eingesetzt werden kann.

Wenn Sie weitere Fragen oder Ideen zu diesem Thema haben, kommen Sie gerne auf uns zu. Gemeinsam finden wir eine Lösung, das garantieren wir!

Bevorzugte Kontaktaufnahme

esveo wird alle hier bereitgestellten Informationen ausschließlich in Übereinstimmung mit der Datenschutzerklärung verwenden